Crates
Twenty-two crates, from binary-FBX I/O up through diagnostics, generation, migration, the runtime
rig layer, GPU preview, and the analog-gesture OSC daemon. Crate dirs are unprefixed
(crates/fbx); package names are avatar-<slug>; lib names are
avatar_<slug>; the binary is avatar. Each card links to that
crate's README on GitHub; the stack diagram shows how they
layer.
Reading the groups. Foundation crates parse the two file formats and never depend on the
logic above them; the diagnostics / generation crates read both and write only Unity YAML; the runtime rig
and OSC crates are the only place
glam is allowed; the surface crates (cli,
mcp, web-analyzer) expose the same graph three ways.
Foundation & models
cargo build --workspace
cargo tree -p avatar-cli -e normal | grep -c glam # the glam-confinement invariantavatar-fbx
Load and write binary FBX: typed scene graph + connections, edit/serialize via
FbxDocument, extract geometry + skin/bind (meshes()), re-slot polygon materials.avatar-armature
Skeleton model, hierarchy-aware Unity-humanoid inference, VRChat SDK3 rig validation, and repair planning (renames applied; topology/scale/orientation flagged + Blender repair script).
avatar-unity-yaml
Reader + surgical editor for Unity's YAML format:
EditableUnityFile span-splices value and structural edits into an existing asset, preserving fileIDs/refs/formatting.avatar-unity-asset
Typed Unity asset graphs over the YAML reader: the AnimatorController (
.controller) + AnimationClip (.anim) readers the controller/clip lint rules consume.avatar-unitypackage
Read Unity's
.unitypackage (gzip+tar): summarize, extract into a project tree, cross-check an avatar against a world for co-import GUID/path conflicts.avatar-vpm
Discover a Unity/VPM project: manifest packages, editor version, installed SDK / Modular Avatar / VRCFury versions, asset paths.
avatar-vrc-descriptor
Typed extraction of the VRChat Avatar Descriptor, Expression Parameters & Menus (256-bit budget, 8-control menu) + SDK3 rule constants.
Diagnostics, generation & migration
avatar-lint
Diagnostics engine: SDK3 compliance rules over a project (params, menus, descriptor refs, visemes incl. the source-FBX cross-check, animator + clip contents, PhysBones, Quest/hygiene) → structured report. Rules
VRC001–VRC062.avatar-stats
Offline VRChat performance ranking (Excellent→Very Poor) from an FBX (geometry) or a project's avatars (components incl. particles & constraints), against PC + Android limits.
avatar-anim-gen
Generate Unity
.anim clips, blend trees, full FX AnimatorControllers, and VRC expression params/menus as Unity YAML with deterministic fileIDs; the avatar toggle bundle and puppet grafting.avatar-migrate
SDK2 → SDK3 migration of an avatar project: descriptor retyped in place, DynamicBone → PhysBone by the SDK's own rules, gesture overrides → FX, a VCC-openable project tree; plus PhysBone tuning on any SDK3 prefab.
Runtime rig layer
The "load and drive a rig at runtime" foundation, renderer-agnostic. glam (f32) is confined to pose/input/gltf/render — never the lint/osc/cli graph.
avatar-mesh
POD mesh + skin interchange (
RawMesh); the format-agnostic hand-off between importers and the pose layer. No glam.avatar-gltf
glTF 2.0 importer → the same
RawMesh + skeleton (a second rig source alongside FBX).avatar-pose
Runtime posing + skinning:
PosedSkeleton → world matrices, GPU bone-matrix palette, CPU skinning, two-bone IK (pose::ik).avatar-input
Backend-agnostic VR tracker input (
TrackerState/TrackerSource): mock + OSC backends, OpenXR planned.avatar-render
GPU preview via wgpu, headless: avatar rest-pose render, world-scene render, avatar-at-spawn-in-world PNGs, plus the optional interactive
avatar view winit viewer.OSC runtime
avatar-osc
VRChat OSC runtime:
/avatar/parameters, /input, /avatar/change codec + UDP client, parameter capture, OSCQuery config parsing and mDNS advertisement; the avatar-gesture-capture bin.avatar-osc-gestures
The analog-gesture daemon — "Vive advanced controls on any hardware": controller trigger →
Gesture*/Gesture*Weight over OSC, with deadzone + change detection.App & agent surface
avatar-cli
The
avatar binary tying everything together — every subcommand on the CLI page, --json across the read/generate surface, dry-run-safe writes.avatar-mcp
A domain-agnostic MCP server (stdio JSON-RPC): the read/diagnose surface plus text-returning generation tools an agent host can discover and call. Non-writing by design.
avatar-web-analyzer
The wasm bundle behind this site's Avatar inspector: the same fbx + armature + stats diagnose graph, compiled to WebAssembly and run entirely in your browser.
avatar-testkit
Test-only (
publish = false): the golden-snapshot harness + in-code synthetic-FBX builders behind the workspace's fixture corpus.