Topoheal
Inspection and non-destructive repair for 3D geometry
Headless · stateless · CPU-only · no upload

Broken geometry should be rejected at ingest, not discovered in production.

Topoheal inspects .glb .gltf .obj .ply .stl for structural defects, non-destructively repairs what it can, and issues a machine-readable certificate whose digest your auditor can recompute. It runs on your machine or inside your network. Nothing is uploaded.

Topoheal · inspected
PASS
certificate digest
65d3c6ed…
§ 01

What a screenshot cannot see

A non-manifold edge renders identically to a manifold one. The defect is invisible to a camera until an operation touches it: a boolean that fails, a slicer that refuses, a physics body that leaks, a decimation pass that shatters. Visual checks were never designed to catch it, and a hand-rolled adjacency script reports edges that do not exist, because real assets are seam-split.

FigureMeasurementScope
128.6 ms Median inspection time per asset. p90 1,294 ms; max 32,062 ms on a 6.1M-face asset. Incumbents boot a DCC or engine GUI first: 5 to 60 s per asset before any work begins. Both figures are given; the arithmetic is yours. n=2,004 lintable assets, median 77k faces
33.2% Of measured assets self-intersect. Of the 537 distinct assets that PASS inspection, 126 self-intersect anyway, and on the two downstream operations we could measure, 126 of 126 completed regardless. Where a backend was missing we report UNMEASURED, not clean. census 2026-08-14; 734 too large to measure, reported as unmeasured
12/40 Assets where the geometric layer and the visual layer disagreed. We publish both sides and say which one is reproducible, rather than resolving the conflict quietly. n=40 stratified sample, one model call per asset
§ 02

Repair, with receipts

Your input file is never modified. Repairs are written to a new artifact, and the verdict comes from re-inspecting the file we wrote, not from what we intended to do. Below is measured output, not an illustration.

As submitted FAIL

After repair PASS

Population resultReadingScope
63.7% Heal fully. 33.6% partially, 2.7% not at all, and our own repairs introduced 312 regressions, counted in the same table as the successes, because a repair rate without a regression count is not a measurement. n=1,461 assets that failed inspection, of a 2,307-asset public census, re-linted 2026-08-17
§ 03

Four claims, each one checkable

Stated so that a diligence team can disprove them rather than take them on trust. That is the point of writing them this way.

  1. Nothing leaves your infrastructure

    Stateless, CPU-only, no GPU, no CDN, and every dependency permissive-licensed with zero copyleft, enforced in CI. Kubernetes manifests ship. For a studio holding unannounced work this is not a feature, it is the entire procurement conversation.

  2. Determinism by subtraction

    There is no GPU, no browser and no renderer in the geometry path, so there is nothing nondeterministic to control for. The same bytes produce the same verdict on a laptop and on a CI runner. We did not solve GPU determinism; we removed the GPU.

  3. A certificate you can re-run

    Every inspection emits JSON carrying a verdict, a finding per check, and a sha256 digest over the verdict-bearing fields. Your auditor recomputes it and either gets the same string or knows the artifact changed. Tamper-evident, not tamper-proof: we will not claim a signature we do not have.

  4. It cannot report clean when it did not measure

    UNVERIFIED is its own verdict, not a quiet pass. The visual field is null, never false, when nothing was audited. Unmeasured self-intersection is reported as unmeasured. For an inspection tool the catastrophic failure is a false PASS, and this one is built so it cannot produce one.

What Topoheal does not check. Texture and material quality are out of scope. The CPU rasteriser shades a per-face colour average and does not sample texture maps, and UV presence is gated pending an open finding. This is geometry. We would rather name the boundary than have you find it.

§ 04

What it replaces

Priced against the labour it removes, not against “cleaner models”. A studio ingesting a thousand assets a month has a person opening each one. That is the line item this sits against.

Per 1,000 assets / monthBasisAmount
Loaded 3D-artist rate Fully loaded hourly cost, not salary $50 / hr
Manual inspection, monthly One person opening each asset and looking at it ~$12,500
Topoheal licence Illustrative band, not a quote ~$4,000
Net monthly difference Before counting the defects that ship when a human is tired, and before counting the assets nobody had time to open at all ≈ $8,500

These are illustrative unit economics, not a quote, and nobody has been charged them. The figures are a modelled band; your real numbers depend on volume, asset mix and how much of your inspection is already automated. We publish the model rather than a headline saving so that you can disagree with the inputs. The first step is a paid pilot at a fraction of this, sized so it needs no procurement process.

§ 05

Start on your own machine

The offline CLI is the front door and it is free permanently, not a trial. No account, no key, no upload, no expiry. Source-available and free to run. Topoheal ships as the 3dqa package, so the command you type and the name on this page are the same tool.

copy# install - runs entirely offline, $0, no account
pip install 3dqa

# inspect a folder. exit 0 = PASS, 1 = FAIL, 2 = error, so it gates CI directly
3dqa lint ./exports --quiet

# gate against target engines from a single scan
3dqa lint ./exports --targets unreal_5,unity_mobile,three_js_web

# repair non-destructively - writes <name>_repaired.glb, never touches the input
3dqa heal ./exports --out-dir ./healed

# see exactly what WOULD change, writing nothing
3dqa heal ./exports --dry-run --pretty

The hosted API mirrors this exactly: POST /v1/audit/geometry with an X-API-Key header returns the same certificate the CLI writes.

§ 06

Access

Bring the exports that keep breaking your pipeline and we will run them. The fastest way to evaluate this is against your own worst assets, not our sample.

Tier 00 · free, permanently

Offline CLI

The whole geometry engine on your machine. No account, no key, no upload, no expiry.

Tier 01 · self-serve

Hosted API

A metered key for teams that want the endpoint rather than the install. Same engine, same certificate.

Not yet open. Entity and payment setup in progress. Write if you want the first key.
Tier 02 · enterprise

Deployed in your VPC

Net-30 invoicing and purchase orders. Security questionnaire answered inside 24 hours. Nothing leaves your infrastructure at any point.

§ 07

Everything else, in one place

The measured work behind this page. Nothing here requires an account, and nothing asks for a file you have not chosen to send.

Try it · no install

Hosted geometry check

Drop a mesh in a browser and get the defect list, the checks that could not run, and the raw certificate. Your file is never stored.

Open the demo → Free hosted demo. If it has been idle it takes about 30 seconds to wake.
Read the evidence

Public census

The 2,307-asset census this page quotes, with the method, the per-generator breakdown and the regressions our own repairs introduced.

Run it yourself

Command-line engine

Install and run the same engine offline. Same thresholds, same certificate, no account and no upload at any point.