{
  "step": 7,
  "name": "Generate TTS audio for each scene individually",
  "status": "completed",
  "goal": "Generate one clean TTS audio file per scene from scene.narration for later master narration composition.",
  "inputs": {
    "scenes": "script/scenes.json",
    "text_source": "scene.narration only",
    "forbidden_text_sources": [
      "scene.summary",
      "raw ASR transcript",
      "auto-shortened text"
    ],
    "tts_provider": "OmniVoice",
    "endpoint": "http://192.168.1.201:3900/generate",
    "ref_audio": "/data/video-pipeline/Youtube-Video-Maker/data/voices/template1/refaudio.mp3",
    "ref_text": "/data/video-pipeline/Youtube-Video-Maker/data/voices/template1/reftext.txt"
  },
  "outputs": {
    "scene_audio_pattern": "audio/scenes/scene_XXX.wav",
    "manifest": "logs/step_07_tts_manifest.json",
    "run_log": "logs/step_07_tts_run.log"
  },
  "rules": [
    "1 scene = 1 TTS file",
    "Use scene.narration exactly; do not read summary",
    "Do not shorten narration unless boss approves",
    "Generate scene-level TTS only; do not compose master narration here",
    "Probe returned audio format and save with correct extension, usually .wav",
    "OmniVoice may return WAV/PCM even if request filename looks like mp3"
  ],
  "not_in_step_7": [
    "compose master narration",
    "split render parts",
    "create subtitles",
    "render video"
  ],
  "checklist_line": "Generate TTS audio for each scene individually from scene.narration using the approved narration voice and pacing, saving one clean audio file per scene for later master narration composition.",
  "script": "scripts_run_step_07_tts.py",
  "workers": 6,
  "result": {
    "total_scenes": 143,
    "done": 143,
    "failed": [],
    "audio_files": 143,
    "total_bytes": 28916212,
    "estimated_duration_seconds": 602.29,
    "estimated_duration_minutes": 10.04
  }
}