From the conformance audit (ariki-game .agents/audits/animation-standard-assessment-2026-07-23.md): - tools/: cc_retarget + mixamo_retarget re-synced from ariki-game (were stale forks missing --despike/--fingers/--map ual); kevin_retarget path now repo-relative; mirror rule documented in exchange/GUIDE.md - INBOX/lena: add canonical Ariki_Female_QuatSkin.glb; README marks MixamoSkin superseded - REGISTRY: tide_dance_01 flagged (no DanceType enum entry); rain_dance note corrected (RainDance IS in the enum); boat table notes live canoedismount1/run_to_dive; QC split (loop_qc pre-commit vs anim_qc post-ingest) documented - docs/iclone-bridge.md: stub created (GUIDE referenced it but it never existed) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
8.6 KiB
exchange/ — Folder guide for agents
This folder is the Mac↔PC bridge for the animation pipeline (iClone on the PC ↔ ariki-game on the Mac). Every file in here is in transit on one of the tracks below. If you are an agent dropping files into this repo, or processing a batch, this file tells you which folder to use, when a file moves to the next stage, and when the previous version gets archived.
Related docs: docs/dances/REGISTRY.md (naming — the source of truth),
docs/iclone-bridge.md (PC-lane overview), and the animation skill (batch workflow details).
Tool mirroring rule (audit 2026-07-23): the retargeters in tools/
(cc_retarget.py, mixamo_retarget.py, kevin_retarget.py, mocap_retarget.py) are
mirrors of ariki-game/tools/ — the game copies are authoritative. Never edit them
here; re-copy from ariki-game when they change (they silently diverged once already:
2026-07-15 → 2026-07-23, losing --despike/--fingers/--map ual).
Folder map — EDIT PATHS HERE ONLY
Folder locations may change. Every rule in this guide refers to folders by the KEY below, never by a hardcoded path. If a folder moves, update this table (and nothing else in this file).
| KEY | Current path | One-liner |
|---|---|---|
INBOX |
exchange/INBOX/ |
Untriaged drop zone for anything sent to Jeremy |
INCOMING_FBX |
exchange/incoming-fbx/ |
Accepted FBX takes queued for retargeting |
CONVERTED_GLB |
exchange/converted-glb/ |
Retargeted game-ready GLBs (base clips) |
LOOPED_GLB |
exchange/looped-glb/ |
Seam-fixed loop variants from tools/loop_fix.py (created on demand) |
PINGPONG_GLB |
exchange/pingpong-glb/ |
Palindrome _pp loop variants from tools/pingpong_bake.py |
OUTGOING_PROPS |
exchange/outgoing-props/ |
Game → iClone direction: staging props + source motions for iClone editing |
REFERENCE_VIDEO |
exchange/reference-video/ |
Choreography/mocap reference footage |
ICLONE_PROJECTS |
exchange/workingfiles-iclone/ |
iClone .iProject working-file backups |
ARCHIVE |
archive/ (repo root) |
Rejected/superseded files — mirrors the exchange subfolder names |
GAME_DANCEGEN |
<ariki-game>/assets/quaternius/dancegen/ |
Final GLB destination in the game repo |
GAME_DANCES |
<ariki-game>/assets/dances/ |
Dance JSON destination in the game repo |
Notes that apply everywhere:
- Binary formats (
.fbx,.glb,.mp4,.task) go through Git LFS; push withtinqs push. - Move, never delete. Anything obsolete goes to
ARCHIVE(see archiving rules at the bottom). - Stage files by explicit path — never
git add -A(this repo often has unrelated in-flight work).
Track 1 — INBOX triage (anyone → Jeremy)
Folder: INBOX
The only folder outside agents should ever write to. Drop whatever you're sending
(FBX, textures, JSON, video, etc.), commit, push. Do not place files directly
into the pipeline folders and do not reorganize the rest of exchange/.
| Event | Action |
|---|---|
| File arrives | Sits in INBOX untouched until Jeremy (or a session he directs) triages it |
| Triaged as an animation take | Move to INCOMING_FBX → enters Track 2 |
| Triaged as reference footage | Move to REFERENCE_VIDEO → Track 4 |
| Triaged as anything else | Jeremy decides; ask, don't guess |
| Junk / duplicate | Move to the matching ARCHIVE subfolder |
INBOX should trend toward empty — a file living there long-term means triage
was missed.
Track 2 — Animation intake (iClone/PC → game) — the main track
Stages: INBOX → INCOMING_FBX → CONVERTED_GLB (+ loop variant in
PINGPONG_GLB or LOOPED_GLB) → copied to GAME_DANCEGEN + JSON in GAME_DANCES.
A "take" is a file set that always travels together: <take>.fbx +
<take>.json + <take>.fbm/ texture folder (when present). Move all three,
always.
| Stage | What lives here | Moves forward when |
|---|---|---|
INCOMING_FBX |
Raw iClone FBX exports (1800f @ 60fps typical) awaiting retarget | Retargeted via tools/cc_retarget.py → GLB written to CONVERTED_GLB |
CONVERTED_GLB |
Game-ready GLB, named per the registry (nd_## provisional, ceremony code once adopted) |
Copied (not moved) into GAME_DANCEGEN with a dance JSON |
PINGPONG_GLB / LOOPED_GLB |
The loop variant (<pack>_pp / seam-fixed). Every shipped dance is a pair: base + loop. Must pass tools/loop_qc.py (exit 0) |
Copied into GAME_DANCEGEN alongside the base clip |
Rules on this track:
- Naming: new takes get the next free
nd_##fromdocs/dances/REGISTRY.mdat conversion — never a content name. Update the registry row at every conversion/adoption/archive. - FBX stays in
INCOMING_FBXafter conversion (it's the re-export source) until its take is adopted or rejected. - The GLB is copied to the game repo, not moved —
CONVERTED_GLBkeeps the canonical copy.
Archive triggers (move old version → matching ARCHIVE subfolder):
| Trigger | What to archive |
|---|---|
| A re-export of the same take arrives (same choreography, new FBX) | The old FBX set from INCOMING_FBX and its old GLBs from CONVERTED_GLB/PINGPONG_GLB/LOOPED_GLB |
| Take is rejected | Its entire file set across all stage folders (and archive/dances/ on the game side) |
Take is adopted (renamed nd_## → ceremony code via tools/rename_clip.py) |
The old nd_##-named files, once the renamed set is verified in-game |
Never archive mid-batch — wait until Jeremy confirms the batch looks right in-game.
Track 3 — Outgoing to iClone (game/Mac → PC)
Folder: OUTGOING_PROPS
The reverse direction: anything exported from the game side for use inside iClone. Two kinds live here today:
- Staging props (e.g.
boat/— built bytools/export_boat_prop.py, with renders for eyeball QA). Each prop gets its own subfolder with a README. - Source motion FBX (Mixamo/Kevin-Iglesias clips like
Swimming.fbx) sent over as raw material for iClone editing. Note: some earlier source-motion drops (theHumanM@Mining*set) landed inINCOMING_FBX; going forward, game→PC source motions belong here.
| Event | Action |
|---|---|
| New version of a prop | Overwrite in place (git history is the archive for props) — but render and eyeball before shipping; a green verify gate has passed a visually-wrong prop before |
| PC has consumed the files and the resulting take shipped | Leave in place until Jeremy says to clean up |
Track 4 — Reference footage
Folder: REFERENCE_VIDEO
Choreography/mocap reference videos (inputs for iClone Video Mocap and for
pose-estimation scoring). These are inputs, not pipeline items — they don't
advance through stages.
| Event | Action |
|---|---|
New reference arrives (usually via INBOX) |
Move here |
| The dance it references is adopted and shipped | Video becomes archivable — ask Jeremy before moving (these are large LFS objects; he may want them kept for re-scoring) |
Track 5 — iClone working files
Folder: ICLONE_PROJECTS
.iProject backups from the PC so iClone sessions can be resumed/recovered.
These are big (100 MB+) LFS blobs.
| Event | Action |
|---|---|
| Newer save of the same project | Overwrite in place — git history keeps priors |
| Project's takes all adopted or rejected | Archivable on Jeremy's call only |
Archiving rules (all tracks)
ARCHIVEmirrors the exchange subfolder names — a file fromINCOMING_FBXgoes toARCHIVE/incoming-fbx/, a GLB fromCONVERTED_GLBtoARCHIVE/converted-glb/, etc. If a mirror subfolder doesn't exist yet, create it.git mv, never delete. Archived files keep their names; nothing inARCHIVEis ever renamed or reused.- Registry numbers are never reused. An archived
nd_03retires the number forever. - Every archive action gets a registry update (
docs/dances/REGISTRY.md) when it involves a tracked dance. - Game-side counterparts (GLBs/JSON already copied into ariki-game) archive to
<ariki-game>/archive/dances/(which is.gdignored), in the same commit cycle.
Quick decision table
| You are… | You should… |
|---|---|
| An outside agent sending files | Drop in INBOX, commit, push. Touch nothing else. |
| Processing a new batch | Follow Track 2 top to bottom; read the animation skill first |
| Delivering game assets to the PC/iClone | Put them in OUTGOING_PROPS (subfolder per prop) |
| Holding a newer version of something already here | Same-name working files: overwrite. Pipeline takes: move the old set to ARCHIVE first (Track 2 triggers) |
| Unsure which track applies | Leave it in INBOX and say so — wrong-folder moves are worse than no move |