Untorn

How accurate is it?

Every number here was measured, and every test set says what it is. Simulated tears have known answers. Two real hand-torn pages have been scored so far, each against a photo of it taken before it was torn.

Pieces placed correctly, shape only
99.5%218 pieces, single pages of 8 to 12 pieces (Bench-S, simulated)
Pieces misplaced by shape
0of 938 pieces across all six simulated families
Text errors on shredded documents
0.050NED on 64 documents (ShredBench protocol, our replica); Muse Spark alone on the same photos: 0.404
This sample, recorded run
10 of 10pieces placed correctly; 17 of 17 joins right

Benchmark: simulated tears

Simulated (Bench-S)

14 real public-domain pages (typed, printed and handwritten; English and German), torn by a simulator calibrated to real tears, with SAM-like outline noise. Fixed seeds, disjoint from the cases used for tuning.

Shape only (no reading)
FamilyCasesPiecesPlaced correctlyMisplacedJoin precisionPerfect pages
Single page, 8–12 pieces2421899.5%0100%23 of 24
Single page, 6–7 pieces640100%0100%6 of 6
Single page, 26–38 pieces827199.3%0100%6 of 8
Mixed bag, 2–3 pages816098.1%0100%17 of 20
35% straight cuts65787.7%0100%4 of 6
Stack, 3 pages × 6–1081920%: every twin left for reading0–0 of 24
Placed correctly: within 3 px and 1° of the truth, up to one rigid move per page. Measured on the deployed solver (scripts/eval/solver.ts), 30 Oct 2026.
Shape alone, and shape with reading
MethodPlaced correctlyMisplaced
Shape only, single pages99.5%0
Shape + a reader right 90% of the time, single pages99.5%0
Shape + a reader right 90% of the time, mixed bags98.1%0
Reading onlynot measured–
On ordinary tears the shape already decides; reading is what decides stacks (below). The simulated reader errs at a set rate on every request.

Stack tears: identical outlines

Simulated

Pages torn together share every outline, so shape is a tie. Only reading across the tear can tell the twins apart.

3 pages × 6–10 pieces, 8 cases, 192 pieces
ReaderPlaced correctlyMisplacedPerfect pages
None (shape only)0%: every twin left for reading00 of 24
Simulated reader, right 100% of the time99.5%023 of 24
Simulated reader, right 90% of the time96.4%019 of 24
Simulated reader, right 82% of the time89.1%2 (1.0%)15 of 24
Shape alone flags 85.4% of the twin seams as ties for reading. The live recording of three real letters torn as one stack: 22 of 22 readings picked the right piece. Pixel appearance alone ranks the true twin first in 48% of twin groups (chance is about 33%).

Shredded documents: Untorn against one model alone

ShredBench protocol

ShredBench (ACL Findings 2026) scores a model that reads a photo of scattered fragments and writes out the document, by normalised edit distance (NED, lower is better). We gave Muse Spark the same photos with the benchmark's own prompt, and ran Untorn (the same Muse Spark with SAM 3.1 and the solver) on them.

Text errors (NED) of the rebuilt document
SetDocumentsUntornShape only, no readsMuse Spark alone
ShredBench's own images with published answers (English news, 8 pieces)30.0020.0630.528
Replica, 8 pieces (news, Chinese news, code, tables)640.0500.0740.404
Replica, 12 pieces320.050–0.436
Replica, 16 pieces320.077–0.469
Only 3 of ShredBench's published renders come with ground truth, so the broad test is our own re-implementation of its protocol (fragments composited in 2D, no 3D render), labelled as a replica. SAM 3.1 found all 2,592 replica pieces. The paper's frontier results (Gemini 3 Pro 0.33–0.41) are on its full set, not these images. Repeated reads of the 3 official images vary between 0.002 and 0.006 on average. Method, caveats and failure cases: docs/SHREDBENCH.md.

The models, measured

Simulated tears, real model calls
SAM 3.1 outlines and Muse Spark reads
TestResultLatency
SAM 3.1: pieces found (9 photos, 104 pieces)100%, no extras1.9–7.1 s per photo
SAM 3.1: median outline error, 12 pieces0.46 pxone call
SAM 3.1: ShredBench renders (5 photos)40 of 40 pieces found5.1–7.1 s
Muse Spark: is this seam a join? (24 seams, half adversarial)23 of 24median 9.3 s
Muse Spark: which twin continues? (12 stack sheets)12 of 12median 6.9 s
Source: docs/MODELS.md.

The archive record

Recorded transcripts, real model calls

After a page is rebuilt, Muse Wonder catalogues it from its transcript: kind, date, place, sender, recipient, and the names it mentions. Every name and date must quote the transcript; the app checks each quote and leaves out any that isn't there. Scored against an answer key read off 7 sample pages: five letters, a page from the middle of a letter, and a printed page with no sender or date.

Archive records against the answer key
Model, effortField checks rightQuotes not on the pageNames foundMedian time
Muse Wonder, minimal (in the app), 4 rounds108 of 1120102 of 1046–7 s
Muse Spark 1.3, minimal, 3 rounds83 of 841, left out by the check75 of 7810–11 s
Field checks: kind, date, place, sender, recipient. Wonder's repeated miss calls the mid-letter page “other”. Source: docs/MODELS.md and scripts/eval/catalog.ts.

Meta’s open weights

Real model calls: simulated seams, sample pages, real tears

Muse Spark Open is Meta’s open-weights Muse Spark, served here by Baseten. It gets the same questions as Muse Spark, with the same prompts. The site asks Muse Spark first and Muse Spark Open when a read is slow; the switch “Read on open weights only” sends every read, the transcript and the record to it. Both run while Baseten takes our key: while it turns the key away, the switch is hidden and Muse Spark reads alone, and each read names the model that gave it.

The same tests, one run each (3 Nov 2026)
TestMuse Spark OpenMuse Spark 1.3
Seam reads, 24 simulated seams (half true)23 of 2422 of 24
Stacks, 12 choices between identical outlines11 of 1212 of 12
Transcripts of 5 rebuilt pages, mean character errors2.4%2.6%
Median time per call10.4 s15.5 s
On the real 10-piece tear’s seams, over 10 runs: Muse Spark Open never called a wrong neighbour the same place (0 of 63 reads), and turned down true ones somewhat more often than Muse Spark. Source: docs/MODELS.md, scripts/eval/open-weights.ts and scripts/eval/real-reads.ts.
The whole pipeline, run with each choice of readers on the same photos (our machine, the site’s code)
Readers6-piece real tear: whole page10-piece real tear (pieces touching): placed correctly
Muse Spark alone (the site while Baseten refuses our key)2 of 3 runs, 60–65 s6, 7, 7, 9 of 10; 2 misplaced in 4 runs
Muse Spark, open weights for slow reads (the site’s default)3 of 3 runs, 53–59 s5, 8, 5, 6, 8 of 10; 6 misplaced in 5 runs
Open weights first, Muse Spark for slow reads1 of 3 runs, 45–53 s5, 6, 9 of 10; 2 misplaced in 3 runs
Open weights only (the switch)1 of 1 run, 63 snot run
Each cell is 1 to 5 runs, so a difference of one run is within the noise. On the 10-piece photo every choice varies; most misplaced pieces are true neighbours set a few pixels or degrees off on curled paper, confirmed by both models in proportion to the reads each gave. Every read on the open weights also rebuilt the 1927 letter 10 of 10 and the German letter 9 of 10, none misplaced. Two runs that lost their reads to our machine’s connection are left out.

The health-check letter, recorded

Recorded run of the live pipeline

A simulated tear of a real 1903 letter, 10 pieces, run once through the whole live pipeline and scored against the tear's answer key. The health check reruns it on the live site every 12 hours.

The recorded run, scored against the answer key
Pieces placed correctlyJoins rightJoins confirmed by readingPhoto to pageModel cost
10 of 1017 of 173 of 1743.7 s$0.17
10 pieces on one page. The other joins rest on the edge: little text crosses those tears. Live status: /api/health.

Real tears

Measured: 3 pages

Hand-torn paper photographed on a table with a phone. Pages 1 and 2 are scored against a photo of the page taken before tearing: each piece's printing is registered on the intact page, which gives every piece its true place. Page 3 has no such photo, so it is judged by whether the whole page comes back and reads straight across every tear.

Page 3: a printed report page, torn by hand into 6 pieces, laid apart and photographed from above (live site, 1 Nov 2026)
RunHow it arrivedPieces on one pagePhoto to page
1upload6 of 656.1 s
2upload6 of 651.8 s
3upload6 of 647.9 s
4upload (fresh browser)6 of 651.3 s
5sent from a phone (QR code)6 of 660.8 s
Every page read line by line against the photo: each line continues straight across every tear. The two halves of this page meet along a tear that runs in the gap between two text lines, so no letter is cut there and a reading has nothing to go on; the page's own border joins them (its straight edges line up only when the halves are placed right). Earlier versions on this photo: two groups (4 + 2) or one piece set aside in 3 of 4 runs. The page's text is not shown here.
Page 1: a printed report page, torn by hand into 10 pieces and photographed with several pieces touching (current version, 1 Nov 2026, the live site's code run on our machine)
RunPlaced correctlyMisplacedSet asidePage uprightPhoto to page
18 of 1002yes52.2 s
27 of 101 (a true neighbour, just past the tolerance)2yes47.9 s
36 of 101 (the same)3yes55.3 s
Pieces that aren't placed are set aside, never forced. A misplaced piece here is its true neighbour set just past the tolerance (1.5% of the page width, 39 px; 2°). The pieces left out lie against the middle piece in this photo: where pieces touch, their torn edges can't be seen whole, and the run says so. Results vary between runs: SAM's outlines and Muse's reads differ a little each time. Earlier versions, on the live site: 6, 9 and 6 of 10 (31 Oct); 8, 8 and 8; 9, 7, 9 and 9 (63–85 s a run); and, before the real-paper work, 0 of 10. The page's text is not shown here.
Page 2: another page of the same report, torn into 10 small pieces laid apart, photographed 11.6° off straight down (current version, 1 Nov 2026, the live site's code run on our machine)
RunPlaced correctlyMisplacedSet asidePhoto to page
15 of 102353.9 s
24 of 101549.1 s
32 of 103567.4 s
The hardest page we have: small pieces that curl. The phone recorded its tilt in the photo, and every run straightens it first (as taken, the far pieces' text lines were 63 px apart and the near ones' 90 px). Every run now keeps the placed pieces on one page; on 31 Oct (3, 3 and 4 of 10) the page split into fragments. The misplacements are true neighbours set a little off: a curled piece bends its own edge and lines, so on a short seam it can land turned a few degrees. The blank corner piece can only be placed by shape. The page's text is not shown here.

Method

How a page comes back
  1. SAM 3.1 outlines every piece in one call; each outline is snapped to the paper's edge at full resolution.
  2. Torn edges are matched by shape: candidate joins where two edges are mirror images.
  3. Muse Spark reads across each plausible seam. Where shapes tie (stack tears), it picks which twin continues the words.
  4. A join needs two clues that agree: the shape fits and the reading agrees, or reading breaks a tie. Where no letters cross a tear, the second clue is the page itself: text lines that run on in step, or, between two halves of a page, its straight border lining up. Nothing is forced; pieces that fit nowhere stay unplaced.
  5. Muse transcribes the rebuilt page. Gaps stay gaps: nothing is written that isn't on the paper.

Where it fails

Known weaknesses
  • Straight cuts give little shape to match: 87.7% placed on pages with 35% straight cuts.
  • Blank pieces can only be placed by shape.
  • Stacks need many reads: a median of about 95 choice sheets for a 3-page stack.
  • Real hand-torn paper is harder than our simulations. A page torn into 6 pieces came back whole in 5 of 5 live runs on the site (12 of 15 counting our own runs of it, every reader setup); pages torn into 10 small pieces, with curl and pieces touching, put 6 to 8 and 2 to 5 of 10 in the right place. The rest are set aside, and some runs set a piece just past the tolerance or turned on a short seam.
  • A curled piece bends its own edges and text lines. On a short seam the reading can't see a turn of a few degrees, so the piece can land turned.
  • Pieces that touch in the photo lose the edges between them; so do photos shrunk by a messaging app (the same page at 1920 px: 5 of 10).
  • A live run on a real photo takes 45–65 s; most of it is Muse reading across the tears.