Paris 4 Ink Map Starting

PHerc. Paris 4 · Vesuvius Challenge open data

The whole scroll in one sheet

The organizers' ink map of PHerc. Paris 4, rendered on their spiral fit of the full scroll: 10.9 m of papyrus, streamed at full resolution. Zoom in, follow a winding, see where the sheet sits in the CT, and download or stream any part of it.

Sheet
10.9 m
Pixels
142,283 × 2,390
Resolution
0.0768 mm
Windings
10 to 135
Scan Height
38.4 to 170.4 mm
Reading the map from the open data

Whole Scroll

Left: outer end, winding 135. Right: inner end, winding 10. Click or drag to move the view.
The whole ink map, wrapped into rows

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.

The turn just outside
Outer Turn
This place
This Place
The turn just inside
Inner Turn

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.

This View

The region in the ink map now.

Whole Map

The full sheet as one tiled, deflated TIFF, cut by this Space.

Original

The organizers' published file, from the Vesuvius Challenge open data.

BigTIFF, 236 MB

uint8, deflate, 64 px tiles. Every source file, with its size and SHA-256, is listed below.

Source Files

FileSizeSHA-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/
Open in Neuroglancer

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.dzi

Tiles: /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)
  1. Unzip it anywhere.
  2. 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/infoSize, scale, orientation, windings, stream URLs, sources with SHA-256
/api/pointOne map pixel: winding, distance from each end, scan height, voxel
/api/winding/{n}One winding's pixel range
/api/cropA region: PNG up to 60 Mpx, TIFF of any size
/api/neighborsThe turns just outside and inside a place: where, how far, how alike
/api/vc3d.zipA VC3D project: the CT streamed from the open data, the fit as a segment
/api/mesh3d.jsonThe fit's mesh as a point cloud for 3D: layout of /api/mesh3d.bin
/api/sectionWhere the sheet crosses one scan height
/api/ct.pngThe CT slice at one height, level 4, cropped to the scroll
/api/overview.pngThe whole map wrapped into rows
/apiEvery 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/mcp

Claude Code

claude mcp add --transport http paris4-ink-map https://sharpmeow-paris4-ink-map.hf.space/mcp

Other 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

Vesuvius Challenge open data, CC BY-NC 4.0; the map and fit are the organizers' · Streamable HTTP, no session, JSON replies. Seven tools: get_info, find_winding, point_info, crop_image (returns a PNG), cross_section (optionally with the CT slice), neighbor_turns (optionally with the three windows) and view_link.

https://sharpmeow-paris4-ink-map.hf.space/mcp
Links and embedtested 2026-10-24
MCP endpoint (Streamable HTTP, POST): https://sharpmeow-paris4-ink-map.hf.space/mcp

The Page's API

Vesuvius Challenge open data, CC BY-NC 4.0; the map and fit are the organizers' · Map pixels: x 0 to 142,282 from the outer end, y 0 to 2,389 from the top, 0.0768 mm each.

https://sharpmeow-paris4-ink-map.hf.space/api/info
Links 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=1600

Ink Map, Full Resolution

Vesuvius Challenge open data, CC BY-NC 4.0 · BigTIFF, 142,283 by 2,390 pixels, uint8, deflate, 64 px tiles, no overviews, 236 MB. tifffile reads it.

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
Pythontested 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.tif

The Whole Segment Folder: Ink, Mesh, Spiral Fit

Vesuvius Challenge open data, CC BY-NC 4.0 · browse

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 files

The Fit's Mesh (tifxyz, 9.6 um Voxels of Scan 20260411134726)

Vesuvius Challenge open data, CC BY-NC 4.0 · 956 by 56,913 nodes at 0.192 mm. This grid is already the fit rotated 180 degrees, as the map is (grid_transform in meta.json): map x = 2.5 times the column, map y = 2.5 times the row. Multiply the coordinates by 4 for 2.4 um voxels.

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 surface

CT, 2.4 um 78 keV Scan 20260411134726

Vesuvius Challenge open data, CC BY-NC 4.0 · Uncompressed, 128 cubed chunks; level 4 is 38.4 um, the level the scroll map on this page reads.

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 touches
villa'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 neuroglancer
https://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%7D
curltested 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, codec
Machine-readable: connect.json and CONNECT.md. Checked 2026-10-29. "Tested" means the snippet ran against this public data on that date. Scan data keeps its own license (the Vesuvius Challenge open data is CC BY-NC 4.0).

About 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.

Paris 4 Ink Map

Wheel or pinch to zoom, drag to pan. Click the whole-scroll strip to jump; click the scroll map's spiral to go to that papyrus. Click the ink map to pin the readout; click again to unpin.