Skip to content

Rendering Multiple Media Types on a Time-Based Canvas

Cookbook URLs
Recipe: https://iiif.io/api/cookbook/recipe/0434-choice-av/
JSON-LD: https://iiif.io/api/cookbook/recipe/0434-choice-av/manifest.json

Method 1

from iiif_prezi3 import Manifest, AnnotationBody, AnnotationPage, Annotation, config, Choice

config.configs['helpers.auto_fields.AutoLang'].auto_lang = "en"
base_url = "https://iiif.io/api/cookbook/recipe/0434-choice-av"

manifest = Manifest(
    id=f"{base_url}/manifest.json",
    label="Excerpt from Egbe Iyawo",
    summary="Excerpt from a performance of Egbe Iyawo recorded in Kabba Division, Kwara State. ",
    rights="http://creativecommons.org/publicdomain/zero/1.0/",
)

canvas = manifest.make_canvas(id=f"{base_url}/canvas/1", duration=16.0)

alac = AnnotationBody(
    id="https://fixtures.iiif.io/audio/ucla/egbe-iyawo-ucla.m4a",
    type="Sound",
    format="audio/alac",
    duration=16.0,
    label="ALAC",
)
mp3 = AnnotationBody(
    id="https://fixtures.iiif.io/audio/ucla/egbe-iyawo-ucla.mp3",
    type="Sound",
    format="audio/mpeg",
    duration=16.0,
    label="MP3",
)
flac = AnnotationBody(
    id="https://fixtures.iiif.io/audio/ucla/egbe-iyawo-ucla.flac",
    type="Sound",
    format="audio/flac",
    duration=16.0,
    label="FLAC",
)
ogg = AnnotationBody(
    id="https://fixtures.iiif.io/audio/ucla/egbe-iyawo-ucla.ogg",
    type="Sound",
    format="audio/ogg",
    duration=16.0,
    label="OGG Vorbis OGG",
)
mpeg2 = AnnotationBody(
    id="https://fixtures.iiif.io/audio/ucla/egbe-iyawo-ucla.mpeg",
    type="Sound",
    format="audio/mpeg",
    duration=16.0,
    label="MPEG2",
)
wav = AnnotationBody(
    id="https://fixtures.iiif.io/audio/ucla/egbe-iyawo-ucla.wav",
    type="Sound",
    format="audio/wav",
    duration=16.0,
    label="WAV",
)

choice = Choice(items=[alac, mp3, flac, ogg, mpeg2, wav])

anno_page = AnnotationPage(id=f"{base_url}/canvas/1/annotation_page/1")
anno = Annotation(
    id=f"{base_url}/canvas/1/annotation_page/1/annotation/1",
    motivation="painting",
    body=choice,
    target=canvas.id,
)
anno_page.add_item(anno)
canvas.add_item(anno_page)

print(manifest.json(indent=2))