Skip to content

feat: IIIF Collection browsing and navigation #123

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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