<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Presentation-Api on Digital Archive Systems Tech Blog</title><link>https://tech.ldas.jp/en/tags/presentation-api/</link><description>Recent content in Presentation-Api on Digital Archive Systems Tech Blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 29 Apr 2026 23:30:00 +0900</lastBuildDate><atom:link href="https://tech.ldas.jp/en/tags/presentation-api/index.xml" rel="self" type="application/rss+xml"/><item><title>Mirador 4.0.0 hides supplementing annotations from the Annotations panel — a `filteredMotivations` gotcha</title><link>https://tech.ldas.jp/en/posts/iiif-mirador-annotation-motivation-supplementing-commenting/</link><pubDate>Wed, 29 Apr 2026 23:30:00 +0900</pubDate><guid>https://tech.ldas.jp/en/posts/iiif-mirador-annotation-motivation-supplementing-commenting/</guid><description>&lt;blockquote>
&lt;p>This article is co-authored with generative AI. While I have cross-checked facts against official documentation where possible, errors may remain. Please verify primary sources before making important decisions.&lt;/p>&lt;/blockquote>
&lt;h1 id="tldr">TL;DR&lt;/h1>
&lt;ul>
&lt;li>I shipped per-canvas OCR text as IIIF Presentation 3 annotations with &lt;code>motivation: &amp;quot;supplementing&amp;quot;&lt;/code>. Annona and other spec-aware viewers rendered them. Mirador 4.0.0 (&lt;code>projectmirador.org/embed&lt;/code>) showed nothing in the Annotations side panel.&lt;/li>
&lt;li>Root cause: in &lt;strong>Mirador 4.0.0 release&lt;/strong>, &lt;code>config.annotations.filteredMotivations&lt;/code> defaults to &lt;code>['oa:commenting', 'oa:tagging', 'sc:painting', 'commenting', 'tagging']&lt;/code> — &lt;strong>&lt;code>supplementing&lt;/code> is not in the allowlist&lt;/strong>, so an annotation whose only motivation is &lt;code>supplementing&lt;/code> is filtered out of the side panel.&lt;/li>
&lt;li>Mirador &lt;code>master&lt;/code> has since flipped the default to &lt;code>filteredMotivations: []&lt;/code> (no filter), but at the time of writing no release ships that change. The released filter still applies in the wild.&lt;/li>
&lt;li>Putting &lt;code>motivation&lt;/code> as &lt;code>[&amp;quot;commenting&amp;quot;, &amp;quot;supplementing&amp;quot;]&lt;/code> lets the annotation through Mirador 4.0.0&amp;rsquo;s filter via &lt;code>commenting&lt;/code>, while keeping &lt;code>supplementing&lt;/code> so spec-aware viewers / text-overlay plugins still recognise it as a transcription.&lt;/li>
&lt;li>IIIF Presentation 3 §3.5 &amp;ldquo;Values for motivation&amp;rdquo; only defines &lt;code>painting&lt;/code> and &lt;code>supplementing&lt;/code>; other motivation terms (&lt;code>commenting&lt;/code>, &lt;code>tagging&lt;/code>, …) come from the Web Annotation Data Model. The basis for allowing arrays is IIIF §4.3 (Properties with Multiple Values) plus Web Annotation §3.3.5.&lt;/li>
&lt;li>Don&amp;rsquo;t add &lt;code>painting&lt;/code> alongside. Each canvas already has a &lt;code>painting&lt;/code> annotation for the image — adding another forces the viewer to pick which one &amp;ldquo;fills&amp;rdquo; the canvas, with implementation-dependent results.&lt;/li>
&lt;/ul>
&lt;h1 id="what-happened">What happened&lt;/h1>
&lt;p>While extending the public API for the &lt;a href="https://hiraga.ldas.jp/">Hiraga Yuzuru Digital Archive&lt;/a>, I added a per-canvas OCR-text endpoint that returns annotations as a Presentation 3 &lt;code>AnnotationPage&lt;/code>, referenced from each canvas&amp;rsquo;s &lt;code>annotations[]&lt;/code>:&lt;/p></description></item></channel></rss>