PHercParis3: ufsm production unroll from raw CT (2026-10-31), one RTX PRO 6000 Blackwell (96 GB) pod ===================================================================================================== Scan: PHercParis3/20260427095331-2.400um-0.2m-78keV-masked.zarr, level 2 (9.6 um), box z,y,x,dz,dy,dx = 0,1536,512,17105,7360,9536 Code: https://github.com/SuperOptimizer/ufsm master 614604b (fields .. wraps), 01d983f (snap, strip, flatten, renders) Pipeline (scripts/unroll/unroll.sh, every network run here from the raw CT; nothing reused from earlier runs): 1. fields wind96-wk1-best fit fields: predict --window-z 384 --halo-z 64 --window 640 --halo 64 --shard 512 --fit-h 2 --occupancy 5 2. ink 3D ink, ift3-24000: GroupNorm frozen per scroll (--gn-save over a 2048-voxel band), then ONE seam-free pass predict --window 576 --halo 32 --feather 32 --full-grid 1 --levels 4 --q 32 (9.6 um + pyramid) 3. ref count-field --model-only (coarse-to-fine global winding reference, GPU) 4. slabs snapped slab fits (fit --ref-model --ref-snap 1), 64-cell slabs + 16 overlap, 134 slabs 5. join fit-join --ref --blend 16: integer agreement on the overlaps 0.8532 6. check wrap-check against the CT: 1.034 CT papyrus peaks per fitted turn (1 = right); verdicts: 198 real, 17 dup, 0 merged (--dup 0.5) 7. wraps ufsm wraps (.sfc, step 4, --min-cm2 0.5, --col-r p90); outer near-empty wraps trimmed ( --last 359) 8. snap ufsm wrap-snap --target mix (wraps moved along their rays onto the CT/field sheets, order kept, smooth offsets) wrap-snap: solve + write 71.0 s: 250 wraps, 3020376458 vertices: moved 0.793, mean |shift| 3.78 um, clamped to the interval 0.053 on-papyrus share of the wraps before -> after the snap: 0.785 -> 0.796 (11 sampled kept wraps w150..w350) 9. strip ufsm strip: all wraps chained into ONE continuous spiral surface (strip.sfc; strip.json / strip.tsv = wrap columns) strip: 212 wraps -> strip/strip/strip.sfc: 817323 x 4277 (columns x rows), 2859295657 valid vertices, column pitch median 3.93 voxels (step 4), length ~3085.6 cm, 2052.7 MB, write 40.0s, total 43.4s 10. flatten strip-flatten --gpu 1 (SLIM in overlapping chunks, isometric uv) strip-flatten: strip 817323 x 4277 step 4, flattened length 2394.42 cm x height 21.35 cm, mesh area 41755.18 cm2 strip-flatten: frame T (arc-length columns x z) : aniso p50/p95/p99 1.491/3.697/5.945 aniso>1.2 80.53% energy 6.1797 flips 0 (0.0000% area) tris 347122969 strip-flatten: flattened (chunk SLIM + blend): aniso p50/p95/p99 1.089/1.410/2.049 aniso>1.2 16.67% energy 18780.6680 flips 1214635 (0.0760% area) tris 347122969 11. renders ink + CT rendered on the flattened stripes, papyrus colouring (strip-mosaic --papyrus 1, bg 128) strip-mosaic: 42 stripes, length 2394.42 cm, valid 40659.76 cm2, on papyrus (CT >= 80 within 3x3 px) 0.7903; preview 7795x7120 (10 rows, 1:32), long strip 63954x571 (1:39) Files: strip.sfc, strip.json, strip.tsv the full spiral surface (tifxyz-style .sfc; xyz in 9.6 um voxels = level 2 of the 2.4 um scan, x4 for level 0) + its wrap/column tables stripes_papyrus/wsNNN_papyrus.jpg papyrus-coloured renders of the flattened strip at full resolution (9.6 um / px), in strip order strip_long_papyrus.jpg the whole strip as one long image (downsampled to fit the JPEG limit) PHercParis3_preview_papyrus.jpg the whole scroll in one image (folded rows, <= 8000 px) strip_papyrus.tsv / papyrus_wraps.tsv on-papyrus share per cm of strip / per wrap Results: strip-mosaic (papyrus look) on the flattened strip: length 2394.42 cm x ~21.4 cm, valid 40659.76 cm2, on papyrus 0.7903; 212 wraps w148 (inner) .. w359 (outer), column 0 = outermost. Letters: checked by eye at 19.2 um/px on three stripes. ws020 (strip u 1152-1210 cm, wraps w299-w303) shows letter-like vertical / V-shaped ink strokes in places; ws008 (u 461-518 cm, w336-w339, outer) and ws036 (u 2074-2131 cm, w227-w234, inner, compressed papyrus) show only blotchy ink, no legible letters. Most of the strip shows ink as scattered dark blotches: this is what the ift3-24000 ink model sees on Paris 3 at 9.6 um, not a compositing artefact (the raw ink band shows the same). NOTE: holes in the surface are FILLED in the renders (render --fill 4 --fill-grid 50000 --fill-inpaint 4 --fill-pm 1): pixels with no surface point are taken from +-4 voxels along the normal, interpolated grid holes, or INPAINTED (PatchMatch). Inpainted pixels are synthetic texture, not CT data; do not read letters in them. The ink is a network prediction (ift3-24000), not ground truth. Not uploaded: the 3D ink zarr, the fields, slab fits and per-wrap surfaces.