{
  "name": "voiceroom-captions",
  "sources": [
    {
      "name": "room",
      "type": "livekit",
      "config": {
        "serverUrl": "wss://your-project.livekit.cloud",
        "token": "<subscribe-token>",
        "select": {
          "mediaTypes": ["audio"],
          "excludeIdentities": ["avflow-captions"]
        }
      }
    },
    {
      "name": "overlay",
      "type": "web_capture",
      "config": {
        "url": "https://your-app.example.com/overlay/captions?room=voice-room",
        "captureElement": "canvas#stage",
        "fps": 30,
        "captureAudio": false,
        "waitForSelector": {
          "selector": "canvas#stage[data-ready=\"true\"]",
          "timeout": 20000
        }
      }
    },
    {
      "name": "carrier",
      "type": "video_generator",
      "config": {
        "width": 16,
        "height": 16,
        "fps": 5,
        "backgroundColor": "#000000"
      }
    }
  ],
  "nodes": [
    {
      "name": "captions",
      "type": "asr",
      "inputs": ["room"],
      "config": {
        "language": "multi"
      }
    },
    {
      "name": "floor",
      "type": "audio_mixer",
      "inputs": ["room"],
      "config": {}
    }
  ],
  "sinks": [
    {
      "name": "to_room",
      "type": "livekit",
      "inputs": [
        "carrier",
        {
          "name": "captions",
          "select": {
            "mediaTypes": ["data"]
          }
        }
      ],
      "config": {
        "serverUrl": "wss://your-project.livekit.cloud",
        "token": "<publish-token>",
        "videoTrackName": "avflow-caption-carrier"
      }
    },
    {
      "name": "live",
      "type": "rtmp_push",
      "inputs": [
        {
          "name": "overlay",
          "select": {
            "mediaTypes": ["video"]
          }
        },
        "floor"
      ],
      "config": {
        "urls": ["rtmp://ingest.example.com/live/<stream-key>"],
        "encoding": {
          "videoCodec": "h264",
          "audioCodec": "aac",
          "videoBitrateBps": 3500000,
          "audioBitrateBps": 128000,
          "keyframeIntervalSec": 2
        }
      }
    }
  ],
  "policies": {
    "maxDurationSec": 14400,
    "idleTimeoutSec": 120
  }
}
