Skip to content

This is an external IIIF API service for the CKAN Open Data Portal of the City of Leipzig.


Notifications You must be signed in to change notification settings


Folders and files

Last commit message
Last commit date

Latest commit



64 Commits

Repository files navigation

IIIF for the Open-Data-Portal of the City of Leipzig

This is an external IIIF API service for the CKAN Open Data Portal of the City of Leipzig. It is my entry to the Open Data Hackathon 2023 of the City of Leipzig (

For more information on IIIF see

Technical Features:

  • Supports IIIF Presentation API version 2.1.1 and 3.0.0
  • Supports IIIF Image API version 2 and 3 (via IIPImage Server)
  • Cache with seamless demand driven metadata updates
  • Lossless quality image conversion
  • Asychronous/parallel architecture: high responsiveness even under high image conversion load
  • Content Negotiation

Endless IIIF usage scenarios

  • Digital Storytelling and Edutainment
  • Cross-Institutional Research Workspaces
  • Geo-Referencing of Maps and Photos
  • Create Annotations
  • Games and Fun-Apps
  • Well prepared for AI and Machine-Learning
  • and many more

Currently, as long as the service is not integrated into the appropriate websites, prior knowledge of the manifest URIs is required. See the file data/manifests.csv in order to get a list of the manifests.

Usage examples

Find a full list of available manifest URIs in file data/manifests.csv.

Here are three simple image loading examples to demonstrate the functionality. IIIF has of course much higher potential.

Load an image into Mirador:

Load an image into Universalviewer:

Load an image into TIFY:

More complex usage scenarios are possible using storytelling apps (Storiiies, StrollView and others), research workspaces (Mirador 3 with annotation plugin), geo-referencing (Allmaps) or edutainment apps (Animal Crossing Art Generator or Cover.Boutique). See for inspiration. Check out the poster in /img/. And here are some uncommented screenshots:

System architecture

The main server is implemented in Javascript using Node, ExpressJS, Sqlite and other libraries. Image conversion is done using ImageMagick and uses pyramidal TIFF images with lossless JPEG compression.

The entire system runs on Linux or MacOSX and employs Apache2, Nginx, IIPImage and other components.

Data Modelling

The current mapping is as follows

dataset manifest
resource canvas / annotation page / image

Important calls:

Get all (max. 1000) datasets with resource format "jpg":

Get a specific dataset:

Get a resource (canvas/image level):


This is an intermediate URI schema that may or should be subject to change in the future.

Presentation API



Image API<>

Content Negotiation

The API responds default with IIIF Presentation API version 2. In order to get version 3 manifests it is possible to

  • append the parameter ?version=3 to the manifest URI


  • send the HTTP header
Accept: application/ld+json;profile=""

for instance:

curl -H 'Accept: application/ld+json;profile=""'

Future Development

In the near future the following things could be considered:

  • Grouping the manifests into collections. Requires the help of subject experts.

  • IIIF services could be integrated in their respective websites.

  • The contents of the system could be extended.


  • check out this repository

  • run npm install

  • copy src/config.example.json to src/config.json and edit all parameters

  • run nodemon src/index.js

  • optional: edit and run node src/utils/warmup.js in order to do all the heavy image conversion upfront

(install Linux, Apache2, Nginx, IIPServer etc. according to their documentation)


ImageMagick required this in /etc/ImageMagick-6/policy.xml in order to process large images:

<policy domain="resource" name="disk" value="8GB"/>


This is an external IIIF API service for the CKAN Open Data Portal of the City of Leipzig.








No releases published


No packages published