{ "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 }