{
  "schema_version": 1,
  "projects_root": "~/Dropbox/CLAUDE_DATA/recoil/projects",
  "visual_state_namespace": "visual",
  "recoil_engine_root": "~/CLAUDE_PROJECTS/recoil",
  "output_root": "output",
  "default_model": "gemini-3-pro-image-preview",
  "exploration_model": "gemini-3.1-flash-image-preview",
  "fallback_exploration_model": "gemini-2.5-flash-image",
  "default_image_size": "4K",
  "production_aspect_ratio": "9:16",
  "grid_aspect_ratio": "1:1",
  "storyboard_iteration": {
    "quality": "high",
    "size": "half"
  },
  "max_references_per_shot": 7,
  "max_concurrent_api_calls": 2,
  "visual_defaults": {
    "technical_quality": [
      "Cinematic",
      "photorealistic",
      "4K",
      "Ultra HD",
      "rich details",
      "sharp clarity",
      "cinematic texture",
      "natural colors",
      "stable picture"
    ]
  },
  "complexity_tiers": {
    "simple": {
      "description": "Inserts, static wides, prop close-ups",
      "pipeline": "direct_pro",
      "estimated_cost": 0.134
    },
    "standard": {
      "description": "Action shots, character shots, lighting shifts",
      "pipeline": "grid_then_pro",
      "estimated_cost": 0.3
    },
    "complex": {
      "description": "Two-character shots, heavy emotion, extreme angles",
      "pipeline": "grid_expression_multi_pro",
      "estimated_cost": 0.56
    }
  },
  "video": {
    "default_duration_s": 5,
    "max_batch_size": 8,
    "min_batch_size": 3,
    "default_video_model": "kling-v3",
    "multi_shot_model": "seeddance-2.0",
    "keyframe_model": "gemini-3-pro-image-preview",
    "audio_strategy": "generate_with_replace",
    "tts_provider": "elevenlabs"
  },
  "enable_scene_visual_locks": true,
  "enable_moodboard_to_text": true,
  "location_ref_mode": "single",
  "previz_temperature": 0.4,
  "routing": {
    "enable_auto_routing": true,
    "force_pipeline": null,
    "budget_cap_per_episode": 20.0,
    "models": {
      "still": "gemini-3-pro-image-preview",
      "i2v": "kling-v3",
      "t2v_default": "kling-v3",
      "t2v_dialogue": "seeddance-2.0",
      "t2v_long": "veo-3.1",
      "multi_shot": "kling-v3"
    }
  },
  "model_capabilities": {
    "kling-v3": {
      "modes": [
        "standard",
        "action",
        "coverage"
      ],
      "tier": "fal_ai",
      "cost_labels": {
        "standard": "~$0.42 (5s)",
        "action": "~$0.84 (10s)",
        "coverage": "~$1.26 (3\u00d75s)"
      }
    },
    "kling-o3": {
      "modes": [
        "standard",
        "action",
        "coverage",
        "sequence"
      ],
      "tier": "fal_ai",
      "supports_elements": true,
      "supports_audio": true,
      "cost_labels": {
        "standard": "~$0.42 (5s)",
        "action": "~$0.84 (10s)",
        "coverage": "~$1.26 (3\u00d75s)",
        "sequence": "~$1.26 (15s max)"
      }
    },
    "veo-3.1": {
      "modes": [
        "standard",
        "action"
      ],
      "tier": "google",
      "cost_labels": {
        "standard": "~$0.25 (5s)",
        "action": "~$0.50 (10s)"
      }
    },
    "seeddance-2.0": {
      "modes": [
        "standard"
      ],
      "tier": "fal_ai",
      "cost_labels": {
        "standard": "~$0.07 (5s)"
      }
    }
  },
  "coverage_strategy": {
    "format_mapping": {
      "0": [
        "B"
      ],
      "1": [
        "B"
      ],
      "2": [
        "B"
      ],
      "3": [
        "C"
      ]
    },
    "takes_per_tier": {
      "0": 1,
      "1": 1,
      "2": 2,
      "3": 3
    },
    "max_video_budget_per_episode": 15.0,
    "format_a_default_angles": [
      {
        "shot_type": "WS",
        "prompt_suffix": "wide shot, full staging, both characters visible"
      },
      {
        "shot_type": "CU",
        "prompt_suffix": "close up, tight on focus character, expression only"
      },
      {
        "shot_type": "OTS",
        "prompt_suffix": "over the shoulder, focus character in depth"
      }
    ],
    "motion_presets": {
      "EWS": {
        "movement": "slow_pan",
        "intensity": 0.55
      },
      "EST": {
        "movement": "slow_pan",
        "intensity": 0.55
      },
      "WS": {
        "movement": "pull_back",
        "intensity": 0.6
      },
      "LS": {
        "movement": "tracking",
        "intensity": 0.6
      },
      "MS": {
        "movement": "push_in",
        "intensity": 0.6
      },
      "MCU": {
        "movement": "push_in",
        "intensity": 0.55
      },
      "CU": {
        "movement": "static",
        "intensity": 0.5
      },
      "ECU": {
        "movement": "static",
        "intensity": 0.5
      },
      "INSERT": {
        "movement": "static",
        "intensity": 0.5
      },
      "OTS": {
        "movement": "static",
        "intensity": 0.5
      },
      "POV": {
        "movement": "handheld",
        "intensity": 0.55
      },
      "TWO-SHOT": {
        "movement": "slow_orbit",
        "intensity": 0.55
      }
    },
    "motion_tier_override": {
      "climax_intensity_boost": 0.05,
      "valley_intensity_max": 0.55
    },
    "wildcard": {
      "enabled_by_default": false,
      "min_tier": 3,
      "duration_s": 3,
      "max_words": 6,
      "position": "last"
    },
    "arc_preamble": {
      "min_tier": 2,
      "max_words": 25
    },
    "model_routing": {
      "_comment": "Coverage pass model selection by tier. Each value MUST be a video model in model_profiles.json with a `coverage_mode_preferences` block. Mode (i2v/r2v/t2v) is then resolved per-pass via core.model_profiles.get_coverage_mode().",
      "env_any_tier": "seeddance-2.0",
      "character_default": "seeddance-2.0",
      "climax": "seeddance-2.0"
    }
  },
  "critic_flags": {
    "ip1_plan_pass": true,
    "ip2_batch_critic": true,
    "ip3_keyframe_rewrite": true
  }
}
