📚DH Weekly Topics — 2026年6月14日週
DH Weekly Topics — 2026年6月14日週
DH Weekly Topics — 2026年6月14日週
DH Weekly Topics — 2026年6月7日週
In Mirador, moving to the next page carries the previous page's zoom level and pan position over. That is the behavior of osdConfig.preserveViewport, whose default is true (it lives under osdConfig, not window). It has been true across Mirador 3.3.0 through 4.0.0, while the unreleased main branch has it as false. This post covers what the setting does and where it is controlled in the source, why resetting (false) is more natural when canvas sizes vary per page, and the pitfall of mirador@latest moving the default behavior under you — plus the fix: pin the version and set the option explicitly.
DH Weekly Topics — 2026年5月31日週
DH Weekly Topics — 2026年5月24日週

Validating IIIF Presentation API 3.0 manifests using both the official presentation-validator and the Python library iiif-prezi3, with a side-by-side comparison of their output and intended use.

I updated the layer slideshow plugin, originally published for Mirador 3, to support Mirador 4. This involved migrating the build from nwb to Vite and replacing Material-UI v4 with MUI v7.

A hands-on guide to Mirador Annotation Editor Video, a Mirador 4 plugin for adding both spatial and temporal annotations to IIIF video, covering how to set a temporal target, using the official demo.

A hands-on guide to Mirador Annotation Editor, a plugin that adds annotation creation and editing to the Mirador 4 IIIF image viewer, from creating an annotation to exporting it, using the official demo.

A hands-on guide to IMMARKUS, an open-source tool for adding semantic annotations to IIIF images in W3C Web Annotation format, from first launch to standards-based export, using the Hyakki Yagyo scroll from the University of Tokyo Digital Archive.
DH Weekly Topics — 2026年5月17日週
A record of the adjustments made — across encoding, Lambda, CloudFront, and S3 metadata — when delivering a gigapixel-class high-resolution image (a PTIF of roughly 450MB) via Serverless IIIF on AWS Lambda.
A follow-up to the earlier codh-mirror post, which explicitly called Firebase auth and the curation save backend out of scope. This time I went back and wired them up: reusing a Firebase project (Authorized domains and sign-in providers), discovering that FirebaseUI 3.x's default redirect signInFlow silently fails on GitHub Pages subpaths, swapping the curationJsonExportUrl in 9 places across five tools, and pointing the iiif-curation-manager submenu links at the sibling tools via relative URLs. Server-side details (Cloudflare Workers + D1 as mainline and PythonAnywhere Flask as upstream-faithful fallback) live in two separate posts; this one covers only the codh-mirror client side.
A from-scratch rewrite of JSONkeeper — the save backend for the IIIF Curation Viewer — not on top of the original Flask code, but as a Cloudflare Workers + D1 service. Covers Firebase ID-token verification with Hono + jose (no Admin SDK, no service-account key needed), the D1 SQLite schema, top-level + nested JSON-LD `@id` rewriting, a minimal Activity Stream collection, CORS and Viewer-compatible headers, a wrangler-based deployment runbook, and a feature-by-feature diff against upstream JSONkeeper.
A reproducible runbook for self-hosting JSONkeeper — the save backend for the IIIF Curation Viewer / Editor / Manager / Board — on PythonAnywhere's free Beginner plan, using only HTTP API calls except for two one-time browser actions (API token issuance and first-time Bash console attach). Covers Flask 1.0 / apscheduler 3.5 incompatibility with modern Python, Firebase Admin SDK service-account key handling, the 100 CPU-second/day cap, CORS, and patching the Viewer-side codh-mirror repository.
While the ROIS-DS Center for Open Data in the Humanities (CODH) website is down for long-term maintenance (notice issued 2026-02-24, no announced reopen date), I restored several CODH tools (vdiff.js / IIIF Curation Viewer / Soan / etc.) from the Wayback Machine and similar sources and published them as a standalone GitHub Pages repository (codh-mirror). This post covers the setup procedure and the gotchas I hit (notably the missing kuromoji dictionary for Soan). Strictly a temporary measure until CODH service resumes.
DH Weekly Topics — 2026年5月10日週

Serving IIIF historic maps as a WMTS-compatible tile service, built on top of Allmaps and integrated into a Next.js portfolio site.
I aligned IIIF 3D Viewer with the IIIF 3D Technical Specification Group's Presentation API 4 draft (Scene / PointSelector / WKTSelector / PerspectiveCamera). Existing manifests authored against IIIF Presentation 3 with a project-local 3DSelector / camPos extension are funnelled through a runtime converter so the rest of the pipeline only deals with v4. This post records the diff, the conversion rules, and the implementation outline.
I surveyed which public APIs are available on the Tohoku University Digital Archives (touda.tohoku.ac.jp/collection) and worked out a procedure to harvest metadata per setSpec via OAI-PMH and write each set into its own Excel file.
I delivered IIIF Presentation 3 OCR text annotations with `motivation: "supplementing"`, and they showed up in Annona and other viewers but not in Mirador 4.0.0's Annotations side panel. Reverse-engineering the deployed Mirador bundle revealed that the released default for `config.annotations.filteredMotivations` is `['oa:commenting', 'oa:tagging', 'sc:painting', 'commenting', 'tagging']` — `supplementing` isn't in the allowlist. This post walks through how I found that, the `['commenting', 'supplementing']` array workaround, and the relevant spec / Cookbook references.
An implementation log for a digital archive that delivers historical photographs which cannot be made fully public, while still preserving the benefits of IIIF (spec-compliant high-resolution viewer, manifest delivery) for an authorized membership. The stack is Cantaloupe (IIIF server) + S3-compatible storage + Elasticsearch (search) + Next.js (UI) + Cloudflare Tunnel + Access. We also lay out where IIIF Auth API 2.0 would fit in for cross-host interoperability.

We applied two OCR engines — Japan's National Diet Library NDL Koten OCR-Lite and Cloud Vision API DOCUMENT_TEXT_DETECTION — to 105 IIIF images of fascicles 571–575 of the Mahāprajñāpāramitā Sūtra in the Jiaxing Tripitaka held by Yūrenja (formerly the Hōonzō of Zōjōji), and compared the patterns of error in their outputs. NDL produced phantom kana lines on 12 pages; Vision picked up color charts, rulers, and shelf labels as if they were body text on all 105.

Notes on migrating a Cantaloupe-based IIIF image server running on EC2/Docker to a serverless setup on AWS Lambda + CloudFront (serverless-iiif by Samvera).
DH Weekly Topics — 2026年4月19日週
DH Weekly Topics — 2026年4月12日週
How to securely expose Elasticsearch and Cantaloupe (IIIF) without opening any inbound ports, using Cloudflare Tunnel
DH Weekly Topics — 2026年4月5日週
Notes on reducing cold tile fetch time from 8.8s to 0.84s on a Cantaloupe IIIF server: pyramid TIFF conversion, JVM heap tuning, and CloudFront CDN setup.
Development notes for a WebXR viewer that places IIIF images at real-world scale inside a virtual Edo-period townhouse, viewable in both browsers and VR headsets. Covers A-Frame + THREE.js third-person camera, VRM avatars, tile LOD, and issues encountered along the way.
DH Weekly Topics — 2026年3月28日週

A Mirador 4 plugin that displays a physical scale ruler overlay using the IIIF Physical Dimensions service.
A development log for "IIIF AR," an iOS app that places high-resolution IIIF Image API images at real-world scale on detected floor surfaces using ARKit, dynamically loading tiles as the camera approaches.

Documenting the cause and fix for the "Unknown content type" error in Universal Viewer 4.x, resolved by self-hosting with a custom initialization.

How to efficiently generate bilingual video subtitles using Claude Code's multimodal capabilities and ffmpeg scene change detection, then publish them via IIIF v3 manifests

A project adding Japanese/English bilingual subtitles to Digital Tale of Genji tutorial videos, published as IIIF v3 manifests
DH Weekly Topics — 2026年3月21日週

How cache configuration and parameter tuning of the Cantaloupe IIIF server achieved up to 7.6x faster tile delivery, with methods and results.

An overview of FromThePage, the crowdsourcing transcription platform for historical documents, and its applications in Digital Humanities.

An overview of Mirador, a IIIF image viewer developed by Stanford and Harvard, and its applications for comparative research in digital archives.

An overview of Universal Viewer, a IIIF-compliant multimedia viewer, and its applications in digital archives.

An overview of the TETRAS-IIIF ecosystem for Mirador 4: annotation editing (MAE), video annotation (MAEV), and multi-user collaboration (MMU).

Introducing a viewer for IIIF Georeference Extension. Overlay historical maps and images on interactive maps.

An introduction to Mirador, the IIIF viewer. Multi-window image comparison, annotations, plugin extensions, and more.

Introducing Tify, a lightweight and fast IIIF viewer with mobile support, full-text search, table of contents, and more.

An introduction to Universal Viewer, a versatile IIIF viewer that supports images, audio, video, 3D, and PDF content.

Introducing the IIIF Animated Viewer, which overlays AI-generated videos on specific regions of IIIF images.

Annotorious Drawing Mode Breaks Only in Production Build
DH Weekly Topics — 2026年2月22日週

Development of a text comparison tool using IIIF manifests

Replacing Only the Window Title of External Manifests in Mirador 4

Mirador viewer embedding configuration

Adding Linked Places Format support to IIIF Georeference Viewer

Developing and publishing a rotation plugin for Mirador 4 on npm

Implementing IIIF Content Search API on Static Sites - Client-Side Search with Service Workers

Serving IIIF images via Web Tile Map Service

IIIF Georeference to XYZ Tiles

Draco Compression of GLB Files - 87% Size Reduction and Impact on Precision

Displaying Over 3 Million Point Cloud Data Points Smoothly in a Browser - Building a Potree LOD Viewer

Record of Migrating mirador-annotations to Mirador 4.x

mirador-rotation-plugin Feature Enhancements

Created a Tool to Extract Opening Pages of Each Volume from IIIF Manifests

Constraint Design for IIIF-Compatible Facsimile Description Using TEI ODD

How to Highlight Arbitrary Regions in Mirador 4

How to Simultaneously Specify Canvas and Highlight Search Terms in Mirador 4

Creating Pyramidal Tiled TIFFs with vips and Comparing Compression Methods

Performance improvement for annotation display

Annotating tilted characters and IIIF image cropping

Development of an IIIF image coordinate editor with auto-navigation

Complete guide to annotation coordinate conversion in Leaflet-IIIF

How to control the viewing direction of Mirador from external parameters

Image collection management tool: technical architecture explained

"Image Collection Management" Tool Usage Guide

IIIF Georeference Viewer Migration to MapLibre GL and Feature Improvements

How to dynamically convert file paths on Azure Storage using Cantaloupe delegate scripts

Introducing Omeka S Docker: A Modern and Secure Solution for Digital Collections

I Built a Prototype IIIF 3D Viewer

Testing IIIF Authentication API 2.0

Trying text annotation with Recogito

Trying Out Transkribus

Creating TEI/XML files from IIIF manifest files using NDL Kotenseki OCR-Lite

Part 2: Creating Annotated IIIF Manifest Files and TEI/XML Files Using NDL Classical Book OCR-Lite

Describing hierarchical table of contents with Omeka S IIIF Server module

Using Pagination in IIIF Collections with IIIF Presentation API v2

Creating annotated IIIF manifest files and TEI/XML files using NDL Klasseki OCR-Lite

Creating a CSV File Containing a List of Image URLs from a IIIF Manifest File

Improvements to the polygon annotation support tool for IIIF images

An Example of Representing IIIF Polygon Annotations in TEI/XML

Building a tool for adding polygon annotations to IIIF images

Omeka S Module Update Information (2025-03-27)

Mirador 4 Plugin Development: Enabling Initial Angle Settings in the Image Rotation Plugin

Rotating Images and Specifying Regions on Initial Load in Mirador 4

Using the Universal Viewer npm package in Next.js

Updates to the IIIF Georeference Extension Visualization Tool

A Sample App Displaying Images with Mirador and Text with CETEIcean

Cases Where ImageMagick May Not Work Properly for Creating Pyramidal TIFFs?

Serving IIIF Images Using mdx.jp Object Storage and IIP Image (IIIF Image Server)

How to Mount mdx.jp Object Storage as a File System Using s3fs

Enabled Email-Based Registration in the Mirador 3 Firebase-Linked Annotations Plugin

Creating TEI/XML from VTT Files

Using clover-iiif with Next.js

Downloading Annotations Created with the mirador-annotations Plugin in Mirador 3

Developed a Firestore adapter for the Mirador 3 mirador-annotations plugin

A program to create TEI/XML files with OCR results from IIIF manifest files

CORS Configuration for Omeka S Image Server

Building a Digital Collection Using AppSheet

How to Upload Media to Omeka S Using Python

Trying aleph-r3f

Trying the Aleph 3D Viewer

Cantaloupe: Serving Images Stored in Microsoft Azure Blob Storage

Specifying Viewing Direction in the Omeka S IIIF Server Module

Using IIIF Manifest Files Stored in mdx.jp Object Storage from NestJS

Using OldMaps Online

Achieving Parallel Display of IIIF and TEI Using XSLT

How to Use the Files/Markers Tabs in the @samvera/ramp Viewer

Adding a Table of Contents to Videos Using iiif-prezi3

Setting Subtitles on Videos Using iiif-prezi3

Adding Annotations to Videos Using iiif-prezi3

Creating IIIF v3 Manifests for Video Using iiif-prezi3

Publishing 3D models in Omeka S

[2024 Edition] Building an IIIF Image Server with AWS serverless applications

Describing annotations using SVG in IIIF Presentation API v3

Mirador Repository with Vertical Text Support for the Text Overlay Plugin

Sample program using the Annotorious OpenSeadragon Plugin

Applying Google Cloud Vision to Image Files to Create IIIF Manifests and TEI/XML Files

Bug in Omeka S IIIF Server Module [3.6.19, 3.6.20]

Adding Images to IIIF Manifest Files for Audio Materials

IIIF Audio/Visual: Describing Multiple VTT Files

Displaying Audio Files with Subtitles in an IIIF Viewer

Customizing Ramp

Running Ramp Locally

Trying the Mirador 3 Annotations Plugin with an IIIF Manifest Specified via URL Parameters

Delivering IIIF images using mdx.jp object storage and Cantaloupe Image Server

Using Scroll View in Mirador 3

Survey of IIIF-compatible viewers

Large Videos Not Playing in Chrome

Commands for Batch Replacing IIIF Canvas URIs

Configuration example for using BulkImport in Omeka S

CORS Error with Omeka S IIIF Server Module

LEAF Writer: How to Use the Image Viewer

Understanding the Relationship Between RDF, Turtle, JSON-LD, and IIIF Manifest Files

Published the Mirador 4 Version of mirador-sync-windows Repository

Mirador 4 Plugin Development: Rotating Images at Arbitrary Angles

Publishing a Customized Mirador 4 as an npm Package

Examining Zoom, Scale, and Rotation Behavior in Mirador 4

Publishing Materials on Zenodo

Verifying the Behavior of Mirador 2 Plugins

Developing a Zoom Disable Plugin for Mirador 3 (4)

Trying iiif-prezi3

Trying Out mirador-sync-windows

Converting Toji Hyakugo Monjo WEB Data to IIIF

Trying tropy-plugin-iiif

Trying Out @iiif/parser

Publishing Videos with Omeka S

Converting IIIF Curation Lists to TEI Facsimile Elements

How to Convert CMYK Color Images Without Color Inversion

Prototyping Digital Archive Tools: Mainly IIIF Usage Support

Workaround When Presentation API v2 Manifests Cannot Be Displayed in Mirador 3

Updating the IIIF Viewers Module for Omeka S

Created a Simple TEI/XML File Viewer Using Next.js

An Example of Specifying Image Frames in Universal Viewer

How to Access S3 Buckets and Enable SSL Communication Using Docker-based Cantaloupe

Trying the Docker Version of Cantaloupe

Georeferencing with Allmaps

Example of Creating a Page Using Universal Viewer v4

Cantaloupe: Running as a service

Cantaloupe: Serving Images Stored in Amazon S3

Created a Python Library to Convert Freehand Annotations to Rectangles

Trying the IIIF Content State API

Trying Cantaloupe Access Control

Adding values to info.json in Cantaloupe

Trying Cantaloupe Overlays

Enabling the Cantaloupe Admin Panel

Enabling HTTPS for Cantaloupe on EC2

Created Notebooks Using NDLOCR and NDL Classical Japanese OCR ver.2

Launching Cantaloupe, a IIIF Image Server, on EC2

Trying Mirador 2's Physical Document Ruler

Mirador 3 plugin development: adding vertical text support to the Text Overlay plugin

Trying the mirador-annotations Plugin and SimpleAnnotationServer with Mirador 3

[Omeka S Module Introduction] IiifPresentation: Adding IIIF Presentation API

Updated Mirador to 2.7 in the Omeka Classic IIIF Toolkit

Batch Registering Data to Omeka Classic IIIF Toolkit

Mirador 3 Plugin Development: Copying a Window

Guide to the IIIF Mirador 2 Annotation Interface

Creating PDF Files from IIIF Manifest Files

About the Image Server Configuration for Omeka S

Drupal: linking content of different content types to each other

Drupal: Creating Custom REST Resources

Bug fixes and feature additions to the NDL classical book OCR tutorial using Google Colab

Creating IIIF Presentation API v3 manifest files using Omeka S

I created digital archive tools centered on IIIF

Changing Annotation Colors in IIIF Curation Viewer

Creating IIIF manifest files using a Headless CMS

Publishing Images Using IIIF Image API Level 0

How to use IIIF Presentation Validator in a local environment

Trying to Add Images and a IIIF Manifest to IPFS

Created a Custom OpenSeaDragon Viewer for Use in TEI Viewers

Introducing an IIIF Viewer in Nuxt3 with SSR

[Omeka S Module Introduction] IIIF Search Module

Trying the IIIF Auth API

Introduction to "FairCopy": A TEI Text Creation Support Tool

Supporting Drag & Drop for IIIF Icons

I Created an API That Returns a List of Items Containing a Specified IIIF Manifest in Cultural Japan

Output Content of IIIF Manifests (Version 2) from the Omeka S IIIF Server

Created an Image Comparison Tool Using Mirador 3

Bulk Registration of Annotations Using the IIIF Toolkit for Omeka Classic

How to Add the mirador-image-tools Plugin to Mirador 3 and Bundle It into a Single JS File for Distribution

I created an IIIF Image API tool using Nuxt 3 and Vuetify 3

[Omeka S Module] How to Disable Image API in the IIIF Server Module

[Omeka S] How to use the "IIIF Viewers" module for setting up multiple IIIF-compatible viewers

Fixing the GitHub Repository Demonstrating Mirador 3 Usage with Nuxt 2

Added TEI/XML Download Functionality to the "NDL OCR x IIIF" App

Experiments on Image Sizes Supported by serverless-iiif

Created a Sample Repository for Using OpenSeadragon with Vue3

[Omeka S] How to Set Custom Identifiers in the IIIF Server Module

[Omeka S] How to Configure Attribution in the IIIF Server Module

Introduction to IIIF Presentation API validation methods with practical examples

About Image Size Limits for Dynamic Tile Image Generation in the Omeka S Image Server Module

[Development guide] I created an app to view OCR results published by the National Diet Library's Next-Generation Digital Library in an IIIF viewer

An App for Viewing OCR Results from the NDL "Next-Generation Digital Library" in an IIIF Viewer

Creating Pyramid Tiled TIFF files using AWS Lambda + Docker + pyvips

How to Use pyvips and Create Pyramid Tiled TIFF Files

Building an Annotation Environment Using Omeka Classic + IIIF Toolkit

Generating IIIF collections using the Omeka S IIIF Server module

Building an IIIF Image Server with AWS serverless application

Created a Program for Batch Downloading Images from IIIF Manifest Files

How to use the Omeka S Mirador module

Created a Program to Generate TEI facsimile Elements from IIIF Manifest Files
[Omeka S Module Development] Developed a Module to Add IIIF Content Search API URIs to IIIF Manifests

How to Enable Mirador 3 Image Tools (Image Rotation, etc.) by Default

[Omeka S Module Introduction] IIIF-Compatible Viewers Available for Omeka S

[Feature Development] Added Table of Contents Functionality to the Omeka S IIIF Module (Part 2: Registering Hierarchical Tables of Contents)

[Feature Development] Added Table of Contents Functionality to the Omeka S IIIF Module (Part 1: Registering Flat Tables of Contents)

[Feature Development] Bug Fix for License Property in the Omeka S IIIF Server Module

[Translation] How to Add Table of Contents Information in the Omeka S IIIF Server Module

How to Embed Mirador 3 in a Specific Area of a Page

Created a Repository Demonstrating How to Use Mirador 3 with Nuxt.js

[App Introduction] Introducing IIIF pocket

[Omeka S Module Introduction] IIIF Server / Image Server / Universal Viewer

Introduction to the IIIF Collection of IIIF Manifests Aggregated by Cultural Japan

Created a Repository Demonstrating How to Use Mirador 3 with Vue

[Feature Development] Adding a Setting to Disable Image API in the Omeka S IIIF Server Module

IIIF Implementation of "Oki-ezu" (Raised Picture Maps)

IIIF Application Using Transmitted Light Images