roto: video -> take file builder with interactive tuning
Analysis half of the pipeline in docs/roto-puppet.md. Stabilises a face out of a clip via a similarity fit on rigid landmarks, reduces the lip contour to a fixed vertex budget, selects sparse keys on velocity minima, and previews the result as flat indexed fills so timing can be judged without an Animator Pro render. - landmarks.js ordered lip/oval rings; slot position is vertex identity - mathutil.js closed-form 2D similarity, Procrustes mean, transform smoothing - pipeline.js stabilise -> subsample -> key-select - raster.js indexed scanline fill, no antialiasing - take.js take-file writer - selftest.js 29 assertions, incl. ring simplicity at every vertex budget Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
commit
7a6bdea157
13 changed files with 1277 additions and 0 deletions
20
selftest.html
Normal file
20
selftest.html
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<!doctype html>
|
||||
<html lang="en"><head><meta charset="utf-8"><title>selftest</title>
|
||||
<style>
|
||||
body{background:#0b0d13;color:#e8eaf0;font:13px/1.6 ui-monospace,Menlo,monospace;padding:20px}
|
||||
li{list-style:none} .p{color:#4ade80} .f{color:#f87171}
|
||||
b{font-weight:400;color:#8891a5} h1{font-size:14px}
|
||||
</style></head><body>
|
||||
<h1 id="head">running…</h1><ul id="out"></ul>
|
||||
<script type="module">
|
||||
import { run } from './js/selftest.js';
|
||||
let res;
|
||||
try { res = run(); }
|
||||
catch (e) { res = [{ name: 'harness threw: ' + e.message, pass: false, detail: String(e.stack).split('\n')[1] || '' }]; }
|
||||
const pass = res.filter(r => r.pass).length;
|
||||
const fail = res.length - pass;
|
||||
document.getElementById('head').textContent = `${fail === 0 ? 'PASS' : 'FAIL'} — ${pass}/${res.length} assertions`;
|
||||
document.title = `${fail === 0 ? 'PASS' : 'FAIL'} ${pass}/${res.length}`;
|
||||
document.getElementById('out').innerHTML = res.map(r =>
|
||||
`<li class="${r.pass ? 'p' : 'f'}">${r.pass ? '✓' : '✗'} ${r.name}${r.detail ? ` <b>${r.detail}</b>` : ''}</li>`).join('');
|
||||
</script></body></html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue