# CINEMA_MODES.yaml — Cinema Mode Framework SSOT
# ----------------------------------------------------------------------
# Catalog of cinematography building blocks (lenses, bodies, filters,
# stocks, grain, grades) + named modes that compose them by reference.
#
# Edit this file to add a new lens / filter / stock / grade / mode.
# Modes reference catalog ids — they NEVER inline prompt strings.
#
# Loaded by: recoil/pipeline/_lib/cinema_loader.py
# Consumed by: render_cinema_tokens() — called from prompt_engine.py
#              t2v + r2v + r2v_multi builders only (i2v skipped).
#
# Backward compatibility: absence of any `cinematography` block anywhere
# = zero behavior change (existing PROMPT_BIBLE film_stock_default path runs).
# ----------------------------------------------------------------------

schema_version: 1

catalogs:

  # ====================================================================
  # camera_bodies — sensor format + dynamic range
  # ====================================================================
  camera_bodies:
    arri_alexa_35:
      prompt_tokens: "ARRI Alexa 35, Super 35 format, 17-stop dynamic range"
    arri_alexa_mini_lf:
      prompt_tokens: "ARRI Alexa Mini LF, large-format sensor"
    sony_venice_2:
      prompt_tokens: "Sony Venice 2, full frame sensor"
    red_v_raptor:
      prompt_tokens: "RED V-Raptor, 8K VistaVision sensor"
    arriflex_35bl:
      prompt_tokens: "ARRI Arriflex 35BL, 4-perf 35mm motion picture camera, mechanical character, classic film-camera body"

  # ====================================================================
  # lens_systems — the heaviest creative lifter
  # `type: spherical | anamorphic` lets builders optionally append
  # anamorphic-specific framing tokens. Not used in Phase 1; reserved.
  # ====================================================================
  lens_systems:
    cooke_s4_spherical:
      # JT's house default — warm, smooth roll-off, classic cinematic.
      prompt_tokens: "Cooke S4/i spherical prime lenses, classic Cooke Look, smooth focus roll-off, warm organic rendering"
      type: spherical
    panavision_ultra_vintage:
      prompt_tokens: "Panavision Ultra Vintage anamorphic lenses, classic 2x squeeze, horizontal blue flares, distinct barrel distortion"
      type: anamorphic
    zeiss_super_speed:
      prompt_tokens: "Zeiss Super Speed prime lenses, sharp clinical rendering, vintage character"
      type: spherical
    canon_cn_e_zoom:
      prompt_tokens: "Canon CN-E 14.5-60mm cinema zoom, slightly cheap surveillance look"
      type: spherical

  # ====================================================================
  # filtration — in-camera diffusion
  # ====================================================================
  filtration:
    bpm_1_4:
      # Recommended for Tartarus (cartoon) — heavier halation hides
      # digital sharpness.
      prompt_tokens: "Tiffen Black Pro-Mist 1/4 filter, soft halation, glowing highlights"
    bpm_1_8:
      # Recommended for live-action (driver-beware) — subtle softening
      # without losing detail.
      prompt_tokens: "Tiffen Black Pro-Mist 1/8 filter, subtle halation, softened highlights"
    glimmerglass_1:
      prompt_tokens: "Glimmerglass 1 diffusion, glowing practicals, softened skin tones"
    clean:
      prompt_tokens: "no diffusion filters, clean optical path"

  # ====================================================================
  # film_stocks — base color science / emulation
  # ====================================================================
  film_stocks:
    vision3_500T:
      # Tungsten-balanced, low-light cinema stock — current baseline.
      prompt_tokens: "Kodak Vision3 500T 5219 film stock emulation, tungsten balanced"
    vision3_250D:
      # Daylight-balanced, lower grain, exteriors.
      prompt_tokens: "Kodak Vision3 250D film stock emulation, daylight balanced, fine grain"
    fuji_eterna_500T:
      prompt_tokens: "Fujifilm Eterna 500T emulation, low contrast, muted cinematic greens"
    kodak_5247:
      prompt_tokens: "Kodak 5247 color negative film stock emulation, 70s American New Wave era, rich midtones, slightly muted primaries"

  # ====================================================================
  # texture_grain — separated from film_stock so you can pair
  # 500T color with clean digital texture, or pushed 16mm grain on 250D.
  # ====================================================================
  texture_grain:
    grain_35mm_fine:
      prompt_tokens: "fine 35mm film grain, organic texture"
    grain_35mm_400asa:
      prompt_tokens: "moderate 35mm film grain, 400 ASA texture"
    grain_16mm_pushed:
      prompt_tokens: "heavy 16mm film grain, 1-stop push processing texture, 800 ASA"
    grain_clean_digital:
      prompt_tokens: "clean digital capture, no perceptible grain"
    grain_35mm_pushed_70s:
      prompt_tokens: "heavy 35mm pushed film grain, organic chroma noise, tactile cinematic texture"

  # ====================================================================
  # color_grades — final DI look
  # ====================================================================
  color_grades:
    teal_amber_split:
      prompt_tokens: "teal and amber split color grade, cinematic color contrast, rich shadows"
    desaturated_cool:
      prompt_tokens: "desaturated cool color palette, steel blues, muted warm tones"
    bleach_bypass:
      prompt_tokens: "bleach bypass color grade, desaturated highlights, crushed blacks"
    golden_warm:
      prompt_tokens: "warm golden hour color grade, lifted shadows, soft orange-magenta highlights"
    seventies_print_warm:
      prompt_tokens: "warm desaturated 70s print look, Kodachrome inspired, dense shadows, earthy muted palette, slight green-yellow bias in highlights"

# ======================================================================
# modes — compositional packages that reference catalog ids
# Modes ALWAYS reference catalog ids; NEVER inline prompt strings.
# Adding a new mode = add one block here that names existing catalog ids.
# `aperture` and `shutter` are simple string modifiers (not catalog refs)
# per Gemini §3 — they're numeric/scalar, not a multi-token block.
# ======================================================================
modes:

  narrative_cinematic:
    # JT's default — Cooke S4/i, BPM 1/8, 500T, 35mm fine grain, teal-amber.
    # The mode the project_config default points to unless overridden.
    body: arri_alexa_35
    lens: cooke_s4_spherical
    filtration: bpm_1_8
    stock: vision3_500T
    grain: grain_35mm_fine
    grade: teal_amber_split
    aperture: "T2.8"
    shutter: "180-degree shutter"

  kinetic_action:
    # Higher shutter (skinny) for sharper motion, pushed 16mm grain.
    body: sony_venice_2
    lens: cooke_s4_spherical
    filtration: clean
    stock: vision3_500T
    grain: grain_16mm_pushed
    grade: teal_amber_split
    aperture: "T4.0"
    shutter: "45-degree skinny shutter"

  surveillance_doc:
    # Documentary surveillance — RED, zoom, daylight stock, no diffusion.
    body: red_v_raptor
    lens: canon_cn_e_zoom
    filtration: clean
    stock: vision3_250D
    grain: grain_clean_digital
    grade: desaturated_cool
    aperture: "T5.6"
    shutter: "180-degree shutter"

  golden_hour:
    # Exterior magic-hour intimate — Alexa LF + Cooke, warm grade.
    body: arri_alexa_mini_lf
    lens: cooke_s4_spherical
    filtration: glimmerglass_1
    stock: vision3_250D
    grain: grain_35mm_fine
    grade: golden_warm
    aperture: "T2.8"
    shutter: "180-degree shutter"

  noir_tension:
    # Hard-edged, clinical — Zeiss Super Speeds, bleach bypass, 500T.
    body: arri_alexa_35
    lens: zeiss_super_speed
    filtration: bpm_1_4
    stock: vision3_500T
    grain: grain_35mm_400asa
    grade: bleach_bypass
    aperture: "T2.0"
    shutter: "180-degree shutter"

  cartoon_tartarus:
    # Project-tuned for the cartoon Tartarus look — heavier halation
    # via BPM 1/4 (JT memo line in catalog), warm Cooke render.
    body: arri_alexa_35
    lens: cooke_s4_spherical
    filtration: bpm_1_4
    stock: vision3_500T
    grain: grain_35mm_fine
    grade: teal_amber_split
    aperture: "T2.8"
    shutter: "180-degree shutter"

  seventies_new_wave_arriflex_cookes4:
    body: arriflex_35bl
    lens: cooke_s4_spherical
    filtration: clean
    stock: kodak_5247
    grain: grain_35mm_pushed_70s
    grade: seventies_print_warm
    aperture: "T2.0"
    shutter: "180-degree shutter"
    default_constraints:
      - no_modern_color_grade
      - no_digital_sharpness
      - no_text_overlays
      - no_smooth_video_look
