import { Document } from '@gltf-transform/core'; import type { BoneMap } from './retarget'; import type { CanonicalSkeleton } from './conform'; export interface RetargetClipResult { document: Document; meta: { name: string; duration: number; loop: boolean; rootMotion: boolean; strideSpeed: null; additive: false; }; frames: number; /** helix bones that received a retargeted rotation track */ animatedBones: string[]; } /** * Retargets a source animation CLIP onto the canonical `helix-humanoid@1` skeleton via world-space * motion transfer (the architecture §6.2 / three-vrm approach): each mapped bone's WORLD-space rotation * delta from the SOURCE rest is re-applied to the TARGET rest, then converted back to the target's local * frame. Because the motion is transferred as a delta-from-rest in world space, the source↔target * bone-axis convention cancels — the same reason the mesh embed is convention-proof. Root (pelvis) * translation is retargeted as an in-place bob/sway scaled to the target's hip height. Unmapped target * bones (spine_02/04, twists, fingers) stay at rest. Output is a clip-only GLB (canonical skeleton * nodes + one animation + a verification-only skin, no mesh) — the platform clip format. The skin * keeps the canonical joint list machine-verifiable at Vault ingestion without adding render bytes. */ export declare function retargetClip(source: Document, canon: CanonicalSkeleton, boneMap: BoneMap, clipName: string, options?: { loop?: boolean; }): RetargetClipResult;