{
  "id": "0e04149e-04b2-40cd-b331-71b8e3f404ff",
  "revision": 0,
  "last_node_id": 7,
  "last_link_id": 12,
  "nodes": [
    {
      "id": 1,
      "type": "MarkdownNote",
      "pos": [
        -1250,
        210
      ],
      "size": [
        520,
        940
      ],
      "flags": {},
      "order": 0,
      "mode": 0,
      "inputs": [],
      "outputs": [],
      "properties": {},
      "widgets_values": [
        "## HeyGen Voice 1.0\n\nClone a voice from one recording, then speak any script in that voice.\n\n### How to use\n\n1. Sign in with your ComfyUI account before queueing: this node runs on Comfy's servers.\n2. Record or load **one speaker**, at least 10 seconds of clear speech. Only the first 3 minutes are used.\n3. In **Instant Clone**, set `language` to the language spoken in the recording. `similarity` controls how closely the voice follows the recording; change `seed` to clone again and get a slightly different voice.\n4. Connect `voice_id` to **Voice 1.0 Text to Speech**.\n5. Write the script in `text` (up to 5000 characters; about 12 minutes of speech, so split very long Chinese or Japanese text).\n6. Set `language` when auto-detection can confuse closely related languages such as Serbian or Malay.\n7. `expressiveness_boost` 0.0 stays close to the original recording, 1.0 adds more emotion.\n8. Queue the prompt, then save the audio.\n\n### Writing the script\n\n- **Plain prose**, 1 to 5000 characters. Anything else is rejected.\n- Instant voices ignore `seed`, `speed` and `pitch`. `expressiveness_boost` (0.0-1.0) is the only delivery control.\n\n### Notes\n\n- `heygen-voice-1-turbo` in the model list is faster than `heygen-voice-1`.\n- Official docs: [HeyGen Voice](https://developers.heygen.com/docs/models/heygen-voice) and [Text to Speech](https://developers.heygen.com/docs/voices/speech).\n\n### Saving the voice ID\n\nThe **SaveText** node writes the cloned `voice_id` to `output/HeyGen_Voice_id/` as a small text file, so you can reuse the same voice in a later session without cloning again.\n\nIts `filename_prefix` accepts date tokens: `%year%`, `%month%`, `%day%`, `%hour%`, `%minute%`, `%second%`. The default here is `HeyGen_Voice_id/HeyGen_voice1_%year%-%month%-%day%`, which gives one file per day and never overwrites yesterday's clone. Paste the saved ID into a Text to Speech node's `custom_voice_id` (or link it straight to `voice_id`) when you come back to it."
      ],
      "widgets_values_named": {
        "text": "## HeyGen Voice 1.0\n\nClone a voice from one recording, then speak any script in that voice.\n\n### How to use\n\n1. Sign in with your ComfyUI account before queueing: this node runs on Comfy's servers.\n2. Record or load **one speaker**, at least 10 seconds of clear speech. Only the first 3 minutes are used.\n3. In **Instant Clone**, set `language` to the language spoken in the recording. `similarity` controls how closely the voice follows the recording; change `seed` to clone again and get a slightly different voice.\n4. Connect `voice_id` to **Voice 1.0 Text to Speech**.\n5. Write the script in `text` (up to 5000 characters; about 12 minutes of speech, so split very long Chinese or Japanese text).\n6. Set `language` when auto-detection can confuse closely related languages such as Serbian or Malay.\n7. `expressiveness_boost` 0.0 stays close to the original recording, 1.0 adds more emotion.\n8. Queue the prompt, then save the audio.\n\n### Writing the script\n\n- **Plain prose**, 1 to 5000 characters. Anything else is rejected.\n- Instant voices ignore `seed`, `speed` and `pitch`. `expressiveness_boost` (0.0-1.0) is the only delivery control.\n\n### Notes\n\n- `heygen-voice-1-turbo` in the model list is faster than `heygen-voice-1`.\n- Official docs: [HeyGen Voice](https://developers.heygen.com/docs/models/heygen-voice) and [Text to Speech](https://developers.heygen.com/docs/voices/speech).\n\n### Saving the voice ID\n\nThe **SaveText** node writes the cloned `voice_id` to `output/HeyGen_Voice_id/` as a small text file, so you can reuse the same voice in a later session without cloning again.\n\nIts `filename_prefix` accepts date tokens: `%year%`, `%month%`, `%day%`, `%hour%`, `%minute%`, `%second%`. The default here is `HeyGen_Voice_id/HeyGen_voice1_%year%-%month%-%day%`, which gives one file per day and never overwrites yesterday's clone. Paste the saved ID into a Text to Speech node's `custom_voice_id` (or link it straight to `voice_id`) when you come back to it."
      },
      "color": "#222",
      "bgcolor": "#000"
    },
    {
      "id": 2,
      "type": "LoadAudio",
      "pos": [
        -620,
        260
      ],
      "size": [
        290,
        140
      ],
      "flags": {},
      "order": 1,
      "mode": 0,
      "inputs": [],
      "outputs": [
        {
          "name": "AUDIO",
          "type": "AUDIO",
          "links": [
            1
          ]
        }
      ],
      "properties": {
        "Node name for S&R": "LoadAudio"
      },
      "widgets_values": [
        "long_demo.mp3",
        ""
      ],
      "widgets_values_named": {
        "audio": "long_demo.mp3",
        "upload": ""
      },
      "color": "#322",
      "bgcolor": "#533"
    },
    {
      "id": 3,
      "type": "HeyGenVoiceCloneNode",
      "pos": [
        -300,
        260
      ],
      "size": [
        320,
        160
      ],
      "flags": {},
      "order": 2,
      "mode": 0,
      "inputs": [
        {
          "name": "audio",
          "type": "AUDIO",
          "link": 1
        }
      ],
      "outputs": [
        {
          "name": "voice_id",
          "type": "STRING",
          "links": [
            11
          ]
        }
      ],
      "properties": {
        "Node name for S&R": "HeyGenVoiceCloneNode"
      },
      "widgets_values": [
        "auto",
        "max",
        true,
        42,
        "fixed"
      ],
      "widgets_values_named": {
        "language": "auto",
        "similarity": "max",
        "remove_background_noise": true,
        "seed": 42,
        "fixed": "fixed"
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 5,
      "type": "SaveAudioAdvanced",
      "pos": [
        860,
        260
      ],
      "size": [
        540,
        220
      ],
      "flags": {},
      "order": 5,
      "mode": 0,
      "inputs": [
        {
          "name": "audio",
          "type": "AUDIO",
          "link": 3
        }
      ],
      "outputs": [
        {
          "name": "audio",
          "type": "AUDIO",
          "links": null
        }
      ],
      "properties": {},
      "widgets_values": [
        "audio/heygen_voice_1",
        "mp3",
        "V0"
      ],
      "widgets_values_named": {
        "filename_prefix": "audio/heygen_voice_1",
        "format": "mp3",
        "format.quality": "V0"
      }
    },
    {
      "id": 6,
      "type": "HeyGenVoiceTextToSpeechNode",
      "pos": [
        380,
        260
      ],
      "size": [
        400,
        200
      ],
      "flags": {},
      "order": 4,
      "mode": 0,
      "inputs": [
        {
          "name": "model.voice_id",
          "type": "STRING",
          "widget": {
            "name": "model.voice_id"
          },
          "link": 12
        }
      ],
      "outputs": [
        {
          "name": "AUDIO",
          "type": "AUDIO",
          "links": [
            3
          ]
        }
      ],
      "properties": {
        "Node name for S&R": "HeyGenVoiceTextToSpeechNode"
      },
      "widgets_values": [
        "heygen-voice-1",
        "",
        "HeyGen Voice 1.0 turns a ten second recording into a voice you can reuse. Write your script here. Pauses come from punctuation, not tags: full stops, commas and paragraph breaks. Run the prompt once to hear how it lands, then replace this text with your own.",
        "auto",
        0.5
      ],
      "widgets_values_named": {
        "model": "heygen-voice-1",
        "model.voice_id": "",
        "model.text": "HeyGen Voice 1.0 turns a ten second recording into a voice you can reuse. Write your script here. Pauses come from punctuation, not tags: full stops, commas and paragraph breaks. Run the prompt once to hear how it lands, then replace this text with your own.",
        "model.language": "auto",
        "model.expressiveness_boost": 0.5
      },
      "color": "#432",
      "bgcolor": "#653"
    },
    {
      "id": 7,
      "type": "SaveText",
      "pos": [
        -300,
        480
      ],
      "size": [
        550,
        225.88546416437705
      ],
      "flags": {},
      "order": 3,
      "mode": 0,
      "inputs": [
        {
          "name": "text",
          "type": "STRING",
          "link": 11
        }
      ],
      "outputs": [
        {
          "name": "text",
          "type": "STRING",
          "links": [
            12
          ]
        }
      ],
      "properties": {
        "Node name for S&R": "SaveText"
      },
      "widgets_values": [
        "HeyGen_Voice_id/HeyGen_voice_id_%year%-%month%-%day%",
        "txt"
      ],
      "widgets_values_named": {
        "filename_prefix": "HeyGen_Voice_id/HeyGen_voice_id_%year%-%month%-%day%",
        "format": "txt"
      }
    }
  ],
  "links": [
    [
      1,
      2,
      0,
      3,
      0,
      "AUDIO"
    ],
    [
      11,
      3,
      0,
      7,
      0,
      "STRING"
    ],
    [
      3,
      6,
      0,
      5,
      0,
      "AUDIO"
    ],
    [
      12,
      7,
      0,
      6,
      0,
      "STRING"
    ]
  ],
  "groups": [
    {
      "id": 1,
      "title": "1. Upload your audio and create a clone",
      "bounding": [
        -690,
        180,
        1000,
        580
      ],
      "color": "#3f789e",
      "flags": {}
    },
    {
      "id": 2,
      "title": "2. Speak the script",
      "bounding": [
        340,
        180,
        1100,
        440
      ],
      "color": "#3f789e",
      "flags": {}
    }
  ],
  "config": {},
  "extra": {
    "ds": {
      "scale": 0.590703525938469,
      "offset": [
        1190.268872664595,
        322.46262405194574
      ]
    },
    "frontendVersion": "1.55.17"
  },
  "version": 0.4
}