{
  "id": "c93f0a51-6d2b-4f77-9c58-1a7b3e5f2d64",
  "revision": 0,
  "last_node_id": 13,
  "last_link_id": 11,
  "nodes": [
    {
      "id": 9,
      "type": "MarkdownNote",
      "pos": [
        -1190,
        210
      ],
      "size": [
        500,
        880
      ],
      "flags": {},
      "order": 0,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "title": "Note: Guide",
      "properties": {},
      "widgets_values": [
        "## Fish Audio Drama 3 — Directed Performance\n\nOne voice, acted out with directions and word-level tags.\n\n### How to use\n\n1. Sign in with your ComfyUI account. API nodes are pay per use.\n2. Write the script in the `text` field of the Fish Audio Text to Speech node.\n3. Add `[directions]` in square brackets wherever the delivery should shift. A direction applies until the next one, so place it exactly where you want the change.\n4. Wrap individual words for a different delivery: `<whisper>It is all in the timing.</whisper>`. Inline sounds such as `[laugh]`, `[sigh]` and `[pause]` work in the same way.\n5. Pick a voice in the Fish Audio Voice Selector — Delia is connected by default. Set it to `custom` to paste a voice ID from fish.audio.\n6. Keep the other parameters at their defaults, then queue the prompt and preview the audio.\n\n### Model\n\n- `drama-3` (this template): `[plain-language directions]` and word tags, 80+ languages, and multi-speaker dialogue via `@Voice1`, `@Voice2`.\n- `s2.1-pro`: the previous generation; emotion cues such as `[happy]` at the start of a sentence.\n- `s1`: a single voice; emotion cues in parentheses, such as `(happy)`.\n\nText length and model both change the price: the badge on the node shows the estimate for the current text.\n\n### Cloning your own voice\n\nTo read the script in your own voice, select the two nodes in the `Option 2` group and press **Ctrl‑B** to enable them, then point `Load Audio` at a 10–30 second, clean recording. With two voices connected, mark the text with `@Voice1` and `@Voice2`.\n"
      ],
      "widgets_values_named": {
        "text": "## Fish Audio Drama 3 — Directed Performance\n\nOne voice, acted out with directions and word-level tags.\n\n### How to use\n\n1. Sign in with your ComfyUI account. API nodes are pay per use.\n2. Write the script in the `text` field of the Fish Audio Text to Speech node.\n3. Add `[directions]` in square brackets wherever the delivery should shift. A direction applies until the next one, so place it exactly where you want the change.\n4. Wrap individual words for a different delivery: `<whisper>It is all in the timing.</whisper>`. Inline sounds such as `[laugh]`, `[sigh]` and `[pause]` work in the same way.\n5. Pick a voice in the Fish Audio Voice Selector — Delia is connected by default. Set it to `custom` to paste a voice ID from fish.audio.\n6. Keep the other parameters at their defaults, then queue the prompt and preview the audio.\n\n### Model\n\n- `drama-3` (this template): `[plain-language directions]` and word tags, 80+ languages, and multi-speaker dialogue via `@Voice1`, `@Voice2`.\n- `s2.1-pro`: the previous generation; emotion cues such as `[happy]` at the start of a sentence.\n- `s1`: a single voice; emotion cues in parentheses, such as `(happy)`.\n\nText length and model both change the price: the badge on the node shows the estimate for the current text.\n\n### Cloning your own voice\n\nTo read the script in your own voice, select the two nodes in the `Option 2` group and press **Ctrl‑B** to enable them, then point `Load Audio` at a 10–30 second, clean recording. With two voices connected, mark the text with `@Voice1` and `@Voice2`.\n"
      },
      "color": "#222",
      "bgcolor": "#000"
    },
    {
      "id": 1,
      "type": "FishAudioTextToSpeech",
      "pos": [
        150,
        270
      ],
      "size": [
        440,
        320
      ],
      "flags": {},
      "order": 4,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "text",
          "name": "text",
          "type": "STRING",
          "widget": {
            "name": "text"
          },
          "link": null
        },
        {
          "localized_name": "model",
          "name": "model",
          "type": "COMFY_DYNAMICCOMBO_V3",
          "widget": {
            "name": "model"
          },
          "link": null
        },
        {
          "localized_name": "voice0",
          "name": "model.voices.voice0",
          "shape": 7,
          "type": "FISHAUDIO_VOICE",
          "link": 10
        },
        {
          "localized_name": "voice1",
          "name": "model.voices.voice1",
          "shape": 7,
          "type": "FISHAUDIO_VOICE",
          "link": null
        },
        {
          "localized_name": "temperature",
          "name": "model.temperature",
          "type": "FLOAT",
          "widget": {
            "name": "model.temperature"
          },
          "link": null
        },
        {
          "localized_name": "top_p",
          "name": "model.top_p",
          "type": "FLOAT",
          "widget": {
            "name": "model.top_p"
          },
          "link": null
        },
        {
          "localized_name": "speed",
          "name": "model.speed",
          "type": "FLOAT",
          "widget": {
            "name": "model.speed"
          },
          "link": null
        },
        {
          "localized_name": "volume",
          "name": "model.volume",
          "type": "FLOAT",
          "widget": {
            "name": "model.volume"
          },
          "link": null
        },
        {
          "localized_name": "normalize",
          "name": "model.normalize",
          "type": "BOOLEAN",
          "widget": {
            "name": "model.normalize"
          },
          "link": null
        },
        {
          "localized_name": "seed",
          "name": "seed",
          "type": "INT",
          "widget": {
            "name": "seed"
          },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "AUDIO",
          "name": "AUDIO",
          "type": "AUDIO",
          "links": [
            9
          ]
        }
      ],
      "properties": {
        "Node name for S&R": "FishAudioTextToSpeech"
      },
      "widgets_values": [
        "[calm and inviting] Welcome back to the studio.\n[leans in, conspiratorial] There is one trick nobody tells you about.\n[light, playful] Ready? <whisper>It is all in the timing.</whisper> [bright, back to full voice] And that is the whole secret.",
        "drama-3",
        0.7,
        0.7,
        1,
        0,
        true,
        1562256311,
        "randomize"
      ],
      "widgets_values_named": {
        "text": "[calm and inviting] Welcome back to the studio.\n[leans in, conspiratorial] There is one trick nobody tells you about.\n[light, playful] Ready? <whisper>It is all in the timing.</whisper> [bright, back to full voice] And that is the whole secret.",
        "model": "drama-3",
        "model.temperature": 0.7,
        "model.top_p": 0.7,
        "model.speed": 1,
        "model.volume": 0,
        "model.normalize": true,
        "seed": 1562256311,
        "control_after_generate": "randomize"
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 5,
      "type": "SaveAudioAdvanced",
      "pos": [
        640,
        270
      ],
      "size": [
        730,
        220
      ],
      "flags": {},
      "order": 5,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "audio",
          "name": "audio",
          "type": "AUDIO",
          "link": 9
        },
        {
          "localized_name": "filename_prefix",
          "name": "filename_prefix",
          "type": "STRING",
          "widget": {
            "name": "filename_prefix"
          },
          "link": null
        },
        {
          "localized_name": "format",
          "name": "format",
          "type": "COMFY_DYNAMICCOMBO_V3",
          "widget": {
            "name": "format"
          },
          "link": null
        },
        {
          "localized_name": "quality",
          "name": "format.quality",
          "type": "COMBO",
          "widget": {
            "name": "format.quality"
          },
          "link": null
        },
        {
          "localized_name": "audioUI",
          "name": "audioUI",
          "type": "AUDIO_UI",
          "widget": {
            "name": "audioUI"
          },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "audio",
          "name": "audio",
          "type": "AUDIO",
          "links": null
        }
      ],
      "properties": {},
      "widgets_values": [
        "audio/Fish_audio_drama3_directed",
        "mp3",
        "V0"
      ],
      "widgets_values_named": {
        "filename_prefix": "audio/Fish_audio_drama3_directed",
        "format": "mp3",
        "format.quality": "V0"
      }
    },
    {
      "id": 11,
      "type": "LoadAudio",
      "pos": [
        -640,
        520
      ],
      "size": [
        330,
        170
      ],
      "flags": {},
      "order": 1,
      "mode": 4,
      "inputs": [
        {
          "localized_name": "audio",
          "name": "audio",
          "type": "COMBO",
          "widget": {
            "name": "audio"
          },
          "link": null
        },
        {
          "localized_name": "audioUI",
          "name": "audioUI",
          "type": "AUDIO_UI",
          "widget": {
            "name": "audioUI"
          },
          "link": null
        },
        {
          "localized_name": "choose file to upload",
          "name": "upload",
          "type": "AUDIOUPLOAD",
          "widget": {
            "name": "upload"
          },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "AUDIO",
          "name": "AUDIO",
          "type": "AUDIO",
          "links": [
            11
          ]
        }
      ],
      "properties": {
        "Node name for S&R": "LoadAudio"
      },
      "widgets_values": [
        "fish_audio_example.mp3",
        null
      ],
      "widgets_values_named": {
        "audio": "fish_audio_example.mp3",
        "upload": null
      }
    },
    {
      "id": 12,
      "type": "FishAudioVoiceSelector",
      "pos": [
        -440,
        280
      ],
      "size": [
        270,
        60
      ],
      "flags": {},
      "order": 2,
      "mode": 0,
      "inputs": [
        {
          "localized_name": "voice",
          "name": "voice",
          "type": "COMFY_DYNAMICCOMBO_V3",
          "widget": {
            "name": "voice"
          },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "voice",
          "name": "voice",
          "type": "FISHAUDIO_VOICE",
          "links": [
            10
          ]
        }
      ],
      "properties": {
        "Node name for S&R": "FishAudioVoiceSelector"
      },
      "widgets_values": [
        "Delia (en)"
      ],
      "widgets_values_named": {
        "voice": "Delia (en)"
      }
    },
    {
      "id": 13,
      "type": "FishAudioInstantVoiceClone",
      "pos": [
        -260,
        520
      ],
      "size": [
        310,
        100
      ],
      "flags": {},
      "order": 3,
      "mode": 4,
      "inputs": [
        {
          "localized_name": "audio0",
          "name": "files.audio0",
          "type": "AUDIO",
          "link": 11
        },
        {
          "localized_name": "audio1",
          "name": "files.audio1",
          "shape": 7,
          "type": "AUDIO",
          "link": null
        },
        {
          "localized_name": "enhance_audio_quality",
          "name": "enhance_audio_quality",
          "type": "BOOLEAN",
          "widget": {
            "name": "enhance_audio_quality"
          },
          "link": null
        }
      ],
      "outputs": [
        {
          "localized_name": "voice",
          "name": "voice",
          "type": "FISHAUDIO_VOICE",
          "links": null
        }
      ],
      "properties": {
        "Node name for S&R": "FishAudioInstantVoiceClone"
      },
      "widgets_values": [
        true
      ],
      "widgets_values_named": {
        "enhance_audio_quality": true
      },
      "color": "#432",
      "bgcolor": "#653"
    }
  ],
  "links": [
    [
      9,
      1,
      0,
      5,
      0,
      "AUDIO"
    ],
    [
      11,
      11,
      0,
      13,
      0,
      "AUDIO"
    ],
    [
      10,
      12,
      0,
      1,
      2,
      "FISHAUDIO_VOICE"
    ]
  ],
  "groups": [
    {
      "id": 1,
      "title": "Option 1: Preset voice",
      "bounding": [
        -650,
        190,
        740,
        210
      ],
      "color": "#3f789e",
      "flags": {}
    },
    {
      "id": 2,
      "title": "Option 2: Voice Clone (select both nodes, then press Ctrl+B to enable)",
      "bounding": [
        -650,
        430,
        740,
        330
      ],
      "color": "#3f789e",
      "flags": {}
    }
  ],
  "config": {},
  "extra": {
    "ds": {
      "scale": 0.5234475436134131,
      "offset": [
        1748.3749656430628,
        402.6760146504402
      ]
    },
    "frontendVersion": "1.57.0"
  },
  "version": 0.4
}
