In-depth: Winding Constraints
Last updated: July 12, 2026
Winding constraints are sparse geometric evidence: points, lines, fibers, or surface patches whose relationship to the scroll's windings is known. The spiral fit combines these constraints with other evidence and deforms an ideal spiral into a single, globally coherent model of the damaged scroll.


Why we are focusing on winding constraintsβ
Given our recent work on PHerc. Paris 4, and the flexibility/sparsity afforded by the spiral fit, we believe that the fastest way to unroll scrolls at scale is to develop methods for creating winding constraints that are precise and fast enough to use widely
We think that the spiral fit is flexible enough to unroll most scrolls given sufficient winding constraints. We don't know the exact minimum amount of winding evidence necessary for a given scroll ahead of time, but we know it is certainly much less than full wrap segmentation.
It's important to emphasize here how much this changes the goal of anyone who wishes to unroll scrolls at scale. Rather than focusing on methods which produce large multi-winding segmentations (often by combining patches, using a "bottom up" style approach), and eventually must handle a more global idea of a fit if they wish to address inevitable surface prediction mistakes/sheet skips/etc -- often an extremely difficult task when starting from these bottom-up methods -- we now can focus on methods which prioritize local, accurate constraints, leaving the more global understanding to the spiral fit.
There is no required annotation tool or generation method. Winding constraints can be drawn manually, inferred from fibers or meshes, produced by classical computer vision, proposed by a learned model, transferred from another representation, or generated by a new method we have not yet tried.
An ideal winding constraint generator should be:
- Accurate (or have some way to measure its confidence/accuracy)
- Fast enough to process entire scroll volumes in a reasonable amount of time
- Easy to verify
- General enough to integrate into "global fitters", like the spiral fit
Types of winding constraints currently used by the spiral fitβ
The spiral fit currently consumes annotations that encode three kinds of winding constraint. The constraints are best classified by the information they provide, not by the tool that made them or the feature they follow.
- Same-winding constraints say that a collection of points lies on the same wrap of the papyrus sheet. A traced fiber, a line following the surface, or a verified surface patch can all provide this constraint.
- Relative-winding constraints say how many complete wraps separate observationsβfor example, that one point lies exactly one winding outward from another. A multi-winding line can provide several such relationships at once.
- Absolute-winding constraints assign an observation to a numbered winding. These anchor the solution's global numbering when that number is known.
These constraints do not need to form a dense surface or cover the entire scroll. They tell the optimizer how disconnected pieces of local evidence relate to the scroll's global rolled structure.
Some examples of winding constraints, and some promising areas to work onβ
Things we have usedβ
Surface patchesβ
A surface patch traces a locally connected area of a single winding. It can be created manually or by a segmentation method, then used as same-winding evidence by the spiral fit. An interesting avenue would be identifying methods to automatically crop "good" regions of the spiral fit, and using these as surface patch inputs to a subsequent run.
The patch in this image is cropped from a large trace which had sheet switches, but still contained many large areas which were high quality.

Same-winding point line collectionsβ
These point collections follow individual sheet surfaces. All points in one collection assert that they belong to the same winding. These can be spread out a fair distance (though not too far) across the surface and do not need to follow any particular scroll feature.
Relative-winding point collectionsβ
Relative-winding annotations cross the layers rather than following one sheet. The numbered points record how many complete windings separate each observation from the reference point.
Absolute winding numbersβ
When a winding's global identity is known, its points can be assigned an absolute winding number. These annotations anchor the numbering of the whole fitted solution.

Fiber and line annotationsβ
A visible papyrus fiber can provide a natural path along one winding. Fiber annotations range from a carefully traced line with many control points to a small number of high-confidence observations along the same fiber.

Things we have not triedβ
While we have used a few different types of winding constraints, there are many more things left to try. Here are some ideas we have thought about but have not yet had the time to implement:
Drawn pathsβ
Long paths drawn by hand or automatically across a flattened surface or within the volume can be made very quickly and could provide better connectivity than disconnected fibers. Should be easy to do manually very quickly, and likely learnable or doable with other classical computer vision methods. Points on the 2d flattened surface can be trivially mapped back to 3d.

Ink as same-winding evidenceβ
Easily identifiable correct letters, rows, or columns are a natural source of same-winding constraints (and are likely the most easily verified).
Intercolumnar gapsβ
The blank vertical spaces between columns of text can form long, recognizable paths across the papyrus surface. Like ink, they could provide same-winding evidence that is easy to identify and verify.

Kolleisisβ
Kolleiseis -- the joins where papyrus sheets were pasted together -- could be used as relatively large, full height same-winding constraints. They stand out well in the CT scan, and should be a good candidate for a deep learning model to excel at.
Start hereβ
- Create winding annotations in VC3D
- Understand and run the spiral fit
- Browse the current
spiral-inputdataset - Read the dataset layout and annotation files
- Inspect the spiral-fitting code
Join the Discord












