source + landmarks
outer lip — · inner lip — ·
lids — · iris — ·
brows —
stabilised (head-local)
should sit still except the mouth and eyes · grey = held plate outline
dark green ghost = unshifted mouth when lead ≠ 0 · red lid ring = blink
dark green ghost = unshifted mouth when lead ≠ 0 · red lid ring = blink
flat render — 320×200 indexed
audio drives the clock — dropped frames, never drift
exposure holds the picture on a grid: rip at 24, render on 2s for 12. The dense track and the audio are untouched, so it is reversible
plate representation: B cycles · photo modes are registered into raster space, so tracing them lands on the mouth
exposure holds the picture on a grid: rip at 24, render on 2s for 12. The dense track and the audio are untouched, so it is reversible
plate representation: B cycles · photo modes are registered into raster space, so tracing them lands on the mouth
frames — green kept (gets its own drawing) · dim held from the last kept frame
← → step · X delete · K keep · B background ·
[ ] lead ·
click to select · double-click or shift-click to toggle ·
the mouth keeps every frame regardless
knobs
mouth lead shifts the performance tracks earlier (positive) against
the audio and the head. Averaging has no phase lag but it blurs onsets, so
an opening reads later than it is; animators also draw mouths a frame or
two ahead of the sound as standard practice. [ ].
contour avg 0 = off, 1 = ±1 frame. Removes per-frame landmark jitter. Push past 2 and it starts eating articulation.
anchor avg smooths the head transform only — never the contour.
teeth contrast gates on how far apart the cavity's dark and bright halves are — Otsu always returns some threshold, so this is what stops it inventing teeth in a dark mouth. cavity erode pulls the sampled region in from the lip edge; blob grow/erode resizes the found blob itself. tongue reject drops pixels that are red relative to their own brightness; prefer upper biases component choice toward the top of the cavity, where teeth are and the tongue is not. dwell is how many frames a presence change must persist.
blink cut is lid gap over corner distance — normalised, so one value carries across takes. blink hold is the minimum length of a blink: a real blink is one frame at 12fps and a single frame of closed eye reads as a dropout, so it is extended to a beat. brow step and brow dwell quantise the brow's HEIGHT above the eye, not its shape — the traced ring is his, the height snaps between a few levels and holds. Both ends move independently, so raise and tilt come out of one control: both up is surprise, inner up is worry, inner down is anger. brow weight thickens the ring, which it needs at three pixels tall.
pupil is a square, in whole pixels, 0 to turn it off: at this size a circle of radius 1.5 is a plus sign with the corners gnawed off and it changes shape as it moves, where a square stays the mark you drew.
gaze step is the grid the iris snaps to, in raster pixels, and gaze dwell is how long a new cell must hold — together they turn drift into saccades. gaze gain exaggerates or damps the throw; measured excursion is small and a character usually wants more of it.
suggest tolerance only affects the Suggest button: max head movement allowed before a new drawing is required.
contour avg 0 = off, 1 = ±1 frame. Removes per-frame landmark jitter. Push past 2 and it starts eating articulation.
anchor avg smooths the head transform only — never the contour.
teeth contrast gates on how far apart the cavity's dark and bright halves are — Otsu always returns some threshold, so this is what stops it inventing teeth in a dark mouth. cavity erode pulls the sampled region in from the lip edge; blob grow/erode resizes the found blob itself. tongue reject drops pixels that are red relative to their own brightness; prefer upper biases component choice toward the top of the cavity, where teeth are and the tongue is not. dwell is how many frames a presence change must persist.
blink cut is lid gap over corner distance — normalised, so one value carries across takes. blink hold is the minimum length of a blink: a real blink is one frame at 12fps and a single frame of closed eye reads as a dropout, so it is extended to a beat. brow step and brow dwell quantise the brow's HEIGHT above the eye, not its shape — the traced ring is his, the height snaps between a few levels and holds. Both ends move independently, so raise and tilt come out of one control: both up is surprise, inner up is worry, inner down is anger. brow weight thickens the ring, which it needs at three pixels tall.
pupil is a square, in whole pixels, 0 to turn it off: at this size a circle of radius 1.5 is a plus sign with the corners gnawed off and it changes shape as it moves, where a square stays the mark you drew.
gaze step is the grid the iris snaps to, in raster pixels, and gaze dwell is how long a new cell must hold — together they turn drift into saccades. gaze gain exaggerates or damps the throw; measured excursion is small and a character usually wants more of it.
suggest tolerance only affects the Suggest button: max head movement allowed before a new drawing is required.
gaze field
green = every cell the iris visits in the take ·
grey = raw · amber = where it is now, quantised
teeth measurement
green = kept pixels · amber = extracted contour
palette
Flat indexed fills, no antialiasing — the rasteriser writes palette
indices, the way
csd_render_poly does.