Skip to main content

Demo data

Every slide and session the showcases use is described here, and this page is generated from the two files that actually drive them — test/fixtures/data/manifest.json and test/fixtures/sessions/index.json. Nothing here is maintained by hand, so it cannot describe a file that is not fetchable.

Getting it

npm run fixtures:fetch # download + verify every slide below
npm run fixtures:fetch -- --list # what is present, what is missing
npm run fixtures:derive # build the derived overlays
npm run fixtures:serve # serve it on :9100, with byte ranges

Each slide carries a SHA-256. A mismatch deletes the download and fails rather than warning: a truncated TIFF opens far enough to render a plausible-looking wrong demo. Set XOPAT_FIXTURE_BASE to fetch from a mirror.

There is also a slide that needs no download at all — npm run fixtures:synthetic generates a DeepZoom pyramid from tracked code, which is what makes npm run up:dev -- synthetic the one deployment with zero external dependencies.

Slides

FileWhat it isSizeLicenceProvenanceUsed by
LuCa-7color_Scan1.ome.tiffFluorescence, 7-channel OME-TIFF1989 MiBOME public sample dataOpen Microscopy Environment sample data, 2016-06 sub-resolutions setviz-flex-multichannel, fluorescence-background, channel-series, all-shaders
slide.tifH&E slide, the cancer-prediction subject652 MiBnot statedRationAI; the slide every prediction overlay below was inferred overbasic-overlay, time-series, all-shaders, multi-view-goals, viz-flex-multichannel, viz-flex-geojson, viz-flex-mvt, viz-flex-grid, viz-flex-mask-coarse, viz-flex-mask-preview
cancer-inference.tifCancer prediction over slide.tif44 MiBnot statedRationAI model output; 512x512 prediction squaresbasic-overlay, time-series, all-shaders, multi-view-goals, derive:vector, derive:mvt, derive:grid, derive:pyramid
detection.tiffGraded detection map over slide.tif14 MiBnot statedRationAI model output; the third class in the derived vector layersderive:vector, derive:mvt, derive:grid, derive:pyramid
annotations.tifRasterized annotations for slide.tif (white = annotation)11 MiBnot statedRationAI ground-truth annotations, rasterizedbasic-overlay, time-series, all-shaders
explainability.tifExplainability map for the prediction over slide.tif16 MiBnot statedRationAI model outputbasic-overlay, time-series, all-shaders
slide-errors.tifH&E slide used for the error-overlay sessions646 MiBnot statedRationAIgrouped-errors, multi-view-goals, all-shaders
channel-error.tifInference error caused by a channel offset, over slide-errors.tif48 MiBnot statedRationAI; a real failure mode, kept because the error UI needs onegrouped-errors, multi-view-goals, all-shaders
other-error.tifInference error of a second kind, over slide-errors.tif32 MiBnot statedRationAIgrouped-errors, multi-view-goals, all-shaders

Sessions

Each session is a plain JSON file that opens in the viewer's URL hash. Print an openable link for one with npm run fixtures:urls, or paste the JSON into /dev_setup.

visualization

SessionDemonstratesDeploymentNeeds first
basic-overlaythe ordinary case: an H&E background with prediction, annotation and explainability layers stacked over itnpm run up:dev -- webtifffixtures:fetch
two-backgroundsper-background visualizationIndex, activeBackgroundIndex opening two at once, and a third entry reusing a data referencenpm run up:dev -- webtifffixtures:fetch
multi-view-goalsthe multi-viewport grid: two viewers, different slides, independent visualization selectionnpm run up:dev -- webtifffixtures:fetch
grouped-errorsshader groups, over two genuine inference failure modes rather than invented onesnpm run up:dev -- webtifffixtures:fetch
all-shadersthe shader registry: every registered layer type except interaction-debug (a debug aid, not a rendering), so a type that fails to register shows up here firstnpm run up:dev -- webtifffixtures:fetch
time-seriesthe time-series wrapper and its source resolver — the broker owns swap-vs-appendnpm run up:dev -- webtifffixtures:fetch

multichannel

SessionDemonstratesDeploymentNeeds first
fluorescence-backgroundshaders declared on a background rather than in a visualization, one per channelnpm run up:dev -- webtifffixtures:fetch
fluorescence-cross-sourceper-shader dataReferences retargeting inside a background array, plus use_gammanpm run up:dev -- webtifffixtures:fetch
channel-seriesthe channel-series wrapper: one data entry, channels browsed as a seriesnpm run up:dev -- webtifffixtures:fetch

viz-flex

SessionDemonstratesDeploymentNeeds first
viz-flex-multichannelchannel fan-out, plus one layer retargeted at a different data entrynpm run up:dev -- viz-flex-demofixtures:fetch
viz-flex-geojsonautodetected GeoJSONTileSource — a vector layer needs no protocol declarationnpm run up:dev -- viz-flex-demofixtures:fetch, fixtures:derive
viz-flex-mvta sparse MVT pyramid over the slide's own pixel space, via the demo-mvt factory protocolnpm run up:dev -- viz-flex-demofixtures:fetch, fixtures:derive
viz-flex-gridimageSmoothingEnabled: false with pixelScale: 512 — without the latter the overlay is squeezednpm run up:dev -- viz-flex-demofixtures:fetch, fixtures:derive
viz-flex-mask-coarsecoarsest level 1025 px, below PREVIEW_LEVEL_MIN_COARSEST_PX — the decline pathnpm run up:dev -- viz-flex-demofixtures:fetch, fixtures:derive
viz-flex-mask-previewcoarsest level 4100 px — injection fires on the overlay layer, not the backgroundnpm run up:dev -- viz-flex-demofixtures:fetch, fixtures:derive

errors

SessionDemonstratesDeploymentNeeds first
errors-partial-vizpartial degradation: a broken shader must not take its visualization or the slide down with itnpm run up:dev -- webtifffixtures:fetch
errors-all-invalidthe fully-failed-open path — every background faulty, and the viewer still has to say so rather than hangnpm run up:dev -- webtiffnothing
empty-sessionempty background and visualizations: activeBackgroundIndex: [] means nothing open, not everythingnpm run up:dev -- webtifffixtures:fetch

annotations

SessionDemonstratesDeploymentNeeds first
annotations-labthe subject of the annotations/measurements/pathology loop: one stained background with microns declared, so measured areas come back in µm² instead of pixelsnpm run up:dev -- annotations-labfixtures:fetch
annotations-lab-overlaymeasuring with source: "rendered" — the sampler reads the composited canvas, so what a threshold selects changes with the overlay, unlike the raw-data sourcesnpm run up:dev -- annotations-labfixtures:fetch

dicom

SessionDemonstratesDeploymentNeeds first
dicom-google-standalonederived: "auto" — the plugin finds SEG/parametric series for the source series itselfnpm run up:dev -- googledicomenv GOOGLE_DICOM_SERVICE_URL
dicom-google-standalone-explicitthe explicit {role, sourceSeriesUID} shape; the seriesUID is a placeholder you fill in from your own storenpm run up:dev -- googledicomenv GOOGLE_DICOM_SERVICE_URL