Skip to content
FA facet
Four accepted assets · four subject classes · zero credits

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.

SubjectClassAcceptedReference / brush / dilation, of validRuling
Character (W3)humanoid2026-08-0468.8 / 4.2 / 27.0E08 Amendment 35
Galleonvehicle · thin rigging2026-08-0536.89 / 6.87 / 56.24E04 Ruling 29
Dragonbeast · wing membranes2026-08-0744.15 / 3.07 / 52.78E12 Ruling 28
Longswordprop · near-2D, grey-on-grey2026-08-0845.25 / 2.07 / 52.68E14 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.

DefectMeasuredWhere
The blade band carries no stage-1 reference0.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 levelledA 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 islands74.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 shellsWalls ~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