Skip to content

feat: IIIF Collection browsing and navigation #123

@nikazzio

Description

@nikazzio

Summary

Support IIIF Collection manifests, allowing users to browse a library's entire catalog, navigate nested collections, and select individual manifests for download/study.

Motivation

Many digital libraries (BnF, BSB, BL, Vatican) expose IIIF Collections that list hundreds or thousands of manuscripts. Today the app only accepts individual manifest URLs — users must find each manifest externally. Collection browsing unlocks a natural discovery workflow.

Proposed approach

  • Detect Collection type in the manifest/discovery resolution pipeline.
  • Render a browsable tree/list UI: Collection → sub-collections → manifests.
  • Allow selecting one or multiple manifests for download or import to Library.
  • Support both IIIF Presentation API 2.1 Collections and 3.0 Collections.
  • Lazy-load nested collections on expand (don't fetch the entire tree upfront).

Acceptance criteria

  • Pasting a Collection URL shows the collection browser instead of a single manifest
  • Nested collections are navigable (expand/collapse)
  • Individual manifests can be selected and opened in Studio
  • Batch import: select N manifests → add all to Library
  • Works with both Presentation API 2.x and 3.0 collections
  • Graceful fallback if a collection is too large (pagination / virtual scroll)

Technical notes

  • Collection detection can go in discovery.py resolver pipeline.
  • IIIF Presentation 3.0 collection: type: "Collection" with items[].
  • IIIF Presentation 2.1 collection: @type: "sc:Collection" with collections[] and manifests[].
  • Consider caching fetched collection metadata in SQLite.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:discoveryDiscovery search and provider resolutionminorIncrements the minor version when adding new functionality in a backward-compatible manner.priority:P2Medium prioritystatus:readyReady to be implementedtype:featureNew user-facing feature

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions