Frame removal for plates; mouth keeps every frame
Sparseness was being applied for two different reasons at once. Aesthetic sparseness is set by the extraction rate; labour sparseness only binds on the plate, because a human draws each one. The mouth is traced and therefore free, and in limited animation lip sync is routinely the densest element - on 1s while heads hold on 2s and 3s. So: the mouth gets a key on every frame, and the frame strip is now the editing surface for deciding which frames need their own plate drawing. All frames start kept; delete the ones you don't want. - strip of face-cropped thumbnails, keep/drop per frame, keyboard driven - worksheet panel lists the drawings needed and the range each one holds - Suggest runs error-tolerance decimation on head pose as a starting point - export writes sparse plate keys + dense mouth keys, with a hold manifest - smoothContours: bounded exception to "never smooth the contour", which held only while keys were sparse enough to reject detector noise by sampling - averages are now a RADIUS in frames: 0 is off, 1 is +-1 - GPU delegate falls back to CPU instead of failing - #synth / #frames autorun for headless smoke tests Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
7a6bdea157
commit
a082208ad5
7 changed files with 489 additions and 265 deletions
|
|
@ -91,7 +91,7 @@ export function run() {
|
|||
`s=${got.s.toFixed(6)} th=${got.theta.toFixed(6)}`);
|
||||
|
||||
// stabilisation: head motion out, mouth motion kept
|
||||
const stab = stabilize(dense, 1);
|
||||
const stab = stabilize(dense, 0);
|
||||
const rawSpread = spreadX(dense, 133);
|
||||
const stabSpread = (() => {
|
||||
const xs = stab.eyes.map((e) => e[0].x);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue