schema_version: "2.0"
purpose: "Independent feature technical specification set"
instructions:
  - "Replace every value beginning with REPLACE or NO DEFAULT."
  - "Accept the supplied baseline or record an override and its test result."
  - "Remove a specification only when it is not applicable and record the reason."
controlled_states:
  - "WIP"
  - "in review"
  - "approved"
  - "rejected"
  - "final"
  - "delivered"
  - "superseded"

document_control_defaults: &document_control
  show: "REPLACE with project title and code"
  spec_id: "REPLACE with project-subject-SPEC"
  revision: "v001"
  issued: "REPLACE with ISO date, time, and time zone"
  effective: "immediately"
  supersedes: "none"
  prepared_by: "REPLACE with person, role, company, and contact"
  approved_by: "REPLACE with production and technical approvers"
  issued_to: []
  acknowledgments: []
  authoritative_location: "REPLACE with production-controlled location"

specifications:
  image_pipeline:
    document_control: *document_control
    production_values:
      pipeline_lead: "NO DEFAULT - MUST BE SPECIFIED"
      principal_camera_inputs: "NO DEFAULT - MUST BE SPECIFIED"
      project_timebase: "23.976 fps progressive"
      off_speed_policy: "Record sensor and playback rates, then interpret at project timebase"
      working_raster: "3840x2160 UHD container"
      framing_chart: "REPLACE with chart revision and active aspect ratio"
      extraction_and_common_center: "Preserve the approved camera extraction and center"
      anamorphic_squeeze: "1.0"
      desqueeze_stage: "Monitoring and dailies preview only, with VFX geometry set by plate spec"
      color_management_and_version: "ACES 2.0 with one pinned OCIO configuration. Do not change the system or version after approval."
      ocio_version_and_config: "REPLACE with version, filename, release, and SHA-256"
      config_location: "REPLACE with production-controlled package"
      scene_referred_interchange: "ACES2065-1 when required"
      vfx_working_and_render_space: "ACEScg"
      grading_space: "ACEScct"
      creative_transform: "NO DEFAULT - MUST BE SPECIFIED"
      per_shot_cdl_handling: "Apply to dailies and include final CDL values with VFX plate packages"
      viewing_transform: "REPLACE with complete working-image-to-display path"
      sdr_output: "Rec.709 / BT.1886, 100 cd/m2"
      theatrical_gamut_and_white: "not planned until funded or required; P3DCI for a standard theatrical DCP"
      theatrical_encoding_and_transfer: "not planned until funded or required; DCI X'Y'Z' / Gamma 2.6 for a standard theatrical DCP"
      theatrical_luminance: "not planned until funded or required; 48 cd/m2 for a standard theatrical DCP"
      hdr_plan: "not planned"
      hdr_mastering_display: "not applicable"
      hdr_sdr_derivation: "not applicable"
      dolby_vision: "no"
      dolby_vision_responsibility: "not applicable"
      mastering_display_metadata: "not applicable"
      maxcll: "not applicable"
      maxfall: "not applicable"
      dynamic_hdr_metadata: "not applicable"
      di_approval_display: "NO DEFAULT - MUST BE SPECIFIED"
      other_approval_surfaces: "Reference only unless separately qualified"
      graphics_input: "Tagged sRGB through the documented graphics input transform"
      texture_and_lens_effects: "Apply after VFX in the DI"
      resize_policy: "REPLACE with department, stage, filter, raster, and VFX return geometry"
      negative_policy: "Preserve until a named output requires clamping"
      nan_and_infinity_policy: "Reject or repair before DI delivery"
      out_of_gamut_policy: "Use the approved transform or gamut-compression method"
      config_update_procedure: "Issue revision, rerun tests, notify recipients, record acknowledgment"
    approval_test:
      test_shot: "REPLACE with representative shot ID"
      evidence: "REPLACE with files, hashes, difference result, approvers, date, and exceptions"

  dailies_and_editorial_proxies:
    document_control: *document_control
    production_values:
      editorial_application_and_project: "NO DEFAULT - MUST BE SPECIFIED"
      proxy_codec_and_wrapper: "ProRes Proxy QuickTime"
      proxy_raster: "1920x1080 with approved framing"
      proxy_frame_rate: "match project timebase"
      timecode: "preserve source timecode and camera-roll identity"
      camera_metadata: "preserve source identity, lens, exposure, white balance, and source rate"
      sound_sync: "48 kHz production audio with source metadata and channel mapping"
      color_processing: "approved camera input, final CDL, creative transform, and viewing transform"
      color_tags: "NCLC 1-1-1"
      burn_ins: "project, source clip, source TC, record TC, camera roll, and framing"
      editorial_metadata: "NO DEFAULT - MUST BE SPECIFIED"
      proxy_naming: "preserve source clip name or tested relink table"
      delivery_and_retention: "NO DEFAULT - MUST BE SPECIFIED"
    verification:
      relink: "REPLACE with clip ID and zero-frame result"
      sync: "REPLACE with first and last synchronized frames checked"
      image_path: "REPLACE with display and comparison result"

  onset_vfx_data_and_elements:
    document_control: *document_control
    production_values:
      shot_or_setup_list: "REPLACE with VFX breakdown revision"
      lens_grids: "capture relevant lens, focal length, focus, stop, squeeze, and camera mode"
      spheres_and_chart: "capture when lighting reconstruction or color reference requires them"
      hdri: "record brackets, spacing, lens, nodal method, orientation, and merge responsibility"
      survey: "record capture method, coordinate system, units, camera position, and height"
      camera_and_lens_metadata: "record available camera, lens, exposure, position, and lens-system data"
      witness_cameras: "record camera ID, rate, sync, position, lens, and media path"
      clean_plates_and_elements: "record range, settings, purpose, and principal-take relationship"
      tracking_markers: "record placement and removal scope"
      naming: "project, sequence, shot or setup, element type, camera, and revision"
      destination: "REPLACE with production-controlled set-data location"
      inventory_and_checksum: "per-file SHA-256"
      missing_material: "none"

  vfx_plate:
    document_control: *document_control
    production_values:
      format: "OpenEXR image sequence"
      pixel_data_type: "16-bit floating-point"
      base_channels: "RGB"
      additional_channels: "none"
      compression: "ZIP1 lossless. Record one selected method and test any different choice before issue."
      multipart_plates: "single-part"
      color_encoding: "ACEScg"
      plate_raster: "match approved camera extraction"
      extraction_and_overscan: "full approved extraction, no unintended crop"
      pixel_aspect_ratio: "1.0"
      anamorphic_handling: "de-squeeze during plate pull and return final in matching geometry"
      display_and_data_windows: "match full plate raster"
      plate_handles: "4 frames at head and tail"
      frame_numbering: "first edit frame 1001, head handles count backward"
      plate_frame_rate: "match project timebase"
      source_sensor_and_playback_rates: "REPLACE with sensor and playback rates"
      timewarp_and_retime: "required retime frames are main frames, stage recorded per shot"
      naming_pattern: "project_sequence_shot_plate-role.frame.exr"
      source_lineage: "source clip, camera roll, timecode, source frames, and plate mapping"
      editorial_transforms: "supply exact values and reference"
      lens_distortion: "original distorted plate, approved STMap or model, grids, and re-distorted final"
      reference_and_element_package: "REPLACE with required HDRI, spheres, chart, clean plate, witness, survey, tracking, and camera records"
      multi_plate_structure: "name each plate role and stereo view separately"
      performance_reference: "synchronized cut-context picture and audio when required"
      framing_reference: "REPLACE with chart and offline-reference revision"
      camera_raw_decode: "REPLACE with decoder, quality, EI, WB, tint, highlight, detail, NR, and output"
      baked_operations: "no display LUT, creative look, sharpening, or noise reduction"
      manifest_and_checksum: "per-file SHA-256"
    approval_test:
      reference_frame_and_hash: "REPLACE"
      raw_decode_comparison: "REPLACE if vendor decodes Camera RAW"
      round_trip: "REPLACE with shot, evidence, approvers, date, and exceptions"

  vfx_final_render:
    document_control: *document_control
    production_values:
      format: "OpenEXR image sequence"
      pixel_data_type: "16-bit floating-point"
      base_channels: "RGB"
      additional_channels: "none unless the DI requests them"
      compression: "ZIP1 lossless. Record one selected method and test any different choice before issue."
      color_encoding: "match plate, ACEScg in this baseline"
      raster_and_extraction: "match plate"
      pixel_aspect_ratio: "match plate"
      project_frame_rate: "match plate and DI timeline"
      delivery_range: "complete logical shot with 4 handles at head and tail"
      frame_numbering: "preserve plate-to-source mapping"
      filename_pattern: "project_sequence_shot_task_v###.frame.exr"
      alpha: "none"
      channel_naming: "OpenEXR layer.channel approved by the DI"
      mattes: "REPLACE with channel, type, premultiplication, encoding, and use"
      multipart_cryptomatte_or_deep: "not included"
      data_and_display_windows: "match plate"
      lens_distortion: "match plate distortion state and geometry"
      timewarp: "apply only at named stage"
      burn_ins: "prohibited"
      slate: "optional outside numbered image sequence"
      stable_asset_id: "REPLACE with production shot ID"
      production_revision_pattern: "v###"
      source_vendor_revision: "record separately when supplied"
      state: "WIP"
      provenance: "REPLACE with creator, date, reason, source, and pipeline revision"
      zero_net_change_tolerance: "bit-identical unchanged regions when plate and final representations match"
      zero_net_change_method: "signed pixel difference at zero tolerance; record an approved numerical tolerance for a required conversion"
      qc_report: "required"
      delivery_path: "REPLACE"
      manifest_and_checksum: "per-file SHA-256"

  review_media:
    document_control: *document_control
    production_values:
      codec_and_wrapper: "H.264 QuickTime"
      raster: "1920x1080 with approved framing"
      frame_rate: "match project timebase"
      quality_floor: "20 Mb/s for 1920x1080 H.264; increase for larger rasters, high frame rates, grain, or difficult motion"
      color_encoding: "Rec.709 / BT.1886"
      color_tags: "nclc or nclx values equivalent to 1-1-1"
      viewing_transform: "match approved production review"
      framing: "match current editorial framing"
      handles: "cut range in editorial context"
      burn_ins: "project, shot, revision, state, frame, record TC, vendor, and date"
      start_timecode: "01:00:00:00"
      audio: "current stereo editorial reference at 48 kHz"
      review_platform: "Frame.io with password and recipient controls"
      approval_authority: "REPLACE with person and scope"
      permitted_decisions: "VFX creative and timing review only"
      retention: "REPLACE with note export and deletion date"
    correspondence_test:
      quicktime_to_exr: "REPLACE with IDs, ranges, and DI verification"
      color_comparison: "REPLACE with result"

  di_turnover:
    document_control: *document_control
    production_values:
      cut_identifier: "REPLACE with revision, state, date, and runtime"
      project_timebase: "match image-pipeline and editorial specifications"
      source_rate_and_ramp_report: "list mixed-rate, off-speed, interpreted, timewarped, and speed-ramped sources"
      structure: "one longplay unless versioned reels benefit the workflow"
      reel_boundaries: "REPLACE if reels are used"
      leaders_and_pops: "eight-second head and two-pop when reels are used"
      interchange: "strongest NLE interchange plus flattened EDL"
      offline_reference: "QuickTime with matching TC, burn-ins, framing, and guide audio"
      camera_original_delivery: "checksummed copy, never production's only copy"
      consolidation_handles: "REPLACE"
      vfx_status_list: "shot ID, intended revision, state, due date, and DI revision"
      vfx_delivery: "full-quality finals, QuickTimes, manifest, and approvals"
      titles_and_graphics: "source, fonts, reference, alpha, encoding, and state"
      optical_effects_list: "simple and complex opticals with responsibility and reference"
      color_metadata: "final CDL, creative transform, stills, ALE, and exceptions"
      audio_reference: "current guide mix, two-pop, layout, and sound-turnover ID"
      post_lock_change_list: "old and new TC, source, action, affected VFX and sound, approver"
      re_turnover: "new cut ID, interchange, reference, change list, and media"
      conform_check_method: "difference, checkerboard, or synchronized A/B with burn-ins"
      conform_tolerance: "zero frames and no unapproved picture change"
      conform_approval: "REPLACE with assistant editor, result, date, and discrepancy record"

  mastering_and_delivery:
    document_control: *document_control
    production_values:
      approved_source_picture: "REPLACE with ID, revision, range, state, and checksum"
      approved_source_sound: "REPLACE with IDs, revisions, rate, layout, length, and checksums"
      deliverables_matrix: "REPLACE with recipient, purpose, due date, source IDs, target, text, audio, QC, and acceptance"
      audio_matrix: "REPLACE with mix, layout, language, technical values, loudness target, and source ID"
      text_and_accessibility_matrix: "REPLACE with language, territory, type, format, and QC state"
      core_video_master: "UHD ProRes 4444 texted Rec.709 SDR, native rate and intended aspect"
      uncompressed_image_master: "16-bit TIFF image sequence when funded"
      textless_elements: "complete clean shots, cut-to-cut"
      review_screener: "HD H.264 QuickTime Rec.709 with stereo on password-protected link"
      festival_and_private_exhibition: "not included unless planned; then use an unencrypted SMPTE or Bv2.1 DCP"
      dcp_frame_rate: "not applicable without a DCP; re-clock 23.976-origin frames at 24.000, shortening runtime 0.1 percent"
      dcp_audio_conversion: "not applicable without a DCP; obtain a matching 24.000 printmaster and record pitch treatment"
      captions_and_subtitles: "record language, forced narrative, CCAP, OCAP, subtitle, and QC"
      hdr: "not included"
      imf: "supplement upon sale"
      naming: "project, purpose, target, text state, language, revision, and extension"
      package_type: "REPLACE with DCP, IMF, flat files, or recipient package"
      validation: "record tool, version, report, playback QC, and disposition"
      qc_correction_window: "at least two business days between final playback QC and shipment"
      recipient_acceptance: "REPLACE with recipient, dates, exceptions, and state"
      master_lineage: "REPLACE with source picture, sound, transforms, text state, and derivation"

  archive_and_preservation:
    document_control: *document_control
    production_values:
      scope: "originals, projects, finals, masters, dependencies, manifests, and documentation"
      preservation_layers: "original sources, reconstruction materials, and approved masters"
      minimum_funded_tier: "Camera originals and production audio, approved picture and sound masters, VFX finals, current editorial and finishing projects, pipeline dependencies, manifests, checksums, and restore instructions."
      minimum_copy_rule: "two verified copies in separate locations"
      expanded_tier: "3-2-1 with three copies, two media types, and one geographically separate copy"
      copy_locations: "REPLACE"
      storage_medium: "REPLACE"
      encryption: "REPLACE with method, key custodian, and recovery"
      vendor_retention: "REPLACE with deletion dates"
      retention_period: "indefinite for irreplaceable originals and approved masters"
      migration_responsibility: "REPLACE with custodian, funding, interval, and date"
      production_entity_closure: "REPLACE with successor custodian"
      rights_and_access: "REPLACE with rights holder and authorized requestors"
      integrity_method: "per-file SHA-256 or MHL"
      restore_test: "restore representative project, image sequence, audio, and master"
      restore_result: "REPLACE with date, copy, checksum, dependencies, and reviewer"

  security_and_access:
    document_control: *document_control
    production_values:
      authorized_requestors: "REPLACE with people, permissions, and dates"
      asset_custodian: "REPLACE per asset location"
      release_authority: "producer or person named in signed lab-access letter"
      transfer_platform: "Frame.io for review and approved high-speed service for full-quality media"
      access_rule: "minimum access required for assigned work"
      account_rule: "individual accounts with multifactor authentication"
      link_policy: "password, expiration, download permission, recipient list, and watermark"
      screener_watermark: "recipient and unique identifier when required"
      local_storage: "encrypted portable and workstation storage"
      review_platform_retention: "REPLACE with export and deletion date"
      vendor_closeout: "revoke, collect, confirm deletion or retention, record exceptions before final payment"
      incident_contact: "REPLACE"

  asset_and_delivery_manifest:
    document_control: *document_control
    production_values:
      production_asset_id: "REPLACE"
      identifier_scope: "production asset register"
      recipient_asset_id: "not assigned"
      revision: "v001"
      source_vendor_revision: "not assigned"
      variant: "original"
      representation: "REPLACE"
      state: "WIP"
      asset_class_and_purpose: "REPLACE"
      filename_or_relative_path: "one row per file"
      byte_size: "exact integer per file"
      checksum_and_algorithm: "SHA-256"
      file_set_manifest: "per-file hashes or MHL"
      derived_from: "REPLACE"
      source_timing: "REPLACE"
      record_timing: "REPLACE"
      language_and_territory: "REPLACE or not applicable"
      technical_properties: "REPLACE"
      package_or_composition_id: "not applicable"
      creator_and_creation_date: "REPLACE"
      change_reason: "initial publication"
      approver_and_approval_date: "REPLACE"
      delivered_to_and_sent_date: "REPLACE"
      received_by_and_received_date: "REPLACE"
      acceptance_state: "REPLACE"
      storage_location: "REPLACE"
      access_classification: "production"
      retention: "REPLACE"

conformance_tests:
  camera_and_dailies: null
  vfx_round_trip: null
  review_correspondence: null
  di_conform: null
  mastering: null
  archive_restore: null
