Merge pull request #103 from Runware/feature-inworldTTS/LTX

Added support for Inworld TTS 1.5 and added LTX 2.3 video models
This commit is contained in:
Sirshendu Ganguly
2026-03-11 20:42:25 -04:00
committed by GitHub
7 changed files with 75 additions and 5 deletions
+20 -1
View File
@@ -1132,6 +1132,8 @@ function audioInferenceToggleHandler(audioInferenceNode) {
function audioSettingsToggleHandler(settingsNode) {
if (!settingsNode?.widgets) return;
const useTemperatureWidget = settingsNode.widgets.find(w => w && w.name === "useTemperature");
const temperatureWidget = settingsNode.widgets.find(w => w && w.name === "temperature");
const useLyricsWidget = settingsNode.widgets.find(w => w && w.name === "useLyrics");
const lyricsWidget = settingsNode.widgets.find(w => w && w.name === "lyrics");
const useGuidanceTypeWidget = settingsNode.widgets.find(w => w && w.name === "useGuidanceType");
@@ -1140,6 +1142,8 @@ function audioSettingsToggleHandler(settingsNode) {
const languageBoostWidget = settingsNode.widgets.find(w => w && w.name === "languageBoost");
const useTurboWidget = settingsNode.widgets.find(w => w && w.name === "useTurbo");
const turboWidget = settingsNode.widgets.find(w => w && w.name === "turbo");
const useTextNormalizationWidget = settingsNode.widgets.find(w => w && w.name === "useTextNormalization");
const textNormalizationWidget = settingsNode.widgets.find(w => w && w.name === "textNormalization");
function toggleWidgetState(useWidget, paramWidget, paramName) {
if (!useWidget || !paramWidget) return;
@@ -1157,10 +1161,12 @@ function audioSettingsToggleHandler(settingsNode) {
appendWidgetCB(useWidget, () => setTimeout(applyState, 50));
}
if (useTemperatureWidget && temperatureWidget) toggleWidgetState(useTemperatureWidget, temperatureWidget, "temperature");
if (useLyricsWidget && lyricsWidget) toggleWidgetState(useLyricsWidget, lyricsWidget, "lyrics");
if (useGuidanceTypeWidget && guidanceTypeWidget) toggleWidgetState(useGuidanceTypeWidget, guidanceTypeWidget, "guidanceType");
if (useLanguageBoostWidget && languageBoostWidget) toggleWidgetState(useLanguageBoostWidget, languageBoostWidget, "languageBoost");
if (useTurboWidget && turboWidget) toggleWidgetState(useTurboWidget, turboWidget, "turbo");
if (useTextNormalizationWidget && textNormalizationWidget) toggleWidgetState(useTextNormalizationWidget, textNormalizationWidget, "textNormalization");
}
function videoSettingsToggleHandler(settingsNode) {
@@ -2317,6 +2323,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"Lightricks": [
"lightricks:2@0 (LTX Fast)", "lightricks:2@1 (LTX Pro)",
"lightricks:3@1 (LTX-2 Retake)", "lightricks:ltx@2 (LTX-2)",
"lightricks:ltx@2.3 (LTX 2.3)", "lightricks:ltx@2.3-fast (LTX 2.3 Fast)",
],
"Ovi": [
"runware:190@1 (Ovi)",
@@ -2400,6 +2407,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"pixverse:1@1": {"width": 640, "height": 360},
"pixverse:1@2": {"width": 640, "height": 360},
"pixverse:1@3": {"width": 640, "height": 360},
"pixverse:1@5-fast": {"width": 640, "height": 360},
"pixverse:1@6": {"width": 640, "height": 360},
"pixverse:1@7": {"width": 640, "height": 360},
"pixverse:lipsync@1": {"width": 640, "height": 360},
@@ -2420,6 +2428,9 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"lightricks:2@0": {"width": 1920, "height": 1080},
"lightricks:2@1": {"width": 1920, "height": 1080},
"lightricks:3@1": {"width": 0, "height": 0},
"lightricks:ltx@2": {"width": 1024, "height": 1024},
"lightricks:ltx@2.3": {"width": 1920, "height": 1080},
"lightricks:ltx@2.3-fast": {"width": 1920, "height": 1080},
"runware:190@1": {"width": 0, "height": 0},
"runway:2@1": {"width": 1280, "height": 720},
"runway:1@1": {"width": 1280, "height": 720},
@@ -2480,6 +2491,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"pixverse:1@1": "360p",
"pixverse:1@2": "360p",
"pixverse:1@3": "360p",
"pixverse:1@5-fast": "360p",
"pixverse:1@6": "360p",
"pixverse:1@7": "360p",
"pixverse:lipsync@1": "360p",
@@ -2500,6 +2512,9 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"lightricks:2@0": "1080p",
"lightricks:2@1": "1080p",
"lightricks:3@1": null, // No resolution support
"lightricks:ltx@2": null, // No resolution support (fixed 1024x1024)
"lightricks:ltx@2.3": "1080p",
"lightricks:ltx@2.3-fast": "1080p",
"runware:190@1": null, // No resolution support
"runway:2@1": "720p",
"runway:1@1": "720p",
@@ -2737,6 +2752,10 @@ function audioModelSearchFilterHandler(audioModelSearchNode) {
"MiniMax": [
"minimax:speech@2.8 (MiniMax Speech 2.8)",
],
"Inworld": [
"inworld:tts@1.5-mini (Inworld TTS-1.5 Mini)",
"inworld:tts@1.5-max (Inworld TTS-1.5 Max)",
],
};
function filterModelList() {
@@ -4245,4 +4264,4 @@ function syncSegmentToggleHandler(syncSegmentNode) {
if (useAudioEndTimeWidget && audioEndTimeWidget) {
toggleWidgetState(useAudioEndTimeWidget, audioEndTimeWidget, "audioEndTime");
}
}
}
+1 -1
View File
@@ -136,7 +136,7 @@ class RunwareAudioInference:
"tooltip": "Custom inputs for audio generation (e.g., video URL for audio extraction)"
}),
"settings": ("RUNWAREAUDIOSETTINGS", {
"tooltip": "Connect Runware Audio Inference Settings for lyrics, guidanceType, etc."
"tooltip": "Connect Runware Audio Inference Settings for lyrics, guidanceType, languageBoost, turbo, temperature, textNormalization."
}),
"speech": ("RUNWARESPEECH", {
"tooltip": "Connect Runware Audio Inference Speech for speech synthesis (e.g. Minimax)"
+5
View File
@@ -20,6 +20,10 @@ class RunwareAudioModelSearch:
"MiniMax": [
"minimax:speech@2.8 (MiniMax Speech 2.8)",
],
"Inworld": [
"inworld:tts@1.5-mini (Inworld TTS-1.5 Mini)",
"inworld:tts@1.5-max (Inworld TTS-1.5 Max)",
],
}
MODEL_PROVIDERS = [
@@ -29,6 +33,7 @@ class RunwareAudioModelSearch:
"Mirelo",
"Ace",
"MiniMax",
"Inworld",
]
@classmethod
+35 -3
View File
@@ -1,19 +1,31 @@
"""
Runware Audio Inference Settings Node
Provides lyrics and guidanceType settings for Runware Audio Inference
Provides lyrics, guidanceType, languageBoost, turbo, temperature, and textNormalization
settings for Runware Audio Inference.
"""
from typing import Dict, Any
class RunwareAudioSettings:
"""Runware Audio Inference Settings Node"""
"""Runware Audio Inference Settings Node (lyrics, guidanceType, languageBoost, turbo, temperature, textNormalization)."""
@classmethod
def INPUT_TYPES(cls):
return {
"required": {},
"optional": {
"useTemperature": ("BOOLEAN", {
"tooltip": "Enable to include temperature in audio generation settings",
"default": False,
}),
"temperature": ("FLOAT", {
"tooltip": "Temperature value for audio generation. Higher values increase diversity, lower values make output more deterministic. Only used when 'Use Temperature' is enabled.",
"default": 1.0,
"min": 0.0,
"max": 2.0,
"step": 0.1,
}),
"useLyrics": ("BOOLEAN", {
"tooltip": "Enable to include lyrics in audio generation settings",
"default": False,
@@ -54,6 +66,16 @@ class RunwareAudioSettings:
"label_on": "true",
"label_off": "false",
}),
"useTextNormalization": ("BOOLEAN", {
"tooltip": "Enable to include textNormalization (normalize text before synthesis) in audio generation settings",
"default": False,
}),
"textNormalization": ("BOOLEAN", {
"tooltip": "Normalize text (e.g. numbers, abbreviations) before synthesis to improve pronunciation. Only used when 'Use Text Normalization' is enabled.",
"default": True,
"label_on": "true",
"label_off": "false",
}),
}
}
@@ -61,10 +83,12 @@ class RunwareAudioSettings:
RETURN_NAMES = ("settings",)
FUNCTION = "createSettings"
CATEGORY = "Runware/Audio"
DESCRIPTION = "Configure audio generation settings (lyrics, guidanceType, languageBoost, turbo) for Runware Audio Inference. Connect to Runware Audio Inference node."
DESCRIPTION = "Configure audio generation settings (lyrics, guidanceType, languageBoost, turbo, temperature, textNormalization) for Runware Audio Inference. Connect to Runware Audio Inference node."
def createSettings(self, **kwargs) -> tuple[Dict[str, Any]]:
"""Create audio settings dict for API"""
use_temperature = kwargs.get("useTemperature", False)
temperature = kwargs.get("temperature", 1.0)
use_lyrics = kwargs.get("useLyrics", False)
lyrics = kwargs.get("lyrics", "")
use_guidance_type = kwargs.get("useGuidanceType", False)
@@ -73,9 +97,14 @@ class RunwareAudioSettings:
language_boost = kwargs.get("languageBoost", "auto")
use_turbo = kwargs.get("useTurbo", False)
turbo = kwargs.get("turbo", False)
use_text_normalization = kwargs.get("useTextNormalization", False)
text_normalization = kwargs.get("textNormalization", True)
settings: Dict[str, Any] = {}
if use_temperature:
settings["temperature"] = float(temperature)
if use_lyrics and lyrics and lyrics.strip():
settings["lyrics"] = lyrics.strip()
@@ -88,6 +117,9 @@ class RunwareAudioSettings:
if use_turbo:
settings["turbo"] = bool(turbo) # API requires true/false
if use_text_normalization:
settings["textNormalization"] = bool(text_normalization)
return (settings,)
+12
View File
@@ -22,6 +22,8 @@ class videoModelSearch:
"klingai:kling-video@3-standard (Kling VIDEO 3.0 Standard)",
"klingai:kling-video@o3-pro (Kling VIDEO O3 Pro)",
"klingai:kling-video@o3-standard (Kling VIDEO O3 Standard)",
"klingai:avatar@2.0-standard (KlingAI Avatar 2.0 Standard)",
"klingai:avatar@2.0-pro (KlingAI Avatar 2.0 Pro)",
],
"Veo": [
"google:2@0 (Veo 2.0)",
@@ -79,6 +81,8 @@ class videoModelSearch:
"lightricks:2@1 (LTX Pro)",
"lightricks:3@1 (LTX-2 Retake)",
"lightricks:ltx@2 (LTX-2)",
"lightricks:ltx@2.3 (LTX 2.3)",
"lightricks:ltx@2.3-fast (LTX 2.3 Fast)",
],
"Ovi": [
"runware:190@1 (Ovi)",
@@ -143,6 +147,8 @@ class videoModelSearch:
"klingai:kling-video@3-standard": {"width": 1920, "height": 1080},
"klingai:kling-video@o3-pro": {"width": 1920, "height": 1080},
"klingai:kling-video@o3-standard": {"width": 1920, "height": 1080},
"klingai:avatar@2.0-standard": {"width": 0, "height": 0},
"klingai:avatar@2.0-pro": {"width": 0, "height": 0},
# Veo Models
"google:2@0": {"width": 1280, "height": 720},
@@ -200,6 +206,8 @@ class videoModelSearch:
"lightricks:2@1": {"width": 1920, "height": 1080},
"lightricks:3@1": {"width": 0, "height": 0},
"lightricks:ltx@2": {"width": 1024, "height": 1024},
"lightricks:ltx@2.3": {"width": 1920, "height": 1080},
"lightricks:ltx@2.3-fast": {"width": 1920, "height": 1080},
# Ovi Models
"runware:190@1": {"width": 0, "height": 0},
@@ -263,6 +271,8 @@ class videoModelSearch:
"klingai:kling-video@3-standard": "1080p",
"klingai:kling-video@o3-pro": "1080p",
"klingai:kling-video@o3-standard": "1080p",
"klingai:avatar@2.0-standard": None, # No resolution support
"klingai:avatar@2.0-pro": None, # No resolution support
# Veo Models
"google:2@0": "720p",
@@ -320,6 +330,8 @@ class videoModelSearch:
"lightricks:2@1": "1080p",
"lightricks:3@1": None, # No resolution support
"lightricks:ltx@2": None, # No resolution support (fixed 1024x1024)
"lightricks:ltx@2.3": "1080p",
"lightricks:ltx@2.3-fast": "1080p",
# Ovi Models
"runware:190@1": None, # No resolution support
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long