92 lines
3.7 KiB
Python
92 lines
3.7 KiB
Python
"""
|
|
Runware Kling Provider Settings MultiPrompt Node
|
|
Adds multiPrompt to Kling provider settings. Connects to Runware Kling Provider Settings
|
|
and outputs merged provider settings for Video Inference.
|
|
"""
|
|
|
|
from typing import Dict, Any, List
|
|
|
|
|
|
class RunwareKlingProviderSettingsMultiPrompt:
|
|
"""Runware Kling Provider Settings MultiPrompt Node"""
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"providerSettings": ("RUNWAREPROVIDERSETTINGS", {
|
|
"tooltip": "Connect Runware KlingAI Provider Settings to merge with multiPrompt",
|
|
}),
|
|
},
|
|
"optional": {
|
|
"MultiPrompt Segment 1": ("RUNWAREKLINGMULTIPROMPTSEGMENT", {
|
|
"tooltip": "Connect a Runware Kling MultiPrompt Segment",
|
|
}),
|
|
"MultiPrompt Segment 2": ("RUNWAREKLINGMULTIPROMPTSEGMENT", {
|
|
"tooltip": "Connect a Runware Kling MultiPrompt Segment",
|
|
}),
|
|
"MultiPrompt Segment 3": ("RUNWAREKLINGMULTIPROMPTSEGMENT", {
|
|
"tooltip": "Connect a Runware Kling MultiPrompt Segment",
|
|
}),
|
|
"MultiPrompt Segment 4": ("RUNWAREKLINGMULTIPROMPTSEGMENT", {
|
|
"tooltip": "Connect a Runware Kling MultiPrompt Segment",
|
|
}),
|
|
"MultiPrompt Segment 5": ("RUNWAREKLINGMULTIPROMPTSEGMENT", {
|
|
"tooltip": "Connect a Runware Kling MultiPrompt Segment",
|
|
}),
|
|
"MultiPrompt Segment 6": ("RUNWAREKLINGMULTIPROMPTSEGMENT", {
|
|
"tooltip": "Connect a Runware Kling MultiPrompt Segment",
|
|
}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("RUNWAREPROVIDERSETTINGS",)
|
|
RETURN_NAMES = ("Provider Settings",)
|
|
FUNCTION = "mergeProviderSettings"
|
|
CATEGORY = "Runware/Provider Settings"
|
|
DESCRIPTION = "Add multiPrompt to Kling provider settings. Connect Runware KlingAI Provider Settings and one or more Runware Kling MultiPrompt Segment nodes. Output connects to Runware Video Inference."
|
|
|
|
def mergeProviderSettings(self, **kwargs) -> tuple[Dict[str, Any]]:
|
|
"""Merge Kling provider settings with multiPrompt segments"""
|
|
|
|
provider_settings = kwargs.get("providerSettings")
|
|
segments: List[Dict[str, Any]] = []
|
|
|
|
for i in range(1, 7):
|
|
segment = kwargs.get(f"MultiPrompt Segment {i}")
|
|
if segment is not None and isinstance(segment, dict):
|
|
prompt = segment.get("prompt", "").strip()
|
|
if prompt:
|
|
segments.append({
|
|
"prompt": prompt,
|
|
"duration": int(segment.get("duration", 4)),
|
|
})
|
|
|
|
# Start with existing provider settings or empty dict
|
|
if isinstance(provider_settings, dict):
|
|
# May be flat (from Kling) or wrapped {"klingai": {...}}
|
|
if "klingai" in provider_settings:
|
|
kling_settings = dict(provider_settings["klingai"])
|
|
else:
|
|
kling_settings = dict(provider_settings)
|
|
else:
|
|
kling_settings = {}
|
|
|
|
if segments:
|
|
kling_settings["multiPrompt"] = segments
|
|
|
|
if not kling_settings:
|
|
return ({},)
|
|
|
|
# Output format expected by video inference: wrap with klingai if flat
|
|
return ({"klingai": kling_settings},)
|
|
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
"RunwareKlingProviderSettingsMultiPrompt": RunwareKlingProviderSettingsMultiPrompt,
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
"RunwareKlingProviderSettingsMultiPrompt": "Runware Kling Provider Settings MultiPrompt",
|
|
}
|