/** * Cinema profile resolution. * * The single place that decides a project's default cinematography register. * Joey 2.0 principle: "photorealism is the universal default, dial down by * exception" — so with ZERO flags and no project override, a project resolves to * the full detailed treatment (rich + realism + prose). Callers dial DOWN via * the project manifest's `cinemaProfile` block or per-call CLI overrides. * * Precedence (highest wins): * 1. CLI override (per invocation) * 2. project.cinemaProfile (persisted on the manifest) * 3. genre default (per-genre look policy) * 4. HARD DEFAULT (the universal photoreal baseline) * * Pure/deterministic: no Date, no Math.random, no I/O. */ import type { VideoCinemaProfile } from './workspace.js'; export type CinemaDetail = 'terse' | 'standard' | 'rich'; export type CinemaRegister = 'prose' | 'numeric'; export type CinemaHaze = 'thin' | 'light' | 'heavy'; export type CinemaPlateKind = 'mid-gray' | 'white' | 'black'; export type CinemaCaptureRegister = 'cinema' | 'phone'; /** * A fully-resolved cinema profile — every field is concrete (no `undefined`), * so downstream emitters never re-apply defaults. */ export interface ResolvedCinemaProfile { detail: CinemaDetail; realism: boolean; register: CinemaRegister; haze: CinemaHaze; wet: boolean; /** Lighting register id; `undefined` means "use the emitter's own default". */ lightingId?: string; /** Color-grade register id; `undefined` means "use the emitter's own default". */ gradeId?: string; plateKind: CinemaPlateKind; captureRegister: CinemaCaptureRegister; } /** * A per-call override layer (e.g. parsed CLI flags). Same shape as the persisted * {@link VideoCinemaProfile}; every field is optional and wins over the project + * genre + hard-default layers when present. */ export type CinemaProfileOverrides = VideoCinemaProfile; /** * Resolve the effective cinema profile for a render. * * @param manifestProfile the persisted `project.cinemaProfile` (or undefined). * @param cliOverrides per-call overrides (parsed CLI flags, or undefined). * @param genre the resolved genre/style id (drives the genre layer + * the hard-default capture register). Aliases are * resolved internally via {@link resolveGenreStyle}. */ export declare function resolveCinemaProfile(manifestProfile: VideoCinemaProfile | undefined, cliOverrides: CinemaProfileOverrides | undefined, genre: string | undefined): ResolvedCinemaProfile; //# sourceMappingURL=cinema-profile.d.ts.map