Whole Scroll
Left: outer end, winding 135. Right: inner end, winding 10. Click or drag to move the view.Ink Map
3D Scroll
The organizers' spiral fit as it sits in the scan, colored by this ink map. Drag Unroll to open the roll into the flat sheet, outer end first; drag to turn it, wheel to zoom, click any point to go there on the ink map. The ring follows your pointer on the map.
The 3D view loads when you scroll here.
Neighboring Turns
A rolled sheet lies against itself. For the pinned place, this finds the papyrus just outside and just inside it at the same scan height and sets the three side by side, with how alike their ink is. Neighboring turns are always somewhat alike; where a neighbor is far more alike than it is elsewhere along the same two turns, the ink here may come from that turn, or from where the fit meets it, rather than from this one.
Download
Cut any region at full or reduced resolution, take the whole map, or go straight to the organizers' originals. Nothing is copied here: the Space reads the open data.
Whole Map
The full sheet as one tiled, deflated TIFF, cut by this Space.
- Full Resolution142,283 × 2,390
- Half71,141 × 1,195
- Quarter35,570 × 597
- Preview PNG3 rows, 4,000 px wide
Original
The organizers' published file, from the Vesuvius Challenge open data.
BigTIFF, 236 MBuint8, deflate, 64 px tiles. Every source file, with its size and SHA-256, is listed below.
Source Files
| File | Size | SHA-256 |
|---|
Stream
Read the map from your own code or viewer, a tile at a time, without downloading it. Open to every origin (CORS), no account.
OME-Zarr
OME-NGFF 0.4 on zarr v2: 9 levels, 512 px uint8 chunks, zlib. Works with zarr, ome-zarr-py, napari and Neuroglancer.
https://sharpmeow-paris4-ink-map.hf.space/zarr/Python
import fsspec, zarr
url = "https://sharpmeow-paris4-ink-map.hf.space/zarr/"
g = zarr.open_consolidated(fsspec.get_mapper(url))
full = g["0"] # 2,390 x 142,283, uint8
strip = full[:, 70000:72000]
Needs zarr 2, fsspec and aiohttp. Level k is 2k times coarser.
Deep Zoom
The tiles this page uses: 256 px JPEG, for OpenSeadragon and other Deep Zoom viewers.
https://sharpmeow-paris4-ink-map.hf.space/tiles/ink.dziTiles: /tiles/ink_files/{level}/{col}_{row}.jpg, with ?cmap= and &gamma=.
Open in VC3D
A ready project for villa's VC3D: the 2.4 µm CT streams from the open data, and the organizers' spiral fit comes as a segment in that scan's voxels, so the ink map's sheet sits in the scan.
VC3D Project (zip, 117 MB)- Unzip it anywhere.
- In VC3D: File, Open Project, then pick paris4-spiral-output-generation-19.volpkg.json.
Or by hand: File, Attach Remote Zarr with the CT URL below, then File, Attach Segments with the zip's segments folder. Built from VC3D's project format in villa's source; not yet opened in a VC3D build here.
https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/volumes/20260411134726-2.400um-0.2m-78keV-masked.zarr/API & MCP
An HTTP API for scripts and an MCP server for agents, both public. Every endpoint is described in the interactive API docs.
HTTP API
| /api/info | Size, scale, orientation, windings, stream URLs, sources with SHA-256 |
| /api/point | One map pixel: winding, distance from each end, scan height, voxel |
| /api/winding/{n} | One winding's pixel range |
| /api/crop | A region: PNG up to 60 Mpx, TIFF of any size |
| /api/neighbors | The turns just outside and inside a place: where, how far, how alike |
| /api/vc3d.zip | A VC3D project: the CT streamed from the open data, the fit as a segment |
| /api/mesh3d.json | The fit's mesh as a point cloud for 3D: layout of /api/mesh3d.bin |
| /api/section | Where the sheet crosses one scan height |
| /api/ct.png | The CT slice at one height, level 4, cropped to the scroll |
| /api/overview.png | The whole map wrapped into rows |
| /api | Every endpoint with an example, as JSON |
MCP Server
Streamable HTTP, JSON replies, no session. Seven tools: get_info, find_winding, point_info, crop_image (returns a PNG), cross_section, neighbor_turns and view_link.
https://sharpmeow-paris4-ink-map.hf.space/mcpClaude Code
claude mcp add --transport http paris4-ink-map https://sharpmeow-paris4-ink-map.hf.space/mcpOther clients (JSON config)
{"mcpServers": {"paris4-ink-map": {
"type": "http",
"url": "https://sharpmeow-paris4-ink-map.hf.space/mcp"}}}
Connect your tool
The map on this page is the organizers' published ink map of PHerc. Paris 4; this Space streams it and reads the published mesh and CT, so every file below is linked at the Vesuvius Challenge open data, never copied here. The page's own API and its MCP server turn a map pixel into a winding and scan coordinates, cut crops, draw the spiral at one height, compare a place with the turns beside it and build a VC3D project. The Space is public and needs no account.
MCP Server for Agents
https://sharpmeow-paris4-ink-map.hf.space/mcpLinks and embedtested 2026-10-24
MCP endpoint (Streamable HTTP, POST): https://sharpmeow-paris4-ink-map.hf.space/mcpThe Page's API
https://sharpmeow-paris4-ink-map.hf.space/api/infoLinks and embedtested 2026-10-24
Size, scale, orientation, windings and every source with its SHA-256 (JSON): https://sharpmeow-paris4-ink-map.hf.space/api/info
One map pixel: winding, distance from each end, scan height, voxel (JSON): https://sharpmeow-paris4-ink-map.hf.space/api/point?x=71000&y=1200
One winding's pixel range (JSON): https://sharpmeow-paris4-ink-map.hf.space/api/winding/60
A region as a raw TIFF of any size (scale 1, 2, 4, 8 or 16; fmt png adds colors, up to 60 Mpx): https://sharpmeow-paris4-ink-map.hf.space/api/crop?x0=70000&y0=600&x1=72000&y1=1800&scale=1&fmt=tif
Where the sheet crosses one scan height (JSON): https://sharpmeow-paris4-ink-map.hf.space/api/section?z_mm=105&step=2
The turns just outside and inside one place: where, how far, how alike, against a baseline (JSON): https://sharpmeow-paris4-ink-map.hf.space/api/neighbors?x=120000&y=1800
A VC3D project: the 2.4 um CT streamed from the open data, the spiral fit as a tifxyz segment (zip): https://sharpmeow-paris4-ink-map.hf.space/api/vc3d.zip
The fit's mesh as a point cloud for 3D views: layout and counts (JSON); binary at /api/mesh3d.bin: https://sharpmeow-paris4-ink-map.hf.space/api/mesh3d.json?stride=8
The map as a streamable OME-Zarr 0.4 (zarr v2, 9 levels, 512 px zlib chunks): https://sharpmeow-paris4-ink-map.hf.space/zarr/.zattrs
Every endpoint with an example (JSON); interactive docs at /docs: https://sharpmeow-paris4-ink-map.hf.space/api
Deep-zoom descriptor of the map (DZI, 256 px JPEG tiles): https://sharpmeow-paris4-ink-map.hf.space/tiles/ink.dzi
The whole map wrapped into rows (PNG): https://sharpmeow-paris4-ink-map.hf.space/api/overview.png?rows=4&width=1600Ink Map, Full Resolution
https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/segments/20260926044226-spiral-output-generation-19/ink-detection/PHercParis4-20260926044226-2.4um-0.22m-78keV-volume-20260411134726-ink3d-20260926084000-student-v12A-25000-c7766be9-l128-accmax4-max-52-76-scale0.0625-nearest.tifPythontested 2026-10-24
import urllib.request
raw = urllib.request.urlopen("https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/segments/20260926044226-spiral-output-generation-19/ink-detection/PHercParis4-20260926044226-2.4um-0.22m-78keV-volume-20260411134726-ink3d-20260926084000-student-v12A-25000-c7766be9-l128-accmax4-max-52-76-scale0.0625-nearest.tif").read()curltested 2026-10-24
curl -L -O https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/segments/20260926044226-spiral-output-generation-19/ink-detection/PHercParis4-20260926044226-2.4um-0.22m-78keV-volume-20260411134726-ink3d-20260926084000-student-v12A-25000-c7766be9-l128-accmax4-max-52-76-scale0.0625-nearest.tifThe Whole Segment Folder: Ink, Mesh, Spiral Fit
s3://vesuvius-challenge-open-data/PHercParis4/segments/20260926044226-spiral-output-generation-19/Python (list the folder)tested 2026-10-24
import re, urllib.request
B = "https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com"
xml = urllib.request.urlopen(B + "/?list-type=2&delimiter=/&prefix=PHercParis4/segments/20260926044226-spiral-output-generation-19/").read().decode()
print(re.findall(r"<Prefix>([^<]+)</Prefix>", xml)) # subfolders; <Key> gives filesThe Fit's Mesh (tifxyz, 9.6 um Voxels of Scan 20260411134726)
https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/segments/20260926044226-spiral-output-generation-19/mesh/intermediate/tifxyz_normalized/Python (numpy, tifffile)tested 2026-10-24
# pip install numpy tifffile
import io, json, urllib.request
import numpy as np, tifffile
T = "https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/segments/20260926044226-spiral-output-generation-19/mesh/intermediate/tifxyz_normalized"
meta = json.load(urllib.request.urlopen(T + "/meta.json")) # scale, bbox, format
get = lambda c: tifffile.imread(io.BytesIO(urllib.request.urlopen(f"{T}/{c}.tif").read()))
xyz = np.stack([get(c) for c in "xyz"], -1) # xyz[i, j] = (x, y, z) in scan voxels; -1 = no surfaceCT, 2.4 um 78 keV Scan 20260411134726
https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/volumes/20260411134726-2.400um-0.2m-78keV-masked.zarr/Python (zarr)tested 2026-10-24
# pip install "zarr>=3" fsspec aiohttp
import zarr
root = zarr.open_group("https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/volumes/20260411134726-2.400um-0.2m-78keV-masked.zarr/", mode="r") # OME-Zarr, zarr v2
a = root["4"] # level 0 is full resolution; level L is 2**L times coarser
print(a.shape, a.dtype, a.chunks)
block = a[2688:2752, 896:960, 896:960] # (z, y, x); reads only the chunks it touchesvilla's vesuvius packagetested 2026-10-24
# pip install "vesuvius[volume-only]"
from vesuvius import Volume
v = Volume(type="zarr", path="https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/volumes/20260411134726-2.400um-0.2m-78keV-masked.zarr/4") # one pyramid level
block = v[2688:2752, 896:960, 896:960]VC3Dfrom villa's source
In VC3D (villa's volume-cartographer), open or create a project, then
File > Attach Remote Zarr... and paste:
https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/volumes/20260411134726-2.400um-0.2m-78keV-masked.zarr/
It accepts http, https and s3 OME-Zarr roots.neuroglancertested 2026-10-24
Open in neuroglancerhttps://neuroglancer-demo.appspot.com/#!%7B%22layers%22%3A%5B%7B%22type%22%3A%22image%22%2C%22source%22%3A%22zarr%3A%2F%2Fhttps%3A%2F%2Fvesuvius-challenge-open-data.s3.us-east-1.amazonaws.com%2FPHercParis4%2Fvolumes%2F20260411134726-2.400um-0.2m-78keV-masked.zarr%2F%22%2C%22name%22%3A%22CT%2C%202.4%20um%2078%20keV%20Scan%2020260411134726%22%7D%5D%2C%22layout%22%3A%224panel%22%7Dcurltested 2026-10-24
curl -s https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/volumes/20260411134726-2.400um-0.2m-78keV-masked.zarr/.zattrs # OME multiscales metadata
curl -s https://vesuvius-challenge-open-data.s3.us-east-1.amazonaws.com/PHercParis4/volumes/20260411134726-2.400um-0.2m-78keV-masked.zarr/4/.zarray # one level: shape, chunks, dtype, codecAbout This Map
This is the Vesuvius Challenge organizers' ink map of the whole of PHerc. Paris 4, rendered on their spiral fit of the full scroll (run in VC3D's spiral workspace for 41,295 steps, notes in the segment's FIT_NOTES.md; windings 10 to 135; the map is 10.9 m long). The ink map was uploaded to the open-data bucket on 15 October 2026.
The surface is a fit: where a fit strays from the sheet, a map can repeat papyrus or miss it. The fit covers scan heights 38.4 to 170.4 mm only, so papyrus above or below that, including the top line of the columns, is not in this map. An ink map is model output, not a reading.
Map pixels are 0.0768 mm. The map is drawn as published: rotated 180 degrees from the fit, so the outer end is on the left and high scan z is up. Windings come from the published windings.tif, a conservative reconstruction: gray marks nodes inside two winding boxes at once.
Keys
- ? Keys and tips
- W Windings on or off
- G Millimeter grid
- M Measure
- I Invert
- [ ] Gamma
- B Bookmark this view
- H Whole map
- L Scroll map follows pointer
- N Neighboring turns
- S Save view as PNG
- F Fullscreen
- + - Arrows Zoom, pan
Credits
Ink map, spiral fit, mesh and CT: the Vesuvius Challenge organizers, from the Vesuvius Challenge open data under CC BY-NC 4.0. Page code Apache 2.0.