Public API at window.unroll (schema, help, coverage test; ui and bench groups), embed mode with postMessage bridge and oEmbed, version 0.9.4 in About and API, ink_9um (9 µm) label and credit, Ink Bench hardening from the audit, hashchange without reload, capped test hooks
Overlay textures upload through a per-frame queue (about 6 ms per frame, initTexture) instead of all at once, removing the 14.6 s main-thread freeze; import map versions for tear.js, damage.js and lib/*.js; scan shown as 9.4 µm with 9.362 µm voxels in the details; glossary links every occurrence; mobile panel clears the bottom bar
Relabel the second ink layer as ink_9um (9 µm): Chase Hendrick ran the public scrollprize/ink_9um model, which the Vesuvius Challenge trained; HUD readout INK_9UM; cache-busting version on JS and CSS
ink_9um layer: all 37 windings (w023 to w045 and w052 to w059 run on Modal), manifest range and gpu.json
Grok Bot
e0226a7
Destroy: fibrous alpha-tested damage edges, Burn and Water tools with cursors, Roll up, size-dependent debris that settles on the floor, wall-clock burn timing; rename Tear apart to Destroy; ink model text reads its coverage from the manifest
- scrolls/index.json registry and per-scroll manifests (windings with ranges, ink layers with sources and resolutions, credits, data terms); PHerc. 139 migrated with no visible change
- scroll picker (hidden with one scroll), per-scroll and per-winding lazy loading
- lib/manifest.js validator shared by the page and tools/validate_scroll.mjs; docs/ADDING_A_SCROLL.md; tools/precompute_template.py
- Open your own: files, folders, zips or a URL, read in the browser only (nothing uploaded), OBJ/PLY with UVs, PNG/JPG/TIFF layers, size limits, clear errors, kept in IndexedDB and labelled local; downloadable synthetic example package
- atlases as WebP with JPG fallback (about 2.1 MB smaller)
- rename layers: Published ink (2.4 µm) and Our ink model (9 µm)