A styled 2D concept becomes a textured 3D asset.
The style is applied on the asset, in texture space — not painted per view and stitched. Runs entirely on local hardware, with no non-commercial dependency anywhere in the chain.
Named for both halves of the problem: the polygons, and the face they have to hold.
Weld, then allocate density
python tools/smart_decimate.py --target 150000
Twin this mesh, then project
python tools/project_twins.py --prep prep/ --out state/
Ask the record
python tools/facet_index.py q "blade band"
Four accepted assets, four subject classes
Every one ruled by the Director at his own zoom — on the GLB, or on full-size sheets. Not a metric clearing a threshold. The mix is reference / brush / dilation as a share of valid texels, and those shares are NOT comparable across subjects: a ship hides most of itself from eye level and an animal hides half. Read each against its own pre-registered reach ceiling, against which they land 86–93% — the difference between the rows is geometry, not regression.
| Subject | Class | Accepted | Reference / brush / dilation, of valid | Ruling |
|---|---|---|---|---|
| Character (W3) | humanoid | 2026-08-04 | 68.8 / 4.2 / 27.0 | E08 Amendment 35 |
| Galleon | vehicle · thin rigging | 2026-08-05 | 36.89 / 6.87 / 56.24 | E04 Ruling 29 |
| Dragon | beast · wing membranes | 2026-08-07 | 44.15 / 3.07 / 52.78 | E12 Ruling 28 |
| Longsword | prop · near-2D, grey-on-grey | 2026-08-08 | 45.25 / 2.07 / 52.68 | E14 Ruling 32 |
What makes it work
Six findings that each cost an experiment, and each generalise.
Form first, style second
Image-to-3D reconstructors read surface noise as geometry. A heavily stylized sprite fights the reconstructor; a clean sculpt-like clay with exaggerated planes comes back with better topology. The styled twin is generated alongside, and stays as the colour reference.
Twins belong to a mesh
A styled twin carries the silhouette of the mesh it was rendered from. Reuse one across meshes and coverage collapses 62% → 22.7%, because the arms and sword project into empty space. Generate twins from the mesh you are about to texture — every time.
Identity belongs to the prompt
Contradict the specification on eight named elements and the prompt wins 8 of 8 — median ΔE 46.3 against 6.2 on held controls. The mesh and control hold structure; named attributes ride the prompt. A canon element not named in the prompt arrived by accident and will leave the same way.
Ask geometry, not a threshold
Corner-median keying failed three times here — painted art has a gradient, clay is grey on grey, diffusion paints a lit backdrop. Replacing the key with the exact raycast silhouette moved reference coverage 28.4% → 39.1% of valid texels, strictly additive, with no diffusion and no GPU.
Cull from the atlas, never the mesh
49% of atlas texels are never visible from outside. Excluding those faces from the UV layout cut interpolation 68%. Excluding rather than deleting makes the failure impossible instead of detectable — deletion needs a perfect gate forever, and the obvious gate scored 1.00000 on a mesh with a hole through the torso.
Gate the failure mode, not the success mode
The recurring lesson. A gate written against what the operation looks like when it works will pass a broken artifact confidently. Ask what it looks like when it goes wrong, then check for that — and if the quantity you care about is measurable, gate on it rather than on a proxy for it.
How the repo is run
The discipline is the product as much as the pipeline is. It exists because an earlier arc ran ten sessions that each judged their own output and wrote conclusions the next session read as fact.
Spec before, report after, ruling last
Every non-trivial change runs as a numbered experiment. The session that designs an experiment does not grade its results, and the session that runs it does not decide what they mean. Thirty-one experiments are in the record, each with its predictions stated before the measurement.
Corrections in place, never deletions
A claim that turns out wrong stays, annotated with the measurement that overturned it — because the correction is more useful than a tidy page. Six inherited claims were falsified in the founding session alone, and each one is still readable beside what replaced it.
Failures stay next to the code
tools/superseded/ is not an archive. It is the mechanism that stops a falsified approach quietly becoming doctrine again — anyone can run those tools and watch them fail the same way, with the reason written down.
A negative result is a full success
Arms that halt at their own pre-registered gates are reported and closed rather than tuned toward a number. One arm cut dilation source distance 70× and changed nothing to the eye — that measurement redirected four experiments’ worth of work.
The record is queryable
A SQLite + FTS5 index over the whole trail, verified on four legs: byte-identical determinism across interpreters, counts against independent greps, zero dangling pointers, and a seeded question gate that grows with the record. It found a ruling count the prose had wrong at three sites, by counting the record itself.
Tests ride the commit
927 tests passing at two seats’ hands, with paths-gated CI on the 887 hermetic ones. A commit that changes tool code carries tests for that code in the same commit; recorded anchors are ported into the harness rather than left in reports.
What is not solved
Named, measured, located in code, and left on the front page. A page that only lists wins is not a status report.
| Defect | Measured | Where |
|---|---|---|
| The blade band carries no stage-1 reference | 0.00% per view on all eight cameras; the union rescues 55.72%. Steel on a grey backdrop sits on the key’s own threshold. | A global 0.06 cut governing a local low-contrast feature |
| Stroke seams are not levelled | A provenance boundary steps 5.5× ordinary texture variation; the region the Director named steps 9.5×. | texpass_iter.py — commit writes colour with no levelling term |
| Dilation bleeds between unrelated islands | 74.9% of 813,773 dilated texels take colour from another island, from a median 0.177 away on a figure 1.0 tall. | texpass_finalize.py — the flood predicate has no & valid |
| Reconstructions are hollow double-walled shells | Walls ~two voxels around an empty cavity, measured three independent ways with two accepted assets as controls. | A route-wide property — no volumetric predicate is valid on them |
Licence position
Every stage runs local and commercially clean. The exclusions are deliberate and each has its reason.
In the chain
SDXL OpenRAIL++
MV-Adapter open
open3d Apache-2.0
spandrel MIT
RealESRGAN 6B BSD-3
Blender, numpy, scipy, trimesh Deliberately excluded
nvdiffrast non-commercial
(enforced by a structural tripwire,
not by attestation)
Hunyuan3D-Paint licence void in EU / UK / KR
MVPaint, TEXGen no licence at all
UltraSharp, SUPIR non-commercial upscalers
StableSR