diff --git a/__init__.py b/__init__.py index 20c9732..beaf3fc 100644 --- a/__init__.py +++ b/__init__.py @@ -53,7 +53,6 @@ from .modules.providerSettings.viduProviderSettings import RunwareViduProviderSe from .modules.mediaUpload import runwareMediaUpload from .modules.inputAudios import inputAudios from .modules.audioInput import RunwareAudioInput -from .modules.audioInputCombine import RunwareAudioInputCombine from .modules.speechInput import RunwareSpeechInput from .modules.speechInputCombine import RunwareSpeechInputCombine from .modules.referenceVideos import referenceVideos @@ -163,7 +162,6 @@ NODE_CLASS_MAPPINGS = { "Runware Media Upload": runwareMediaUpload, "Runware Input Audios": inputAudios, "Runware Video Audio Input": RunwareAudioInput, - "Runware Audio Inputs Combine": RunwareAudioInputCombine, "Runware Video Speech Input": RunwareSpeechInput, "Runware Speech Inputs Combine": RunwareSpeechInputCombine, "Runware Reference Videos": referenceVideos, diff --git a/clientlibs/utils.js b/clientlibs/utils.js index 2608800..5635fad 100644 --- a/clientlibs/utils.js +++ b/clientlibs/utils.js @@ -1212,6 +1212,8 @@ function videoSettingsToggleHandler(settingsNode) { function audioInferenceSpeechToggleHandler(speechNode) { if (!speechNode?.widgets) return; + const useVoiceWidget = speechNode.widgets.find(w => w && w.name === "useVoice"); + const voiceWidget = speechNode.widgets.find(w => w && w.name === "voice"); const useSpeedWidget = speechNode.widgets.find(w => w && w.name === "useSpeed"); const speedWidget = speechNode.widgets.find(w => w && w.name === "speed"); const useVolumeWidget = speechNode.widgets.find(w => w && w.name === "useVolume"); @@ -1244,6 +1246,7 @@ function audioInferenceSpeechToggleHandler(speechNode) { if (usePitchWidget && pitchWidget) toggleWidgetState(usePitchWidget, pitchWidget, "pitch"); if (useEmotionWidget && emotionWidget) toggleWidgetState(useEmotionWidget, emotionWidget, "emotion"); if (useToneWidget && toneWidget) toggleWidgetState(useToneWidget, toneWidget, "tone"); + if (useVoiceWidget && voiceWidget) toggleWidgetState(useVoiceWidget, voiceWidget, "voice"); } function acceleratorOptionsToggleHandler(acceleratorNode) { @@ -2763,6 +2766,12 @@ function audioModelSearchFilterHandler(audioModelSearchNode) { "Ace": [ "runware:ace-step@0 (ACE Step v1 3.5B)", ], + "Dia": [ + "runware:dia@v1.0 (Dia 1.6B)", + ], + "xAI": [ + "xai:voice@tts (xAI TTS)", + ], "MiniMax": [ "minimax:speech@2.8 (MiniMax Speech 2.8)", ], diff --git a/modules/audioInferenceSpeech.py b/modules/audioInferenceSpeech.py index 692c9ea..3d9768a 100644 --- a/modules/audioInferenceSpeech.py +++ b/modules/audioInferenceSpeech.py @@ -26,12 +26,16 @@ class RunwareAudioInferenceSpeech: "default": "Hello, this is a test of the speech synthesis model.", "tooltip": "Text to synthesize as speech (speech.text)", }), - "voice": ("STRING", { - "default": "English_Whispering_girl", - "tooltip": "Voice identifier - see System Voice ID List (speech.voice)", - }), }, "optional": { + "useVoice": ("BOOLEAN", { + "default": False, + "tooltip": "Enable to include voice in speech synthesis (speech.voice).", + }), + "voice": ("STRING", { + "default": "", + "tooltip": "Voice identifier.", + }), "useSpeed": ("BOOLEAN", {"default": True, "tooltip": "Include speed (speech.speed)"}), "speed": ("FLOAT", { "default": 1.0, @@ -78,6 +82,7 @@ class RunwareAudioInferenceSpeech: """Build the speech object for the API (connect to Runware Audio Inference 'speech' input).""" text = (kwargs.get("text") or "").strip() voice = (kwargs.get("voice") or "").strip() + use_voice = kwargs.get("useVoice", False) use_speed = kwargs.get("useSpeed", True) speed = float(kwargs.get("speed", 1.0)) use_volume = kwargs.get("useVolume", True) @@ -89,7 +94,9 @@ class RunwareAudioInferenceSpeech: use_tone = kwargs.get("useTone", False) tone_str = kwargs.get("tone", "") or "" - speech: Dict[str, Any] = {"text": text, "voice": voice} + speech: Dict[str, Any] = {"text": text} + if use_voice: + speech["voice"] = voice if use_speed: speech["speed"] = speed if use_volume: @@ -103,6 +110,8 @@ class RunwareAudioInferenceSpeech: if tone_lines: speech["tone"] = tone_lines + if not text: + return ({},) return (speech,) diff --git a/modules/audioInputCombine.py b/modules/audioInputCombine.py deleted file mode 100644 index 560e07a..0000000 --- a/modules/audioInputCombine.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -Runware Audio Input Combine Node -Combines multiple audio inputs into a list -""" - -from typing import List, Dict, Any - - -class RunwareAudioInputCombine: - """Runware Audio Input Combine Node""" - - @classmethod - def INPUT_TYPES(cls): - return { - "required": { - "Audio Input 1": ("RUNWAREAUDIOINPUT", { - "tooltip": "Connect a Runware Audio Input node.", - }), - }, - "optional": { - "Audio Input 2": ("RUNWAREAUDIOINPUT", { - "tooltip": "Connect a Runware Audio Input node.", - }), - "Audio Input 3": ("RUNWAREAUDIOINPUT", { - "tooltip": "Connect a Runware Audio Input node.", - }), - "Audio Input 4": ("RUNWAREAUDIOINPUT", { - "tooltip": "Connect a Runware Audio Input node.", - }), - }, - } - - DESCRIPTION = "Combine multiple audio inputs to connect with Runware Video Inference Inputs." - FUNCTION = "audioInputCombine" - RETURN_TYPES = ("RUNWAREAUDIOINPUT",) - RETURN_NAMES = ("Audio Inputs",) - CATEGORY = "Runware" - - def audioInputCombine(self, **kwargs): - """Combine audio inputs into a list""" - audioInputs = [] - - for i in range(1, 5): - audioKey = f"Audio Input {i}" - audioInput = kwargs.get(audioKey) - if audioInput is not None and isinstance(audioInput, dict) and len(audioInput) > 0: - audioInputs.append(audioInput) - - return (audioInputs,) - - -# Node class mappings -NODE_CLASS_MAPPINGS = { - "RunwareAudioInputCombine": RunwareAudioInputCombine, -} - -NODE_DISPLAY_NAME_MAPPINGS = { - "RunwareAudioInputCombine": "Runware Audio Inputs Combine", -} - diff --git a/modules/audioModelSearch.py b/modules/audioModelSearch.py index 1327d71..7e3a607 100644 --- a/modules/audioModelSearch.py +++ b/modules/audioModelSearch.py @@ -17,6 +17,12 @@ class RunwareAudioModelSearch: "Ace": [ "runware:ace-step@0 (ACE Step v1 3.5B)", ], + "Dia": [ + "runware:dia@v1.0 (Dia 1.6B)", + ], + "xAI": [ + "xai:voice@tts (xAI TTS)", + ], "MiniMax": [ "minimax:speech@2.8 (MiniMax Speech 2.8)", ], @@ -32,6 +38,8 @@ class RunwareAudioModelSearch: "KlingAI", "Mirelo", "Ace", + "Dia", + "xAI", "MiniMax", "Inworld", ] diff --git a/modules/videoInferenceInputs.py b/modules/videoInferenceInputs.py index 9cd271e..68e4e82 100644 --- a/modules/videoInferenceInputs.py +++ b/modules/videoInferenceInputs.py @@ -24,7 +24,7 @@ class videoInferenceInputs: "tooltip": "Connect the mediaUUID output from Runware Media Upload node with audio file. This audio will be synchronized with the generated video. (Legacy: single audio string)" }), "Audio Inputs": ("RUNWAREAUDIOINPUT", { - "tooltip": "Connect Runware Video Audio Input node or Runware Audio Inputs Combine node to provide audio inputs with reference IDs." + "tooltip": "Connect Runware Video Audio Input node(s) to provide audio inputs with reference IDs." }), "Speech Inputs": ("RUNWARESPEECHINPUT", { "tooltip": "Connect Runware Video Speech Input node or Runware Speech Inputs Combine node to provide TTS speech inputs with reference IDs." diff --git a/workflows/Runware_Audio_Inference_Dia.json b/workflows/Runware_Audio_Inference_Dia.json new file mode 100644 index 0000000..190c891 --- /dev/null +++ b/workflows/Runware_Audio_Inference_Dia.json @@ -0,0 +1 @@ +{"id":"5549ed01-3c63-4157-a500-1c576048515a","revision":0,"last_node_id":38,"last_link_id":43,"nodes":[{"id":18,"type":"Runware Audio Model Search","pos":[323.36553955078125,-158.066650390625],"size":[270,130],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"Model Search","name":"Model Search","type":"STRING","widget":{"name":"Model Search"},"link":null},{"localized_name":"Model Provider","name":"Model Provider","type":"COMBO","widget":{"name":"Model Provider"},"link":null},{"localized_name":"AudioList","name":"AudioList","type":"COMBO","widget":{"name":"AudioList"},"link":null},{"localized_name":"Use Search Value","name":"Use Search Value","type":"BOOLEAN","widget":{"name":"Use Search Value"},"link":null}],"outputs":[{"localized_name":"model","name":"model","type":"RUNWAREAUDIOMODEL","links":[40]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"5e5e2b3fac2c984692b057e4e607d778a8c73e40","Node name for S&R":"Runware Audio Model Search"},"widgets_values":["runware:dia@v1.0","Dia","runware:dia@v1.0 (Dia 1.6B)",false],"bgcolor":"#5345bf"},{"id":37,"type":"Runware Audio Inference","pos":[662.5560302734375,-192.11276245117188],"size":[400,746],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"RUNWAREAUDIOMODEL","link":40},{"localized_name":"inputs","name":"inputs","shape":7,"type":"RUNWAREAUDIOINFERENCEINPUTS","link":null},{"localized_name":"settings","name":"settings","shape":7,"type":"RUNWAREAUDIOSETTINGS","link":null},{"localized_name":"speech","name":"speech","shape":7,"type":"RUNWARESPEECH","link":43},{"localized_name":"voiceModify","name":"voiceModify","shape":7,"type":"RUNWAREVOICEMODIFY","link":null},{"localized_name":"providerSettings","name":"providerSettings","shape":7,"type":"RUNWAREPROVIDERSETTINGS","link":null},{"localized_name":"usePositivePrompt","name":"usePositivePrompt","type":"BOOLEAN","widget":{"name":"usePositivePrompt"},"link":null},{"localized_name":"positivePrompt","name":"positivePrompt","type":"STRING","widget":{"name":"positivePrompt"},"link":null},{"localized_name":"negativePrompt","name":"negativePrompt","type":"STRING","widget":{"name":"negativePrompt"},"link":null},{"localized_name":"useDuration","name":"useDuration","type":"BOOLEAN","widget":{"name":"useDuration"},"link":null},{"localized_name":"duration","name":"duration","type":"INT","widget":{"name":"duration"},"link":null},{"localized_name":"useSampleRate","name":"useSampleRate","type":"BOOLEAN","widget":{"name":"useSampleRate"},"link":null},{"localized_name":"sampleRate","name":"sampleRate","type":"COMBO","widget":{"name":"sampleRate"},"link":null},{"localized_name":"useBitrate","name":"useBitrate","type":"BOOLEAN","widget":{"name":"useBitrate"},"link":null},{"localized_name":"bitrate","name":"bitrate","type":"COMBO","widget":{"name":"bitrate"},"link":null},{"localized_name":"useChannels","name":"useChannels","type":"BOOLEAN","widget":{"name":"useChannels"},"link":null},{"localized_name":"channels","name":"channels","type":"INT","widget":{"name":"channels"},"link":null},{"localized_name":"outputType","name":"outputType","type":"COMBO","widget":{"name":"outputType"},"link":null},{"localized_name":"outputFormat","name":"outputFormat","type":"COMBO","widget":{"name":"outputFormat"},"link":null},{"localized_name":"numberResults","name":"numberResults","type":"INT","widget":{"name":"numberResults"},"link":null},{"localized_name":"useSeed","name":"useSeed","type":"BOOLEAN","widget":{"name":"useSeed"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"useSteps","name":"useSteps","type":"BOOLEAN","widget":{"name":"useSteps"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"useStrength","name":"useStrength","type":"BOOLEAN","widget":{"name":"useStrength"},"link":null},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"useCFGScale","name":"useCFGScale","type":"BOOLEAN","widget":{"name":"useCFGScale"},"link":null},{"localized_name":"CFGScale","name":"CFGScale","type":"FLOAT","widget":{"name":"CFGScale"},"link":null}],"outputs":[{"localized_name":"audio","name":"audio","type":"AUDIO","links":[42]},{"localized_name":"video","name":"video","type":"VIDEO","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"3990adaa69e1da20efe5f4c6b8dd505ab9b998f0","Node name for S&R":"Runware Audio Inference"},"widgets_values":[false,"","",false,10,false,44100,false,128,false,2,"URL","MP3",1,false,2065834826,"randomize",false,20,false,0.8,false,12],"bgcolor":"#5345bf"},{"id":38,"type":"Runware Audio Inference Speech","pos":[206.35777282714844,72.22529602050781],"size":[400,406],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"text","name":"text","type":"STRING","widget":{"name":"text"},"link":null},{"localized_name":"useVoice","name":"useVoice","shape":7,"type":"BOOLEAN","widget":{"name":"useVoice"},"link":null},{"localized_name":"voice","name":"voice","shape":7,"type":"STRING","widget":{"name":"voice"},"link":null},{"localized_name":"useSpeed","name":"useSpeed","shape":7,"type":"BOOLEAN","widget":{"name":"useSpeed"},"link":null},{"localized_name":"speed","name":"speed","shape":7,"type":"FLOAT","widget":{"name":"speed"},"link":null},{"localized_name":"useVolume","name":"useVolume","shape":7,"type":"BOOLEAN","widget":{"name":"useVolume"},"link":null},{"localized_name":"volume","name":"volume","shape":7,"type":"FLOAT","widget":{"name":"volume"},"link":null},{"localized_name":"usePitch","name":"usePitch","shape":7,"type":"BOOLEAN","widget":{"name":"usePitch"},"link":null},{"localized_name":"pitch","name":"pitch","shape":7,"type":"FLOAT","widget":{"name":"pitch"},"link":null},{"localized_name":"useEmotion","name":"useEmotion","shape":7,"type":"BOOLEAN","widget":{"name":"useEmotion"},"link":null},{"localized_name":"emotion","name":"emotion","shape":7,"type":"COMBO","widget":{"name":"emotion"},"link":null},{"localized_name":"useTone","name":"useTone","shape":7,"type":"BOOLEAN","widget":{"name":"useTone"},"link":null},{"localized_name":"tone","name":"tone","shape":7,"type":"STRING","widget":{"name":"tone"},"link":null}],"outputs":[{"localized_name":"speech","name":"speech","type":"RUNWARESPEECH","links":[43]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"3990adaa69e1da20efe5f4c6b8dd505ab9b998f0","Node name for S&R":"Runware Audio Inference Speech"},"widgets_values":["[S1] Hello there, how are you doing today? [S2] I am doing great, thank you for asking!",false,"",false,1,false,1,false,0,false,"calm",false,""],"bgcolor":"#5345bf"},{"id":16,"type":"SaveAudioMP3","pos":[1111.5191650390625,-186.8231964111328],"size":[270,136],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"audio","name":"audio","type":"AUDIO","link":42},{"localized_name":"filename_prefix","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null},{"localized_name":"quality","name":"quality","type":"COMBO","widget":{"name":"quality"},"link":null},{"localized_name":"audioUI","name":"audioUI","type":"AUDIO_UI","widget":{"name":"audioUI"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.46","Node name for S&R":"SaveAudioMP3"},"widgets_values":["audio/ComfyUI","V0"]}],"links":[[40,18,0,37,0,"RUNWAREAUDIOMODEL"],[42,37,0,16,0,"AUDIO"],[43,38,0,37,3,"RUNWARESPEECH"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.7063044548234175,"offset":[190.3538786423963,252.89346702552274]}},"version":0.4} \ No newline at end of file diff --git a/workflows/Runware_Audio_Inference_xAI.json b/workflows/Runware_Audio_Inference_xAI.json new file mode 100644 index 0000000..bbe85d4 --- /dev/null +++ b/workflows/Runware_Audio_Inference_xAI.json @@ -0,0 +1 @@ +{"id":"5549ed01-3c63-4157-a500-1c576048515a","revision":0,"last_node_id":37,"last_link_id":42,"nodes":[{"id":16,"type":"SaveAudioMP3","pos":[1111.5191650390625,-186.8231964111328],"size":[270,136],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"audio","name":"audio","type":"AUDIO","link":42},{"localized_name":"filename_prefix","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null},{"localized_name":"quality","name":"quality","type":"COMBO","widget":{"name":"quality"},"link":null},{"localized_name":"audioUI","name":"audioUI","type":"AUDIO_UI","widget":{"name":"audioUI"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.46","Node name for S&R":"SaveAudioMP3"},"widgets_values":["audio/ComfyUI","V0"]},{"id":36,"type":"Runware Audio Inference Speech","pos":[181.35421752929688,120.15299987792969],"size":[400,382],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"text","name":"text","type":"STRING","widget":{"name":"text"},"link":null},{"localized_name":"voice","name":"voice","type":"STRING","widget":{"name":"voice"},"link":null},{"localized_name":"useSpeed","name":"useSpeed","shape":7,"type":"BOOLEAN","widget":{"name":"useSpeed"},"link":null},{"localized_name":"speed","name":"speed","shape":7,"type":"FLOAT","widget":{"name":"speed"},"link":null},{"localized_name":"useVolume","name":"useVolume","shape":7,"type":"BOOLEAN","widget":{"name":"useVolume"},"link":null},{"localized_name":"volume","name":"volume","shape":7,"type":"FLOAT","widget":{"name":"volume"},"link":null},{"localized_name":"usePitch","name":"usePitch","shape":7,"type":"BOOLEAN","widget":{"name":"usePitch"},"link":null},{"localized_name":"pitch","name":"pitch","shape":7,"type":"FLOAT","widget":{"name":"pitch"},"link":null},{"localized_name":"useEmotion","name":"useEmotion","shape":7,"type":"BOOLEAN","widget":{"name":"useEmotion"},"link":null},{"localized_name":"emotion","name":"emotion","shape":7,"type":"COMBO","widget":{"name":"emotion"},"link":null},{"localized_name":"useTone","name":"useTone","shape":7,"type":"BOOLEAN","widget":{"name":"useTone"},"link":null},{"localized_name":"tone","name":"tone","shape":7,"type":"STRING","widget":{"name":"tone"},"link":null}],"outputs":[{"localized_name":"speech","name":"speech","type":"RUNWARESPEECH","links":[41]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"3990adaa69e1da20efe5f4c6b8dd505ab9b998f0","Node name for S&R":"Runware Audio Inference Speech"},"widgets_values":["The quick brown fox jumps over the lazy dog.","sal",false,1,false,1,false,0,false,"calm",false,""],"bgcolor":"#5345bf"},{"id":37,"type":"Runware Audio Inference","pos":[662.5560302734375,-192.11276245117188],"size":[400,746],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"RUNWAREAUDIOMODEL","link":40},{"localized_name":"inputs","name":"inputs","shape":7,"type":"RUNWAREAUDIOINFERENCEINPUTS","link":null},{"localized_name":"settings","name":"settings","shape":7,"type":"RUNWAREAUDIOSETTINGS","link":null},{"localized_name":"speech","name":"speech","shape":7,"type":"RUNWARESPEECH","link":41},{"localized_name":"voiceModify","name":"voiceModify","shape":7,"type":"RUNWAREVOICEMODIFY","link":null},{"localized_name":"providerSettings","name":"providerSettings","shape":7,"type":"RUNWAREPROVIDERSETTINGS","link":null},{"localized_name":"usePositivePrompt","name":"usePositivePrompt","type":"BOOLEAN","widget":{"name":"usePositivePrompt"},"link":null},{"localized_name":"positivePrompt","name":"positivePrompt","type":"STRING","widget":{"name":"positivePrompt"},"link":null},{"localized_name":"negativePrompt","name":"negativePrompt","type":"STRING","widget":{"name":"negativePrompt"},"link":null},{"localized_name":"useDuration","name":"useDuration","type":"BOOLEAN","widget":{"name":"useDuration"},"link":null},{"localized_name":"duration","name":"duration","type":"INT","widget":{"name":"duration"},"link":null},{"localized_name":"useSampleRate","name":"useSampleRate","type":"BOOLEAN","widget":{"name":"useSampleRate"},"link":null},{"localized_name":"sampleRate","name":"sampleRate","type":"COMBO","widget":{"name":"sampleRate"},"link":null},{"localized_name":"useBitrate","name":"useBitrate","type":"BOOLEAN","widget":{"name":"useBitrate"},"link":null},{"localized_name":"bitrate","name":"bitrate","type":"COMBO","widget":{"name":"bitrate"},"link":null},{"localized_name":"useChannels","name":"useChannels","type":"BOOLEAN","widget":{"name":"useChannels"},"link":null},{"localized_name":"channels","name":"channels","type":"INT","widget":{"name":"channels"},"link":null},{"localized_name":"outputType","name":"outputType","type":"COMBO","widget":{"name":"outputType"},"link":null},{"localized_name":"outputFormat","name":"outputFormat","type":"COMBO","widget":{"name":"outputFormat"},"link":null},{"localized_name":"numberResults","name":"numberResults","type":"INT","widget":{"name":"numberResults"},"link":null},{"localized_name":"useSeed","name":"useSeed","type":"BOOLEAN","widget":{"name":"useSeed"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"useSteps","name":"useSteps","type":"BOOLEAN","widget":{"name":"useSteps"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"useStrength","name":"useStrength","type":"BOOLEAN","widget":{"name":"useStrength"},"link":null},{"localized_name":"strength","name":"strength","type":"FLOAT","widget":{"name":"strength"},"link":null},{"localized_name":"useCFGScale","name":"useCFGScale","type":"BOOLEAN","widget":{"name":"useCFGScale"},"link":null},{"localized_name":"CFGScale","name":"CFGScale","type":"FLOAT","widget":{"name":"CFGScale"},"link":null}],"outputs":[{"localized_name":"audio","name":"audio","type":"AUDIO","links":[42]},{"localized_name":"video","name":"video","type":"VIDEO","links":null}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"3990adaa69e1da20efe5f4c6b8dd505ab9b998f0","Node name for S&R":"Runware Audio Inference"},"widgets_values":[false,"","",false,10,true,44100,false,128,false,2,"URL","MP3",1,false,339322714,"randomize",false,20,false,0.8,false,12],"bgcolor":"#5345bf"},{"id":18,"type":"Runware Audio Model Search","pos":[323.36553955078125,-158.066650390625],"size":[270,130],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"Model Search","name":"Model Search","type":"STRING","widget":{"name":"Model Search"},"link":null},{"localized_name":"Model Provider","name":"Model Provider","type":"COMBO","widget":{"name":"Model Provider"},"link":null},{"localized_name":"AudioList","name":"AudioList","type":"COMBO","widget":{"name":"AudioList"},"link":null},{"localized_name":"Use Search Value","name":"Use Search Value","type":"BOOLEAN","widget":{"name":"Use Search Value"},"link":null}],"outputs":[{"localized_name":"model","name":"model","type":"RUNWAREAUDIOMODEL","links":[40]}],"properties":{"cnr_id":"ComfyUI-Runware","ver":"5e5e2b3fac2c984692b057e4e607d778a8c73e40","Node name for S&R":"Runware Audio Model Search"},"widgets_values":["xai:voice@tts","xAI","xai:voice@tts (xAI TTS)",false],"bgcolor":"#5345bf"}],"links":[[40,18,0,37,0,"RUNWAREAUDIOMODEL"],[41,36,0,37,3,"RUNWARESPEECH"],[42,37,0,16,0,"AUDIO"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.7063044548234175,"offset":[190.3538786423963,252.89346702552274]}},"version":0.4} \ No newline at end of file