{
 "schema_version": "1.0",
 "nodes": [
  {
   "id": "source_video",
   "type": "input/video",
   "label": "IN · Screen Recording",
   "parameters": {
    "required": true
   }
  },
  {
   "id": "music_direction",
   "type": "input/text",
   "label": "IN · Music Direction",
   "parameters": {
    "text": "Automatic: infer a subtle instrumental style from the recording content, pace and audience.",
    "required": true
   }
  },
  {
   "id": "generate_subtitles",
   "type": "input/boolean",
   "label": "IN · Generate Subtitles",
   "parameters": {
    "value": true,
    "required": true
   }
  },
  {
   "id": "inspect_source",
   "type": "media/technical_info",
   "label": "A1 · Inspect Screen Recording",
   "parameters": {
    "probe_level": "streams",
    "fail_on_policy": false,
    "check_id": "cool-looms-source-video",
    "policy": {
     "schema": "madoo.media-policy/v1",
     "policyId": "cool-looms-screen-recording-v1",
     "allowedMediaKinds": [
      "video"
     ],
     "minimumDurationMilliseconds": 1000,
     "maximumDurationMilliseconds": 3600000,
     "requireAudio": true,
     "minimumAudioStreams": 1
    }
   }
  },
  {
   "id": "extract_voice",
   "type": "video/extract_audio",
   "label": "A2 · Extract Speech Audio",
   "parameters": {
    "profile": "speech",
    "format": "wav"
   }
  },
  {
   "id": "clean_voice",
   "type": "audio/speech_enhance",
   "label": "A3 · Remove Noise and Mouth Artifacts",
   "parameters": {
    "profile": "podcast",
    "check_id": "cool-looms-voice-cleanup",
    "denoise_technique": "nlm",
    "preserve_ambience": false,
    "output_format": "wav"
   }
  },
  {
   "id": "normalize_voice",
   "type": "audio/loudness_normalize",
   "label": "A4 · Normalize Spoken Voice",
   "parameters": {
    "profile": "podcast",
    "check_id": "cool-looms-voice-loudness",
    "mode": "two_pass",
    "dual_mono": false,
    "prevent_clipping": true,
    "fail_on_target_miss": false,
    "output_format": "wav"
   }
  },
  {
   "id": "analyze_video",
   "type": "ai/video_analysis",
   "label": "B1 · Infer Music from Content and Pace",
   "model": {
    "model": "gemini-3.5-flash"
   },
   "parameters": {
    "prompt": "Automatic: infer a subtle instrumental style from the recording content, pace and audience.",
    "system_prompt": "You are a senior music supervisor for professional screen recordings. Analyze the complete video, including its topic, visual pace, speaking rhythm and intended audience. Treat the user prompt as an optional creative direction. Return only one concise generation prompt for a seamless instrumental background track: specify mood, energy, tempo range, instrumentation and progression. Require no vocals, no spoken words, no logo sting, no abrupt ending and enough restraint to sit under narration. Do not explain your answer.",
    "response_format": "text",
    "max_tokens": 900,
    "temperature": 0.2
   }
  },
  {
   "id": "generate_music",
   "type": "ai/text_to_music",
   "label": "B2 · Generate Instrumental Music",
   "model": {
    "model": "cassetteai-music"
   },
   "parameters": {
    "prompt": "Subtle modern instrumental underscore for a professional software walkthrough, no vocals.",
    "duration": 60
   }
  },
  {
   "id": "fit_music",
   "type": "audio/loop",
   "label": "B3 · Fit Music to Full Video Duration",
   "parameters": {
    "target_duration": 300,
    "crossfade_ms": 1500,
    "fade_in_ms": 500,
    "fade_out_ms": 1500,
    "tolerance_ms": 80,
    "check_id": "cool-looms-music-duration",
    "output_format": "wav"
   }
  },
  {
   "id": "duck_music",
   "type": "audio/duck",
   "label": "C1 · Duck Music Under Speech",
   "parameters": {
    "profile": "voice_over",
    "check_id": "cool-looms-dynamic-mix",
    "output_duration": "foreground",
    "output_format": "wav",
    "measure_result": true
   }
  },
  {
   "id": "normalize_mix",
   "type": "audio/loudness_normalize",
   "label": "C2 · Normalize Final Programme",
   "parameters": {
    "profile": "social",
    "check_id": "cool-looms-final-loudness",
    "mode": "two_pass",
    "dual_mono": false,
    "prevent_clipping": true,
    "fail_on_target_miss": false,
    "output_format": "wav"
   }
  },
  {
   "id": "measure_mix",
   "type": "audio/quality_report",
   "label": "C3 · Measure Final Audio",
   "parameters": {
    "profile": "custom",
    "check_id": "cool-looms-final-audio",
    "target_lufs": -14,
    "loudness_tolerance_lu": 2,
    "maximum_true_peak_dbtp": -1,
    "maximum_clipped_samples": 0,
    "fail_on_violation": false
   }
  },
  {
   "id": "replace_audio",
   "type": "video/add_audio",
   "label": "C4 · Replace Video Audio",
   "parameters": {
    "mode": "replace",
    "replace_duration": "longest",
    "audio_volume": 1
   }
  },
  {
   "id": "inspect_final",
   "type": "media/technical_info",
   "label": "C5 · Inspect Finished Video",
   "parameters": {
    "probe_level": "streams",
    "fail_on_policy": false,
    "check_id": "cool-looms-final-video",
    "policy": {
     "schema": "madoo.media-policy/v1",
     "policyId": "cool-looms-final-video-v1",
     "allowedMediaKinds": [
      "video"
     ],
     "minimumDurationMilliseconds": 1000,
     "maximumDurationMilliseconds": 3600000,
     "requireAudio": true,
     "minimumAudioStreams": 1
    }
   }
  },
  {
   "id": "quality_summary",
   "type": "utility/quality_gate",
   "label": "C6 · Summarize Delivery Quality",
   "parameters": {
    "profile": "all_must_pass",
    "minimum_score": 1,
    "mode": "warn"
   }
  },
  {
   "id": "gate_subtitle_audio",
   "type": "utility/filter",
   "label": "D1 · Gate Subtitle Transcription"
  },
  {
   "id": "subtitle_segments",
   "type": "enumerate/audio_segments",
   "label": "D2 · Segment Long Speech",
   "parameters": {
    "mode": "automatic",
    "targetDurationSeconds": 600,
    "maximumDurationSeconds": 720,
    "overlapSeconds": 5,
    "maximumSegments": 40
   }
  },
  {
   "id": "transcribe_segments",
   "type": "ai/speech_to_text",
   "label": "D3 · Transcribe Timed Segments",
   "model": {
    "model": "elevenlabs-scribe-v2"
   },
   "parameters": {
    "task": "transcribe",
    "language": "",
    "granularity": "word",
    "diarization": true,
    "caption_format": "none"
   }
  },
  {
   "id": "caption_track",
   "type": "aggregate/transcript",
   "label": "D4 · Rebuild Absolute Caption Timeline",
   "parameters": {
    "speech_ready": false
   }
  },
  {
   "id": "gate_subtitle_video",
   "type": "utility/filter",
   "label": "D5 · Gate Captioned Export"
  },
  {
   "id": "render_subtitles",
   "type": "video/subtitles",
   "label": "D6 · Render Subtitles and SRT",
   "parameters": {
    "mode": "both",
    "sidecar_format": "srt",
    "presentation": "highlight-word",
    "highlight_color": "#22C55E",
    "speaker_labels": "auto",
    "cue_transition": "none",
    "overlap_policy": "trim_previous",
    "max_lines": 2,
    "typography": {
     "schema": "madoo.video-typography/v1",
     "preset": "minimal",
     "font": {
      "schema": "madoo.font-reference/v1",
      "familyGuid": "7c5f282d-7505-68d6-2888-73f446af4f97",
      "versionGuid": "fc7cf5a8-9b0e-81e6-db79-5648ded5c601",
      "family": "Roboto",
      "variant": "500",
      "weight": 500,
      "style": "normal",
      "fingerprint": "09c91e6ffdbad791dd2841323ce184234676806b4b56fcc8c6cd19f625cb5f7a"
     },
     "size": {
      "mode": "relative",
      "value": 5.2,
      "min": 28,
      "max": 112
     },
     "text": {
      "color": "#FFFFFF",
      "opacity": 1,
      "transform": "none",
      "letterSpacing": 0,
      "lineSpacing": 1.08
     },
     "layout": {
      "anchor": "bottom-center",
      "alignment": "center",
      "maxWidthPercent": 82,
      "maxLines": 2,
      "offsetXPercent": 0,
      "offsetYPercent": 0,
      "overflow": "fit",
      "safeArea": {
       "preset": "title-safe",
       "topPercent": 8,
       "rightPercent": 8,
       "bottomPercent": 10,
       "leftPercent": 8
      }
     },
     "outline": {
      "enabled": true,
      "color": "#000000",
      "width": 1
     },
     "shadow": {
      "enabled": true,
      "color": "#000000",
      "opacity": 0.45,
      "offsetX": 1,
      "offsetY": 2,
      "blur": 4
     },
     "background": {
      "enabled": false,
      "color": "#000000",
      "opacity": 0.65,
      "paddingX": 18,
      "paddingY": 10
     },
     "motion": {
      "entrance": "none",
      "exit": "none",
      "durationMs": 180
     }
    }
   }
  },
  {
   "id": "original_video",
   "type": "output/video",
   "label": "OUT · Original Video (Before)",
   "parameters": {
    "output_name": "original_video"
   }
  },
  {
   "id": "finished_video",
   "type": "output/video",
   "label": "OUT · Finished Video",
   "parameters": {
    "output_name": "finished_video"
   }
  },
  {
   "id": "captioned_video",
   "type": "output/video",
   "label": "OUT · Finished Video + Subtitles",
   "parameters": {
    "output_name": "finished_video_with_subtitles"
   }
  },
  {
   "id": "subtitles_srt",
   "type": "output/text",
   "label": "OUT · Subtitles SRT",
   "parameters": {
    "output_name": "subtitles_srt"
   }
  },
  {
   "id": "cleaned_voice",
   "type": "output/audio",
   "label": "OUT · Cleaned Voice",
   "parameters": {
    "output_name": "cleaned_voice"
   }
  },
  {
   "id": "music_bed",
   "type": "output/audio",
   "label": "OUT · Fitted Music Bed",
   "parameters": {
    "output_name": "fitted_music_bed"
   }
  },
  {
   "id": "finished_audio",
   "type": "output/audio",
   "label": "OUT · Finished Audio Mix",
   "parameters": {
    "output_name": "finished_audio_mix"
   }
  },
  {
   "id": "music_brief",
   "type": "output/text",
   "label": "OUT · Generated Music Brief",
   "parameters": {
    "output_name": "generated_music_brief"
   }
  },
  {
   "id": "source_info",
   "type": "output/json",
   "label": "OUT · Source Technical Info",
   "parameters": {
    "output_name": "source_technical_info"
   }
  },
  {
   "id": "delivery_report",
   "type": "output/json",
   "label": "OUT · Delivery Quality Report",
   "parameters": {
    "output_name": "delivery_quality_report"
   }
  },
  {
   "id": "subtitle_report",
   "type": "output/json",
   "label": "OUT · Subtitle Quality Report",
   "parameters": {
    "output_name": "subtitle_quality_report"
   }
  }
 ],
 "connections": [
  {
   "from_node": "source_video",
   "from_output": "video",
   "to_node": "inspect_source",
   "to_input": "media"
  },
  {
   "from_node": "source_video",
   "from_output": "video",
   "to_node": "extract_voice",
   "to_input": "video"
  },
  {
   "from_node": "source_video",
   "from_output": "video",
   "to_node": "analyze_video",
   "to_input": "video"
  },
  {
   "from_node": "source_video",
   "from_output": "video",
   "to_node": "original_video",
   "to_input": "video"
  },
  {
   "from_node": "music_direction",
   "from_output": "text",
   "to_node": "analyze_video",
   "to_input": "prompt"
  },
  {
   "from_node": "extract_voice",
   "from_output": "audio",
   "to_node": "clean_voice",
   "to_input": "audio"
  },
  {
   "from_node": "clean_voice",
   "from_output": "audio",
   "to_node": "normalize_voice",
   "to_input": "audio"
  },
  {
   "from_node": "analyze_video",
   "from_output": "result",
   "to_node": "generate_music",
   "to_input": "prompt"
  },
  {
   "from_node": "generate_music",
   "from_output": "audio",
   "to_node": "fit_music",
   "to_input": "audio"
  },
  {
   "from_node": "inspect_source",
   "from_output": "duration",
   "to_node": "fit_music",
   "to_input": "target_duration"
  },
  {
   "from_node": "normalize_voice",
   "from_output": "audio",
   "to_node": "duck_music",
   "to_input": "foreground"
  },
  {
   "from_node": "fit_music",
   "from_output": "audio",
   "to_node": "duck_music",
   "to_input": "background"
  },
  {
   "from_node": "duck_music",
   "from_output": "audio",
   "to_node": "normalize_mix",
   "to_input": "audio"
  },
  {
   "from_node": "normalize_mix",
   "from_output": "audio",
   "to_node": "measure_mix",
   "to_input": "audio"
  },
  {
   "from_node": "source_video",
   "from_output": "video",
   "to_node": "replace_audio",
   "to_input": "video"
  },
  {
   "from_node": "normalize_mix",
   "from_output": "audio",
   "to_node": "replace_audio",
   "to_input": "audio"
  },
  {
   "from_node": "replace_audio",
   "from_output": "video",
   "to_node": "inspect_final",
   "to_input": "media"
  },
  {
   "from_node": "inspect_source",
   "from_output": "quality_check",
   "to_node": "quality_summary",
   "to_input": "checks_0"
  },
  {
   "from_node": "inspect_final",
   "from_output": "quality_check",
   "to_node": "quality_summary",
   "to_input": "checks_1"
  },
  {
   "from_node": "clean_voice",
   "from_output": "quality_check",
   "to_node": "quality_summary",
   "to_input": "checks_2"
  },
  {
   "from_node": "normalize_voice",
   "from_output": "quality_check",
   "to_node": "quality_summary",
   "to_input": "checks_3"
  },
  {
   "from_node": "duck_music",
   "from_output": "quality_check",
   "to_node": "quality_summary",
   "to_input": "checks_4"
  },
  {
   "from_node": "normalize_mix",
   "from_output": "quality_check",
   "to_node": "quality_summary",
   "to_input": "checks_5"
  },
  {
   "from_node": "measure_mix",
   "from_output": "quality_check",
   "to_node": "quality_summary",
   "to_input": "checks_6"
  },
  {
   "from_node": "fit_music",
   "from_output": "quality_check",
   "to_node": "quality_summary",
   "to_input": "checks_7"
  },
  {
   "from_node": "generate_subtitles",
   "from_output": "boolean",
   "to_node": "gate_subtitle_audio",
   "to_input": "condition"
  },
  {
   "from_node": "normalize_voice",
   "from_output": "audio",
   "to_node": "gate_subtitle_audio",
   "to_input": "value"
  },
  {
   "from_node": "gate_subtitle_audio",
   "from_output": "value",
   "to_node": "subtitle_segments",
   "to_input": "audio"
  },
  {
   "from_node": "subtitle_segments",
   "from_output": "segment",
   "to_node": "transcribe_segments",
   "to_input": "audio"
  },
  {
   "from_node": "transcribe_segments",
   "from_output": "segments",
   "to_node": "caption_track",
   "to_input": "segments"
  },
  {
   "from_node": "subtitle_segments",
   "from_output": "index",
   "to_node": "caption_track",
   "to_input": "index"
  },
  {
   "from_node": "subtitle_segments",
   "from_output": "segment_id",
   "to_node": "caption_track",
   "to_input": "segment_id"
  },
  {
   "from_node": "subtitle_segments",
   "from_output": "start",
   "to_node": "caption_track",
   "to_input": "start"
  },
  {
   "from_node": "subtitle_segments",
   "from_output": "end",
   "to_node": "caption_track",
   "to_input": "end"
  },
  {
   "from_node": "generate_subtitles",
   "from_output": "boolean",
   "to_node": "gate_subtitle_video",
   "to_input": "condition"
  },
  {
   "from_node": "replace_audio",
   "from_output": "video",
   "to_node": "gate_subtitle_video",
   "to_input": "value"
  },
  {
   "from_node": "gate_subtitle_video",
   "from_output": "value",
   "to_node": "render_subtitles",
   "to_input": "video"
  },
  {
   "from_node": "caption_track",
   "from_output": "caption_track",
   "to_node": "render_subtitles",
   "to_input": "segments"
  },
  {
   "from_node": "replace_audio",
   "from_output": "video",
   "to_node": "finished_video",
   "to_input": "video"
  },
  {
   "from_node": "render_subtitles",
   "from_output": "video",
   "to_node": "captioned_video",
   "to_input": "video"
  },
  {
   "from_node": "render_subtitles",
   "from_output": "captions",
   "to_node": "subtitles_srt",
   "to_input": "text"
  },
  {
   "from_node": "normalize_voice",
   "from_output": "audio",
   "to_node": "cleaned_voice",
   "to_input": "audio"
  },
  {
   "from_node": "fit_music",
   "from_output": "audio",
   "to_node": "music_bed",
   "to_input": "audio"
  },
  {
   "from_node": "normalize_mix",
   "from_output": "audio",
   "to_node": "finished_audio",
   "to_input": "audio"
  },
  {
   "from_node": "analyze_video",
   "from_output": "result",
   "to_node": "music_brief",
   "to_input": "text"
  },
  {
   "from_node": "inspect_source",
   "from_output": "info",
   "to_node": "source_info",
   "to_input": "json"
  },
  {
   "from_node": "quality_summary",
   "from_output": "report",
   "to_node": "delivery_report",
   "to_input": "json"
  },
  {
   "from_node": "caption_track",
   "from_output": "quality_report",
   "to_node": "subtitle_report",
   "to_input": "json"
  }
 ],
 "layout": {
  "nodes": {
   "source_video": {
    "x": 0,
    "y": 0,
    "size_preset": "md"
   },
   "music_direction": {
    "x": 0,
    "y": 2300,
    "size_preset": "md"
   },
   "generate_subtitles": {
    "x": 0,
    "y": 3700,
    "size_preset": "md"
   },
   "inspect_source": {
    "x": 700,
    "y": 650,
    "size_preset": "lg"
   },
   "extract_voice": {
    "x": 700,
    "y": 1300,
    "size_preset": "lg"
   },
   "clean_voice": {
    "x": 1400,
    "y": 1300,
    "size_preset": "lg"
   },
   "normalize_voice": {
    "x": 2100,
    "y": 1300,
    "size_preset": "lg"
   },
   "analyze_video": {
    "x": 700,
    "y": 2300,
    "size_preset": "lg"
   },
   "generate_music": {
    "x": 1400,
    "y": 2300,
    "size_preset": "lg"
   },
   "fit_music": {
    "x": 2100,
    "y": 2300,
    "size_preset": "lg"
   },
   "duck_music": {
    "x": 2800,
    "y": 1750,
    "size_preset": "lg"
   },
   "normalize_mix": {
    "x": 3500,
    "y": 1750,
    "size_preset": "lg"
   },
   "replace_audio": {
    "x": 4200,
    "y": 1050,
    "size_preset": "lg"
   },
   "measure_mix": {
    "x": 4200,
    "y": 2150,
    "size_preset": "lg"
   },
   "inspect_final": {
    "x": 4900,
    "y": 1050,
    "size_preset": "lg"
   },
   "quality_summary": {
    "x": 5600,
    "y": 2400,
    "size_preset": "lg"
   },
   "gate_subtitle_audio": {
    "x": 2800,
    "y": 3700,
    "size_preset": "md"
   },
   "subtitle_segments": {
    "x": 3500,
    "y": 3700,
    "size_preset": "lg"
   },
   "transcribe_segments": {
    "x": 4200,
    "y": 3700,
    "size_preset": "lg"
   },
   "gate_subtitle_video": {
    "x": 4900,
    "y": 3050,
    "size_preset": "md"
   },
   "caption_track": {
    "x": 4900,
    "y": 3850,
    "size_preset": "lg"
   },
   "render_subtitles": {
    "x": 5600,
    "y": 3400,
    "size_preset": "lg"
   },
   "original_video": {
    "x": 6500,
    "y": 0,
    "size_preset": "md"
   },
   "source_info": {
    "x": 6500,
    "y": 400,
    "size_preset": "md"
   },
   "cleaned_voice": {
    "x": 6500,
    "y": 900,
    "size_preset": "md"
   },
   "finished_video": {
    "x": 6500,
    "y": 1300,
    "size_preset": "md"
   },
   "finished_audio": {
    "x": 6500,
    "y": 1700,
    "size_preset": "md"
   },
   "music_brief": {
    "x": 6500,
    "y": 2100,
    "size_preset": "md"
   },
   "music_bed": {
    "x": 6500,
    "y": 2500,
    "size_preset": "md"
   },
   "delivery_report": {
    "x": 6500,
    "y": 2900,
    "size_preset": "md"
   },
   "captioned_video": {
    "x": 6500,
    "y": 3400,
    "size_preset": "md"
   },
   "subtitles_srt": {
    "x": 6500,
    "y": 3800,
    "size_preset": "md"
   },
   "subtitle_report": {
    "x": 6500,
    "y": 4200,
    "size_preset": "md"
   }
  }
 }
}
