TripoSplat β ONNX export (staged graphs)
ONNX re-export of VAST-AI/TripoSplat ("Generative 3D Gaussians with Learned Density Control", arXiv 2605.16355 β MIT code + MIT weights): one image β up to 262,144 3D Gaussians. All credit for the original weights goes to VAST-AI-Research.
Exported as five staged graphs so the Euler+CFG flow loop, the octree
systematic sampling, and the splatβmesh conversion run in host code β for
QtMeshEditor
(qtmesh generate3d --backend triposplat, GUI Backend dropdown, MCP backend
arg), local inference via ONNX Runtime. No Python at runtime.
The files QtMeshEditor downloads at runtime live in the shared
fernandotonon/QtMeshEditor-modelsrepo undertriposplat/. This repo is the standalone model card + mirror.
Files
| file | role | licence |
|---|---|---|
triposplat_dinov3.onnx + .onnx.data |
DINOv3 ViT-H image encoder: image[1,3,1024,1024] in [0,1] β feature1[1,4101,1280] (ImageNet norm + un-affine layer_norm baked in) |
DINOv3 License |
triposplat_vae.onnx + .onnx.data |
FLUX.2 VAE encoder: image + noise[1,32,128,128] β feature2[1,4101,128] |
Apache-2.0 (FLUX.2 AE) |
triposplat_flow.onnx + .onnx.data |
one DiT flow step: latent[B,8192,16], camera[B,1,5], t[B] (Γ1000), features β v_latent, v_camera |
MIT |
triposplat_octree.onnx + .onnx.data |
octree density logits: parent cell centres + level + latent β logits[1,L,8] |
MIT |
triposplat_gs.onnx + .onnx.data |
Gaussian decoder: leaf points + latent β xyz / SH-DC / opacity / scale / rotation (32 Gaussians per point) | MIT |
LICENSE-TripoSplat.txt |
MIT (VAST-AI TripoSplat) | |
LICENSE-DINOv3.txt |
DINOv3 License β Β§1.b.i requires a copy with any redistribution of DINOv3 weights or derivatives | |
LICENSE-Apache-2.0.txt |
Apache-2.0 for the FLUX.2 VAE encoder |
~6.1 GB total (fp32). Every graph ships a small .onnx proto next to an
.onnx.data external-weights file; both must sit side by side or ONNX Runtime
cannot load the graph.
Inference contract
- Matte first. Composite the subject over black (the training convention). QtMeshEditor mattes with its own UΒ²-Net / BiRefNet path, then erodes alpha 1 px, square-crops 1.2Γ the alpha box, and resizes to 1024Β².
- Flow loop (host code): shifted schedule
t = 3β/(1+2β), Euler steps, classifier-free guidance with zero features as the unconditional branch. Default 20 steps / guidance 3; 10 steps / guidance 3 is reliable (halves wall time). Guidance must stay > 1. - Octree: 8 levels of coarse-to-fine point placement; logits split the remaining point budget over 8 children by systematic sampling, then a uniform jitter inside the leaf cell.
- Gaussians β mesh is not in these graphs β QtMeshEditor densifies the
splats on a 1024Β³ grid (
SplatToMesh), simplifies, UV-unwraps, and bakes colour + a detail normal. The raw splats are also written as a standard 3DGS.ply. - Attention is exported as
com.microsoft.MultiHeadAttention(plain SDPA materialises a ~9.7 GB score matrix per block under ORT). CoreML cannot compile the flow graph; macOS runs on the CPU EP.
Measured parity vs the numpy+ORT replay: 262,144 splats within 3e-6 position /
3e-4 opacity. Full notes: docs/TRIPOSPLAT.md.
Reproducing
scripts/export-triposplat-onnx.py in the QtMeshEditor repo (one-time,
offline; needs a local TripoSplat checkout + the HF checkpoints). Export one
graph per process (--only) on a β€24 GB machine.
Licence β read before using
Three licence texts ship next to the graphs:
| file | covers |
|---|---|
LICENSE-TripoSplat.txt |
MIT β TripoSplat code + most converted weights (VAST-AI-Research) |
LICENSE-DINOv3.txt |
Meta DINOv3 License for triposplat_dinov3.onnx* (commercial OK; not MIT β do not call the stack "entirely MIT") |
LICENSE-Apache-2.0.txt |
Apache-2.0 for the FLUX.2 VAE encoder inside triposplat_vae.onnx* (Black Forest Labs released the AE under Apache-2.0; the FLUX.2 [dev] model is non-commercial and is not used) |
Not affiliated with or endorsed by VAST-AI-Research, Meta, or Black Forest Labs.
Model tree for fernandotonon/QtMeshEditor-triposplat-onnx
Base model
VAST-AI/TripoSplat