{
 "schema_version": "1.0",
 "nodes": [
  {
   "id": "master_video",
   "type": "input/video",
   "label": "Source Video",
   "parameters": {
    "required": true
   }
  },
  {
   "id": "target_rows",
   "type": "enumerate/json",
   "label": "D1 · Enumerate Delivery Cues",
   "parameters": {
    "jsonConfig": {
     "arrayPath": "cues",
     "properties": [
      {
       "sourcePath": "cueId",
       "outputPort": "cue_id",
       "outputType": "text",
       "selected": true
      },
      {
       "sourcePath": "text",
       "outputPort": "target_text",
       "outputType": "text",
       "selected": true
      },
      {
       "sourcePath": "start",
       "outputPort": "start",
       "outputType": "number",
       "selected": true
      },
      {
       "sourcePath": "end",
       "outputPort": "end",
       "outputType": "number",
       "selected": true
      },
      {
       "sourcePath": "assessment.candidate.audioStorageRef",
       "outputPort": "audio",
       "outputType": "audio",
       "selected": true
      },
      {
       "sourcePath": "assessment.candidate.audioSha256",
       "outputPort": "expected_sha256",
       "outputType": "text",
       "selected": true
      },
      {
       "sourcePath": "assessment.candidate.trimStartMilliseconds",
       "outputPort": "trim_start_ms",
       "outputType": "number",
       "selected": true
      },
      {
       "sourcePath": "assessment.candidate.trimEndMilliseconds",
       "outputPort": "trim_end_ms",
       "outputType": "number",
       "selected": true
      },
      {
       "sourcePath": "generation",
       "outputPort": "generation",
       "outputType": "json",
       "selected": true
      }
     ]
    },
    "emptyBehavior": "fail"
   }
  },
  {
   "id": "target_language",
   "type": "input/text",
   "label": "Target Language",
   "parameters": {
    "text": "",
    "required": true
   }
  },
  {
   "id": "fit_cue",
   "type": "audio/fit_duration",
   "label": "D2 · Fit Each Cue to Its Window",
   "parameters": {
    "target_duration": 2,
    "check_id": "dubbing-cue-duration",
    "strategy": "natural_speech",
    "minimum_rate": 1,
    "maximum_rate": 2,
    "preserve_pitch": true,
    "preserve_formants": true,
    "pad_position": "end",
    "tolerance_ms": 80,
    "on_out_of_range": "fail",
    "output_format": "wav"
   }
  },
  {
   "id": "collect_cue_evidence",
   "type": "aggregate/json",
   "label": "D3 · Collect Cue Evidence",
   "parameters": {
    "jsonAggregateConfig": {
     "columns": [
      {
       "name": "cueId",
       "inputPort": "cue_id",
       "type": "text"
      },
      {
       "name": "generation",
       "inputPort": "generation",
       "type": "json"
      },
      {
       "name": "fitReport",
       "inputPort": "fit_report",
       "type": "json"
      },
      {
       "name": "fittedAudioStorageRef",
       "inputPort": "fitted_audio",
       "type": "audio"
      }
     ]
    },
    "prettyPrint": true,
    "outputName": "dubbing_cue_evidence"
   }
  },
  {
   "id": "compose_timeline",
   "type": "aggregate/audio_timeline",
   "label": "D4 · Compose Dialogue Timeline",
   "parameters": {
    "timeline_duration": 60,
    "overlap_policy": "fail",
    "missing_cue_policy": "fail",
    "gap_fill": "silence",
    "output_format": "flac",
    "channels": "stereo",
    "sample_rate": 48000,
    "tolerance_ms": 80,
    "maximum_cues": 10000,
    "check_id": "dubbing-timeline-integrity",
    "clip_overflow_policy": "fail"
   }
  },
  {
   "id": "mix_background",
   "type": "audio/duck",
   "label": "F1 · Mix Dialogue + Background",
   "parameters": {
    "profile": "voice_over",
    "check_id": "dubbing-background-preservation",
    "output_duration": "foreground",
    "output_format": "flac",
    "measure_result": true,
    "background_absent_behavior": "pass_foreground"
   }
  },
  {
   "id": "normalize_delivery",
   "type": "audio/loudness_normalize",
   "label": "F2 · Normalize Delivery Audio",
   "parameters": {
    "profile": "podcast",
    "check_id": "dubbing-loudness",
    "mode": "two_pass",
    "dual_mono": false,
    "prevent_clipping": true,
    "output_format": "mp3",
    "fail_on_target_miss": false,
    "true_peak_dbtp": -1.7
   }
  },
  {
   "id": "measure_audio",
   "type": "audio/quality_report",
   "label": "F3 · Measure Final Audio",
   "parameters": {
    "profile": "delivery",
    "check_id": "dubbing-audio-delivery",
    "fail_on_violation": false
   }
  },
  {
   "id": "inspect_master",
   "type": "media/technical_info",
   "label": "A1 · Inspect Master Video",
   "parameters": {
    "probe_level": "streams",
    "fail_on_policy": false,
    "check_id": "dubbing-master-preflight"
   }
  },
  {
   "id": "replace_audio",
   "type": "video/add_audio",
   "label": "F4 · Replace Video Audio",
   "parameters": {
    "mode": "replace",
    "replace_duration": "longest"
   }
  },
  {
   "id": "inspect_final_video",
   "type": "media/technical_info",
   "label": "F5 · Inspect Final Video",
   "parameters": {
    "probe_level": "streams",
    "fail_on_policy": false,
    "check_id": "dubbing-video-duration"
   }
  },
  {
   "id": "build_manifest",
   "type": "utility/dubbing_manifest",
   "label": "G1 · Build Dubbing Manifest",
   "parameters": {
    "source_language": "auto",
    "target_language": "auto",
    "background_mode": "separated",
    "speaker_voice_source": "workflow",
    "require_final_video": true,
    "duration_tolerance_ms": 80,
    "check_id": "dubbing-delivery",
    "duration_aware": true
   }
  },
  {
   "id": "delivery_gate",
   "type": "utility/quality_gate",
   "label": "G3 · Report Final Delivery Quality",
   "parameters": {
    "profile": "weighted",
    "minimum_score": 1,
    "mode": "warn"
   }
  },
  {
   "id": "final_video",
   "type": "output/video",
   "label": "OUT · Dubbed Video",
   "parameters": {
    "output_name": "dubbed_video"
   }
  },
  {
   "id": "final_audio",
   "type": "output/audio",
   "label": "OUT · Dubbed Audio",
   "parameters": {
    "output_name": "dubbed_audio"
   }
  },
  {
   "id": "dialogue_timeline",
   "type": "output/audio",
   "label": "OUT · Dubbed Dialogue Timeline",
   "parameters": {
    "output_name": "dialogue_timeline"
   }
  },
  {
   "id": "manifest_output",
   "type": "output/json",
   "label": "OUT · Dubbing Manifest",
   "parameters": {
    "output_name": "dubbing_manifest"
   }
  },
  {
   "id": "gate_output",
   "type": "output/json",
   "label": "OUT · Quality Report",
   "parameters": {
    "output_name": "quality_report"
   }
  },
  {
   "id": "state0",
   "type": "utility/speech_timing_plan",
   "label": "C0 · Plan Speech Timing",
   "parameters": {
    "duration_ms": 60000,
    "maximum_end_extension_ms": 1000,
    "use_available_caption_window": true,
    "caption_window_safety_ms": 20,
    "maximum_fit_rate": 2,
    "maximum_combined_rate": 2
   }
  },
  {
   "id": "blocks1",
   "type": "enumerate/caption_blocks",
   "label": "C1.1 · Round 1 Pending Cues",
   "parameters": {
    "duration_aware": true
   }
  },
  {
   "id": "adapt1",
   "type": "ai/caption_translation",
   "label": "C1.2 · Round 1 Adapt Text",
   "parameters": {
    "duration_aware": true
   },
   "model": {
    "model": "gpt-5.6-luna",
    "params": {
     "max_tokens": 256,
     "reasoning_effort": "none"
    }
   }
  },
  {
   "id": "track1",
   "type": "aggregate/caption_track",
   "label": "C1.3 · Round 1 Rebuild Captions"
  },
  {
   "id": "cues1",
   "type": "enumerate/json",
   "label": "C1.4 · Round 1 Enumerate Cues",
   "parameters": {
    "jsonConfig": {
     "arrayPath": "cues",
     "properties": [
      {
       "sourcePath": "id",
       "outputPort": "cue_id",
       "outputType": "text",
       "selected": true
      },
      {
       "sourcePath": "text",
       "outputPort": "text",
       "outputType": "text",
       "selected": true
      },
      {
       "sourcePath": "speaker",
       "outputPort": "speaker",
       "outputType": "text",
       "selected": true
      }
     ]
    },
    "emptyBehavior": "skip",
    "absentBehavior": "empty"
   }
  },
  {
   "id": "tts1",
   "type": "ai/text_to_speech",
   "label": "C1.5 · Round 1 Generate Speech",
   "parameters": {
    "duration_aware": true
   },
   "model": {
    "model": "elevenlabs-turbo-v2.5",
    "params": {
     "voice": "Chris",
     "stability": 0.5,
     "apply_text_normalization": "auto",
     "timestamps": false
    }
   }
  },
  {
   "id": "measure1",
   "type": "audio/speech_timing_check",
   "label": "C1.6 · Round 1 Measure Timing"
  },
  {
   "id": "collect1",
   "type": "aggregate/json",
   "label": "C1.7 · Round 1 Collect Attempts",
   "parameters": {
    "jsonAggregateConfig": {
     "columns": [
      {
       "name": "candidate",
       "inputPort": "candidate",
       "type": "json"
      }
     ]
    },
    "outputName": "speech_candidates_round_1",
    "emptyBehavior": "empty"
   }
  },
  {
   "id": "state1",
   "type": "utility/speech_timing_reconcile",
   "label": "C1.8 · Round 1 Reconcile",
   "parameters": {
    "finalize": false
   }
  },
  {
   "id": "blocks2",
   "type": "enumerate/caption_blocks",
   "label": "C2.1 · Round 2 Pending Cues",
   "parameters": {
    "duration_aware": true
   }
  },
  {
   "id": "adapt2",
   "type": "ai/caption_translation",
   "label": "C2.2 · Round 2 Adapt Text",
   "parameters": {
    "duration_aware": true
   },
   "model": {
    "model": "gpt-5.6-luna",
    "params": {
     "max_tokens": 256,
     "reasoning_effort": "none"
    }
   }
  },
  {
   "id": "track2",
   "type": "aggregate/caption_track",
   "label": "C2.3 · Round 2 Rebuild Captions"
  },
  {
   "id": "cues2",
   "type": "enumerate/json",
   "label": "C2.4 · Round 2 Enumerate Cues",
   "parameters": {
    "jsonConfig": {
     "arrayPath": "cues",
     "properties": [
      {
       "sourcePath": "id",
       "outputPort": "cue_id",
       "outputType": "text",
       "selected": true
      },
      {
       "sourcePath": "text",
       "outputPort": "text",
       "outputType": "text",
       "selected": true
      },
      {
       "sourcePath": "speaker",
       "outputPort": "speaker",
       "outputType": "text",
       "selected": true
      }
     ]
    },
    "emptyBehavior": "skip",
    "absentBehavior": "empty"
   }
  },
  {
   "id": "tts2",
   "type": "ai/text_to_speech",
   "label": "C2.5 · Round 2 Generate Speech",
   "parameters": {
    "duration_aware": true
   },
   "model": {
    "model": "elevenlabs-turbo-v2.5",
    "params": {
     "voice": "Chris",
     "stability": 0.5,
     "apply_text_normalization": "auto",
     "timestamps": false
    }
   }
  },
  {
   "id": "measure2",
   "type": "audio/speech_timing_check",
   "label": "C2.6 · Round 2 Measure Timing"
  },
  {
   "id": "collect2",
   "type": "aggregate/json",
   "label": "C2.7 · Round 2 Collect Attempts",
   "parameters": {
    "jsonAggregateConfig": {
     "columns": [
      {
       "name": "candidate",
       "inputPort": "candidate",
       "type": "json"
      }
     ]
    },
    "outputName": "speech_candidates_round_2",
    "emptyBehavior": "empty"
   }
  },
  {
   "id": "state2",
   "type": "utility/speech_timing_reconcile",
   "label": "C2.8 · Round 2 Reconcile",
   "parameters": {
    "finalize": false
   }
  },
  {
   "id": "blocks3",
   "type": "enumerate/caption_blocks",
   "label": "C3.1 · Round 3 Pending Cues",
   "parameters": {
    "duration_aware": true
   }
  },
  {
   "id": "adapt3",
   "type": "ai/caption_translation",
   "label": "C3.2 · Round 3 Adapt Text",
   "parameters": {
    "duration_aware": true
   },
   "model": {
    "model": "gpt-5.6-luna",
    "params": {
     "max_tokens": 256,
     "reasoning_effort": "none"
    }
   }
  },
  {
   "id": "track3",
   "type": "aggregate/caption_track",
   "label": "C3.3 · Round 3 Rebuild Captions"
  },
  {
   "id": "cues3",
   "type": "enumerate/json",
   "label": "C3.4 · Round 3 Enumerate Cues",
   "parameters": {
    "jsonConfig": {
     "arrayPath": "cues",
     "properties": [
      {
       "sourcePath": "id",
       "outputPort": "cue_id",
       "outputType": "text",
       "selected": true
      },
      {
       "sourcePath": "text",
       "outputPort": "text",
       "outputType": "text",
       "selected": true
      },
      {
       "sourcePath": "speaker",
       "outputPort": "speaker",
       "outputType": "text",
       "selected": true
      }
     ]
    },
    "emptyBehavior": "skip",
    "absentBehavior": "empty"
   }
  },
  {
   "id": "tts3",
   "type": "ai/text_to_speech",
   "label": "C3.5 · Round 3 Generate Speech",
   "parameters": {
    "duration_aware": true
   },
   "model": {
    "model": "elevenlabs-turbo-v2.5",
    "params": {
     "voice": "Chris",
     "stability": 0.5,
     "apply_text_normalization": "auto",
     "timestamps": false
    }
   }
  },
  {
   "id": "measure3",
   "type": "audio/speech_timing_check",
   "label": "C3.6 · Round 3 Measure Timing"
  },
  {
   "id": "collect3",
   "type": "aggregate/json",
   "label": "C3.7 · Round 3 Collect Attempts",
   "parameters": {
    "jsonAggregateConfig": {
     "columns": [
      {
       "name": "candidate",
       "inputPort": "candidate",
       "type": "json"
      }
     ]
    },
    "outputName": "speech_candidates_round_3",
    "emptyBehavior": "empty"
   }
  },
  {
   "id": "state3",
   "type": "utility/speech_timing_reconcile",
   "label": "C3.8 · Final Reconcile (Best Effort)",
   "parameters": {
    "finalize": true,
    "delivery_policy": "best_effort"
   }
  },
  {
   "id": "timing_history",
   "type": "output/json",
   "label": "OUT · Speech Timing History",
   "parameters": {
    "output_name": "speech_timing_history"
   }
  },
  {
   "id": "timing_check",
   "type": "output/json",
   "label": "OUT · Speech Timing Quality",
   "parameters": {
    "output_name": "speech_timing_quality"
   }
  },
  {
   "id": "natural_gate",
   "type": "utility/quality_gate",
   "label": "G2 · Report Speech Timing Quality",
   "parameters": {
    "profile": "all_must_pass",
    "minimum_score": 1,
    "mode": "warn"
   }
  },
  {
   "id": "audio_delivery_gate",
   "type": "utility/quality_gate",
   "label": "G4 · Report Audio Quality",
   "parameters": {
    "profile": "weighted",
    "minimum_score": 1,
    "mode": "warn"
   }
  },
  {
   "id": "preserve_background",
   "type": "input/boolean",
   "label": "Preserve Background",
   "parameters": {
    "value": true,
    "required": true
   }
  },
  {
   "id": "generate_subtitles",
   "type": "input/boolean",
   "label": "Generate Subtitles",
   "parameters": {
    "value": true,
    "required": true
   }
  },
  {
   "id": "extract_speech_audio",
   "type": "video/extract_audio",
   "label": "A2 · Extract Speech Audio",
   "parameters": {
    "profile": "speech",
    "format": "wav"
   }
  },
  {
   "id": "speech_segments",
   "type": "enumerate/audio_segments",
   "label": "A3 · Keep One Pass up to an Hour",
   "parameters": {
    "mode": "automatic",
    "targetDurationSeconds": 3600,
    "maximumDurationSeconds": 7200,
    "overlapSeconds": 5,
    "maximumSegments": 40
   }
  },
  {
   "id": "transcribe_segments",
   "type": "ai/speech_to_text",
   "label": "A4 · Transcribe with Speakers",
   "parameters": {
    "task": "transcribe",
    "language": "",
    "granularity": "word",
    "diarization": true,
    "caption_format": "none"
   },
   "model": {
    "model": "elevenlabs-scribe-v2"
   }
  },
  {
   "id": "source_track",
   "type": "aggregate/transcript",
   "label": "A5 · Rebuild Source Captions",
   "parameters": {
    "speech_ready": true
   }
  },
  {
   "id": "source_preflight_gate",
   "type": "utility/quality_gate",
   "label": "A6 · Speech-Ready Preflight",
   "parameters": {
    "profile": "all_must_pass",
    "minimum_score": 1,
    "mode": "fail"
   }
  },
  {
   "id": "initial_blocks",
   "type": "enumerate/caption_blocks",
   "label": "B1 · Build Translation Blocks",
   "parameters": {
    "maximum_cues": 24,
    "maximum_characters": 4000,
    "context_cues": 1
   }
  },
  {
   "id": "initial_translation",
   "type": "ai/caption_translation",
   "label": "B2 · Initial Translation",
   "parameters": {
    "failure_policy": "best_effort"
   },
   "model": {
    "model": "gpt-5.6-luna",
    "params": {
     "max_tokens": 8192,
     "reasoning_effort": "none"
    }
   }
  },
  {
   "id": "initial_target_track",
   "type": "aggregate/caption_track",
   "label": "B3 · Detect Missing Translations"
  },
  {
   "id": "translation_repair_blocks",
   "type": "enumerate/caption_blocks",
   "label": "B4 · Isolate Missing Cues",
   "parameters": {
    "maximum_cues": 4,
    "maximum_characters": 1000,
    "context_cues": 1
   }
  },
  {
   "id": "translation_repair",
   "type": "ai/caption_translation",
   "label": "B5 · Repair Missing Cues Only",
   "parameters": {
    "failure_policy": "best_effort"
   },
   "model": {
    "model": "gpt-5.6-luna",
    "params": {
     "max_tokens": 8192,
     "reasoning_effort": "none"
    }
   }
  },
  {
   "id": "target_track",
   "type": "aggregate/caption_track",
   "label": "B6 · Finalize Localized Captions"
  },
  {
   "id": "extract_original_audio",
   "type": "video/extract_audio",
   "label": "E1 · Extract Original Mix",
   "parameters": {
    "profile": "standard",
    "format": "wav"
   }
  },
  {
   "id": "gate_background_recovery",
   "type": "utility/filter",
   "label": "E2 · Gate Optional Background Recovery"
  },
  {
   "id": "background_segments",
   "type": "enumerate/audio_segments",
   "label": "E3 · Segment Background Recovery",
   "parameters": {
    "mode": "fixed_duration",
    "targetDurationSeconds": 76,
    "maximumDurationSeconds": 85,
    "overlapSeconds": 0,
    "maximumSegments": 300
   }
  },
  {
   "id": "separate_background",
   "type": "ai/stem_separation",
   "label": "E4 · Separate Stems",
   "model": {
    "model": "demucs",
    "params": {
     "model": "htdemucs_ft",
     "shifts": 1,
     "overlap": 0.25
    }
   }
  },
  {
   "id": "background_drums_bass",
   "type": "audio/mix",
   "label": "E5 · Mix Drums + Bass",
   "parameters": {
    "primary_volume": 1,
    "secondary_volume": 1
   }
  },
  {
   "id": "background_add_other",
   "type": "audio/mix",
   "label": "E6 · Add Other Sounds",
   "parameters": {
    "primary_volume": 1,
    "secondary_volume": 1
   }
  },
  {
   "id": "compose_background",
   "type": "aggregate/audio_merge",
   "label": "E7 · Compose Background Timeline"
  },
  {
   "id": "collect_stem_evidence",
   "type": "aggregate/json",
   "label": "E8 · Collect Stem Evidence",
   "parameters": {
    "jsonAggregateConfig": {
     "columns": [
      {
       "name": "manifest",
       "inputPort": "manifest",
       "type": "json"
      }
     ]
    },
    "prettyPrint": true,
    "outputName": "segmented_stem_evidence",
    "emptyBehavior": "empty"
   }
  },
  {
   "id": "gate_original_subtitles",
   "type": "utility/filter",
   "label": "H1 · Gate Original Subtitles"
  },
  {
   "id": "gate_dubbed_subtitles",
   "type": "utility/filter",
   "label": "H3 · Gate Localized Subtitles"
  },
  {
   "id": "subtitle_original",
   "type": "video/subtitles",
   "label": "H2 · Render Original Subtitles",
   "parameters": {
    "mode": "both",
    "sidecar_format": "srt",
    "presentation": "block",
    "speaker_labels": "hide",
    "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": "subtitle_dubbed",
   "type": "video/subtitles",
   "label": "H4 · Render Localized Subtitles",
   "parameters": {
    "mode": "both",
    "sidecar_format": "srt",
    "presentation": "block",
    "speaker_labels": "hide",
    "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_subtitled_video",
   "type": "output/video",
   "label": "OUT · Original Video + Subtitles",
   "parameters": {
    "output_name": "original_video_with_subtitles"
   }
  },
  {
   "id": "dubbed_subtitled_video",
   "type": "output/video",
   "label": "OUT · Dubbed Video + Subtitles",
   "parameters": {
    "output_name": "dubbed_video_with_subtitles"
   }
  },
  {
   "id": "source_srt",
   "type": "output/text",
   "label": "OUT · Source-Language SRT",
   "parameters": {
    "output_name": "source_subtitles_srt"
   }
  },
  {
   "id": "target_srt",
   "type": "output/text",
   "label": "OUT · Target-Language SRT",
   "parameters": {
    "output_name": "target_subtitles_srt"
   }
  },
  {
   "id": "speakers",
   "type": "enumerate/speakers",
   "label": "V1 · List Speakers",
   "parameters": {
    "sample_seconds": 8
   }
  },
  {
   "id": "speaker_sample",
   "type": "video/trim",
   "label": "V2 · Cut Each Speaker's Sample",
   "parameters": {}
  },
  {
   "id": "speaker_kind",
   "type": "ai/video_analysis",
   "label": "V3 · Hear Each Speaker's Kind of Voice",
   "parameters": {
    "prompt": "Listen to the person speaking in this clip. For voice casting of a dub, describe their speaking voice. Answer with a JSON object: {\"voice\": \"feminine\" or \"masculine\" or \"unclear\"}.",
    "response_format": "json_object",
    "temperature": 0
   }
  },
  {
   "id": "speaker_types",
   "type": "aggregate/json",
   "label": "V4 · Collect Kinds of Voice",
   "parameters": {
    "jsonAggregateConfig": {
     "columns": [
      {
       "name": "speaker",
       "inputPort": "speaker",
       "type": "text"
      },
      {
       "name": "voice_type",
       "inputPort": "voice_type",
       "type": "json"
      }
     ]
    },
    "outputName": "speaker_voice_types"
   }
  },
  {
   "id": "speaker_voices",
   "type": "utility/speaker_voices",
   "label": "V5 · Assign One Voice per Speaker",
   "parameters": {}
  },
  {
   "id": "speaker_voices_output",
   "type": "output/json",
   "label": "OUT · Speaker Voices",
   "parameters": {
    "output_name": "speaker_voices"
   }
  }
 ],
 "connections": [
  {
   "from_node": "fit_cue",
   "from_output": "fit_report",
   "to_node": "collect_cue_evidence",
   "to_input": "fit_report"
  },
  {
   "from_node": "fit_cue",
   "from_output": "audio",
   "to_node": "compose_timeline",
   "to_input": "clips"
  },
  {
   "from_node": "compose_timeline",
   "from_output": "audio",
   "to_node": "mix_background",
   "to_input": "foreground"
  },
  {
   "from_node": "mix_background",
   "from_output": "audio",
   "to_node": "normalize_delivery",
   "to_input": "audio"
  },
  {
   "from_node": "normalize_delivery",
   "from_output": "audio",
   "to_node": "measure_audio",
   "to_input": "audio"
  },
  {
   "from_node": "master_video",
   "from_output": "video",
   "to_node": "inspect_master",
   "to_input": "media"
  },
  {
   "from_node": "master_video",
   "from_output": "video",
   "to_node": "replace_audio",
   "to_input": "video"
  },
  {
   "from_node": "normalize_delivery",
   "from_output": "audio",
   "to_node": "replace_audio",
   "to_input": "audio"
  },
  {
   "from_node": "replace_audio",
   "from_output": "video",
   "to_node": "inspect_final_video",
   "to_input": "media"
  },
  {
   "from_node": "collect_cue_evidence",
   "from_output": "result",
   "to_node": "build_manifest",
   "to_input": "cue_evidence"
  },
  {
   "from_node": "compose_timeline",
   "from_output": "timeline_manifest",
   "to_node": "build_manifest",
   "to_input": "timeline_manifest"
  },
  {
   "from_node": "master_video",
   "from_output": "video",
   "to_node": "build_manifest",
   "to_input": "master"
  },
  {
   "from_node": "inspect_master",
   "from_output": "info",
   "to_node": "build_manifest",
   "to_input": "master_info"
  },
  {
   "from_node": "compose_timeline",
   "from_output": "audio",
   "to_node": "build_manifest",
   "to_input": "timeline_audio"
  },
  {
   "from_node": "normalize_delivery",
   "from_output": "audio",
   "to_node": "build_manifest",
   "to_input": "final_audio"
  },
  {
   "from_node": "measure_audio",
   "from_output": "metrics",
   "to_node": "build_manifest",
   "to_input": "final_audio_report"
  },
  {
   "from_node": "replace_audio",
   "from_output": "video",
   "to_node": "build_manifest",
   "to_input": "final_video"
  },
  {
   "from_node": "inspect_final_video",
   "from_output": "info",
   "to_node": "build_manifest",
   "to_input": "final_video_info"
  },
  {
   "from_node": "compose_timeline",
   "from_output": "quality_check",
   "to_node": "build_manifest",
   "to_input": "timeline_check"
  },
  {
   "from_node": "mix_background",
   "from_output": "quality_check",
   "to_node": "build_manifest",
   "to_input": "background_check"
  },
  {
   "from_node": "normalize_delivery",
   "from_output": "quality_check",
   "to_node": "build_manifest",
   "to_input": "loudness_check"
  },
  {
   "from_node": "measure_audio",
   "from_output": "quality_check",
   "to_node": "build_manifest",
   "to_input": "audio_check"
  },
  {
   "from_node": "inspect_final_video",
   "from_output": "quality_check",
   "to_node": "build_manifest",
   "to_input": "video_check"
  },
  {
   "from_node": "build_manifest",
   "from_output": "quality_check",
   "to_node": "delivery_gate",
   "to_input": "checks"
  },
  {
   "from_node": "compose_timeline",
   "from_output": "audio",
   "to_node": "dialogue_timeline",
   "to_input": "audio"
  },
  {
   "from_node": "build_manifest",
   "from_output": "manifest_v2",
   "to_node": "manifest_output",
   "to_input": "json"
  },
  {
   "from_node": "delivery_gate",
   "from_output": "report",
   "to_node": "gate_output",
   "to_input": "json"
  },
  {
   "from_node": "state0",
   "from_output": "pending_captions",
   "to_node": "blocks1",
   "to_input": "caption_track"
  },
  {
   "from_node": "state0",
   "from_output": "state",
   "to_node": "blocks1",
   "to_input": "timing_state"
  },
  {
   "from_node": "state0",
   "from_output": "pending_captions",
   "to_node": "track1",
   "to_input": "source_track"
  },
  {
   "from_node": "blocks1",
   "from_output": "block",
   "to_node": "adapt1",
   "to_input": "block"
  },
  {
   "from_node": "adapt1",
   "from_output": "translation",
   "to_node": "track1",
   "to_input": "translations"
  },
  {
   "from_node": "track1",
   "from_output": "caption_track",
   "to_node": "cues1",
   "to_input": "json"
  },
  {
   "from_node": "cues1",
   "from_output": "text",
   "to_node": "tts1",
   "to_input": "text"
  },
  {
   "from_node": "target_language",
   "from_output": "text",
   "to_node": "tts1",
   "to_input": "language"
  },
  {
   "from_node": "cues1",
   "from_output": "cue_id",
   "to_node": "tts1",
   "to_input": "cue_id"
  },
  {
   "from_node": "state0",
   "from_output": "state",
   "to_node": "tts1",
   "to_input": "timing_state"
  },
  {
   "from_node": "tts1",
   "from_output": "audio",
   "to_node": "measure1",
   "to_input": "audio"
  },
  {
   "from_node": "tts1",
   "from_output": "generation_metadata",
   "to_node": "measure1",
   "to_input": "generation"
  },
  {
   "from_node": "cues1",
   "from_output": "cue_id",
   "to_node": "measure1",
   "to_input": "cue_id"
  },
  {
   "from_node": "cues1",
   "from_output": "text",
   "to_node": "measure1",
   "to_input": "text"
  },
  {
   "from_node": "state0",
   "from_output": "state",
   "to_node": "measure1",
   "to_input": "state"
  },
  {
   "from_node": "measure1",
   "from_output": "candidate",
   "to_node": "collect1",
   "to_input": "candidate"
  },
  {
   "from_node": "collect1",
   "from_output": "result",
   "to_node": "state1",
   "to_input": "candidates"
  },
  {
   "from_node": "state0",
   "from_output": "state",
   "to_node": "state1",
   "to_input": "state"
  },
  {
   "from_node": "state1",
   "from_output": "pending_captions",
   "to_node": "blocks2",
   "to_input": "caption_track"
  },
  {
   "from_node": "state1",
   "from_output": "state",
   "to_node": "blocks2",
   "to_input": "timing_state"
  },
  {
   "from_node": "state1",
   "from_output": "pending_captions",
   "to_node": "track2",
   "to_input": "source_track"
  },
  {
   "from_node": "blocks2",
   "from_output": "block",
   "to_node": "adapt2",
   "to_input": "block"
  },
  {
   "from_node": "adapt2",
   "from_output": "translation",
   "to_node": "track2",
   "to_input": "translations"
  },
  {
   "from_node": "track2",
   "from_output": "caption_track",
   "to_node": "cues2",
   "to_input": "json"
  },
  {
   "from_node": "cues2",
   "from_output": "text",
   "to_node": "tts2",
   "to_input": "text"
  },
  {
   "from_node": "target_language",
   "from_output": "text",
   "to_node": "tts2",
   "to_input": "language"
  },
  {
   "from_node": "cues2",
   "from_output": "cue_id",
   "to_node": "tts2",
   "to_input": "cue_id"
  },
  {
   "from_node": "state1",
   "from_output": "state",
   "to_node": "tts2",
   "to_input": "timing_state"
  },
  {
   "from_node": "tts2",
   "from_output": "audio",
   "to_node": "measure2",
   "to_input": "audio"
  },
  {
   "from_node": "tts2",
   "from_output": "generation_metadata",
   "to_node": "measure2",
   "to_input": "generation"
  },
  {
   "from_node": "cues2",
   "from_output": "cue_id",
   "to_node": "measure2",
   "to_input": "cue_id"
  },
  {
   "from_node": "cues2",
   "from_output": "text",
   "to_node": "measure2",
   "to_input": "text"
  },
  {
   "from_node": "state1",
   "from_output": "state",
   "to_node": "measure2",
   "to_input": "state"
  },
  {
   "from_node": "measure2",
   "from_output": "candidate",
   "to_node": "collect2",
   "to_input": "candidate"
  },
  {
   "from_node": "collect2",
   "from_output": "result",
   "to_node": "state2",
   "to_input": "candidates"
  },
  {
   "from_node": "state1",
   "from_output": "state",
   "to_node": "state2",
   "to_input": "state"
  },
  {
   "from_node": "state2",
   "from_output": "pending_captions",
   "to_node": "blocks3",
   "to_input": "caption_track"
  },
  {
   "from_node": "state2",
   "from_output": "state",
   "to_node": "blocks3",
   "to_input": "timing_state"
  },
  {
   "from_node": "state2",
   "from_output": "pending_captions",
   "to_node": "track3",
   "to_input": "source_track"
  },
  {
   "from_node": "blocks3",
   "from_output": "block",
   "to_node": "adapt3",
   "to_input": "block"
  },
  {
   "from_node": "adapt3",
   "from_output": "translation",
   "to_node": "track3",
   "to_input": "translations"
  },
  {
   "from_node": "track3",
   "from_output": "caption_track",
   "to_node": "cues3",
   "to_input": "json"
  },
  {
   "from_node": "cues3",
   "from_output": "text",
   "to_node": "tts3",
   "to_input": "text"
  },
  {
   "from_node": "target_language",
   "from_output": "text",
   "to_node": "tts3",
   "to_input": "language"
  },
  {
   "from_node": "cues3",
   "from_output": "cue_id",
   "to_node": "tts3",
   "to_input": "cue_id"
  },
  {
   "from_node": "state2",
   "from_output": "state",
   "to_node": "tts3",
   "to_input": "timing_state"
  },
  {
   "from_node": "tts3",
   "from_output": "audio",
   "to_node": "measure3",
   "to_input": "audio"
  },
  {
   "from_node": "tts3",
   "from_output": "generation_metadata",
   "to_node": "measure3",
   "to_input": "generation"
  },
  {
   "from_node": "cues3",
   "from_output": "cue_id",
   "to_node": "measure3",
   "to_input": "cue_id"
  },
  {
   "from_node": "cues3",
   "from_output": "text",
   "to_node": "measure3",
   "to_input": "text"
  },
  {
   "from_node": "state2",
   "from_output": "state",
   "to_node": "measure3",
   "to_input": "state"
  },
  {
   "from_node": "measure3",
   "from_output": "candidate",
   "to_node": "collect3",
   "to_input": "candidate"
  },
  {
   "from_node": "collect3",
   "from_output": "result",
   "to_node": "state3",
   "to_input": "candidates"
  },
  {
   "from_node": "state2",
   "from_output": "state",
   "to_node": "state3",
   "to_input": "state"
  },
  {
   "from_node": "state3",
   "from_output": "state",
   "to_node": "timing_history",
   "to_input": "json"
  },
  {
   "from_node": "state3",
   "from_output": "quality_check",
   "to_node": "timing_check",
   "to_input": "json"
  },
  {
   "from_node": "state3",
   "from_output": "quality_check",
   "to_node": "natural_gate",
   "to_input": "checks"
  },
  {
   "from_node": "state3",
   "from_output": "delivery_cues",
   "to_node": "target_rows",
   "to_input": "json"
  },
  {
   "from_node": "state3",
   "from_output": "delivery_captions",
   "to_node": "build_manifest",
   "to_input": "target_captions"
  },
  {
   "from_node": "state3",
   "from_output": "state",
   "to_node": "build_manifest",
   "to_input": "timing_state"
  },
  {
   "from_node": "target_rows",
   "from_output": "audio",
   "to_node": "fit_cue",
   "to_input": "audio"
  },
  {
   "from_node": "target_rows",
   "from_output": "expected_sha256",
   "to_node": "fit_cue",
   "to_input": "expected_sha256"
  },
  {
   "from_node": "target_rows",
   "from_output": "trim_start_ms",
   "to_node": "fit_cue",
   "to_input": "trim_start_ms"
  },
  {
   "from_node": "target_rows",
   "from_output": "trim_end_ms",
   "to_node": "fit_cue",
   "to_input": "trim_end_ms"
  },
  {
   "from_node": "target_rows",
   "from_output": "start",
   "to_node": "fit_cue",
   "to_input": "target_start"
  },
  {
   "from_node": "target_rows",
   "from_output": "end",
   "to_node": "fit_cue",
   "to_input": "target_end"
  },
  {
   "from_node": "target_rows",
   "from_output": "cue_id",
   "to_node": "collect_cue_evidence",
   "to_input": "cue_id"
  },
  {
   "from_node": "target_rows",
   "from_output": "generation",
   "to_node": "collect_cue_evidence",
   "to_input": "generation"
  },
  {
   "from_node": "fit_cue",
   "from_output": "audio",
   "to_node": "collect_cue_evidence",
   "to_input": "fitted_audio"
  },
  {
   "from_node": "target_rows",
   "from_output": "cue_id",
   "to_node": "compose_timeline",
   "to_input": "cue_id"
  },
  {
   "from_node": "target_rows",
   "from_output": "start",
   "to_node": "compose_timeline",
   "to_input": "start"
  },
  {
   "from_node": "target_rows",
   "from_output": "end",
   "to_node": "compose_timeline",
   "to_input": "end"
  },
  {
   "from_node": "replace_audio",
   "from_output": "video",
   "to_node": "final_video",
   "to_input": "video"
  },
  {
   "from_node": "build_manifest",
   "from_output": "quality_check",
   "to_node": "audio_delivery_gate",
   "to_input": "checks"
  },
  {
   "from_node": "normalize_delivery",
   "from_output": "audio",
   "to_node": "final_audio",
   "to_input": "audio"
  },
  {
   "from_node": "master_video",
   "from_output": "video",
   "to_node": "extract_speech_audio",
   "to_input": "video"
  },
  {
   "from_node": "extract_speech_audio",
   "from_output": "audio",
   "to_node": "speech_segments",
   "to_input": "audio"
  },
  {
   "from_node": "speech_segments",
   "from_output": "segment",
   "to_node": "transcribe_segments",
   "to_input": "audio"
  },
  {
   "from_node": "transcribe_segments",
   "from_output": "segments",
   "to_node": "source_track",
   "to_input": "segments"
  },
  {
   "from_node": "speech_segments",
   "from_output": "index",
   "to_node": "source_track",
   "to_input": "index"
  },
  {
   "from_node": "speech_segments",
   "from_output": "segment_id",
   "to_node": "source_track",
   "to_input": "segment_id"
  },
  {
   "from_node": "speech_segments",
   "from_output": "start",
   "to_node": "source_track",
   "to_input": "start"
  },
  {
   "from_node": "speech_segments",
   "from_output": "end",
   "to_node": "source_track",
   "to_input": "end"
  },
  {
   "from_node": "source_track",
   "from_output": "caption_track",
   "to_node": "initial_blocks",
   "to_input": "caption_track"
  },
  {
   "from_node": "initial_blocks",
   "from_output": "block",
   "to_node": "initial_translation",
   "to_input": "block"
  },
  {
   "from_node": "target_language",
   "from_output": "text",
   "to_node": "initial_translation",
   "to_input": "target_language"
  },
  {
   "from_node": "source_track",
   "from_output": "caption_track",
   "to_node": "initial_target_track",
   "to_input": "source_track"
  },
  {
   "from_node": "initial_translation",
   "from_output": "translation",
   "to_node": "initial_target_track",
   "to_input": "translations"
  },
  {
   "from_node": "initial_target_track",
   "from_output": "pending_captions",
   "to_node": "translation_repair_blocks",
   "to_input": "caption_track"
  },
  {
   "from_node": "translation_repair_blocks",
   "from_output": "block",
   "to_node": "translation_repair",
   "to_input": "block"
  },
  {
   "from_node": "target_language",
   "from_output": "text",
   "to_node": "translation_repair",
   "to_input": "target_language"
  },
  {
   "from_node": "source_track",
   "from_output": "caption_track",
   "to_node": "target_track",
   "to_input": "source_track"
  },
  {
   "from_node": "initial_target_track",
   "from_output": "caption_track",
   "to_node": "target_track",
   "to_input": "baseline_track"
  },
  {
   "from_node": "translation_repair",
   "from_output": "translation",
   "to_node": "target_track",
   "to_input": "translations"
  },
  {
   "from_node": "source_track",
   "from_output": "caption_track",
   "to_node": "state0",
   "to_input": "source_captions"
  },
  {
   "from_node": "target_track",
   "from_output": "caption_track",
   "to_node": "state0",
   "to_input": "target_captions"
  },
  {
   "from_node": "inspect_master",
   "from_output": "duration",
   "to_node": "state0",
   "to_input": "duration"
  },
  {
   "from_node": "inspect_master",
   "from_output": "duration",
   "to_node": "compose_timeline",
   "to_input": "timeline_duration"
  },
  {
   "from_node": "source_track",
   "from_output": "caption_track",
   "to_node": "build_manifest",
   "to_input": "source_captions"
  },
  {
   "from_node": "target_language",
   "from_output": "text",
   "to_node": "adapt1",
   "to_input": "target_language"
  },
  {
   "from_node": "target_language",
   "from_output": "text",
   "to_node": "adapt2",
   "to_input": "target_language"
  },
  {
   "from_node": "target_language",
   "from_output": "text",
   "to_node": "adapt3",
   "to_input": "target_language"
  },
  {
   "from_node": "master_video",
   "from_output": "video",
   "to_node": "extract_original_audio",
   "to_input": "video"
  },
  {
   "from_node": "source_track",
   "from_output": "quality_check",
   "to_node": "source_preflight_gate",
   "to_input": "checks"
  },
  {
   "from_node": "extract_original_audio",
   "from_output": "audio",
   "to_node": "source_preflight_gate",
   "to_input": "value"
  },
  {
   "from_node": "preserve_background",
   "from_output": "boolean",
   "to_node": "gate_background_recovery",
   "to_input": "condition"
  },
  {
   "from_node": "source_preflight_gate",
   "from_output": "value",
   "to_node": "gate_background_recovery",
   "to_input": "value"
  },
  {
   "from_node": "gate_background_recovery",
   "from_output": "value",
   "to_node": "background_segments",
   "to_input": "audio"
  },
  {
   "from_node": "background_segments",
   "from_output": "segment",
   "to_node": "separate_background",
   "to_input": "audio"
  },
  {
   "from_node": "separate_background",
   "from_output": "drums",
   "to_node": "background_drums_bass",
   "to_input": "primary"
  },
  {
   "from_node": "separate_background",
   "from_output": "bass",
   "to_node": "background_drums_bass",
   "to_input": "secondary"
  },
  {
   "from_node": "background_drums_bass",
   "from_output": "audio",
   "to_node": "background_add_other",
   "to_input": "primary"
  },
  {
   "from_node": "separate_background",
   "from_output": "other",
   "to_node": "background_add_other",
   "to_input": "secondary"
  },
  {
   "from_node": "background_add_other",
   "from_output": "audio",
   "to_node": "compose_background",
   "to_input": "clips"
  },
  {
   "from_node": "compose_background",
   "from_output": "audio",
   "to_node": "mix_background",
   "to_input": "background"
  },
  {
   "from_node": "separate_background",
   "from_output": "stems_manifest",
   "to_node": "collect_stem_evidence",
   "to_input": "manifest"
  },
  {
   "from_node": "collect_stem_evidence",
   "from_output": "result",
   "to_node": "build_manifest",
   "to_input": "stem_manifest"
  },
  {
   "from_node": "preserve_background",
   "from_output": "boolean",
   "to_node": "build_manifest",
   "to_input": "preserve_background"
  },
  {
   "from_node": "generate_subtitles",
   "from_output": "boolean",
   "to_node": "gate_original_subtitles",
   "to_input": "condition"
  },
  {
   "from_node": "master_video",
   "from_output": "video",
   "to_node": "gate_original_subtitles",
   "to_input": "value"
  },
  {
   "from_node": "generate_subtitles",
   "from_output": "boolean",
   "to_node": "gate_dubbed_subtitles",
   "to_input": "condition"
  },
  {
   "from_node": "replace_audio",
   "from_output": "video",
   "to_node": "gate_dubbed_subtitles",
   "to_input": "value"
  },
  {
   "from_node": "gate_original_subtitles",
   "from_output": "value",
   "to_node": "subtitle_original",
   "to_input": "video"
  },
  {
   "from_node": "source_track",
   "from_output": "caption_track",
   "to_node": "subtitle_original",
   "to_input": "segments"
  },
  {
   "from_node": "gate_dubbed_subtitles",
   "from_output": "value",
   "to_node": "subtitle_dubbed",
   "to_input": "video"
  },
  {
   "from_node": "state3",
   "from_output": "speech_aligned_captions",
   "to_node": "subtitle_dubbed",
   "to_input": "segments"
  },
  {
   "from_node": "subtitle_original",
   "from_output": "video",
   "to_node": "original_subtitled_video",
   "to_input": "video"
  },
  {
   "from_node": "subtitle_original",
   "from_output": "captions",
   "to_node": "source_srt",
   "to_input": "text"
  },
  {
   "from_node": "subtitle_dubbed",
   "from_output": "video",
   "to_node": "dubbed_subtitled_video",
   "to_input": "video"
  },
  {
   "from_node": "subtitle_dubbed",
   "from_output": "captions",
   "to_node": "target_srt",
   "to_input": "text"
  },
  {
   "from_node": "source_track",
   "from_output": "caption_track",
   "to_node": "speakers",
   "to_input": "caption_track"
  },
  {
   "from_node": "master_video",
   "from_output": "video",
   "to_node": "speaker_sample",
   "to_input": "video"
  },
  {
   "from_node": "speakers",
   "from_output": "sample_start",
   "to_node": "speaker_sample",
   "to_input": "start"
  },
  {
   "from_node": "speakers",
   "from_output": "sample_end",
   "to_node": "speaker_sample",
   "to_input": "end"
  },
  {
   "from_node": "speaker_sample",
   "from_output": "video",
   "to_node": "speaker_kind",
   "to_input": "video"
  },
  {
   "from_node": "speakers",
   "from_output": "speaker",
   "to_node": "speaker_types",
   "to_input": "speaker"
  },
  {
   "from_node": "speaker_kind",
   "from_output": "json",
   "to_node": "speaker_types",
   "to_input": "voice_type"
  },
  {
   "from_node": "source_track",
   "from_output": "caption_track",
   "to_node": "speaker_voices",
   "to_input": "caption_track"
  },
  {
   "from_node": "speaker_types",
   "from_output": "result",
   "to_node": "speaker_voices",
   "to_input": "voice_types"
  },
  {
   "from_node": "speaker_voices",
   "from_output": "speaker_voices",
   "to_node": "speaker_voices_output",
   "to_input": "json"
  },
  {
   "from_node": "cues1",
   "from_output": "speaker",
   "to_node": "tts1",
   "to_input": "speaker"
  },
  {
   "from_node": "speaker_voices",
   "from_output": "speaker_voices",
   "to_node": "tts1",
   "to_input": "speaker_voices"
  },
  {
   "from_node": "cues2",
   "from_output": "speaker",
   "to_node": "tts2",
   "to_input": "speaker"
  },
  {
   "from_node": "speaker_voices",
   "from_output": "speaker_voices",
   "to_node": "tts2",
   "to_input": "speaker_voices"
  },
  {
   "from_node": "cues3",
   "from_output": "speaker",
   "to_node": "tts3",
   "to_input": "speaker"
  },
  {
   "from_node": "speaker_voices",
   "from_output": "speaker_voices",
   "to_node": "tts3",
   "to_input": "speaker_voices"
  }
 ]
}