Start it:
cd scrollscope && python3 -m http.server 8000
Open http://localhost:8000/. No parameters needed.
-
0-3 s: the crushed-spiral cross-section of PHerc 1447 appears tile-by-tile from about 150 KB of 16 KB range reads, then the view auto-contrasts from the slice's own histogram and sharpens in place to the preferred resolution. Nothing was configured; that is the boot sequence. The transfer ledger (bottom-left) has been counting the whole time: the settled boot is about 720 KB against a 30 MB full-chunk equivalent. The amber figure is the live session ratio, around 42x, and it climbs as you explore.
-
10 s: hold the up arrow (the shortcut hints sit at the bottom-right of the canvas). Slices stream in at 16 KB per tile with the neighbors prefetched, so single steps feel instant, and a fast scrub never flashes black: the previous slice holds until the new tiles land. The dot next to the z readout means a slice is still streaming. Hover the right-edge rail: it previews the slice number a click would land on, and the grey ticks are slices already cached.
-
25 s: sweep the white slider, or press
ato re-run auto-contrast. The papyrus windings move through the full contrast range, re-rendered entirely from cache. Watch the ledger: the byte counters don't move. -
35 s: press Space. The viewer flies through the scroll along z, paced to the network, with the ledger counting the whole time. A fly-through at 16 KB per tile is the range-read argument made visible. Space again stops it. Scroll-wheel into the spiral. Pan by dragging.
frefits. -
45 s: click L3 in Resolution. Your framing is kept and the image sharpens in place at double resolution. The button told you the price before you clicked (about 1.3 MB per slice instead of 400 KB). Black regions that arrive instantly are masked tiles: chunks the scanning mask excluded are not stored at all, S3 returns 404, and the viewer renders them as true black for free, counted separately and never re-requested.
-
55 s: click
copy view linkand paste it in a new tab. The exact view reproduces, because the address bar always tracks specimen, level, slice and window. Switch the specimen to PHerc 0800: a different scroll in the same instrument. All shape and chunk metadata is read live from the bucket's.zarrayfiles. Nothing about the volume is baked in except its path.
The one-sentence pitch: uncompressed zarr chunks make byte offsets addressable, so an axial slice is 16 KB-per-chunk Range reads instead of 2 MB-per-chunk downloads, a fixed 128x saving, measured live in the UI, with no backend between the browser and the open-data bucket.