[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-95106":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":17,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":9,"pushedAt":9,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":14,"starSnapshotCount":14,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},95106,"mixamo-llm-mocap","squall01337\u002Fmixamo-llm-mocap","squall01337","Turn any video into a Mixamo-rig animation - GVHMR estimator, spec-driven retarget, FK apply in Blender via MCP. Works with any Mixamo character; built to be operated end-to-end by an AI agent.",null,"Python",160,39,3,0,18,43,79,89.11,"Other",false,"main",true,[24,25,26,27,28,29,30,31,32,33],"ai-agent","animation","blender","gvhmr","llm","mixamo","mocap","motion-capture","retargeting","smpl-x","2026-08-24 04:01:23","# Mixamo LLM Mocap\n\n**Turn any locked-camera video — filmed or AI-generated — into a clean\nFK animation on any Mixamo character. One performer, or two fighting\neach other. No mocap suit, no manual keyframing, and every stage\nscriptable enough that an AI agent can run the whole loop.**\n\n![license](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-green)\n![blender](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBlender-5.1%2B-orange)\n![gpu](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCUDA-~8GB%20VRAM-76b900)\n![agent](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Foperable%20by-AI%20agents-blueviolet)\n\n![showcase](media\u002Fshowcase.gif)\n\n*Left: AI-generated source video. Right: the automatic retarget on a\nMixamo character in Blender — 10 seconds, nine punches, a slip under\nand a high side kick, straight through the pipeline.*\n\n![showcase — two fighters](media\u002Fshowcase_duel.gif)\n\n*Two performers, one plate, one pass. The left fighter throws four\npunches and a roundhouse; the right one blocks, folds over the body\nshot and ducks under the kick. Both tracks are split out of the same\nvideo by screen side, retargeted onto two Mixamo characters with\ndifferent proportions — Y Bot and Ninja — and placed at the distance\nthe performers actually stood, measured from the footage.*\n\n## How it works\n\n```\nvideo plate (locked camera, T-pose bookends)\n   │\n   ├─ 1. estimate_pose_gvhmr.py    GVHMR (SMPL-X mesh recovery) → 33 landmarks + pelvis height\n   ├─ 2. analyze_landmarks.py     numeric beat detection → you write a beat sheet from NUMBERS\n   ├─ 3. action_specs\u002F\u003Cname>.json  the motion as data: support schedule, rest blends, fists\n   ├─ 4. lift_to_mixamo.py         direction-preserving retarget onto YOUR rig's proportions\n   ├─ 5. apply_mixamo_fk.py        FK aim + foot planting, inside live Blender (via Blender MCP)\n   ├─ 6. qa_clip.py                automated gate: no explosions, no pops, no foot skate\n   ├─ 7. compare_reference.py      frame-by-frame vs the video → which windows still differ\n   ├─ 8. compare_pair.py           two-character plates: separation, reach, intrusion\n   ├─ 9. run_in_blender.py contact real mesh-vs-mesh collision between two characters\n   └─ 10. render_preview.py        preview + side-by-side showcase video\n```\n\nWith two performers in the plate, stages 1–7 run once per fighter\n(`--person left|right` splits the tracks), `setup_duo.py` builds one\nscene holding both characters, and `compare_pair.py` checks what only\nexists when there are two of them: whether they stand, reach and miss\neach other the way the performers did.\n\nThe estimator provides mesh-quality joints; the lift keeps its segment\n*directions* but rebuilds every position from your character's measured\nbone lengths; the apply plants feet by solving hip height (never IK —\nMixamo rigs are FK-only); the spec contributes only what a video cannot\nknow: which foot is the support in each phase (including `\"none\"` for\nairborne beats), when fists close, where the clip locks back to rest.\n\n## Why it's different\n\n- **Any Mixamo character.** `setup_rig.py` builds a clean scene from\n  your own Mixamo download and measures it into `rig_profile.json`\n  (rest pose, bone lengths, hip and ground heights). Every stage reads\n  that profile.\n- **Motions are data, not code.** A new motion is a small JSON spec —\n  the `action_specs\u002F` here (a kung-fu form, a combo with a jump, a\n  fight combination, a 360° jumping spin kick and a two-fighter duel)\n  are worked examples of the whole schema.\n- **Honest Mixamo FK.** Hips are the only translating bone, everything\n  else is quaternions at 30 fps — clips drop into any Mixamo-style\n  workflow without cleanup.\n- **Real ground contact.** Planted feet solve to ground height with\n  zero skate (the support ankle is pinned through each stance); jumps\n  integrate the estimator's real pelvis arc.\n- **A QA gate, not vibes.** Exploded bones, hip pops, foot skate,\n  drifting roots and broken rest poses are caught numerically before a\n  human ever looks.\n- **A closed refinement loop.** `compare_reference.py` measures the\n  retarget against the source video frame by frame on what an eye\n  actually reads — hand height relative to the face, distance between\n  the hands, limbs inside the torso, gaze direction — and reports the\n  exact frame windows that diverge. Notes like *\"his hands are too high\n  and his arm clips his back\"* become numbers, and an over-correction\n  gets caught before it ships instead of after.\n- **Two characters, one scene.** A two-performer plate is split into\n  tracks by which side of frame each occupies — robust where tracker\n  ids swap on contact — retargeted onto two different Mixamo characters\n  with their own measured proportions, and placed at the distance the\n  performers actually stood, recovered from the footage rather than\n  eyeballed. `compare_pair.py` then verifies separation, strike reach\n  and limb intrusion against the video, frame by frame, and a Blender\n  BVH pass checks the actual skinned meshes for collision — because two\n  Mixamo characters are thicker than two humans, and a choreography\n  built out of 2 cm near-misses collides when you retarget it faithfully.\n  Clearance is bought from the stage with a declared, measured offset,\n  which the comparator keeps reporting so the cost stays visible.\n- **A review pass that is part of the loop.** Render the showcase,\n  put source and retarget side by side at the same beat, name what\n  looks wrong in one sentence, then measure it. When eye and numbers\n  disagree it is usually the numbers — every false reading in this\n  project came from a mismatched proxy (a nose against a skull-base\n  joint, a capsule against a mesh). [docs\u002FPIPELINE.md](docs\u002FPIPELINE.md)\n  section 10.\n- **Written for agents.** Beat decisions come from\n  `analyze_landmarks.py` numbers (never from eyeballing frames), every\n  stage is a CLI or a socket call, and `docs\u002FPITFALLS.md` encodes every\n  mistake so the next operator — human or AI — doesn't repeat them.\n\n## Quickstart\n\n1. **Install** — [docs\u002FINSTALL.md](docs\u002FINSTALL.md) walks through every\n   dependency (list below).\n2. **Build your rig scene**:\n\n   ```\n   blender --background --python pipeline\\setup_rig.py -- --fbx ybot.fbx --out ybot_rest.blend\n   ```\n\n3. **Run a plate** (Blender open on the scene; plate rules in\n   [docs\u002FPROMPTING.md](docs\u002FPROMPTING.md)):\n\n   ```\n   tools\\GVHMR\\.venv\\Scripts\\python.exe pipeline\\estimate_pose_gvhmr.py --video plates\\\u003Cname>\\\u003Cname>.mp4 --out plates\\\u003Cname>\\landmarks.json\n   tools\\GVHMR\\.venv\\Scripts\\python.exe pipeline\\analyze_landmarks.py --landmarks plates\\\u003Cname>\\landmarks.json\n   # beat sheet → action_specs\\\u003Cname>.json  (schema: docs\u002FPIPELINE.md)\n   tools\\GVHMR\\.venv\\Scripts\\python.exe pipeline\\lift_to_mixamo.py --spec action_specs\\\u003Cname>.json\n   python pipeline\\run_in_blender.py all action_specs\\\u003Cname>.json\n   tools\\GVHMR\\.venv\\Scripts\\python.exe pipeline\\qa_clip.py --spec action_specs\\\u003Cname>.json\n   tools\\GVHMR\\.venv\\Scripts\\python.exe pipeline\\compare_reference.py --spec action_specs\\\u003Cname>.json\n   tools\\GVHMR\\.venv\\Scripts\\python.exe pipeline\\render_preview.py action_specs\\\u003Cname>.json --showcase\n   ```\n\n   `compare_reference.py` tells you which frame windows still differ\n   from the video; the last command produces `preview.mp4` and the\n   side-by-side `showcase.mp4` — the same format as the demo GIF above.\n\n   Two-performer plates add `--person left|right` to the estimate, one\n   spec per fighter, and a `compare_pair.py` run — see\n   [docs\u002FPIPELINE.md](docs\u002FPIPELINE.md) section 9.\n\n4. **Iterate** with [docs\u002FPIPELINE.md](docs\u002FPIPELINE.md) and\n   [docs\u002FPITFALLS.md](docs\u002FPITFALLS.md).\n\n## What you need to bring (and where to get it)\n\n| What | Where | Notes |\n|---|---|---|\n| **A Mixamo character — any model** | [mixamo.com](https:\u002F\u002Fwww.mixamo.com) → Characters → download FBX Binary, T-pose | Adobe's terms don't allow redistributing them; `setup_rig.py` builds and validates the scene from your download |\n| **Blender 5.1+** | [blender.org](https:\u002F\u002Fwww.blender.org\u002Fdownload\u002F) | |\n| **Blender MCP add-on** (official, Blender Lab) | [blender.org\u002Flab\u002Fmcp-server](https:\u002F\u002Fwww.blender.org\u002Flab\u002Fmcp-server\u002F) | enable *Allow Online Access*; the apply talks to its socket |\n| **GVHMR** (the pose estimator — **not in this repo**) | [github.com\u002Fzju3dv\u002FGVHMR](https:\u002F\u002Fgithub.com\u002Fzju3dv\u002FGVHMR) | clone into `tools\u002FGVHMR`; install per [docs\u002FINSTALL.md](docs\u002FINSTALL.md) — including a working Windows recipe (`docs\u002Frequirements_gvhmr_windows.txt` + prebuilt pytorch3d wheel) |\n| **GVHMR checkpoints** (~5 GB) | HuggingFace mirror | exact `curl` commands in [docs\u002FINSTALL.md](docs\u002FINSTALL.md) |\n| **SMPL-X body model** | [smpl-x.is.tue.mpg.de](https:\u002F\u002Fsmpl-x.is.tue.mpg.de\u002F) | free research registration → download *SMPL-X v1.1*, place `SMPLX_NEUTRAL.npz` as shown in [docs\u002FINSTALL.md](docs\u002FINSTALL.md) |\n| **GPU** | ~8 GB VRAM | developed on an RTX 4080 |\n\n## Docs\n\n| Doc | What it covers |\n|---|---|\n| [docs\u002FINSTALL.md](docs\u002FINSTALL.md) | Every dependency, step by step, Windows-proven |\n| [docs\u002FPIPELINE.md](docs\u002FPIPELINE.md) | The operational loop + the action_spec schema, field by field |\n| [docs\u002FRIG.md](docs\u002FRIG.md) | Mixamo rig conventions: spaces, units, the rules that must never break |\n| [docs\u002FPITFALLS.md](docs\u002FPITFALLS.md) | Every mistake this pipeline's development paid for, so you don't pay twice |\n| [docs\u002FPROMPTING.md](docs\u002FPROMPTING.md) | Writing gen-video plate prompts that survive retargeting |\n\n## License\n\nMIT — see [LICENSE](LICENSE), including third-party notes (Mixamo,\nGVHMR, SMPL-X, Blender MCP).\n","这是一个将单视角视频自动转换为Mixamo角色绑定动画的端到端工具链，支持单人动作与双人交互（如格斗）场景。核心功能包括：基于GVHMR模型的SMPL-X级3D姿态估计、面向规范（spec-driven）的动作重定向、保持方向约束的骨骼比例适配、Blender内FK驱动与足部着地求解，以及AI代理可调度的全流水线脚本化控制。项目专为无动捕设备、无手动K帧的快速动画生成设计，适用于游戏预演、AI内容创作、教学演示及轻量级虚拟制作等需要低成本、高一致性角色动画的场景。",2,"2026-08-21 02:30:11","CREATED_QUERY"]