12to6

Autonomous animation that ships as data.

Two characters moving concurrently in one shared frame, frame-accurate, dropped straight into Unreal or Unity. Every other AI tool gives you a video you can only watch.

  • FBX, GLB, BVH
  • Two fighters, one file
  • Contacts annotated
double-leg.12624 fps · scripted preview
{{ demo }}
Hand-scripted to the notation, not model output. Click a token to jump; space plays, arrows step frames. The v0.1 clip replaces this player when training finishes.

One file lands in the tools animators already use.

  • Blender
  • Unreal Engine
  • Unity
  • Maya
  • Mixamo
  • ComfyUI
F1F2contact

Both fighters move at once

The slip happens while the jab travels. Two coupled tracks on one clock, in one shared world frame, not two clips played back to back.

handR_Ahead_Bf031f034 CONTACT

Contacts are first-class data

The glove meets the chin on the frames the choreography says it does, and an IK pass re-solves it after retargeting.

F1+F2origin 0 .fbx.glb.bvh

Retarget without losing the hit

Mixamo, Unreal Manny, Unity Humanoid. Both fighters ship in one file on a shared origin, so the takedown still connects.

{F1}1,slip R,1-2 {F2}-> sprawl

Choreography as code

Strikes by number, defenses with side, footwork, level changes. An arrow hands the beat to the other fighter; a plus makes them act together.

Write the interaction. Get the animation.

Any two-body exchange is a script: actions, reactions, and who moves when. Build one below and watch both characters resolve it. Scripted poses for illustration, not model output.

{{ parseNote }}

{{ g.label }}

->
reaction, plays in the same beat as the action
+
both fighters act together
,
next beat
{{ playground }}
Blue tick: a strike that lands because the concurrent reply did not move the head.

Factorized reactive diffusion

David Nash (2026). 12-6: Factorized Reactive Diffusion for Notation-Conditioned Dyadic Motion Generation. Technical report, in preparation.

Task

Given a compiled notation sequence c, sample a pair of motions, N frames of a D-dimensional pose vector per fighter.

Two motion tracks, one script.

Core factorization

The two fighters are generated as a coupled pair, not as two independent motions.

Diffusion engine

The model learns to recover the clean choreography from noise. Predicting the motion itself lets us add geometric losses: joint positions via forward kinematics, velocities, and a foot-contact term that pins planted feet.

{{ denoise }}

Guided sampling

A guidance dial s trades diversity for strict adherence to the notation.

{{ trails }}

{{ sNote }} Synthetic curves for illustration: ten sampled lead-hand paths against the notated jab, dashed.

Contact semantics

Contacts are first-class data. The glove meets the chin on the frames the choreography says it does, and an inverse-kinematics pass re-solves those contacts after retargeting to any rig.

{{ contactViz }}

Representation

Each fighter, each frame: a compact per-frame feature of root motion, joint positions and velocities, 6D rotations, and foot contacts, with both fighters in one shared, non-canonicalized world frame.

The interaction lives in the relative geometry. Canonicalize each body separately and the fight disappears, so we don't.

Data

Trained exclusively on our own multi-camera sparring corpus, captured with consenting fighters under signed releases and labeled in 12-6 notation. No non-commercial research datasets (InterHuman, Inter-X, AMASS) touch our pipeline.

Frequently asked questions

{{ q.a }}

12to6

Ready to generate the whole fight?

Early access when v0.1 lands, the notation spec when it publishes, and nothing else.