ScrollPrize/villa is the Vesuvius Challenge monorepo (MIT). It is what the organizers use and what the Grand Prize requires integration with. Do not build a competing one here. Components as of commit e0bbb8b (2026-10-06):
| Component | Role |
|---|---|
vesuvius/ |
Python library: data access (remote Zarr), training, vesuvius.predict, rendering, ink_detection subpackage |
volume-cartographer/ (VC3D) |
C++ app and CLI tools: viewing, GrowPatch tracing, vc_render_tifxyz, vc_grow_seg_from_seed |
lasagna/ |
PyTorch mesh growing and refinement, multi-sheet, fiber tracing |
spiral-fitting/ |
Fits one global spiral to a whole scroll |
ink-detection/ |
Ink models built on the 2023 Grand Prize model |
dinovol/ |
Self-supervised 3D DINO for CT volumes |
foundation/ |
Dataset and cloud infrastructure tools |
scrollprize.org/ |
The website, including the prize page and eligibility data |
Models: huggingface.co/scrollprize. Training logs: W&B.
Small, standard-library helpers for the parts villa does not cover:
kit |
Gap it fills |
|---|---|
prizes |
One dated, tested place for amounts, deadlines and eligible volumes, with S3 names resolved |
doctor |
Tells a newcomer what is missing before a 25 GB download fails |
plan |
Copies the official commands for a scroll, control first, and prints the 8.64 µm resampling caveat |
run ledger |
Preregistered readout rule with a hash, costs, provenance hashes, attached checks, status history, and a gate against early disclosure |
verify |
CPU vs MPS (or any two runs) map agreement, valid only when a control map is caught |
rowscore |
Text-row periodicity triage score for ink maps (port of Bullo27's), forward vs reverse |
Moved here from the README on 25 October 2026, when the README became a short index.
| Does | Does not |
|---|---|
Keep a dated, tested snapshot of open prizes and eligible volumes (kit/data/) |
Replace the live prize page |
| Print the official control and First Letters commands per eligible scroll, with resolved S3 paths | Run VC3D, render surfaces, or run ink models itself |
| Check a machine against thresholds from published runs (12 GB GPU, 25 GB disk) | Guarantee a run fits; streaming caches grow by gigabytes |
| Record preregistered readout rules, costs and status transitions locally | Decide whether an image shows letters |
| Block publishing a candidate before the prize is announced | Submit anything to the Vesuvius Challenge for you |
| Summarize the pipeline, the state of play, and costs, with sources | Claim a reading, a title, or letters in any scroll |
| Point to villa, community tools, and published nulls | Fork or vendor villa |
plan prints commands; it never runs them. They are copied from the official ink detection tutorial, with each eligible volume's real S3 path resolved from the public bucket. The run ledger writes experiments/<slug>/run.json, which is gitignored. It hashes your readout rule when the run is created, so a rule edited after you looked is caught by check. It refuses to mark a submitted candidate published until the prize has been announced: the prize terms forbid going public first.
Add to kit/ only what is specific to running and recording experiments. Anything that would help other participants (a QA check, a renderer fix, a better tracer) belongs upstream as a villa pull request, where it can win a Progress Prize and actually get used. Keep a link to the PR here.
Candidates, roughly in order of value:
- Done:
kit run record(command lines and SHA-256 of checkpoints or outputs) andkit verify(map agreement with a control). - Done:
kit rowscore, Bullo27's row-periodicity triage score, forward against reverse and averaged over checkpoints. Still open: candidate components above a control-derived threshold (millerandmuller's method). - A thin wrapper over
vesuvius-catalogto refresh the volume table instead of the one-off bucket listing. - A Modal or RunPod launcher that enforces a cost cap.