New in the inspector: the in-browser Avatar inspector now opens your .fbx in a 3D viewer with skeleton and skin-weight overlays next to the humanoid rig check and performance rank. It runs the real Rust diagnose graph as WebAssembly — the file never leaves your machine.

The pipeline

Every tool sits at one point on the path from a raw export to a live avatar. Click a step to jump to its reference.

Preview sits alongside the whole chain: avatar render / avatar view draw the avatar, a world, or the avatar at the world's spawn without Unity. The full picture is on How it stacks.

What you can do today

Inspect in the browser
Drop an FBX: 3D viewer with skeleton and weight overlays, humanoid rig check, performance rank, blendshape inventory. WebAssembly, nothing uploaded.
analyzer.html
Fix the armature
Canonicalize a raw Mixamo rig so Unity auto-configures it as Humanoid; topology / scale / orientation issues flagged and emitted as a headless-Blender script.
avatar armature fix
Lint a project
SDK3 compliance over a whole Unity project: params, menus, descriptor refs, visemes, animator controllers, clip contents, PhysBones, Quest. Exits non-zero for CI.
avatar lint
Rank performance offline
VRChat's Excellent → Very Poor rank without Unity, against the PC and Android limit tables, including particles, constraints, and texture VRAM.
avatar stats
Generate assets
Emit .anim clips, blend trees, full FX controllers, expression params/menus — or a complete ten-file toggle bundle. Deterministic, diffable fileIDs.
avatar toggle · anim-gen
Edit Unity YAML safely
Change one value or swap one document in an existing asset by span-splicing the raw text: fileIDs, references, key order, and formatting all survive.
avatar asset set
Migrate SDK2 → SDK3
Retype the descriptor in place, convert DynamicBone → PhysBone by the SDK's own rules, rebuild FX from gesture overrides, get a VCC-openable project.
avatar migrate sdk3
Tune PhysBones
Inspect and retune a prefab's PhysBones in place: values, per-chain curves, split / stretch / flare / nudge chains, with render previews of the result.
avatar physbone
Preview without Unity
Headless GPU renders of the avatar, a world scene, or the avatar at the world's spawn, plus an interactive orbit / zoom / walk viewer.
avatar render · view
Drive avatars over OSC
Speak VRChat's OSC parameter protocol, capture and replay parameter streams against a controller, run the analog-gesture daemon on any hardware.
avatar osc
Hand it to an agent
--json and JSON Schemas across the read surface, and a non-writing MCP server exposing the diagnose and generate tools to any agent host.
avatar mcp serve
Browse the crates
Twenty-two crates from FBX I/O through migration and the runtime rig layer to the OSC daemon — purpose, key API, and status for each.
crates/

The two-layer model

Read this first. There are two file layers we own in Rust, and one step we don't.

Where the build is

Status: early / alpha
The crates build green and are covered by tests (synthetic fixtures in CI, sample-gated real assets on the self-hosted runner), generated assets pass a headless Unity import-acceptance gate, and a real SDK2 avatar has been migrated, built, and uploaded to VRChat with these tools. Still: expect rough edges, verify in Unity before you rely on output, and treat APIs, CLI flags, and report formats as subject to change.
MilestoneScopeStatus
M0–M3Workspace, armature diagnosis + repair, native FBX write-back, SDK3 lintdone
M4Asset generation: clips, blend trees, FX controllers, params/menus, the toggle bundledone
M5OSC runtime + analog-gesture daemonOpenXR input pending
alongsideUnity-YAML editing, SDK2 → SDK3 migration, PhysBone tuning, runtime rig, wgpu preview/viewer, MCP, the browser inspectordone

In flight: the daemon's on-device OpenXR input backend and OSCQuery browse/resolve discovery. The roadmap of record is PLAN.md; this site mirrors the committed docs under docs/.

cargo run -p avatar-cli -- --help