SharpMeow commited on
Commit
01b454f
·
1 Parent(s): e2acbe0

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

Browse files
README.md CHANGED
@@ -26,7 +26,7 @@ PHerc. 139 is a papyrus roll carbonized when Vesuvius buried Herculaneum in 79 C
26
  - **Shapes**: the 9.362 µm tifxyz meshes of the 37 traced windings (`w023` to `w059`), decimated to 579,450 vertices.
27
  - **X-ray layer**: the CT intensity on each surface, from the public 9.362 µm surface volumes.
28
  - **Published ink (2.4 µm), amber**: the Vesuvius Challenge's public ink detection on the 2.4 µm scan. In 3D it is drawn through a local-contrast filter so letter-sized strokes stand out. The close-up view shows the published preview without filtering, downscaled to 2,400 px on its long side and re-saved as JPEG.
29
- - **Our ink model (9 µm), cyan**: inked by running the public [`scrollprize/ink_9um`](https://huggingface.co/scrollprize/ink_9um) model (seed 42, step 75000) on the 9.362 µm scan. The ink_9um model was trained by the Vesuvius Challenge and run by Chase Hendrick, on Hugging Face ZeroGPU and Modal, over all 37 windings (`w023` to `w059`). The first batch was 37,141 patches in 57 s of measured GPU time. The page reads the covered windings from the manifest, so its text updates as windings are added. The 9.362 µm scan is about four times coarser than the 2.4 µm one, so this layer is noisier. `w047` and `w050` ran with patch overlap 0.5; others ran with 0.25 or 0.2, and their 128 px patch grid shows as faint square tiles. Per-run records (checkpoint sha256, villa commit, requested and measured GPU seconds) are in `data/gpu/receipts/`; `data/gpu.json` is the summary the page reads.
30
 
31
  Unrolling lays the windings end to end, outermost first. Each traced winding runs a little past one full turn, so roughly a tenth of the 2.8 m strip repeats surface from its neighbour.
32
 
@@ -54,7 +54,7 @@ From the Space's root, with Python 3, `numpy`, `scipy`, `tifffile`, `Pillow` and
54
 
55
  1. `python tools/fetch.py` lists the public bucket and downloads the meshes and ink previews into `raw/` (about 110 MB).
56
  2. `python tools/build.py` writes `data/scroll.bin`, `data/scroll.json`, the atlases and `data/hi/`. It reads the X-ray layer straight from the bucket.
57
- 3. `python tools/gpu_layer.py` rebuilds the Our ink model (9 µm) layer. It needs the ink_9um output TIFFs in `gpu/wNNN/` (about 25 MB each, not shipped). Regenerate them with the model card's inference command on the surface-volume URLs in `data/gpu/receipts/`.
58
 
59
  ## Licence and credits
60
 
 
26
  - **Shapes**: the 9.362 µm tifxyz meshes of the 37 traced windings (`w023` to `w059`), decimated to 579,450 vertices.
27
  - **X-ray layer**: the CT intensity on each surface, from the public 9.362 µm surface volumes.
28
  - **Published ink (2.4 µm), amber**: the Vesuvius Challenge's public ink detection on the 2.4 µm scan. In 3D it is drawn through a local-contrast filter so letter-sized strokes stand out. The close-up view shows the published preview without filtering, downscaled to 2,400 px on its long side and re-saved as JPEG.
29
+ - **ink_9um (9 µm), cyan**: inked by running the public [`scrollprize/ink_9um`](https://huggingface.co/scrollprize/ink_9um) model (seed 42, step 75000) on the 9.362 µm scan. The ink_9um model was trained by the Vesuvius Challenge and run by Chase Hendrick, on Hugging Face ZeroGPU and Modal, over all 37 windings (`w023` to `w059`). The first batch was 37,141 patches in 57 s of measured GPU time. The page reads the covered windings from the manifest, so its text updates as windings are added. The 9.362 µm scan is about four times coarser than the 2.4 µm one, so this layer is noisier. `w047` and `w050` ran with patch overlap 0.5; others ran with 0.25 or 0.2, and their 128 px patch grid shows as faint square tiles. Per-run records (checkpoint sha256, villa commit, requested and measured GPU seconds) are in `data/gpu/receipts/`; `data/gpu.json` is the summary the page reads.
30
 
31
  Unrolling lays the windings end to end, outermost first. Each traced winding runs a little past one full turn, so roughly a tenth of the 2.8 m strip repeats surface from its neighbour.
32
 
 
54
 
55
  1. `python tools/fetch.py` lists the public bucket and downloads the meshes and ink previews into `raw/` (about 110 MB).
56
  2. `python tools/build.py` writes `data/scroll.bin`, `data/scroll.json`, the atlases and `data/hi/`. It reads the X-ray layer straight from the bucket.
57
+ 3. `python tools/gpu_layer.py` rebuilds the ink_9um (9 µm) layer. It needs the ink_9um output TIFFs in `gpu/wNNN/` (about 25 MB each, not shipped). Regenerate them with the model card's inference command on the surface-volume URLs in `data/gpu/receipts/`.
58
 
59
  ## Licence and credits
60
 
data/gpu.json CHANGED
@@ -9,7 +9,7 @@
9
  "calls": 2,
10
  "overlap": 0.5,
11
  "started": "2026-10-16T03:28:07Z",
12
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 9,227 patches of 128\u00d7128 px, overlap 0.5 \u00b7 8.4 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
13
  },
14
  "w024": {
15
  "tex": "data/gpu/w024.jpg",
@@ -20,7 +20,7 @@
20
  "calls": 2,
21
  "overlap": 0.5,
22
  "started": "2026-10-16T03:28:08Z",
23
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 9,758 patches of 128\u00d7128 px, overlap 0.5 \u00b7 8.5 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
24
  },
25
  "w025": {
26
  "tex": "data/gpu/w025.jpg",
@@ -31,7 +31,7 @@
31
  "calls": 2,
32
  "overlap": 0.5,
33
  "started": "2026-10-16T03:28:21Z",
34
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,316 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.1 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
35
  },
36
  "w026": {
37
  "tex": "data/gpu/w026.jpg",
@@ -42,7 +42,7 @@
42
  "calls": 2,
43
  "overlap": 0.5,
44
  "started": "2026-10-16T03:28:28Z",
45
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,741 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.5 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
46
  },
47
  "w027": {
48
  "tex": "data/gpu/w027.jpg",
@@ -53,7 +53,7 @@
53
  "calls": 2,
54
  "overlap": 0.5,
55
  "started": "2026-10-16T03:28:12Z",
56
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,328 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.2 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
57
  },
58
  "w028": {
59
  "tex": "data/gpu/w028.jpg",
@@ -64,7 +64,7 @@
64
  "calls": 2,
65
  "overlap": 0.5,
66
  "started": "2026-10-16T03:28:09Z",
67
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,358 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.1 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
68
  },
69
  "w029": {
70
  "tex": "data/gpu/w029.jpg",
@@ -75,7 +75,7 @@
75
  "calls": 2,
76
  "overlap": 0.5,
77
  "started": "2026-10-16T03:28:12Z",
78
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,356 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.2 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
79
  },
80
  "w030": {
81
  "tex": "data/gpu/w030.jpg",
@@ -86,7 +86,7 @@
86
  "calls": 2,
87
  "overlap": 0.5,
88
  "started": "2026-10-16T03:28:26Z",
89
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,412 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.4 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
90
  },
91
  "w031": {
92
  "tex": "data/gpu/w031.jpg",
@@ -97,7 +97,7 @@
97
  "calls": 2,
98
  "overlap": 0.5,
99
  "started": "2026-10-16T03:29:25Z",
100
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,436 patches of 128\u00d7128 px, overlap 0.5 \u00b7 12.5 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
101
  },
102
  "w032": {
103
  "tex": "data/gpu/w032.jpg",
@@ -108,7 +108,7 @@
108
  "calls": 2,
109
  "overlap": 0.5,
110
  "started": "2026-10-16T03:29:31Z",
111
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,640 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.3 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
112
  },
113
  "w033": {
114
  "tex": "data/gpu/w033.jpg",
@@ -119,7 +119,7 @@
119
  "calls": 2,
120
  "overlap": 0.5,
121
  "started": "2026-10-16T03:30:17Z",
122
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,803 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.1 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
123
  },
124
  "w034": {
125
  "tex": "data/gpu/w034.jpg",
@@ -130,7 +130,7 @@
130
  "calls": 2,
131
  "overlap": 0.5,
132
  "started": "2026-10-16T03:29:44Z",
133
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,785 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.3 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
134
  },
135
  "w035": {
136
  "tex": "data/gpu/w035.jpg",
@@ -141,7 +141,7 @@
141
  "calls": 1,
142
  "overlap": 0.5,
143
  "started": "2026-10-16T03:29:27Z",
144
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 6,456 patches of 128\u00d7128 px, overlap 0.5 \u00b7 5.6 s of GPU in 1 call on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
145
  },
146
  "w036": {
147
  "tex": "data/gpu/w036.jpg",
@@ -152,7 +152,7 @@
152
  "calls": 2,
153
  "overlap": 0.5,
154
  "started": "2026-10-16T03:30:09Z",
155
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 8,923 patches of 128\u00d7128 px, overlap 0.5 \u00b7 8.5 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
156
  },
157
  "w037": {
158
  "tex": "data/gpu/w037.jpg",
@@ -163,7 +163,7 @@
163
  "calls": 2,
164
  "overlap": 0.5,
165
  "started": "2026-10-16T03:30:14Z",
166
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 9,501 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.5 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
167
  },
168
  "w038": {
169
  "tex": "data/gpu/w038.jpg",
@@ -174,7 +174,7 @@
174
  "calls": 2,
175
  "overlap": 0.5,
176
  "started": "2026-10-16T03:30:16Z",
177
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 9,970 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.2 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
178
  },
179
  "w039": {
180
  "tex": "data/gpu/w039.jpg",
@@ -185,7 +185,7 @@
185
  "calls": 2,
186
  "overlap": 0.5,
187
  "started": "2026-10-16T03:30:33Z",
188
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,514 patches of 128\u00d7128 px, overlap 0.5 \u00b7 8.7 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
189
  },
190
  "w040": {
191
  "tex": "data/gpu/w040.jpg",
@@ -196,7 +196,7 @@
196
  "calls": 2,
197
  "overlap": 0.5,
198
  "started": "2026-10-16T03:31:00Z",
199
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,076 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.0 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
200
  },
201
  "w041": {
202
  "tex": "data/gpu/w041.jpg",
@@ -207,7 +207,7 @@
207
  "calls": 2,
208
  "overlap": 0.5,
209
  "started": "2026-10-16T03:31:02Z",
210
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,920 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.4 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
211
  },
212
  "w042": {
213
  "tex": "data/gpu/w042.jpg",
@@ -218,7 +218,7 @@
218
  "calls": 2,
219
  "overlap": 0.5,
220
  "started": "2026-10-16T03:31:11Z",
221
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,440 patches of 128\u00d7128 px, overlap 0.5 \u00b7 8.4 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
222
  },
223
  "w043": {
224
  "tex": "data/gpu/w043.jpg",
@@ -229,7 +229,7 @@
229
  "calls": 2,
230
  "overlap": 0.5,
231
  "started": "2026-10-16T03:31:44Z",
232
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,006 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.9 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
233
  },
234
  "w044": {
235
  "tex": "data/gpu/w044.jpg",
@@ -240,7 +240,7 @@
240
  "calls": 2,
241
  "overlap": 0.5,
242
  "started": "2026-10-16T03:31:54Z",
243
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,022 patches of 128\u00d7128 px, overlap 0.5 \u00b7 11.4 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
244
  },
245
  "w045": {
246
  "tex": "data/gpu/w045.jpg",
@@ -251,7 +251,7 @@
251
  "calls": 2,
252
  "overlap": 0.5,
253
  "started": "2026-10-16T03:31:58Z",
254
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,950 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.7 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
255
  },
256
  "w046": {
257
  "tex": "data/gpu/w046.jpg",
@@ -262,7 +262,7 @@
262
  "calls": 1,
263
  "overlap": 0.25,
264
  "started": "2026-10-16T00:22:15Z",
265
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 4,891 patches of 128\u00d7128 px, overlap 0.25 (patch seams visible) \u00b7 7.5 s of GPU in 1 call \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
266
  },
267
  "w047": {
268
  "tex": "data/gpu/w047.jpg",
@@ -273,7 +273,7 @@
273
  "calls": 3,
274
  "overlap": 0.5,
275
  "started": "2026-10-15T20:09:32Z",
276
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,950 patches of 128\u00d7128 px, overlap 0.5 \u00b7 18.4 s of GPU in 3 calls \u00b7 2026-10-15 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
277
  },
278
  "w048": {
279
  "tex": "data/gpu/w048.jpg",
@@ -284,7 +284,7 @@
284
  "calls": 1,
285
  "overlap": 0.25,
286
  "started": "2026-10-16T00:23:44Z",
287
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 4,885 patches of 128\u00d7128 px, overlap 0.25 (patch seams visible) \u00b7 7.6 s of GPU in 1 call \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
288
  },
289
  "w049": {
290
  "tex": "data/gpu/w049.jpg",
@@ -295,7 +295,7 @@
295
  "calls": 1,
296
  "overlap": 0.25,
297
  "started": "2026-10-16T00:25:23Z",
298
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 5,306 patches of 128\u00d7128 px, overlap 0.25 (patch seams visible) \u00b7 8.2 s of GPU in 1 call \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
299
  },
300
  "w050": {
301
  "tex": "data/gpu/w050.jpg",
@@ -306,7 +306,7 @@
306
  "calls": 1,
307
  "overlap": 0.5,
308
  "started": "2026-10-16T00:26:27Z",
309
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 4,629 patches of 128\u00d7128 px, overlap 0.5 \u00b7 6.4 s of GPU in 1 call \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
310
  },
311
  "w051": {
312
  "tex": "data/gpu/w051.jpg",
@@ -317,7 +317,7 @@
317
  "calls": 1,
318
  "overlap": 0.2,
319
  "started": "2026-10-16T00:28:35Z",
320
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 6,480 patches of 128\u00d7128 px, overlap 0.2 (patch seams visible) \u00b7 9.1 s of GPU in 1 call \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
321
  },
322
  "w052": {
323
  "tex": "data/gpu/w052.jpg",
@@ -328,7 +328,7 @@
328
  "calls": 3,
329
  "overlap": 0.5,
330
  "started": "2026-10-16T03:32:06Z",
331
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 16,763 patches of 128\u00d7128 px, overlap 0.5 \u00b7 13.6 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
332
  },
333
  "w053": {
334
  "tex": "data/gpu/w053.jpg",
@@ -339,7 +339,7 @@
339
  "calls": 3,
340
  "overlap": 0.5,
341
  "started": "2026-10-16T03:32:19Z",
342
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 16,590 patches of 128\u00d7128 px, overlap 0.5 \u00b7 20.9 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
343
  },
344
  "w054": {
345
  "tex": "data/gpu/w054.jpg",
@@ -350,7 +350,7 @@
350
  "calls": 3,
351
  "overlap": 0.5,
352
  "started": "2026-10-16T03:32:53Z",
353
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 18,048 patches of 128\u00d7128 px, overlap 0.5 \u00b7 14.3 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
354
  },
355
  "w055": {
356
  "tex": "data/gpu/w055.jpg",
@@ -361,7 +361,7 @@
361
  "calls": 3,
362
  "overlap": 0.5,
363
  "started": "2026-10-16T03:32:47Z",
364
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 17,156 patches of 128\u00d7128 px, overlap 0.5 \u00b7 13.1 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
365
  },
366
  "w056": {
367
  "tex": "data/gpu/w056.jpg",
@@ -372,7 +372,7 @@
372
  "calls": 2,
373
  "overlap": 0.5,
374
  "started": "2026-10-16T03:32:46Z",
375
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 15,243 patches of 128\u00d7128 px, overlap 0.5 \u00b7 11.9 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
376
  },
377
  "w057": {
378
  "tex": "data/gpu/w057.jpg",
@@ -383,7 +383,7 @@
383
  "calls": 3,
384
  "overlap": 0.5,
385
  "started": "2026-10-16T03:33:53Z",
386
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 16,223 patches of 128\u00d7128 px, overlap 0.5 \u00b7 14.8 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
387
  },
388
  "w058": {
389
  "tex": "data/gpu/w058.jpg",
@@ -394,7 +394,7 @@
394
  "calls": 3,
395
  "overlap": 0.5,
396
  "started": "2026-10-16T03:34:22Z",
397
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 15,924 patches of 128\u00d7128 px, overlap 0.5 \u00b7 15.0 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
398
  },
399
  "w059": {
400
  "tex": "data/gpu/w059.jpg",
@@ -405,7 +405,7 @@
405
  "calls": 3,
406
  "overlap": 0.5,
407
  "started": "2026-10-16T03:34:29Z",
408
- "meta": "Our ink model (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 15,294 patches of 128\u00d7128 px, overlap 0.5 \u00b7 13.1 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
409
  }
410
  },
411
  "totals": {
@@ -415,5 +415,5 @@
415
  "calls": 76,
416
  "device": "NVIDIA RTX PRO 6000 Blackwell Server Edition MIG 2g.48gb"
417
  },
418
- "about": "<b>Our ink model (9 \u00b5m)</b>, the cyan band, is ours. So far we have run the public <a href=\"https://huggingface.co/scrollprize/ink_9um\" target=\"_blank\" rel=\"noopener\">scrollprize/ink_9um</a> model on Hugging Face ZeroGPU over windings w046 to w051. More windings are added as daily free GPU runs allow, so this layer is a work in progress and will grow. The first batch was 37,141 patches in 57 s of measured GPU time on half an NVIDIA RTX PRO 6000 Blackwell. It reads the 9.362 \u00b5m scan, about four times coarser than the 2.4 \u00b5m scan behind the amber layer, so its ink map is noisier. w047 and w050 ran with patch overlap 0.5; w046, w048, w049 and w051 ran with less overlap, so their 128 px patch grid shows as faint square tiles. That grid is a stitching artifact, not ink. Click a cyan winding to compare the two maps."
419
  }
 
9
  "calls": 2,
10
  "overlap": 0.5,
11
  "started": "2026-10-16T03:28:07Z",
12
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 9,227 patches of 128\u00d7128 px, overlap 0.5 \u00b7 8.4 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
13
  },
14
  "w024": {
15
  "tex": "data/gpu/w024.jpg",
 
20
  "calls": 2,
21
  "overlap": 0.5,
22
  "started": "2026-10-16T03:28:08Z",
23
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 9,758 patches of 128\u00d7128 px, overlap 0.5 \u00b7 8.5 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
24
  },
25
  "w025": {
26
  "tex": "data/gpu/w025.jpg",
 
31
  "calls": 2,
32
  "overlap": 0.5,
33
  "started": "2026-10-16T03:28:21Z",
34
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,316 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.1 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
35
  },
36
  "w026": {
37
  "tex": "data/gpu/w026.jpg",
 
42
  "calls": 2,
43
  "overlap": 0.5,
44
  "started": "2026-10-16T03:28:28Z",
45
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,741 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.5 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
46
  },
47
  "w027": {
48
  "tex": "data/gpu/w027.jpg",
 
53
  "calls": 2,
54
  "overlap": 0.5,
55
  "started": "2026-10-16T03:28:12Z",
56
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,328 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.2 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
57
  },
58
  "w028": {
59
  "tex": "data/gpu/w028.jpg",
 
64
  "calls": 2,
65
  "overlap": 0.5,
66
  "started": "2026-10-16T03:28:09Z",
67
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,358 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.1 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
68
  },
69
  "w029": {
70
  "tex": "data/gpu/w029.jpg",
 
75
  "calls": 2,
76
  "overlap": 0.5,
77
  "started": "2026-10-16T03:28:12Z",
78
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,356 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.2 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
79
  },
80
  "w030": {
81
  "tex": "data/gpu/w030.jpg",
 
86
  "calls": 2,
87
  "overlap": 0.5,
88
  "started": "2026-10-16T03:28:26Z",
89
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,412 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.4 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
90
  },
91
  "w031": {
92
  "tex": "data/gpu/w031.jpg",
 
97
  "calls": 2,
98
  "overlap": 0.5,
99
  "started": "2026-10-16T03:29:25Z",
100
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,436 patches of 128\u00d7128 px, overlap 0.5 \u00b7 12.5 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
101
  },
102
  "w032": {
103
  "tex": "data/gpu/w032.jpg",
 
108
  "calls": 2,
109
  "overlap": 0.5,
110
  "started": "2026-10-16T03:29:31Z",
111
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,640 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.3 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
112
  },
113
  "w033": {
114
  "tex": "data/gpu/w033.jpg",
 
119
  "calls": 2,
120
  "overlap": 0.5,
121
  "started": "2026-10-16T03:30:17Z",
122
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,803 patches of 128\u00d7128 px, overlap 0.5 \u00b7 10.1 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
123
  },
124
  "w034": {
125
  "tex": "data/gpu/w034.jpg",
 
130
  "calls": 2,
131
  "overlap": 0.5,
132
  "started": "2026-10-16T03:29:44Z",
133
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,785 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.3 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
134
  },
135
  "w035": {
136
  "tex": "data/gpu/w035.jpg",
 
141
  "calls": 1,
142
  "overlap": 0.5,
143
  "started": "2026-10-16T03:29:27Z",
144
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 6,456 patches of 128\u00d7128 px, overlap 0.5 \u00b7 5.6 s of GPU in 1 call on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
145
  },
146
  "w036": {
147
  "tex": "data/gpu/w036.jpg",
 
152
  "calls": 2,
153
  "overlap": 0.5,
154
  "started": "2026-10-16T03:30:09Z",
155
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 8,923 patches of 128\u00d7128 px, overlap 0.5 \u00b7 8.5 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
156
  },
157
  "w037": {
158
  "tex": "data/gpu/w037.jpg",
 
163
  "calls": 2,
164
  "overlap": 0.5,
165
  "started": "2026-10-16T03:30:14Z",
166
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 9,501 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.5 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
167
  },
168
  "w038": {
169
  "tex": "data/gpu/w038.jpg",
 
174
  "calls": 2,
175
  "overlap": 0.5,
176
  "started": "2026-10-16T03:30:16Z",
177
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 9,970 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.2 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
178
  },
179
  "w039": {
180
  "tex": "data/gpu/w039.jpg",
 
185
  "calls": 2,
186
  "overlap": 0.5,
187
  "started": "2026-10-16T03:30:33Z",
188
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,514 patches of 128\u00d7128 px, overlap 0.5 \u00b7 8.7 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
189
  },
190
  "w040": {
191
  "tex": "data/gpu/w040.jpg",
 
196
  "calls": 2,
197
  "overlap": 0.5,
198
  "started": "2026-10-16T03:31:00Z",
199
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,076 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.0 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
200
  },
201
  "w041": {
202
  "tex": "data/gpu/w041.jpg",
 
207
  "calls": 2,
208
  "overlap": 0.5,
209
  "started": "2026-10-16T03:31:02Z",
210
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,920 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.4 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
211
  },
212
  "w042": {
213
  "tex": "data/gpu/w042.jpg",
 
218
  "calls": 2,
219
  "overlap": 0.5,
220
  "started": "2026-10-16T03:31:11Z",
221
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,440 patches of 128\u00d7128 px, overlap 0.5 \u00b7 8.4 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
222
  },
223
  "w043": {
224
  "tex": "data/gpu/w043.jpg",
 
229
  "calls": 2,
230
  "overlap": 0.5,
231
  "started": "2026-10-16T03:31:44Z",
232
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,006 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.9 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
233
  },
234
  "w044": {
235
  "tex": "data/gpu/w044.jpg",
 
240
  "calls": 2,
241
  "overlap": 0.5,
242
  "started": "2026-10-16T03:31:54Z",
243
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 11,022 patches of 128\u00d7128 px, overlap 0.5 \u00b7 11.4 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
244
  },
245
  "w045": {
246
  "tex": "data/gpu/w045.jpg",
 
251
  "calls": 2,
252
  "overlap": 0.5,
253
  "started": "2026-10-16T03:31:58Z",
254
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,950 patches of 128\u00d7128 px, overlap 0.5 \u00b7 9.7 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
255
  },
256
  "w046": {
257
  "tex": "data/gpu/w046.jpg",
 
262
  "calls": 1,
263
  "overlap": 0.25,
264
  "started": "2026-10-16T00:22:15Z",
265
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 4,891 patches of 128\u00d7128 px, overlap 0.25 (patch seams visible) \u00b7 7.5 s of GPU in 1 call \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
266
  },
267
  "w047": {
268
  "tex": "data/gpu/w047.jpg",
 
273
  "calls": 3,
274
  "overlap": 0.5,
275
  "started": "2026-10-15T20:09:32Z",
276
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 10,950 patches of 128\u00d7128 px, overlap 0.5 \u00b7 18.4 s of GPU in 3 calls \u00b7 2026-10-15 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
277
  },
278
  "w048": {
279
  "tex": "data/gpu/w048.jpg",
 
284
  "calls": 1,
285
  "overlap": 0.25,
286
  "started": "2026-10-16T00:23:44Z",
287
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 4,885 patches of 128\u00d7128 px, overlap 0.25 (patch seams visible) \u00b7 7.6 s of GPU in 1 call \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
288
  },
289
  "w049": {
290
  "tex": "data/gpu/w049.jpg",
 
295
  "calls": 1,
296
  "overlap": 0.25,
297
  "started": "2026-10-16T00:25:23Z",
298
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 5,306 patches of 128\u00d7128 px, overlap 0.25 (patch seams visible) \u00b7 8.2 s of GPU in 1 call \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
299
  },
300
  "w050": {
301
  "tex": "data/gpu/w050.jpg",
 
306
  "calls": 1,
307
  "overlap": 0.5,
308
  "started": "2026-10-16T00:26:27Z",
309
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 4,629 patches of 128\u00d7128 px, overlap 0.5 \u00b7 6.4 s of GPU in 1 call \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
310
  },
311
  "w051": {
312
  "tex": "data/gpu/w051.jpg",
 
317
  "calls": 1,
318
  "overlap": 0.2,
319
  "started": "2026-10-16T00:28:35Z",
320
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 6,480 patches of 128\u00d7128 px, overlap 0.2 (patch seams visible) \u00b7 9.1 s of GPU in 1 call \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
321
  },
322
  "w052": {
323
  "tex": "data/gpu/w052.jpg",
 
328
  "calls": 3,
329
  "overlap": 0.5,
330
  "started": "2026-10-16T03:32:06Z",
331
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 16,763 patches of 128\u00d7128 px, overlap 0.5 \u00b7 13.6 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
332
  },
333
  "w053": {
334
  "tex": "data/gpu/w053.jpg",
 
339
  "calls": 3,
340
  "overlap": 0.5,
341
  "started": "2026-10-16T03:32:19Z",
342
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 16,590 patches of 128\u00d7128 px, overlap 0.5 \u00b7 20.9 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
343
  },
344
  "w054": {
345
  "tex": "data/gpu/w054.jpg",
 
350
  "calls": 3,
351
  "overlap": 0.5,
352
  "started": "2026-10-16T03:32:53Z",
353
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 18,048 patches of 128\u00d7128 px, overlap 0.5 \u00b7 14.3 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
354
  },
355
  "w055": {
356
  "tex": "data/gpu/w055.jpg",
 
361
  "calls": 3,
362
  "overlap": 0.5,
363
  "started": "2026-10-16T03:32:47Z",
364
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 17,156 patches of 128\u00d7128 px, overlap 0.5 \u00b7 13.1 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
365
  },
366
  "w056": {
367
  "tex": "data/gpu/w056.jpg",
 
372
  "calls": 2,
373
  "overlap": 0.5,
374
  "started": "2026-10-16T03:32:46Z",
375
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 15,243 patches of 128\u00d7128 px, overlap 0.5 \u00b7 11.9 s of GPU in 2 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
376
  },
377
  "w057": {
378
  "tex": "data/gpu/w057.jpg",
 
383
  "calls": 3,
384
  "overlap": 0.5,
385
  "started": "2026-10-16T03:33:53Z",
386
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 16,223 patches of 128\u00d7128 px, overlap 0.5 \u00b7 14.8 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
387
  },
388
  "w058": {
389
  "tex": "data/gpu/w058.jpg",
 
394
  "calls": 3,
395
  "overlap": 0.5,
396
  "started": "2026-10-16T03:34:22Z",
397
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 15,924 patches of 128\u00d7128 px, overlap 0.5 \u00b7 15.0 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
398
  },
399
  "w059": {
400
  "tex": "data/gpu/w059.jpg",
 
405
  "calls": 3,
406
  "overlap": 0.5,
407
  "started": "2026-10-16T03:34:29Z",
408
+ "meta": "ink_9um (9 \u00b5m): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 \u00b5m scan \u00b7 15,294 patches of 128\u00d7128 px, overlap 0.5 \u00b7 13.1 s of GPU in 3 calls on Modal \u00b7 2026-10-16 \u00b7 drag to pan, scroll or pinch to zoom, double-click to fit"
409
  }
410
  },
411
  "totals": {
 
415
  "calls": 76,
416
  "device": "NVIDIA RTX PRO 6000 Blackwell Server Edition MIG 2g.48gb"
417
  },
418
+ "about": "<b>ink_9um (9 \u00b5m)</b> is the cyan band. Chase Hendrick ran the public <a href=\"https://huggingface.co/scrollprize/ink_9um\" target=\"_blank\" rel=\"noopener\">scrollprize/ink_9um</a> model, which the Vesuvius Challenge trained, on Hugging Face ZeroGPU over windings w046 to w051. More windings are added as daily free GPU runs allow, so this layer is a work in progress and will grow. The first batch was 37,141 patches in 57 s of measured GPU time on half an NVIDIA RTX PRO 6000 Blackwell. It reads the 9.362 \u00b5m scan, about four times coarser than the 2.4 \u00b5m scan behind the amber layer, so its ink map is noisier. w047 and w050 ran with patch overlap 0.5; w046, w048, w049 and w051 ran with less overlap, so their 128 px patch grid shows as faint square tiles. That grid is a stitching artifact, not ink. Click a cyan winding to compare the two maps."
419
  }
docs/ADDING_A_SCROLL.md CHANGED
@@ -50,7 +50,7 @@ tools/precompute_template.py a starting point for turning traced windings
50
  { "id": "xray", "role": "ct", "label": "X-ray", "texture": "xray/{id}.jpg", "source": "Surface volume, 7.91 um scan", "resolutionUM": 7.91 },
51
  { "id": "ink", "role": "ink", "label": "Published ink (2.4 µm)", "texture": "ink/{id}.png", "files": { "w011": "ink/w011.tif" },
52
  "source": "Which model, on which scan", "resolutionUM": 2.4, "hi": "closeups/{id}.jpg" },
53
- { "id": "model", "role": "overlay", "label": "Our ink model (9 µm)", "windings": { "range": ["w011", "w012"] },
54
  "texture": "model/{id}.png", "source": "ink_9um on the 9.4 um scan", "resolutionUM": 9.362 }
55
  ],
56
  "credits": { "text": "Who made the data", "url": "https://scrollprize.org", "citation": "How to cite it" },
 
50
  { "id": "xray", "role": "ct", "label": "X-ray", "texture": "xray/{id}.jpg", "source": "Surface volume, 7.91 um scan", "resolutionUM": 7.91 },
51
  { "id": "ink", "role": "ink", "label": "Published ink (2.4 µm)", "texture": "ink/{id}.png", "files": { "w011": "ink/w011.tif" },
52
  "source": "Which model, on which scan", "resolutionUM": 2.4, "hi": "closeups/{id}.jpg" },
53
+ { "id": "model", "role": "overlay", "label": "ink_9um (9 µm)", "windings": { "range": ["w011", "w012"] },
54
  "texture": "model/{id}.png", "source": "ink_9um on the 9.4 um scan", "resolutionUM": 9.362 }
55
  ],
56
  "credits": { "text": "Who made the data", "url": "https://scrollprize.org", "citation": "How to cite it" },
index.html CHANGED
@@ -26,8 +26,8 @@
26
  <link rel="preconnect" href="https://fonts.googleapis.com">
27
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
28
  <link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
29
- <link rel="stylesheet" href="style.css">
30
- <link rel="stylesheet" href="bench.css">
31
  <!-- start the big downloads and the 3D library in parallel with the page instead of one after another -->
32
  <link rel="modulepreload" href="https://cdn.jsdelivr.net/npm/three@0.160.0/build/three.module.js" crossorigin>
33
  <script>
@@ -90,10 +90,10 @@ if (!/(^|[#&])s=/.test(location.hash)) ['scrolls/index.json', 'scrolls/PHerc0139
90
  <div class="seg" role="tablist">
91
  <button class="chip" data-layer="xray" role="tab" title="Raw X-ray CT brightness on each winding. No ink detection.">X‑ray</button>
92
  <button class="chip on" data-layer="ink" role="tab" title="Vesuvius Challenge's published ink detection on the fine 2.4 µm scan, covering all 37 windings.">Published ink (2.4 <span class="mu">µ</span>m)</button>
93
- <button class="chip gpu" data-layer="gpu" role="tab" id="gpuChip" hidden title="Lower resolution comparison: the open ink_9um model trained by the Vesuvius Challenge and run by Chase Hendrick on the coarser 9.4 µm scan (about 4x coarser than 2.4 µm), for all 37 windings. It looks blurrier and shows patch seams. It&#39;s here to show what an open model can recover from cheaper, more widely available scans, as a reproducible baseline you can check against the published result."><i class="dot"></i>Our ink model (9 <span class="mu">µ</span>m)</button>
94
  </div>
95
  <p class="layer-hint" id="layerHint" aria-live="polite">Published ink (2.4 µm): Vesuvius Challenge detection, 2.4 µm scan, all windings.</p>
96
- <details class="layer-why" id="layerWhy"><summary>Why two ink layers?</summary><p>Published ink is the Vesuvius Challenge result on the fine 2.4 µm scan. Our ink model (9 µm) is the open ink_9um model run by us on a scan about 4x coarser, so it is blurrier. It shows what an open model can recover from cheaper scans, as a baseline you can check.</p></details>
97
  <div class="seg tear-seg">
98
  <button class="chip" id="btnTear" aria-pressed="false" title="Destroy: tear, crush, burn or soak the scroll, rolled up or unrolled. Damage stays as you roll and unroll. Just for fun, not a real unrolling. (T)">Destroy</button>
99
  <button class="chip tool" id="toolTear" data-tool="tear" hidden aria-pressed="false" title="Drag across the papyrus to rip it (X)">Tear</button>
@@ -120,7 +120,7 @@ if (!/(^|[#&])s=/.test(location.hash)) ['scrolls/index.json', 'scrolls/PHerc0139
120
  <div><span class="dim">WINDING</span> <b id="rWind">w059</b></div>
121
  <div><span class="dim">RADIUS</span> <b id="rRad">13.3 mm</b></div>
122
  <div><span class="dim">STRIP</span> <b id="rLen">0.00 m</b></div>
123
- <div id="rGpuRow" hidden><span class="dim">OUR INK</span> <b id="rGpu">·</b></div>
124
  <button class="chip read" id="btnRead">Read w059</button>
125
  </aside>
126
 
@@ -157,7 +157,7 @@ if (!/(^|[#&])s=/.test(location.hash)) ['scrolls/index.json', 'scrolls/PHerc0139
157
  <div class="swipe-line" id="fSwipeLine" hidden></div>
158
  <div class="scalebar mono" id="fScale" aria-hidden="true"><i></i><span>10 mm</span></div>
159
  <div class="img-err mono dim" id="fErr" hidden>This image could not be loaded.</div>
160
- <label class="swipe mono" id="fSwipeWrap" hidden><span id="fSwipeA">Published ink (2.4 <span class="mu">µ</span>m)</span> <input type="range" id="fSwipe" min="0" max="100" value="50" aria-label="Swipe between Published ink (2.4 µm) and Our ink model (9 µm)"> <span id="fSwipeB">Our ink model (9 <span class="mu">µ</span>m)</span></label>
161
  </div>
162
  <div class="sheet-foot mono dim" id="fMeta"></div>
163
  </section>
@@ -201,8 +201,8 @@ if (!/(^|[#&])s=/.test(location.hash)) ['scrolls/index.json', 'scrolls/PHerc0139
201
  </div>
202
  </section>
203
 
204
- <script type="module" src="app.js"></script>
205
- <script type="module" src="polish.js"></script>
206
- <script type="module" src="lib/bench.js"></script>
207
  </body>
208
  </html>
 
26
  <link rel="preconnect" href="https://fonts.googleapis.com">
27
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
28
  <link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
29
+ <link rel="stylesheet" href="style.css?v=20261016a">
30
+ <link rel="stylesheet" href="bench.css?v=20261016a">
31
  <!-- start the big downloads and the 3D library in parallel with the page instead of one after another -->
32
  <link rel="modulepreload" href="https://cdn.jsdelivr.net/npm/three@0.160.0/build/three.module.js" crossorigin>
33
  <script>
 
90
  <div class="seg" role="tablist">
91
  <button class="chip" data-layer="xray" role="tab" title="Raw X-ray CT brightness on each winding. No ink detection.">X‑ray</button>
92
  <button class="chip on" data-layer="ink" role="tab" title="Vesuvius Challenge's published ink detection on the fine 2.4 µm scan, covering all 37 windings.">Published ink (2.4 <span class="mu">µ</span>m)</button>
93
+ <button class="chip gpu" data-layer="gpu" role="tab" id="gpuChip" hidden title="Lower resolution comparison: the open ink_9um model trained by the Vesuvius Challenge and run by Chase Hendrick on the coarser 9.4 µm scan (about 4x coarser than 2.4 µm), for all 37 windings. It looks blurrier and shows patch seams. It&#39;s here to show what an open model can recover from cheaper, more widely available scans, as a reproducible baseline you can check against the published result."><i class="dot"></i>ink_9um (9 <span class="mu">µ</span>m)</button>
94
  </div>
95
  <p class="layer-hint" id="layerHint" aria-live="polite">Published ink (2.4 µm): Vesuvius Challenge detection, 2.4 µm scan, all windings.</p>
96
+ <details class="layer-why" id="layerWhy"><summary>Why two ink layers?</summary><p>Published ink is the Vesuvius Challenge result on the fine 2.4 µm scan. ink_9um (9 µm) is the open ink_9um model, trained by the Vesuvius Challenge and run by Chase Hendrick, on a scan about 4x coarser, so it is blurrier. It shows what an open model can recover from cheaper scans, as a baseline you can check.</p></details>
97
  <div class="seg tear-seg">
98
  <button class="chip" id="btnTear" aria-pressed="false" title="Destroy: tear, crush, burn or soak the scroll, rolled up or unrolled. Damage stays as you roll and unroll. Just for fun, not a real unrolling. (T)">Destroy</button>
99
  <button class="chip tool" id="toolTear" data-tool="tear" hidden aria-pressed="false" title="Drag across the papyrus to rip it (X)">Tear</button>
 
120
  <div><span class="dim">WINDING</span> <b id="rWind">w059</b></div>
121
  <div><span class="dim">RADIUS</span> <b id="rRad">13.3 mm</b></div>
122
  <div><span class="dim">STRIP</span> <b id="rLen">0.00 m</b></div>
123
+ <div id="rGpuRow" hidden><span class="dim">INK_9UM</span> <b id="rGpu">·</b></div>
124
  <button class="chip read" id="btnRead">Read w059</button>
125
  </aside>
126
 
 
157
  <div class="swipe-line" id="fSwipeLine" hidden></div>
158
  <div class="scalebar mono" id="fScale" aria-hidden="true"><i></i><span>10 mm</span></div>
159
  <div class="img-err mono dim" id="fErr" hidden>This image could not be loaded.</div>
160
+ <label class="swipe mono" id="fSwipeWrap" hidden><span id="fSwipeA">Published ink (2.4 <span class="mu">µ</span>m)</span> <input type="range" id="fSwipe" min="0" max="100" value="50" aria-label="Swipe between Published ink (2.4 µm) and ink_9um (9 µm)"> <span id="fSwipeB">ink_9um (9 <span class="mu">µ</span>m)</span></label>
161
  </div>
162
  <div class="sheet-foot mono dim" id="fMeta"></div>
163
  </section>
 
201
  </div>
202
  </section>
203
 
204
+ <script type="module" src="app.js?v=20261016a"></script>
205
+ <script type="module" src="polish.js?v=20261016a"></script>
206
+ <script type="module" src="lib/bench.js?v=20261016a"></script>
207
  </body>
208
  </html>
lib/bench.js CHANGED
@@ -45,7 +45,7 @@ async function layer(seg, name) {
45
  return S.layers[key];
46
  }
47
  const PUBLIC = {
48
- gpu: { label: 'Our ink model (9 µm), ink_9um seed 42 step 75000', model: { name: 'scrollprize/ink_9um (seed 42, step 75000) on the 9.362 um scan', url: 'https://huggingface.co/scrollprize/ink_9um' } },
49
  ct: { label: 'X-ray layer as a baseline (not an ink model)', model: { name: 'baseline: X-ray intensity (9.362 um surface volume)' } },
50
  };
51
 
 
45
  return S.layers[key];
46
  }
47
  const PUBLIC = {
48
+ gpu: { label: 'ink_9um (9 µm), ink_9um seed 42 step 75000', model: { name: 'scrollprize/ink_9um (seed 42, step 75000) on the 9.362 um scan', url: 'https://huggingface.co/scrollprize/ink_9um' } },
49
  ct: { label: 'X-ray layer as a baseline (not an ink model)', model: { name: 'baseline: X-ray intensity (9.362 um surface volume)' } },
50
  };
51
 
polish.js CHANGED
@@ -5,7 +5,7 @@ const KEYS = [
5
  ['Space', 'Play or pause the unroll'],
6
  ['← →', 'Step the unroll (hold Shift for bigger steps)'],
7
  ['Home / End', 'Jump to rolled / fully unrolled'],
8
- ['1 2 3', 'X-ray, published ink, our ink model'],
9
  ['R', 'Read the current winding close up'],
10
  ['V', 'Reset the camera view'],
11
  ['U', 'Roll it back up (again to stop)'],
 
5
  ['Space', 'Play or pause the unroll'],
6
  ['← →', 'Step the unroll (hold Shift for bigger steps)'],
7
  ['Home / End', 'Jump to rolled / fully unrolled'],
8
+ ['1 2 3', 'X-ray, published ink, ink_9um'],
9
  ['R', 'Read the current winding close up'],
10
  ['V', 'Reset the camera view'],
11
  ['U', 'Roll it back up (again to stop)'],
scrolls/PHerc0139/manifest.json CHANGED
@@ -53,7 +53,7 @@
53
  {
54
  "id": "gpu",
55
  "role": "overlay",
56
- "label": "Our ink model (9 µm)",
57
  "windings": {
58
  "range": [
59
  "w023",
@@ -64,15 +64,15 @@
64
  "hi": "data/hi/{id}_gpu.jpg",
65
  "stats": "data/gpu.json",
66
  "sizeHint": 150000,
67
- "title": "Lower resolution comparison: the open ink_9um model run by us on free Hugging Face GPU, on the coarser 9.4 µm scan (about 4x coarser than 2.4 µm), for {count} windings so far. It looks blurrier and shows patch seams. It's here to show what an open model can recover from cheaper, more widely available scans, as a reproducible baseline you can check against the published result.",
68
- "hint": "Our ink model (9 µm): open ink_9um model on the 9.4 µm scan, about 4x coarser, {count} windings so far. Blurrier, with patch seams; a reproducible baseline to check against the published layer.",
69
- "closeupLabel": "Our ink model (9 µm)",
70
- "readoutLabel": "OUR INK",
71
- "bandTitle": "Windings inked by our ink model (9 µm)",
72
  "source": "scrollprize/ink_9um (seed 42, step 75000) run on Hugging Face ZeroGPU (w046 to w051) and Modal (the other windings); per-run receipts in data/gpu/receipts/",
73
  "resolutionUM": 9.362,
74
- "aboutHtml": "<b>Our ink model (9 µm)</b>, the cyan band, is ours. We ran the public <a href=\"https://huggingface.co/scrollprize/ink_9um\" target=\"_blank\" rel=\"noopener\">scrollprize/ink_9um</a> model over windings {windings}. The first batch was 37,141 patches in 57 s of measured GPU time on half an NVIDIA RTX PRO 6000 Blackwell. It reads the 9.362 µm scan, about four times coarser than the 2.4 µm scan behind the amber layer, so its ink map is noisier. w047 and w050 ran with patch overlap 0.5; w046, w048, w049 and w051 ran with less overlap, so their 128 px patch grid shows as faint square tiles. That grid is a stitching artifact, not ink. It is included at lower resolution on purpose: it shows what an open model can recover from cheaper, more widely available scans, as a reproducible baseline you can check against the published result. Windings other than w046 to w051 (w023 to w045 and w052 to w059) were run on Modal and agree with the ZeroGPU method to 0.9999 correlation (checked on a w046 rerun). Click a cyan winding to compare the two maps.",
75
- "why": "the open ink_9um model run by us on the coarser 9.4 µm scan, so it is blurrier. It shows what an open model can recover from cheaper scans, as a baseline you can check"
76
  }
77
  ],
78
  "credits": {
@@ -92,7 +92,7 @@
92
  "kicker": "PHERC. 0139 <span class=\"sep\">/</span> HERCULANEUM <span class=\"sep\">/</span> BURIED 79 CE",
93
  "titleHtml": "Unroll a scroll nobody has opened in <em>1,947 years.</em>",
94
  "lede": "37 of its windings have been traced through X‑ray CT by the Vesuvius Challenge, and neural networks found the ink on them. Drag to look around. Scrub to unroll.",
95
- "layerWhy": "Published ink is the Vesuvius Challenge result on the fine 2.4 µm scan. Our ink model (9 µm) is the open ink_9um model run by us on a scan about 4x coarser, so it is blurrier. It shows what an open model can recover from cheaper scans, as a baseline you can check.",
96
  "aboutHtml": [
97
  "<p>PHerc. 139 is one of the papyrus rolls carbonized when Vesuvius buried Herculaneum in 79 CE. It is too fragile to open, so it was scanned with X‑rays at the ESRF synchrotron in Grenoble. It is held by the Biblioteca Nazionale di Napoli.</p>",
98
  "<p>Each sheet in the 3D view is one winding of the roll, traced through the CT volume by the <a href=\"https://scrollprize.org\" target=\"_blank\" rel=\"noopener\">Vesuvius Challenge</a>. The shapes are the real ones, from the public 9.362 µm meshes. The <b>X‑ray</b> layer is the CT intensity on each surface. The <b>Published ink (2.4 µm)</b> layer is the Vesuvius Challenge's public ink detection on the 2.4 µm scan. In 3D it is drawn through a local‑contrast filter so letter‑sized strokes stand out; the close‑up view shows the published preview unfiltered, downscaled to 2,400 px.</p>",
 
53
  {
54
  "id": "gpu",
55
  "role": "overlay",
56
+ "label": "ink_9um (9 µm)",
57
  "windings": {
58
  "range": [
59
  "w023",
 
64
  "hi": "data/hi/{id}_gpu.jpg",
65
  "stats": "data/gpu.json",
66
  "sizeHint": 150000,
67
+ "title": "Lower resolution comparison: the open ink_9um model, trained by the Vesuvius Challenge and run by Chase Hendrick, on free Hugging Face GPU, on the coarser 9.4 µm scan (about 4x coarser than 2.4 µm), for {count} windings so far. It looks blurrier and shows patch seams. It's here to show what an open model can recover from cheaper, more widely available scans, as a reproducible baseline you can check against the published result.",
68
+ "hint": "ink_9um (9 µm): open ink_9um model on the 9.4 µm scan, about 4x coarser, {count} windings so far. Blurrier, with patch seams; a reproducible baseline to check against the published layer.",
69
+ "closeupLabel": "ink_9um (9 µm)",
70
+ "readoutLabel": "INK_9UM",
71
+ "bandTitle": "Windings inked by ink_9um (9 µm)",
72
  "source": "scrollprize/ink_9um (seed 42, step 75000) run on Hugging Face ZeroGPU (w046 to w051) and Modal (the other windings); per-run receipts in data/gpu/receipts/",
73
  "resolutionUM": 9.362,
74
+ "aboutHtml": "<b>ink_9um (9 µm)</b> is the cyan band. Chase Hendrick ran the public <a href=\"https://huggingface.co/scrollprize/ink_9um\" target=\"_blank\" rel=\"noopener\">scrollprize/ink_9um</a> model, which the Vesuvius Challenge trained, over windings {windings}. The first batch was 37,141 patches in 57 s of measured GPU time on half an NVIDIA RTX PRO 6000 Blackwell. It reads the 9.362 µm scan, about four times coarser than the 2.4 µm scan behind the amber layer, so its ink map is noisier. w047 and w050 ran with patch overlap 0.5; w046, w048, w049 and w051 ran with less overlap, so their 128 px patch grid shows as faint square tiles. That grid is a stitching artifact, not ink. It is included at lower resolution on purpose: it shows what an open model can recover from cheaper, more widely available scans, as a reproducible baseline you can check against the published result. Windings other than w046 to w051 (w023 to w045 and w052 to w059) were run on Modal and agree with the ZeroGPU method to 0.9999 correlation (checked on a w046 rerun). Click a cyan winding to compare the two maps.",
75
+ "why": "the open ink_9um model, trained by the Vesuvius Challenge and run by Chase Hendrick, on the coarser 9.4 µm scan, so it is blurrier. It shows what an open model can recover from cheaper scans, as a baseline you can check"
76
  }
77
  ],
78
  "credits": {
 
92
  "kicker": "PHERC. 0139 <span class=\"sep\">/</span> HERCULANEUM <span class=\"sep\">/</span> BURIED 79 CE",
93
  "titleHtml": "Unroll a scroll nobody has opened in <em>1,947 years.</em>",
94
  "lede": "37 of its windings have been traced through X‑ray CT by the Vesuvius Challenge, and neural networks found the ink on them. Drag to look around. Scrub to unroll.",
95
+ "layerWhy": "Published ink is the Vesuvius Challenge result on the fine 2.4 µm scan. ink_9um (9 µm) is the open ink_9um model, trained by the Vesuvius Challenge and run by Chase Hendrick, on a scan about 4x coarser, so it is blurrier. It shows what an open model can recover from cheaper scans, as a baseline you can check.",
96
  "aboutHtml": [
97
  "<p>PHerc. 139 is one of the papyrus rolls carbonized when Vesuvius buried Herculaneum in 79 CE. It is too fragile to open, so it was scanned with X‑rays at the ESRF synchrotron in Grenoble. It is held by the Biblioteca Nazionale di Napoli.</p>",
98
  "<p>Each sheet in the 3D view is one winding of the roll, traced through the CT volume by the <a href=\"https://scrollprize.org\" target=\"_blank\" rel=\"noopener\">Vesuvius Challenge</a>. The shapes are the real ones, from the public 9.362 µm meshes. The <b>X‑ray</b> layer is the CT intensity on each surface. The <b>Published ink (2.4 µm)</b> layer is the Vesuvius Challenge's public ink detection on the 2.4 µm scan. In 3D it is drawn through a local‑contrast filter so letter‑sized strokes stand out; the close‑up view shows the published preview unfiltered, downscaled to 2,400 px.</p>",
tools/gpu_layer.py CHANGED
@@ -78,7 +78,7 @@ def main():
78
  "calls": g["calls"],
79
  "overlap": args["overlap"],
80
  "started": receipt["calls"][0]["started"],
81
- "meta": (f"Our ink model (9 µm): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 µm scan · "
82
  f"{p:,} patches of 128×128 px, overlap {args['overlap']}"
83
  f"{' (patch seams visible)' if args['overlap'] < 0.5 else ''} · {g['measured']:.1f} s of GPU in "
84
  f"{g['calls']} call{'s' if g['calls'] > 1 else ''} · {receipt['calls'][0]['started'][:10]} · "
@@ -92,7 +92,7 @@ def main():
92
  "windings": wins,
93
  "totals": {"windings": len(wins), "patches": tot_patches, "gpuSeconds": round(tot_measured, 1),
94
  "calls": tot_calls, "device": device},
95
- "about": (f"<b>Our ink model (9 µm)</b>, the cyan band, is ours. We used all {tot_calls} of a free Hugging Face account's daily "
96
  f"ZeroGPU runs (the limit is 8; most of the daily GPU-time quota was left over) to run the public "
97
  f"<a href=\"https://huggingface.co/scrollprize/ink_9um\" target=\"_blank\" rel=\"noopener\">"
98
  f"scrollprize/ink_9um</a> model over windings {ids[0]} to {ids[-1]}: {tot_patches:,} patches in "
 
78
  "calls": g["calls"],
79
  "overlap": args["overlap"],
80
  "started": receipt["calls"][0]["started"],
81
+ "meta": (f"ink_9um (9 µm): scrollprize/ink_9um (seed 42, step 75000) on the 9.362 µm scan · "
82
  f"{p:,} patches of 128×128 px, overlap {args['overlap']}"
83
  f"{' (patch seams visible)' if args['overlap'] < 0.5 else ''} · {g['measured']:.1f} s of GPU in "
84
  f"{g['calls']} call{'s' if g['calls'] > 1 else ''} · {receipt['calls'][0]['started'][:10]} · "
 
92
  "windings": wins,
93
  "totals": {"windings": len(wins), "patches": tot_patches, "gpuSeconds": round(tot_measured, 1),
94
  "calls": tot_calls, "device": device},
95
+ "about": (f"<b>ink_9um (9 µm)</b> is the cyan band, from the public model the Vesuvius Challenge trained. Chase Hendrick used all {tot_calls} of a free Hugging Face account's daily "
96
  f"ZeroGPU runs (the limit is 8; most of the daily GPU-time quota was left over) to run the public "
97
  f"<a href=\"https://huggingface.co/scrollprize/ink_9um\" target=\"_blank\" rel=\"noopener\">"
98
  f"scrollprize/ink_9um</a> model over windings {ids[0]} to {ids[-1]}: {tot_patches:,} patches in "