felt-t2a-studio

Offline authoring tool for Felt's animation library: type a prompt, preview the generated motion, and promote the ones worth keeping into felt-character-assets's curated animations/library/.

Confirmed working end to end 2026-09-21.

Workflow

  1. Generate - fast (~1-2s): sends the prompt to a persistent T2M-GPT inference server on the Nitro5 laptop, shows a raw skeleton preview (22 joints, no mesh yet - there's no VRM/character at this stage).
  2. Convert to VRMA - slow (~2 min, mostly SMPLify's optimization on the laptop): runs the same generated motion (not a fresh sample - see below) through SMPLify -> Blender BVH->FBX -> Unity Humanoid retarget -> VRMA, then previews it on the real Felt avatar via three-vrm.
  3. Yes/No - Yes reveals a tag field; No discards and you try another prompt.
  4. Promote - copies the approved .vrma into felt-character-assets/felt-godot-overlay/animations/library/<tag>/, named from the prompt. Folder nesting in the tag is the tag structure (e.g. reaction/weather/sun) - same convention the hand-curated clips already use, no manifest file.

Why generate and convert use the same cached motion, not two samples

T2M-GPT's generation is stochastic. If "convert" just re-ran generation from scratch, you could approve motion A in the fast preview and get a different motion B in the final VRMA. The laptop's inference_server.py caches the raw generated pose (keyed by request_id) from /generate, and /convert reuses that exact cached pose for SMPLify - so what you approve is what you get.

VRAM lifecycle

Opening this app starts inference_server.py on clockmost-nitro5 (loads CLIP/VQVAE/transformer into GPU memory - the laptop's 6GB is shared with Ollama/ComfyUI, hand-swapped, never auto-restarted). Closing the app kills that process, freeing the VRAM. If the server's already running from a previous session, the app detects that via /health and doesn't double-start it.

Requirements

  • SSH access to clockmost-nitro5 with ~/felt-t2a-spike set up (see that repo - T2M-GPT + inference_server.py + the SMPLify/smpl2bvh bridge).
  • Blender (tested with 5.2) and Unity 2022.3.62f3, both already required by AnimToVrmaConverter/Generate-Animation.ps1, which this project shells out to for the local (non-laptop) half of the conversion pipeline.
  • uv sync, then uv run felt-t2a-studio.

Not yet built

  • No progress bar / cancel for the ~2-minute conversion, just a static message.
  • No history of past generations within a session - closing the app loses anything not yet promoted.
  • Per-stage timing isn't surfaced in the UI (it's logged by Generate-Animation.ps1 itself, appended to AnimToVrmaConverter/sample_output/pipeline_timings.jsonl).
S
Description
Text-to-animation authoring tool: type a prompt, preview the generated motion, keep the good ones for Felt
Readme
55 KiB
0 Stars 1 Watchers 0 Forks
Languages
Python 53.5%
JavaScript 35.1%
HTML 11.4%