Files
diodiogod-TTS-Audio-Suite/example_workflows/Chatterbox integration.json
diodiogod e6b9a5ab80 Version 4.8.27
Centralize numba compatibility system with smart testing

Technical implementation:
- Replace 15+ duplicate JIT workaround blocks with unified system
- Add utils/compatibility/numba_compat.py with startup testing
- Implement fallback for environments without compatibility module
- Test librosa.stft() at startup and apply workarounds only when needed
- Eliminate contradictory startup messages between init and nodes
- Maintain backward compatibility with legacy Python 3.13 fixes
2025-09-09 00:40:06 -03:00

1162 lines
27 KiB
JSON

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