Unlocking the Airwaves reunites the scattered recordings of the National Association of Educational
Broadcasters. It is a plain site: each program is an <audio> tag and a caption <track>, two files on S3. There is no IIIF manifest, no API, nothing this
player was built to consume.
This page plays one of its programs anyway — American language: Americans as makers of words, a 1954 talk by Mitford M. Mathews, editor of the Dictionary of Americanisms, on how Americans coin new words. Between the two S3 files and the player, this page adds one thing: a small IIIF manifest.
This is the inverse of the Avalon demo. There, a repository publishes a complete manifest and the element uses it unchanged. Here, no IIIF exists at the source and this page authors the manifest. That is the more common case: most audiovisual pages on the web have media and captions but no manifest. Every host-page block below is the code this page actually runs.
<audio>
View source on the episode page and this is the whole media layer — an MP3 and a WebVTT caption file,
both served from an Amazon S3 bucket with Access-Control-Allow-Origin: * and byte-range support:
<audio controls crossorigin="anonymous"
src="https://mith-uta.s3.amazonaws.com/data/audio/cpb-aacip-500-1c1tjk8d.mp3">
<track default kind="captions" srclang="en"
src="https://mith-uta.s3.amazonaws.com/data/transcripts/…/cpb-aacip-500-1c1tjk8d.vtt">
</audio>
That is enough to play and to caption, but not to navigate: the
transcript is only inside the <track> — not shown as text, not searchable, with no way to click a line and
seek. A IIIF manifest makes the same cues addressable, so the player can
list, search, and seek to them.
One canvas, its duration the length of the audio. The MP3 is a painting annotation — a Sound body. The VTT is a supplementing annotation with body type Text and format text/vtt (IIIF Cookbook recipe 0219). Nothing is copied out of the VTT — the manifest only points at
it; the player fetches and parses it. This is the file served at /iiif-timed-transcript/fixtures/airwaves.json, shown verbatim:
{
"@context": "http://iiif.io/api/presentation/3/context.json",
"id": "https://umd-mith.github.io/iiif-timed-transcript/fixtures/airwaves.json",
"type": "Manifest",
"label": {
"en": [
"American language: Americans as makers of words"
]
},
"summary": {
"en": [
"Mitford M. Mathews, editor of the Dictionary of Americanisms, on how Americans coined new words. The opening program of the NAEB series \"American language\" (University of Chicago, 1954). Audio and transcript from Unlocking the Airwaves; item cpb-aacip-500-1c1tjk8d."
]
},
"requiredStatement": {
"label": {
"en": [
"Source"
]
},
"value": {
"en": [
"Audio and auto-generated transcript from Unlocking the Airwaves (unlockingtheairwaves.org), a project of the Maryland Institute for Technology in the Humanities drawing on the American Archive of Public Broadcasting. Transcript produced by Pop Up Archive; uncorrected. This IIIF manifest was authored for the iiif-timed-transcript demo — Unlocking the Airwaves does not itself publish IIIF."
]
}
},
"items": [
{
"id": "https://umd-mith.github.io/iiif-timed-transcript/fixtures/airwaves.json/canvas/1",
"type": "Canvas",
"duration": 830.467,
"items": [
{
"id": "https://umd-mith.github.io/iiif-timed-transcript/fixtures/airwaves.json/canvas/1/page/1",
"type": "AnnotationPage",
"items": [
{
"id": "https://umd-mith.github.io/iiif-timed-transcript/fixtures/airwaves.json/canvas/1/annotation/audio",
"type": "Annotation",
"motivation": "painting",
"body": {
"id": "https://mith-uta.s3.amazonaws.com/data/audio/cpb-aacip-500-1c1tjk8d.mp3",
"type": "Sound",
"format": "audio/mpeg",
"duration": 830.467
},
"target": "https://umd-mith.github.io/iiif-timed-transcript/fixtures/airwaves.json/canvas/1"
}
]
}
],
"annotations": [
{
"id": "https://umd-mith.github.io/iiif-timed-transcript/fixtures/airwaves.json/canvas/1/annotations/1",
"type": "AnnotationPage",
"items": [
{
"id": "https://umd-mith.github.io/iiif-timed-transcript/fixtures/airwaves.json/canvas/1/annotation/transcript",
"type": "Annotation",
"motivation": "supplementing",
"body": {
"id": "https://mith-uta.s3.amazonaws.com/data/transcripts/cpb-aacip-500-1c1tjk8d/cpb-aacip-500-1c1tjk8d.vtt",
"type": "Text",
"format": "text/vtt",
"language": "en",
"label": {
"en": [
"English captions"
]
}
},
"target": "https://umd-mith.github.io/iiif-timed-transcript/fixtures/airwaves.json/canvas/1"
}
]
}
]
}
]
}
The ids are the URL where this manifest is actually served — this is an
authored artifact, not something Unlocking the Airwaves publishes,
and the requiredStatement says so. At build time this page validates the JSON against the library's
ManifestSchema; a malformed manifest fails the build rather than reaching a
browser.
<iiif-transcript-player
id="player"
manifest-url="/iiif-timed-transcript/fixtures/airwaves.json"
label="American language: Americans as makers of words (NAEB, 1954)"
crossorigin="anonymous"
></iiif-transcript-player>
Audio-only, so the element renders no video frame — just the control
bar and the transcript panel. crossorigin="anonymous" puts the media element in CORS mode so the transcript's caption track
loads from the S3 bucket (a cross-origin text track needs it). The transcript
switch, annotations = "auto", is set as a property in the script below.
import { register } from "@umd-mith/iiif-timed-transcript/element";
register(); // defines <iiif-transcript-player>
const el = document.getElementById("player");
// property, not attribute: build the transcript from the manifest's
// supplementing VTT track — no VTT parsing in this page
el.annotations = "auto";
With annotations = "auto" the element finds no embedded text annotations, falls back to the canvas's
supplementing VTT track, fetches it, reduces each cue to plain text, and builds the
click-to-seek, searchable transcript. The event log beside the live player
records each event the element emits.
The audio streams from S3; the transcript is built from the same bucket's VTT, located using only the manifest this page authored. Click any line to seek; type in the search box to filter.
Authored manifest: /iiif-timed-transcript/fixtures/airwaves.json · episode on Unlocking the Airwaves
On the transcript: it is machine-generated by Pop Up Archive and never hand-corrected, so expect errors — misheard names, dropped punctuation, the occasional wrong word. It is shown as the archive serves it. Even an inaccurate transcript is enough to search the recording and seek to a point in it, which is the point: the manifest does not improve the text, it makes whatever text exists addressable.