Compiled IIIF + Allmaps data pipeline for Artemis.
Crawls source IIIF collections, mirrors Allmaps georeferencing annotations (canvas-level), compiles manifests and collections for static hosting, and builds search artifacts used by the viewer.
- Runtime: Bun
- Language: TypeScript
- Core dependency:
@allmaps/id
build/index.json: main dataset index — layers, render layers, per-manifest entriesbuild/collection.json: top-level IIIF v2 Collectionbuild/collections/*.json: per-layer compiled IIIF Collectionsbuild/manifests/*.json: compiled manifests with AllmapsotherContentinjectedbuild/allmaps/canvases/*.json: mirrored Allmaps canvas-level annotationsbuild/iiif/info/index.json: IIIF image info.json cache (keyed by image service URL)build/Toponyms/index.json: toponym search indexbuild/Massart/index.json: Jean Massart photograph metadata (title, year, location, lat/lon, manifest URL)build/Parcels/: historical parcel polygon data
bun install# full pipeline
bun run crawl
# limited crawl (first N manifests per source)
bun run crawl10
bun run crawl1
# include non-georeferenced manifests in output
bun run crawl:all
# build toponym search index only
bun run buildSearch # alias: bun run toponymsdata/sources/collections.txt: source IIIF collection URLs +ugent://special schemes (one per line)data/sources/Toponyms/: local raw toponym source files (not committed — keep onlyREADME.txtin git)static/: hand-edited runtime assets and metadata for the viewer; not written by the pipeline
ugent://massart is resolved at crawl time by querying the UGent Primo catalog API directly — no pre-generated file required.
cache/andbuild/iiif/info/persist across runs; all otherbuild/dirs are wiped and regenerated each run- By default only georeferenced manifests are included in collections; use
INCLUDE_NON_GEOREF=1to include all - Set
BUILD_BASE_URLto your GitHub Pages root to get absolute URLs in build outputs - QA report (fixed + excluded manifests) is written to
logs/report.log(git-ignored) build/index.jsonnow exposes stablelayerIdvalues on bothlayersandrenderLayers; the viewer can use those ids to join runtime content fromstatic/without rerunning preprocessing
- Keep manually maintained viewer content in
static/, not inbuild/ - The pipeline must not write to
static/ - The viewer should load files from
static/directly at runtime and remain resilient when alayerIdhas no matching metadata yet - Missing
staticmetadata should produce a warning in development and fall back to generated labels/default copy, not a runtime error
- Viewer:
../Artemis-RnD