Skip to content

Reze MiPo 5.0

Latest

Choose a tag to compare

@AmyangXYZ AmyangXYZ released this 28 Aug 13:55
· 4 commits to main since this release

Previously MiKaPo. Same project, now named for the family it belongs to — alongside reze-engine, reze-design, reze-studio and reze-rig.

The solver was rebuilt this release, one technique at a time, each webcam-tested before the next went in — and then measured against recorded video by a harness built for the purpose.

Capture

  • The z channel is filtered alone. x and y come off the image; z is inferred and carries the noise. Low-passing that one channel before solving took torso wobble from 6.7°/frame to 0.3°.
  • Every signal gets the filter it deserves. A spine turns slowly and a fingertip does not, so each measured direction is smoothed as its own named signal — in the frame it was measured in, renormalised after, with cutoffs that follow the body and slow for a subject small in frame. About a quarter less movement per frame across the arms on noisy footage.
  • Roll is solved from a witness, and guarded. The forearm reveals how the upper arm is twisted, weighted by how observable that twist is. A witness basis flips when the limb it reads passes through the parent's own axis, so past 110° of disagreement it fades out: that is the basis flipping, not a limb rolling half a turn between frames.
  • A body faces one way. A neck may turn a hundred degrees from its chest and a chest sixty from its hips, and what is asked past that is eased back until it fits. The trunk, the chest and the head are each solved from different landmarks and nothing used to require them to agree, so a detector reading one of them backwards produced a head facing behind a chest facing front.
  • The spine splits the twist. What the chest does relative to the hips is halved between 上半身 and 上半身2, so the waist carries 17° where it used to carry all 34°. Which square root of that twist is taken is chosen for continuity — the nearer one changes as a body turns past a half circle, and taking it blindly threw the neck, head and both arms a half turn while the chest still composed correctly.
  • The arm's twist goes on the bone built to carry it. 腕捩 and its three followers exist so a rotating forearm carries the sleeve around instead of pinching. Up to 96° of that turn had been sitting on 腕 and twisting the whole upper arm from the shoulder.
  • Limbs the camera cannot see stay still. A bone is only as sound as the landmark its segment is least sure of, so the gate takes the worst rather than the average — a hip at 0.62 no longer carries a knee at 0.23 past it. Legs hold a slow state on top: out of shot half a second and they rest. Framed from the waist up, leg movement per frame falls from about 12° to about 3°.
  • A frame whose bones are the wrong length is refused. The detector's confidence does not report this — it rates a body reconstructed inside out at 0.999 — but the distance across the shoulders is a bone, and when a detection collapses it drops to a quarter of what it was.
  • Dropouts crossfade, and a gap is not a loss. A bone holds its last measurement for 250ms, eases to rest over 500ms, and eases back over 250ms. Ordinary detection gaps cost nothing.
  • Capture is in place. センター carries height, so crouches and level changes land while the character holds its mark.
  • The display plays instead of chasing. A cursor advances along the media timeline and interpolates the two results bracketing it: ~10ms less latency and 7 points more amplitude on fast motion.

Export

An export has every frame's neighbours, which live capture never will.

  • Landmarks are cleaned before anything is solved — a median of three removes single-frame outliers, then a zero-phase fit smooths what remains, hardest on z.
  • The take is solved once, forwards, with the filters opened up because a zero-phase fit follows and removes the lag they leave: 3.14° → 1.73° RMS against ground truth.
  • Keyframes are reduced to the ones that decide a track's shape, bounded at half a degree and three millimetres — about a seventh of the keys, for a file an animator can open and edit.
  • Motions are named after the footage they came from.

Interface

  • The capture panel is a window: drag it, resize it, and it comes back where you left it.
  • One media source. The file's own type decides whether it opens as video or as a still.
  • Uploads survive a refresh — your model and your footage are kept in IndexedDB.
  • The design language is now shared with reze.design and reze.studio, down to the wordmark.

Measuring it

harness/ records what MediaPipe actually says about a real clip once, in a headless browser, then replays that recording through the real solver in plain Node — reporting per bone how far it moves between frames, its worst single step, and its roll. Roll is the channel a landmark preview can never show: the stick figure is identical whichever way a limb is twisted, which is why several of the bugs above survived every earlier round of testing and were caught in an afternoon once something was watching it.

Try it