{ "id": "4a7cdb14-f535-4923-861b-59ba2c7ee043", "revision": 0, "last_node_id": 72, "last_link_id": 121, "nodes": [ { "id": 46, "type": "ChatterBoxEngineNode", "pos": [ -1610, 2620 ], "size": [ 270, 178 ], "flags": {}, "order": 0, "mode": 0, "inputs": [], "outputs": [ { "name": "TTS_engine", "type": "TTS_ENGINE", "links": [ 101 ] } ], "properties": { "cnr_id": "tts_audio_suite", "ver": "ee95cad1f155eceb1442723c7f351949b30361e3", "Node name for S&R": "ChatterBoxEngineNode" }, "widgets_values": [ "English", "auto", 0.5, 0.8, 0.5, "hmm ,, {seg} hmm ,," ], "color": "#222", "bgcolor": "#000" }, { "id": 43, "type": "PrimitiveStringMultiline", "pos": [ -2260, 2140 ], "size": [ 620, 1100 ], "flags": {}, "order": 1, "mode": 0, "inputs": [], "outputs": [ { "name": "STRING", "type": "STRING", "links": [ 104 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.3.40", "Node name for S&R": "PrimitiveStringMultiline", "widget_ue_connectable": {} }, "widgets_values": [ "Welcome to our multilingual storytelling demonstration. Today we explore the advanced capabilities of modern text-to-speech technology with seamless character and language switching.\n\n[Narrator] In a bustling international café, conversations flow between languages and voices.[pause:2s] Let me tell you about what happened yesterday.\n\n[crestfallen_original] I was sitting at my usual table when I overheard [Alice] Guten Morgen! Wie geht es Ihnen heute? [crestfallen_original] The German woman's voice was so pleasant that [Bob] Hei! Hvordan har du det i dag? [crestfallen_original] Even the Norwegian gentleman couldn't help but join the conversation.\n\n[pause:1.5s][Alice] It's fascinating how [en:Alice] we can switch between languages so naturally, [de:Alice] aber manchmal ist es schwierig [en:Alice] to find the right words in each language.\n\n[crestfallen_original] The conversation continued as [Girl] Oh, I completely understand! [crestfallen_original] said a young woman nearby, [Girl] Sometimes I think in English but [de:Girl] meine Träume sind auf Deutsch [Girl] and it gets quite confusing!\n\n[pause:2s][Cowboy] Well partner, [crestfallen_original] interrupted a distinctive voice from the corner, [Cowboy] back in my day we had to learn languages the hard way. [crestfallen_original] The man's weathered face told stories of [Cowboy] countless adventures across different lands and cultures.\n\n[Bob] Det er veldig interessant! [crestfallen_original] he replied thoughtfully, [no:Bob] Men nå med moderne teknologi [en:Bob] we can preserve and share these voices across the world.\n\n[pause:1s][Old Man] You know, [crestfallen_original] began an elderly gentleman, [Old Man] I've lived through the transition from [no:Old Man] når vi bare hadde radio [en:Old Man] to this incredible digital age where [Old Man] voices can be recreated and shared instantly.\n\n[Alice] Das stimmt! [crestfallen_original] Alice nodded enthusiastically, [de:Alice] Meine Großmutter würde das nicht glauben [en:Alice] if she could see how we communicate today. [Alice] The technology bridges generations and cultures.\n\n[pause:2.5s][crestfallen_original] As the afternoon progressed, the conversation became even more animated. [Girl] Did you hear about the new developments? [crestfallen_original] she asked excitedly, [Girl] They say we can now capture the essence of any voice and [Girl] make it speak in multiple languages perfectly!\n\n[Cowboy] That's mighty impressive, [crestfallen_original] the cowboy drawled, [Cowboy] reminds me of those old radio shows where [Cowboy] one person would voice multiple characters. [crestfallen_original] His eyes twinkled with nostalgia.\n\n[pause:1s][Bob] Nøyaktig! [crestfallen_original] Bob agreed, [no:Bob] Det er som å ha et teaterensemble [en:Bob] right in your pocket. [Bob] The possibilities for storytelling are endless.\n\n[no:Alice] Det er utrolig! [crestfallen_original] Alice switched to Norwegian, [no:Alice] Vi kan nå fortelle historier på så mange måter [en:Alice] and reach audiences we never imagined before.\n\n[pause:3s][Narrator] The café slowly emptied as evening approached, but the conversation had sparked something special. [crestfallen_original] Each person left with [Old Man] a new appreciation for how technology [crestfallen_original] was preserving and expanding [Girl] the beautiful diversity of human speech [crestfallen_original] while bringing people together across linguistic barriers.\n\n[Cowboy] Until we meet again, partners, [crestfallen_original] the cowboy tipped his hat, [Cowboy] remember that every voice tells a story worth hearing.\n\n[pause:1.5s][Alice] Auf Wiedersehen! [Bob] Ha det bra! [Girl] See you all soon! [Old Man] Take care everyone! [crestfallen_original] And with that, the multicultural symphony of voices faded into the evening air.\n\n[pause:2s][Narrator] This is the power of modern voice technology. [pause:1s] Not just converting text to speech, but preserving the rich tapestry of human expression across languages, cultures, and generations. [pause:1s] Every voice matters, every language counts, and every story deserves to be heard.\n\n[pause:3s][crestfallen_original] The future of communication is here, and it speaks with the voices of humanity itself." ] }, { "id": 61, "type": "MarkdownNote", "pos": [ -1630, 2880 ], "size": [ 350, 360 ], "flags": {}, "order": 2, "mode": 0, "inputs": [], "outputs": [], "properties": {}, "widgets_values": [ "# 🛡️ ChatterBox Crash Protection System\n\nChatterBox has a bug where text shorter than ~21 characters causes CUDA tensor errors that can crash ComfyUI. The crash protection system automatically pads short text segments to prevent these crashes.\n\n## How It Works\n\n- **Template**: `\"hmm ,, {seg} hmm ,,\"` (default)\n- **Trigger**: Activates when text segments are too short\n- **Process**: Replaces `{seg}` with original text: `\"hello\"` → `\"hmm ,, hello hmm ,,\"`\n\n## Configuration\n\nSet the crash protection template on the **ChatterBox Engine** node:\n\n- **Default**: `\"hmm ,, {seg} hmm ,,\"`\n- **Custom**: `\"Well, {seg}\"`, `\"...ummmmm {seg}\"`, `\"{seg}... yes... {seg}\"`\n- **Disable**: Leave empty string `\"\"`" ], "color": "#432", "bgcolor": "#653" }, { "id": 66, "type": "Reroute", "pos": [ -1430.9703369140625, 2433.110107421875 ], "size": [ 75, 26 ], "flags": {}, "order": 18, "mode": 0, "inputs": [ { "name": "", "type": "*", "widget": { "name": "value" }, "link": 109 } ], "outputs": [ { "name": "", "type": "STRING", "links": [ 110 ] } ], "properties": { "showOutputText": false, "horizontal": false } }, { "id": 53, "type": "Reroute", "pos": [ -1435.39404296875, 2489.834228515625 ], "size": [ 75, 26 ], "flags": {}, "order": 15, "mode": 0, "inputs": [ { "name": "", "type": "*", "link": 104 } ], "outputs": [ { "name": "", "type": "STRING", "links": [] } ], "properties": { "showOutputText": false, "horizontal": false } }, { "id": 62, "type": "MarkdownNote", "pos": [ -2632.264404296875, 2189.00732421875 ], "size": [ 340, 240 ], "flags": {}, "order": 3, "mode": 0, "inputs": [], "outputs": [], "properties": {}, "widgets_values": [ "## **❗ ❗ This is a LONG example with multi-character switching + language switching + pause system.**\n\nBe warned that connecting this text will take a long time to generate and will download and load multiple ChatterBox models " ], "color": "#432", "bgcolor": "#653" }, { "id": 54, "type": "Reroute", "pos": [ -1101.890625, 2431.052490234375 ], "size": [ 75, 26 ], "flags": {}, "order": 20, "mode": 0, "inputs": [ { "name": "", "type": "*", "widget": { "name": "value" }, "link": 110 } ], "outputs": [ { "name": "", "type": "STRING", "links": [ 108 ] } ], "properties": { "showOutputText": false, "horizontal": false } }, { "id": 57, "type": "MarkdownNote", "pos": [ -939.9619750976562, 1553.8792724609375 ], "size": [ 340, 240 ], "flags": {}, "order": 4, "mode": 0, "inputs": [], "outputs": [], "properties": {}, "widgets_values": [ "# **FROM v4 and up!**\n\nUnified nodes:\n- 🎤 **TTS Text**: Direct text-to-speech module \n- 🔄 **Voice Changer**: Voice transformation \n- 📺 **TTS SRT**: Subtitle-compatible TTS output \n\nThese nodes are now **engine-agnostic**, meaning you can plug in **Chatterbox**, **F5**, or future engines seamlessly.\n\n🔄 **Voice Changer** supports both **Chatterbox** and **VCR**, giving you more versatility in voice manipulation.\n" ], "color": "#432", "bgcolor": "#653" }, { "id": 56, "type": "MarkdownNote", "pos": [ -1363.54345703125, 1558.387451171875 ], "size": [ 340, 240 ], "flags": {}, "order": 5, "mode": 0, "inputs": [], "outputs": [], "properties": {}, "widgets_values": [ "# 🎭 **Chatterbox Voice Tips**\n\n1- For **Chatterbox**, you can connect any audio from a **Load Audio Core** node directly for **zero-shot voice cloning**\n \n2- or use the **🎭 Character Voices** feature to load a narrator from your `Voices` folder.\n\n🎭 **Character Voices** can also be connected to the **Voice Changer** for dynamic voice cloning in Voice Changer when using Chatterbox Engine.\n" ], "color": "#432", "bgcolor": "#653" }, { "id": 60, "type": "MarkdownNote", "pos": [ -446.62701416015625, 1535.305419921875 ], "size": [ 450, 250 ], "flags": {}, "order": 6, "mode": 0, "inputs": [], "outputs": [], "properties": {}, "widgets_values": [ "# Tips\n\n## General Use (Chatterbox TTS and Voice Agents):\n\n- The default settings (`exaggeration=0.5`, `cfg_weight=0.5`) work well for most prompts.\n- If the reference speaker has a fast speaking style, lowering `cfg_weight` to around `0.3` can improve pacing.\n\n## Expressive or Dramatic Speech:\n\n- Try lower `cfg_weight` values (e.g. ~`0.3`) and increase `exaggeration` to around `0.7` or higher.\n- Higher `exaggeration` tends to speed up speech; reducing `cfg_weight` helps compensate with slower, more deliberate pacing.\n" ], "color": "#432", "bgcolor": "#653" }, { "id": 35, "type": "LoadAudio", "pos": [ -1265.9169921875, 2734.278076171875 ], "size": [ 270, 136 ], "flags": {}, "order": 7, "mode": 0, "inputs": [], "outputs": [ { "name": "AUDIO", "type": "AUDIO", "links": [ 116 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.3.39", "Node name for S&R": "LoadAudio", "widget_ue_connectable": {} }, "widgets_values": [ "Clint_Eastwood CC3 (enhanced2).wav", null, null ] }, { "id": 34, "type": "LoadAudio", "pos": [ -1264.150146484375, 3006.59716796875 ], "size": [ 270, 136 ], "flags": {}, "order": 8, "mode": 0, "inputs": [], "outputs": [ { "name": "AUDIO", "type": "AUDIO", "links": [ 115 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.3.39", "Node name for S&R": "LoadAudio", "widget_ue_connectable": {} }, "widgets_values": [ "Aerith_original.wav", null, null ] }, { "id": 52, "type": "Reroute", "pos": [ -813.7050170898438, 2613.963623046875 ], "size": [ 75, 26 ], "flags": {}, "order": 14, "mode": 0, "inputs": [ { "name": "", "type": "*", "link": 101 } ], "outputs": [ { "name": "", "type": "TTS_ENGINE", "links": [ 102, 121 ] } ], "properties": { "showOutputText": false, "horizontal": false } }, { "id": 47, "type": "UnifiedTTSTextNode", "pos": [ -657.041015625, 1982.4339599609375 ], "size": [ 400, 324 ], "flags": {}, "order": 23, "mode": 0, "inputs": [ { "name": "TTS_engine", "type": "TTS_ENGINE", "link": 102 }, { "name": "opt_narrator", "shape": 7, "type": "*", "link": 114 }, { "name": "text", "type": "STRING", "widget": { "name": "text" }, "link": 108 } ], "outputs": [ { "name": "audio", "type": "AUDIO", "links": [ 93 ] }, { "name": "generation_info", "type": "STRING", "links": [ 100 ] } ], "properties": { "cnr_id": "tts_audio_suite", "ver": "ee95cad1f155eceb1442723c7f351949b30361e3", "Node name for S&R": "UnifiedTTSTextNode" }, "widgets_values": [ "Hello! This is unified TTS with character switching support.\n[Alice] Hi there! I'm Alice speaking with the selected TTS engine.\n[Bob] And I'm Bob! This works with any TTS engine.\nBack to the main narrator voice for the conclusion.", "none", 1552347952, "fixed", true, 400, "auto", 100, true, 0 ], "color": "#223", "bgcolor": "#335" }, { "id": 51, "type": "CharacterVoicesNode", "pos": [ -1180.4798583984375, 2132.017822265625 ], "size": [ 232.96051025390625, 146.08004760742188 ], "flags": {}, "order": 9, "mode": 0, "inputs": [ { "name": "opt_audio_input", "shape": 7, "type": "AUDIO", "link": null } ], "outputs": [ { "name": "opt_narrator", "type": "NARRATOR_VOICE", "links": [ 114 ] }, { "name": "character_name", "type": "STRING", "links": null } ], "properties": { "cnr_id": "tts_audio_suite", "ver": "ee95cad1f155eceb1442723c7f351949b30361e3", "Node name for S&R": "CharacterVoicesNode" }, "widgets_values": [ "voices_examples/David_Attenborough CC3.wav", "" ], "color": "#432", "bgcolor": "#653" }, { "id": 26, "type": "LoadAudio", "pos": [ -1154.0604248046875, 1933.3072509765625 ], "size": [ 240, 136 ], "flags": {}, "order": 10, "mode": 0, "inputs": [], "outputs": [ { "name": "AUDIO", "type": "AUDIO", "links": [] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.3.39", "Node name for S&R": "LoadAudio", "widget_ue_connectable": {} }, "widgets_values": [ "Tony.mp3", null, null ] }, { "id": 65, "type": "PrimitiveStringMultiline", "pos": [ -1967.4971923828125, 1812.1561279296875 ], "size": [ 310.7043762207031, 224.9416046142578 ], "flags": {}, "order": 11, "mode": 0, "inputs": [], "outputs": [ { "name": "STRING", "type": "STRING", "links": [ 109 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.3.40", "Node name for S&R": "PrimitiveStringMultiline", "widget_ue_connectable": {} }, "widgets_values": [ "On Tuesdays, the pigeons held parliament. They debated the ethics of breadcrumbs and the metaphysics of flight. One particularly philosophical pigeon named Thistle believed gravity was just a suggestion. He once floated for three minutes straight, fueled by sheer conviction and a gust of rebellious wind." ] }, { "id": 69, "type": "CharacterVoicesNode", "pos": [ -935.7373046875, 2755.75244140625 ], "size": [ 232.96051025390625, 146.08004760742188 ], "flags": {}, "order": 12, "mode": 0, "inputs": [ { "name": "opt_audio_input", "shape": 7, "type": "AUDIO", "link": null } ], "outputs": [ { "name": "opt_narrator", "type": "NARRATOR_VOICE", "links": [ 118 ] }, { "name": "character_name", "type": "STRING", "links": null } ], "properties": { "cnr_id": "tts_audio_suite", "ver": "ee95cad1f155eceb1442723c7f351949b30361e3", "Node name for S&R": "CharacterVoicesNode" }, "widgets_values": [ "voices_examples/Clint_Eastwood CC3 (enhanced2).wav", "" ], "color": "#432", "bgcolor": "#653" }, { "id": 71, "type": "Reroute", "pos": [ -948.1080322265625, 2925.384765625 ], "size": [ 75, 26 ], "flags": {}, "order": 16, "mode": 0, "inputs": [ { "name": "", "type": "*", "link": 116 } ], "outputs": [ { "name": "", "type": "AUDIO", "links": null } ], "properties": { "showOutputText": false, "horizontal": false }, "color": "#432", "bgcolor": "#653" }, { "id": 70, "type": "Reroute", "pos": [ -947.085693359375, 2964.313720703125 ], "size": [ 75, 26 ], "flags": {}, "order": 17, "mode": 0, "inputs": [ { "name": "", "type": "*", "link": 115 } ], "outputs": [ { "name": "", "type": "AUDIO", "links": null } ], "properties": { "showOutputText": false, "horizontal": false }, "color": "#432", "bgcolor": "#653" }, { "id": 49, "type": "PreviewAny", "pos": [ -240.49069213867188, 3012.72412109375 ], "size": [ 493.8410949707031, 203.50367736816406 ], "flags": {}, "order": 22, "mode": 0, "inputs": [ { "name": "source", "type": "*", "link": 99 } ], "outputs": [], "properties": { "cnr_id": "comfy-core", "ver": "0.3.57", "Node name for S&R": "PreviewAny" }, "widgets_values": [] }, { "id": 48, "type": "UnifiedVoiceChangerNode", "pos": [ -572.5202026367188, 2863.7392578125 ], "size": [ 273.111328125, 98 ], "flags": {}, "order": 19, "mode": 0, "inputs": [ { "name": "TTS_engine", "type": "TTS_ENGINE", "link": 121 }, { "name": "source_audio", "type": "*", "link": 118 }, { "name": "narrator_target", "type": "*", "link": 117 } ], "outputs": [ { "name": "converted_audio", "type": "AUDIO", "links": [ 96 ] }, { "name": "conversion_info", "type": "STRING", "links": [ 99 ] } ], "properties": { "cnr_id": "tts_audio_suite", "ver": "ee95cad1f155eceb1442723c7f351949b30361e3", "Node name for S&R": "UnifiedVoiceChangerNode" }, "widgets_values": [ 1 ], "color": "#223", "bgcolor": "#335" }, { "id": 68, "type": "CharacterVoicesNode", "pos": [ -935.257568359375, 3076.891357421875 ], "size": [ 232.96051025390625, 146.08004760742188 ], "flags": {}, "order": 13, "mode": 0, "inputs": [ { "name": "opt_audio_input", "shape": 7, "type": "AUDIO", "link": null } ], "outputs": [ { "name": "opt_narrator", "type": "NARRATOR_VOICE", "links": [ 117 ] }, { "name": "character_name", "type": "STRING", "links": null } ], "properties": { "cnr_id": "tts_audio_suite", "ver": "ee95cad1f155eceb1442723c7f351949b30361e3", "Node name for S&R": "CharacterVoicesNode" }, "widgets_values": [ "voices_examples/female/female_02.wav", "" ], "color": "#432", "bgcolor": "#653" }, { "id": 36, "type": "PreviewAudio", "pos": [ -248.290771484375, 2867.75439453125 ], "size": [ 499.4865417480469, 88 ], "flags": {}, "order": 21, "mode": 0, "inputs": [ { "name": "audio", "type": "AUDIO", "link": 96 } ], "outputs": [], "properties": { "cnr_id": "comfy-core", "ver": "0.3.39", "Node name for S&R": "PreviewAudio", "widget_ue_connectable": {} }, "widgets_values": [], "color": "#2a363b", "bgcolor": "#3f5159" }, { "id": 15, "type": "PreviewAudio", "pos": [ -192.89453125, 1985.134521484375 ], "size": [ 560, 88 ], "flags": {}, "order": 24, "mode": 0, "inputs": [ { "name": "audio", "type": "AUDIO", "link": 93 } ], "outputs": [], "properties": { "cnr_id": "comfy-core", "ver": "0.3.39", "Node name for S&R": "PreviewAudio", "widget_ue_connectable": {} }, "widgets_values": [], "color": "#2a363b", "bgcolor": "#3f5159" }, { "id": 50, "type": "PreviewAny", "pos": [ -188.43724060058594, 2147.539794921875 ], "size": [ 552.7586059570312, 174.5865936279297 ], "flags": {}, "order": 25, "mode": 0, "inputs": [ { "name": "source", "type": "*", "link": 100 } ], "outputs": [], "properties": { "cnr_id": "comfy-core", "ver": "0.3.57", "Node name for S&R": "PreviewAny" }, "widgets_values": [] } ], "links": [ [ 93, 47, 0, 15, 0, "AUDIO" ], [ 96, 48, 0, 36, 0, "AUDIO" ], [ 99, 48, 1, 49, 0, "*" ], [ 100, 47, 1, 50, 0, "*" ], [ 101, 46, 0, 52, 0, "*" ], [ 102, 52, 0, 47, 0, "TTS_ENGINE" ], [ 104, 43, 0, 53, 0, "*" ], [ 108, 54, 0, 47, 2, "STRING" ], [ 109, 65, 0, 66, 0, "*" ], [ 110, 66, 0, 54, 0, "*" ], [ 114, 51, 0, 47, 1, "*" ], [ 115, 34, 0, 70, 0, "*" ], [ 116, 35, 0, 71, 0, "*" ], [ 117, 68, 0, 48, 2, "*" ], [ 118, 69, 0, 48, 1, "*" ], [ 121, 52, 0, 48, 0, "TTS_ENGINE" ] ], "groups": [ { "id": 2, "title": "ChatterBox Text-to-Speech", "bounding": [ -1269.5645751953125, 1833.0001220703125, 1663.6541748046875, 752.8804931640625 ], "color": "#3f789e", "font_size": 24, "flags": {} }, { "id": 3, "title": "ChatterBox Voice Conversion", "bounding": [ -1270, 2660, 1656.163330078125, 596.253173828125 ], "color": "#3f789e", "font_size": 24, "flags": {} }, { "id": 4, "title": "Load Engine", "bounding": [ -1620, 2550, 290, 260 ], "color": "#3f789e", "font_size": 24, "flags": {} }, { "id": 5, "title": "LONG Text", "bounding": [ -2270, 2070, 640, 1183.5999755859375 ], "color": "#3f789e", "font_size": 24, "flags": {} }, { "id": 6, "title": "Simple text exemple", "bounding": [ -1978.6439208984375, 1738.55615234375, 335.19879150390625, 312.692138671875 ], "color": "#3f789e", "font_size": 24, "flags": {} } ], "config": {}, "extra": { "ds": { "scale": 0.6588450000000138, "offset": [ 2476.275948694854, -1566.3028650503888 ] }, "frontendVersion": "1.25.11", "ue_links": [], "links_added_by_ue": [], "VHS_latentpreview": false, "VHS_latentpreviewrate": 0, "VHS_MetadataImage": true, "VHS_KeepIntermediate": true }, "version": 0.4 }