/** * Dynamic register — how the camera's body behaves (composed / elevated / * kinetic / violent) and the beat-locked strobe block. Composes with * `cutsClause` in `cinematography.ts`, which covers edit count and timing. * PURE and deterministic: no I/O, no Date, no Math.random. Extracted verbatim * from `cinematography.ts` (roadmap Phase 3a), which re-exports every public * name, so importers are unchanged. */ import type { DetailLevel } from './cinematography.js'; /** * Dynamic register — the energy dial (Joey 3.0 Cinema Director). * * Cinema mode says what KIND of scene this is; the dynamic register says how * hot the camera runs inside it. It is a separate axis because the two are * genuinely independent: a grief scene can be shot locked-off or with the * camera tearing around the subject, and both are correct choices for * different films. * * The tier binds three things that must agree or the shot reads incoherent — * cant range, camera physicality, and how much of the frame is allowed to be * still. Setting a violent cant with a composed cut rate produces a prompt * arguing with itself, so they travel together as one register rather than as * three flags. * * {@link cutsClause} already covers edit COUNT and timing; this covers the * camera's body. They compose. */ export declare const DYNAMIC_REGISTER_IDS: readonly ["composed", "elevated", "kinetic", "violent"]; export type DynamicRegisterId = (typeof DYNAMIC_REGISTER_IDS)[number]; export interface DynamicRegister { id: DynamicRegisterId; /** Dutch-cant swing in degrees; `[0, 0]` is locked-off. */ cantDegrees: readonly [number, number]; /** Camera-body prose — the physicality ladder rung for this tier. */ physicality: string; /** How much of the frame is allowed to settle. */ stillness: string; } export declare function dynamicRegister(id: DynamicRegisterId): DynamicRegister; /** * The camera-body clause for a dynamic register. * * Every tier except `composed` closes with the never-stabilized run AND the * smooth-in-its-own-travel clause. That last clause is load-bearing: without * it, "violent handheld" is read as permission to return broken footage rather * than energetic footage — the camera is meant to be moving hard, not the * frames to be dropping. */ export declare function dynamicRegisterClause(id: DynamicRegisterId): string; /** * THE STROBE — the flashing-light directive. * * Ships with two companions that are not optional. The **secondary glow** keeps * forms readable through the black intervals, or the subject disappears for * half the runtime. The **continuous-motion clause** says the bodies never * stop, only the light does — without it the model freezes the performers * between flashes and the take reads as a slideshow. * * The third companion lives elsewhere by necessity: pair this with * `captureCadenceBlock(..., { strobeQuarantine: true })`, which moves the * stepped quality onto the light and off the footage. Strobe without that * quarantine returns genuinely broken frames. * * Note for lipsync: hard flash-to-black eats roughly half the lip seals. When * both are wanted, soften the strobe on the singer so their face never drops * fully to black while background bodies keep the full treatment. */ export declare function strobeBlock(bpm: number, d: DetailLevel): string; //# sourceMappingURL=dynamic-register.d.ts.map