arthur/js
Your Name 29b0bd6690 Fix horizontal stretch from MediaPipe's anisotropic normalised space
MediaPipe normalises x by image WIDTH and y by image HEIGHT, so for a 1080x1920
clip one unit of x is 1080px and one unit of y is 1920px. makeXform applied a
single scale to both, stretching everything horizontally by H/W - 1.78x on this
footage. The photo underlay looked equally squashed because frameAffine divided
x by imgW, matching the equally wrong vector shapes rather than disagreeing
with them.

Fixed at ingest: landmarks convert to an isotropic space whose unit is one image
height (x *= W/H), so equal numbers mean equal pixels everywhere downstream.
Pixel mapping follows - both axes divide by imgH.

This also silently fixes head roll. fitSimilarity was fitting a rotation in a
sheared space, so the "similarity" it recovered was not one, and stabilisation
of rolled heads was subtly wrong.

selftest: a shape circular in pixel space must stay circular in raster space,
checked at 1080x1920, 1920x1080 and 640x640. Fails at ratio 1.78 without the
conversion.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-24 15:03:12 -04:00
..
app.js Fix horizontal stretch from MediaPipe's anisotropic normalised space 2026-09-24 15:03:12 -04:00
landmarks.js roto: video -> take file builder with interactive tuning 2026-09-24 14:38:07 -04:00
mathutil.js Frame removal for plates; mouth keeps every frame 2026-09-24 14:51:15 -04:00
pipeline.js Fix horizontal stretch from MediaPipe's anisotropic normalised space 2026-09-24 15:03:12 -04:00
raster.js roto: video -> take file builder with interactive tuning 2026-09-24 14:38:07 -04:00
selftest.js Fix horizontal stretch from MediaPipe's anisotropic normalised space 2026-09-24 15:03:12 -04:00
synth.js roto: video -> take file builder with interactive tuning 2026-09-24 14:38:07 -04:00
take.js Audio-clocked playback for judging sync 2026-09-24 14:53:09 -04:00
underlay.js Fix horizontal stretch from MediaPipe's anisotropic normalised space 2026-09-24 15:03:12 -04:00