Views
No views yet
qtmesh skin, the GUI
"Compute Skin Weights" dialog, the rig→skin chain, and the
compute_skin_weights MCP tool), running locally via ONNX Runtime with a
geodesic-voxel fallback.The files QtMeshEditor downloads at runtime live in the sharedfernandotonon/QtMeshEditor-modelsrepo underskintokens/. This repo is the standalone model card + mirror for people who want the converted weights themselves.
| file | role |
|---|---|
mesh_cond.onnx | Michelangelo point-cloud encoder → LLM mesh-conditioning prefix |
vae_cond.onnx | skin-CVAE conditioning encoder over the sampled points |
embed.onnx | token id → LLM embedding |
decoder.onnx + decoder.onnx.data | Qwen3-0.6B causal-LM KV-cache step (external weights — ONNX Runtime 1.20.1 segfaults parsing a >1.6 GB single-file proto) |
skin_decode.onnx | FSQ skin tokens → per-joint, per-sampled-point weights (FSQ folded in) |
skintokens.json | manifest: every config value the host needs (below) |
num_points (8192) points + normals; normalise mesh+joints
per upstream AugmentAffine (joints included in the AABB, exact
[-1,1] fit).[branch?, parent-joint xyz, joint xyz] discretised to 256 bins over
[-1,1]; bos=257, cls "articulation"=266, stream ends with the
switch token eos=258). Multi-root topologies must be re-parented to the
first root + DFS-reordered first.J × tokens_per_skin (4) skin tokens, constrained to the
FSQ range [267, 33035); global EOS 33035; full vocab 33036.skin_decode on its 4 FSQ ids (− 267 offset) → weights over the
8192 sampled points; transfer to full-res vertices by 8-NN inverse-distance.tokens_skin_cond=384, CVAE latent 512, FSQ codebook 32768.scripts/export-skintokens-onnx.py in the QtMeshEditor repo (one-time,
offline; bf16→fp32, forced eager attention, decomposed RMSNorm for opset 18,
trace-friendly FPS). Parity vs PyTorch ≈ 1e-5 on every graph.