diff --git a/.gitignore b/.gitignore
index fff1c4c..fb78a80 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ shots/
.dev.vars
.dev.vars.*
!.dev.vars.example
+.freemocap-venv/
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 6484f5b..d5fb94b 100644
--- a/README.md
+++ b/README.md
@@ -27,6 +27,27 @@ npm run capture # boots the app headless and screenshots it into shots/
npm run deploy # vite build + Cloudflare Workers static assets
```
+The browser-based **Animation Studio** lives at
+[`/animation.html`](http://localhost:5174/animation.html). Upload a reference
+video, generate pose keys directly on Tilt's 23-bone rig, correct individual
+bones with the rotation gizmo, optionally seed and bake butt/grip/blade stick
+landmarks, and export either reloadable
+`.tiltanim.json` or a JavaScript pose module for `src/anim/poses/generated/`.
+
+The Capture source menu has two mocap paths:
+
+- **Browser MediaPipe** processes one uploaded video locally for the quickest
+ reference-to-pose workflow.
+- **Local FreeMoCap** sends the same uploaded video through an isolated local
+ [FreeMoCap](https://github.com/freemocap/freemocap) worker, then loads the
+ filtered motion directly into the editor. Run `npm run freemocap:setup` once
+ before `npm run dev`. Existing `freemocap_data_by_frame.csv` and
+ `*_body_3d_xyz.csv` files remain available through the advanced import.
+
+The FreeMoCap worker is intentionally local-development only; a static
+Cloudflare deployment cannot run its Python/native processing stack. Browser
+MediaPipe remains available everywhere.
+
Cloudflare setup, Pages alternative, and CI notes: **[DEPLOY.md](DEPLOY.md)**.
In the browser:
@@ -134,6 +155,9 @@ src/
poses/goalie.js ready, butterfly, shuffle, reach
studio/
img2mesh.js character studio: pose presets, fixed views, capture API
+ animationStudio.js reference mocap, pose editor, timeline, clip storage
+ mediapipePose.js browser pose detection and native-rig retargeting
+ freemocapImport.js FreeMoCap body XYZ CSV adapter
render/ rink, materials, camera
game/
match.js the loop
diff --git a/animation.html b/animation.html
new file mode 100644
index 0000000..d10ef49
--- /dev/null
+++ b/animation.html
@@ -0,0 +1,172 @@
+
+
+
+
+
+tilt — animation studio
+
+
+
+
+
+
TILT / ANIMATION
›
+
+ new clip
+
+
+
+
+
+
+
+
Reference video
+
+
+
Drop in movementUpload a side or ¾ view with the full body visible.MP4, WebM, or MOV supported by your browser. The file stays on this device.
+
+
+
+
+
Tilt rig previewNO TRACK
+
drag background to orbit · click a joint to edit · Q/W rotate gizmo