DEMO

AVAnnotate: Supplementary Annotations

This demo shows the player handling a real-world AVAnnotate manifest published in Voices: Micro-editions of Readings by McClure, Marlatt, Rukeyser, eds. Tanya Clement et al., in Scholarly Editing, vol. 43, 2026. Transcript annotations live in canvas.annotations rather than canvas.items.

The manifest uses motivation: ["commenting", "tagging"] with multi-body annotations — text content plus speaker and voice tags separated by W3C purpose field. The buildTranscriptAnnotations() function extracts these into the player's Annotation[] format automatically.

How it works

import { ManifestSchema, getFirstCanvas, buildTranscriptAnnotations } from '@umd-mith/iiif-timed-transcript';

// 1. Fetch and validate the IIIF manifest
const manifest = await fetch(manifestUrl).then(r => r.json());
const { data } = ManifestSchema.safeParse(manifest);

// 2. Extract transcript annotations from canvas.annotations
const canvas = getFirstCanvas(data);
const { annotations, skipped } = buildTranscriptAnnotations(canvas);
// → annotations[] with text, timing, and metadata.tags
// → skipped[] with reasons for any annotations that couldn't be placed on the timeline

// 3. Pass to the player — works identically to VTT-sourced annotations
<IIIFPlayer.Transcript {annotations}>
  <IIIFPlayer.TranscriptSearch />
  <IIIFPlayer.TranscriptSegments />
</IIIFPlayer.Transcript>
canvas.annotations
Multi-body annotations
Speaker tags via W3C purpose
Audio from Internet Archive

Muriel Rukeyser — "The Speed of Darkness" (1969)

A poetry reading at Sir George Williams University, annotated via AVAnnotate Voices. 59 annotations with speaker identification and voice characterization tags.

Loading manifest and annotations...