Quick answers about how the audit works, what the three check groups mean, repair and stress-check, folder batch, pricing, and integration. See the docs for long-form reference.
A single pass/fail doesn't help you fix anything. AdMeshio groups its checks into three independent areas so you know whether to fix the model, change the printer settings, or re-slice the G-code.
Is the model itself sound? Closed shell, no flipped faces, no empty faces, no overlapping surfaces. If anything fails → fix the file in your CAD / modelling tool.
Can this specific printer + material handle it? Walls, overhangs, supports, drain holes. If anything fails → try a different printer or settings.
Is the G-code or resin file correct? Layers, exposure, speeds, cooling. If anything fails → re-slice or change profile.
Each area reports independently — you see pass / warn / fail per check, so you always know what to fix first.
An audit is a list of individual checks — each one has a
concrete threshold and reports pass, warn, or fail with the
measured value. You look at the data directly and decide
whether to print, instead of trusting a single composite score.
That fits compliance work, B2B contracts, and print-farm triage:
when you need to defend a decision to print (or not print), you
have specific evidence you can trace back from any single row
in the report.
No — it's not a guarantee. A clean audit
means we ran the full check list and didn't find defects above
the thresholds for your printer + material. Production risk is
low, but you still own the call to print. Physical validation
— calibration, first-layer inspection, caliper checks on
critical dimensions — is still your responsibility.
Think of it like a CI passing green: your tests all pass, but
you still review the PR before merging to prod.
The CLI returns exit code 0 on a successful audit
and 1 only when it cannot read the file. For
finding-level policy, parse the JSON output and branch on
per-check flags[].code entries (e.g.
SELF_INTERSECTION) or on the
verdict.gri_overall threshold of your choice.
Sample branches live in the
API reference and docs.
Short for the three score axes shown in the report header: Geometry (the mesh itself), Readiness (this printer + material), and Inspection (the slicer's G-code). The three-card grid at the top of this page summarises what each group covers.
A clean audit means no mesh or slicer issue was
detected above the thresholds for your profile. Failures
after a clean audit fall outside what we can see from the files:
· Hardware: calibration drift, worn
nozzle, bed not level, belt tension
· Material: wet filament, resin out of
shelf-life, wrong temperature
· Environment: drafts, temperature swings,
humidity
· Slicer mismatch: audit assumed one
slicer, but you printed from another (e.g. audited against
OrcaSlicer settings, printed from PrusaSlicer)
If audit ran on the mesh file alone, re-run it on the actual
G-code your printer used (upload both in the workspace, or
admeshio verify <output.gcode> from CLI).
That second pass measures the real output and usually surfaces
the gap if one exists.
Closes cracks, removes overlapping surfaces, fixes non-manifold edges, and flips inward-facing normals. A built-in classifier recognises intentional openings (round drain holes, planar windows, peg slots) and leaves them alone — you don't end up with sealed sockets or filled drains.
Every step has a safety net. If a cleanup pass would damage
topology or move geometry too far from the original, the step
rolls itself back automatically. The output is never
measurably worse than the input on the test corpus. Pass
strict_quality:1 in your recipe to roll back
even on borderline cases.
Yes. admeshio repair input.stl -o output.stl is
a standalone command. Same for decimate (lighten
heavy meshes), pipeline (chain several ops via
recipe), and stress-check (FEM safety factor).
See the command reference.
A first-pass safety factor for the part under gravity +
cooling shrinkage (or a simple custom load you specify), plus
the regions where stress concentrates. It also flags
structural walls that sit in those hotspots — thin
features that would pass an audit on their own but become
weak points under load.
What it isn't: a load certification. The
part is modelled on its own — the joints, fasteners,
and contact surfaces of the real assembly aren't part of
the picture. Read the result as an early indicator on the
geometry, not as a green light to put the part in service.
Rigorous load analysis still belongs in dedicated FEA.
Mesh input: STL (binary + ASCII), OBJ, 3MF, GLB, glTF, PLY.
Mesh output: STL, 3MF, GLB, PLY.
Slicer-output verify: G-code (FDM — OrcaSlicer / PrusaSlicer / Bambu / Cura), .ctb · .cbddlp · .pwmx · .pwmo · .goo (resin — CHITUBOX / Lychee / Voxeldance).
AdMeshio accepts mesh files only for the mesh pipeline.
No separate texture images (PNG/JPG). Use GLB with embedded textures if
you need to preserve color data — see the next question.
Upload as GLB. AdMeshio preserves vertex colors and UV coordinates through
the audit pipeline automatically. GLB is the recommended format for colored models
(AI-generated, painted, scanned).
Supported: GLB with vertex colors (COLOR_0), GLB with UV coords
(TEXCOORD_0), OBJ with UV (vt) — UV read, output as GLB.
Not supported: external texture files (OBJ + MTL + .png/.jpg). If your model
uses external textures, convert to GLB first (in Blender: File → Export → GLB with
embedded textures).
Depends on your printer hardware:
Bambu AMS / Prusa MMU: Yes. Your 3MF contains per-face color mapping
(colorgroup). AdMeshio preserves this during analysis — 3MF keeps full color
data. Open in Bambu Studio or PrusaSlicer and print multi-color directly.
Single-color printer (Ender, most resin): 3MF color data is preserved but
your printer will ignore it — it only knows one material at a time. For color, you
need AMS/MMU hardware or paint by hand.
Full-color (millions of colors): requires industrial printers
(Stratasys J55, HP MJF 580, $100K+). Consumer FDM supports 4–5 filament colors max via
AMS/MMU.
Browser Local Audit handles meshes up to a few hundred MB, depending on your browser's RAM. The CLI has been exercised on files up to 2 GB / tens of millions of triangles. Server upload limits are generous enough that most hobby and pro-am meshes pass without hitting them; if you do hit a limit, the response says so explicitly.
Every command accepts a directory as input and auto-parallelizes
the run — no separate bench command, no
--batch flag. Each file in the folder gets its own
report written next to the source.
# Audit every mesh in a folder
admeshio audit ./orders --recursive --workers 8
audit and verify emit one JSON line per
file to stdout, so you can pipe the output straight into
jq or your queue.
An HTML dashboard with one row per file — pass / review / fail counts, the check list per row, wall-clock time, and a reminder that AdMeshio audits rather than certifies. Standalone file, no external dependencies, browseable offline.
Files that fail to load (malformed STL, truncated, unsupported format, encoding issues)
are logged to stderr with a clear error and not charged. The worker pool
continues with remaining files. Final summary includes err=N count.
Exit code is 1 if any file errored, 0 otherwise.
Internal benchmark on 2,000 real-world mesh files: median ~893 ms per file with 8 workers, small files (<10 MB) under 1 second. 1,000 files in ~16 minutes full audit, ~8 minutes geometry-only (8 workers). 10,000 files in ~160 minutes on commodity hardware. Scales roughly linearly with worker count up to physical core count.
Introductory rates for early adopters. Per-operation costs may be revised at a future pricing review, but credits you buy today never expire and stay valid at their purchased value.
A deep mesh check with no printer profile: 1 credit. Verifying your G-code on its
own: 1 credit. A full audit (mesh + profile) charges per stage actually executed and
skips nothing you can't see on the report — see the table below for the exact
number.
Browser Local Audit is always free and unlimited — Web-Native technology
processes files instantly on your computer, no server contact.
Audit + verify are flat per call (1 / 3 / 4 cr depending on
tier). Repair, decimate, and stress-check scale with file
size. Every call reports the exact amount in
billing.credits_charged. Full breakdown on the
pricing page.
Credit packs never expire. AdMeshio has no monthly subscription — you buy a pack, use it whenever. Unused credits carry forward indefinitely.
Yes. 100 free credits on signup (one-time, no expiry). No credit card required. Browser Quick Check is always free and unlimited. That's enough to test-drive the full audit chain on a figure or a small-shop trial day before buying a credit pack.
PayPal (Visa, Mastercard, JCB, balance, bank transfer where supported). Vietnamese bank cards work via PayPal's card processor.
Self-hosting is on the roadmap — single binary, no Docker, no database, air-gapped friendly. The engine already runs offline; the licensed distribution hasn't opened yet. Get in touch if you need air-gapped deployment.
Both. Python admeshio package on PyPI, C# AdMeshio NuGet package.
Both expose audit(), verify(), and catalog()
returning typed AuditReport objects. Folder input auto-detects and returns
list[AuditReport]. The catalog spec is bundled — catalog()
works offline with no backend dependency.
import admeshio
# Single file
r = admeshio.audit("part.stl", profile="bambu_x1c_pla")
print(r.summary()) # pass / warn / fail counts per check group
# Folder batch — returns list[AuditReport]
reports = admeshio.audit("./orders", recursive=True, workers=8)
blockers = [r for r in reports if r.has_blockers()]
The catalog covers everything that ships in OrcaSlicer, PrusaSlicer, Bambu Studio, CHITUBOX, and Lychee — popular FDM machines (Bambu X1C / A1 / P1S, Prusa MK4 / Mini+, Ender 3, Voron, Creality K1) and resin printers (Elegoo Saturn / Mars, Anycubic Photon Mono X, Phrozen Sonic, Formlabs Form). Synced daily so a fresh vendor profile shows up within a day. Got something they don't ship? Drop in your own JSON profile.
Drop a .ctb, .cbddlp, .pwmx,
.pwmo, or .goo file into the workspace
(or pass it to admeshio audit on the CLI).
We parse the binary header (printer + material + lift cycle),
decode every layer's bitmap, and run the resin check chain:
floating-island detection, 3D-confirmed vacuum traps
(a coarse 3D voxel flood drains hollow shells with a drain hole
anywhere in the print, eliminating the false positives that
per-layer 2D analysis produces), peel-force spike detection,
plus printer-profile mismatch and lift-cycle divergence checks.
Encrypted CTB v3+ from CHITUBOX 1.5+ is supported via the
UVtools dispatch path.
No. Bambu's machine-start sequence runs AMS calibration,
prime lines, and wipe choreography before the real
print begins — a naive G-code linter sees these as
1,000+ tiny first-layer islands and 17k+ retractions and
spams false positives on every Bambu print. AdMeshio gates
the first-layer-island, first-layer-speed, and retraction
rules until the slicer emits a real model-feature tag
(; TYPE: / ; FEATURE: —
Bambu Studio, OrcaSlicer, and PrusaSlicer all emit them).
Pre-tag moves are calibration and don't count. Falls back
to the ungated counter on bare Klipper / Marlin G-code so
non-Bambu/Orca/Prusa sources stay covered.
admeshio audit returns exit code 0
when the audit ran (regardless of pass / warn / fail count)
and 1 only when it couldn't read the file. For
finding-level policy, parse the JSON output and decide your
own threshold:
# GitHub Actions
- run: admeshio audit ./models --recursive --summary report.html
- uses: actions/upload-artifact@v4
with: { name: audit-report, path: report.html }
# Soft gate: fail only on a specific issue
- run: |
admeshio audit ./models --recursive | \
jq -e 'select(.flags[]?.code == "SELF_INTERSECTION") | .input.path' \
&& exit 1 || exit 0
Those are interactive mesh-editing apps. AdMeshio is an
API-first audit + repair engine, designed for automation:
single binary, headless CLI, REST API, Python / C# SDKs,
folder batch with parallel workers, CI/CD quality gates,
stable JSON output. It also covers things they don't:
structural stress check via CLI, intent-aware repair (keeps
drain holes), and a printer catalog synced daily from Orca /
Prusa / Bambu.
Netfabb and Magics claim to "certify" — AdMeshio
deliberately does not. It reports a check list with pass /
warn / fail and lets you decide. Coverage is published on the
validation page so you can see
exactly what the engine does and doesn't catch before
trusting it.