Merge branch 'main' into feature-FishAudio
Resolve import conflict in clientlibs/main.js by combining handlers from both branches (MeshCluster, Moodboards from main; ReferenceVoice from feature-FishAudio).
This commit is contained in:
@@ -109,6 +109,7 @@ from .modules.videoInputsFrame import RunwareVideoInputsFrameImages
|
||||
from .modules.safetyInputs import safetyInputs
|
||||
from .modules.settings import RunwareSettings
|
||||
from .modules.imageInferenceSettingsColorPalette import RunwareImageInferenceSettingsColorPalette
|
||||
from .modules.imageInferenceSettingsMoodboards import RunwareImageInferenceSettingsMoodboards
|
||||
from .modules.videoAdvancedFeatureInputs import videoAdvancedFeatureInputs
|
||||
from .modules.advancedFeatureSettings.wanAnimateAdvancedFeatureSettings import RunwareWanAnimateAdvancedFeatureSettings
|
||||
from .modules.saveImage import RunwareSaveImage
|
||||
@@ -119,6 +120,7 @@ from .modules.threeDInferenceSettings import Runware3DInferenceSettings
|
||||
from .modules.threeDInferenceSettingsSparseStructure import Runware3DInferenceSettingsSparseStructure
|
||||
from .modules.threeDInferenceSettingsShapeSlat import Runware3DInferenceSettingsShapeSlat
|
||||
from .modules.threeDInferenceSettingsTexSlat import Runware3DInferenceSettingsTexSlat
|
||||
from .modules.threeDInferenceSettingsMeshCluster import Runware3DInferenceSettingsMeshCluster
|
||||
from .modules.save3D import RunwareSave3D
|
||||
from .modules.saveText import RunwareSaveText
|
||||
from .modules.loadMesh import RunwareLoadMesh
|
||||
@@ -247,6 +249,7 @@ NODE_CLASS_MAPPINGS = {
|
||||
"Runware Safety Inputs": safetyInputs,
|
||||
"Runware Settings": RunwareSettings,
|
||||
"Runware Image Inference Settings Color Palette": RunwareImageInferenceSettingsColorPalette,
|
||||
"Runware Image Inference Settings Moodboards": RunwareImageInferenceSettingsMoodboards,
|
||||
"Runware Video Advanced Feature Inputs": videoAdvancedFeatureInputs,
|
||||
"Runware Wan Animate Advanced Feature Settings": RunwareWanAnimateAdvancedFeatureSettings,
|
||||
"Runware Save Image": RunwareSaveImage,
|
||||
@@ -257,6 +260,7 @@ NODE_CLASS_MAPPINGS = {
|
||||
"Runware 3D Inference Settings Sparse Structure": Runware3DInferenceSettingsSparseStructure,
|
||||
"Runware 3D Inference Settings Shape Slat": Runware3DInferenceSettingsShapeSlat,
|
||||
"Runware 3D Inference Settings Tex Slat": Runware3DInferenceSettingsTexSlat,
|
||||
"Runware 3D Inference Settings Mesh Cluster": Runware3DInferenceSettingsMeshCluster,
|
||||
"Runware Save 3D": RunwareSave3D,
|
||||
"Runware Save Text": RunwareSaveText,
|
||||
"Runware Load Mesh": RunwareLoadMesh,
|
||||
|
||||
+5
-1
@@ -1,6 +1,6 @@
|
||||
import { app } from "../../scripts/app.js";
|
||||
import { api } from "../../scripts/api.js";
|
||||
import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, saveTextHandler, mediaUUIDHandler, save3DFilepathHandler, videoTranscriptionHandler, videoOutputsHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, textModelSearchFilterHandler, vectorizeModelSearchFilterHandler, vectorizeToggleHandler, useParameterToggleHandler, imageInferenceToggleHandler, imageInferenceAdvancedFeaturesToggleHandler, watermarkAdvancedFeatureToggleHandler, videoInferenceSpeechInputToggleHandler, regionalPromptingRegionsToggleHandler, upscalerToggleHandler, imageUpscalerSettingsToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, audioInferenceSpeechToggleHandler, audioSettingsToggleHandler, textInferenceSettingsToggleHandler, videoSettingsToggleHandler, videoInferenceSettingsTtsToggleHandler, videoInferenceSettingsActiveSpeakerDetectionToggleHandler, videoInferenceSettingsActiveSpeakerBoundingBoxesToggleHandler, videoInferenceSettingsSegmentsToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, xaiProviderSettingsToggleHandler, viduProviderSettingsToggleHandler, sourcefulProviderSettingsToggleHandler, sourcefulProviderSettingsFontsToggleHandler, threeDInferenceToggleHandler, threeDInferenceSettingsToggleHandler, threeDInferenceSettingsLatToggleHandler, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, outpaintSettingsToggleHandler, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceReferenceVoiceToggleHandler, audioInferenceSpeechVoicesToggleHandler, referenceVideosToggleHandler } from "./utils.js";
|
||||
import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, saveTextHandler, mediaUUIDHandler, save3DFilepathHandler, videoTranscriptionHandler, videoOutputsHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, textModelSearchFilterHandler, vectorizeModelSearchFilterHandler, vectorizeToggleHandler, useParameterToggleHandler, imageInferenceToggleHandler, imageInferenceAdvancedFeaturesToggleHandler, watermarkAdvancedFeatureToggleHandler, videoInferenceSpeechInputToggleHandler, regionalPromptingRegionsToggleHandler, upscalerToggleHandler, imageUpscalerSettingsToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, audioInferenceSpeechToggleHandler, audioSettingsToggleHandler, textInferenceSettingsToggleHandler, videoSettingsToggleHandler, videoInferenceSettingsTtsToggleHandler, videoInferenceSettingsActiveSpeakerDetectionToggleHandler, videoInferenceSettingsActiveSpeakerBoundingBoxesToggleHandler, videoInferenceSettingsSegmentsToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, xaiProviderSettingsToggleHandler, viduProviderSettingsToggleHandler, sourcefulProviderSettingsToggleHandler, sourcefulProviderSettingsFontsToggleHandler, threeDInferenceToggleHandler, threeDInferenceSettingsToggleHandler, threeDInferenceSettingsLatToggleHandler, threeDInferenceSettingsMeshClusterToggleHandler, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, outpaintSettingsToggleHandler, safetyInputsToggleHandler, imageInferenceSettingsColorPaletteToggleHandler, imageInferenceSettingsMoodboardsToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceReferenceVoiceToggleHandler, audioInferenceSpeechVoicesToggleHandler, referenceVideosToggleHandler } from "./utils.js";
|
||||
import { RUNWARE_NODE_TYPES, RUNWARE_NODE_PROPS, SEARCH_TERMS } from "./types.js";
|
||||
|
||||
const nodeInitList = [];
|
||||
@@ -151,6 +151,8 @@ app.registerExtension({
|
||||
safetyInputsToggleHandler(node);
|
||||
} else if(nodeClass === RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSCOLORPALETTE) {
|
||||
imageInferenceSettingsColorPaletteToggleHandler(node);
|
||||
} else if(nodeClass === RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSMOODBOARDS) {
|
||||
imageInferenceSettingsMoodboardsToggleHandler(node);
|
||||
} else if(nodeClass === RUNWARE_NODE_TYPES.AUDIOINPUT) {
|
||||
audioInputToggleHandler(node);
|
||||
} else if(nodeClass === RUNWARE_NODE_TYPES.SPEECHINPUT) {
|
||||
@@ -176,6 +178,8 @@ app.registerExtension({
|
||||
nodeClass === RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGSSHAPESLAT ||
|
||||
nodeClass === RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGSTEXSLAT) {
|
||||
threeDInferenceSettingsLatToggleHandler(node);
|
||||
} else if(nodeClass === RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGSMESHCLUSTER) {
|
||||
threeDInferenceSettingsMeshClusterToggleHandler(node);
|
||||
}
|
||||
|
||||
if(crNodeProps.colorModeOnly === true) return;
|
||||
|
||||
@@ -158,6 +158,7 @@ const RUNWARE_NODE_TYPES = {
|
||||
SAFETYINPUTS: "Runware Safety Inputs",
|
||||
SETTINGS: "Runware Settings",
|
||||
IMAGEINFERENCESETTINGSCOLORPALETTE: "Runware Image Inference Settings Color Palette",
|
||||
IMAGEINFERENCESETTINGSMOODBOARDS: "Runware Image Inference Settings Moodboards",
|
||||
VIDEOADVANCEDFEATUREINPUTS: "Runware Video Advanced Feature Inputs",
|
||||
WANANIMATEADVANCEDFEATURESETTINGS: "Runware Wan Animate Advanced Feature Settings",
|
||||
SAVEIMAGE: "Runware Save Image",
|
||||
@@ -169,6 +170,7 @@ const RUNWARE_NODE_TYPES = {
|
||||
THREEDINFERENCESETTINGSSPARSESTRUCTURE: "Runware 3D Inference Settings Sparse Structure",
|
||||
THREEDINFERENCESETTINGSSHAPESLAT: "Runware 3D Inference Settings Shape Slat",
|
||||
THREEDINFERENCESETTINGSTEXSLAT: "Runware 3D Inference Settings Tex Slat",
|
||||
THREEDINFERENCESETTINGSMESHCLUSTER: "Runware 3D Inference Settings Mesh Cluster",
|
||||
SAVE3D: "Runware Save 3D",
|
||||
LOADMESH: "Runware Load Mesh",
|
||||
WATERMARKADVANCEDFEATURE: "Runware Watermark Advanced Feature",
|
||||
@@ -626,6 +628,10 @@ const RUNWARE_NODE_PROPS = {
|
||||
bgColor: DEFAULT_BGCOLOR,
|
||||
colorModeOnly: true,
|
||||
},
|
||||
[RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSMOODBOARDS]: {
|
||||
bgColor: DEFAULT_BGCOLOR,
|
||||
colorModeOnly: true,
|
||||
},
|
||||
[RUNWARE_NODE_TYPES.VIDEOADVANCEDFEATUREINPUTS]: {
|
||||
bgColor: DEFAULT_BGCOLOR,
|
||||
colorModeOnly: true,
|
||||
@@ -670,6 +676,10 @@ const RUNWARE_NODE_PROPS = {
|
||||
bgColor: DEFAULT_BGCOLOR,
|
||||
colorModeOnly: true,
|
||||
},
|
||||
[RUNWARE_NODE_TYPES.THREEDINFERENCESETTINGSMESHCLUSTER]: {
|
||||
bgColor: DEFAULT_BGCOLOR,
|
||||
colorModeOnly: true,
|
||||
},
|
||||
[RUNWARE_NODE_TYPES.SAVE3D]: {
|
||||
bgColor: DEFAULT_BGCOLOR,
|
||||
colorModeOnly: true,
|
||||
|
||||
@@ -1426,6 +1426,8 @@ function videoSettingsToggleHandler(settingsNode) {
|
||||
const draftWidget = settingsNode.widgets.find(w => w && w.name === "draft");
|
||||
const useAudioWidget = settingsNode.widgets.find(w => w && w.name === "useAudio");
|
||||
const audioWidget = settingsNode.widgets.find(w => w && w.name === "audio");
|
||||
const usePreserveAudioWidget = settingsNode.widgets.find(w => w && w.name === "usePreserveAudio");
|
||||
const preserveAudioWidget = settingsNode.widgets.find(w => w && w.name === "preserveAudio");
|
||||
const useVoicePromptWidget = settingsNode.widgets.find(w => w && w.name === "useVoicePrompt");
|
||||
const voicePromptWidget = settingsNode.widgets.find(w => w && w.name === "voicePrompt");
|
||||
const useSafetyFilterWidget = settingsNode.widgets.find(w => w && w.name === "useSafetyFilter");
|
||||
@@ -1485,6 +1487,7 @@ function videoSettingsToggleHandler(settingsNode) {
|
||||
|
||||
if (useDraftWidget && draftWidget) toggleWidgetState(useDraftWidget, draftWidget, "draft");
|
||||
if (useAudioWidget && audioWidget) toggleWidgetState(useAudioWidget, audioWidget, "audio");
|
||||
if (usePreserveAudioWidget && preserveAudioWidget) toggleWidgetState(usePreserveAudioWidget, preserveAudioWidget, "preserveAudio");
|
||||
if (useVoicePromptWidget && voicePromptWidget) toggleWidgetState(useVoicePromptWidget, voicePromptWidget, "voicePrompt");
|
||||
if (useSafetyFilterWidget && safetyFilterWidget) toggleWidgetState(useSafetyFilterWidget, safetyFilterWidget, "safetyFilter");
|
||||
if (usePromptUpsamplingWidget && promptUpsamplingWidget) toggleWidgetState(usePromptUpsamplingWidget, promptUpsamplingWidget, "promptUpsampling");
|
||||
@@ -1895,6 +1898,7 @@ function ultralyticsProviderSettingsToggleHandler(ultralyticsNode) {
|
||||
["useSteps", "steps"],
|
||||
["useCFGScale", "CFGScale"],
|
||||
["useStrength", "strength"],
|
||||
["useInpaintSize", "inpaintSize"],
|
||||
];
|
||||
|
||||
function toggleWidgetState(useWidget, paramWidget, paramName) {
|
||||
@@ -2250,6 +2254,14 @@ function threeDInferenceSettingsToggleHandler(node) {
|
||||
["useModeration", "moderation"],
|
||||
["useSavePreRemeshedModel", "savePreRemeshedModel"],
|
||||
["useTexturePrompt", "texturePrompt"],
|
||||
["useFaceCount", "faceCount"],
|
||||
["useGenerateType", "generateType"],
|
||||
["usePolygonType", "polygonType"],
|
||||
["useGeometryOnly", "geometryOnly"],
|
||||
["useRemeshBand", "remeshBand"],
|
||||
["useRemeshProject", "remeshProject"],
|
||||
["useTextureFormat", "textureFormat"],
|
||||
["useAlphaMode", "alphaMode"],
|
||||
];
|
||||
pairs.forEach(([useName, paramName]) => {
|
||||
const useW = node.widgets.find(w => w.name === useName);
|
||||
@@ -2286,6 +2298,27 @@ function threeDInferenceSettingsLatToggleHandler(node) {
|
||||
});
|
||||
}
|
||||
|
||||
function threeDInferenceSettingsMeshClusterToggleHandler(node) {
|
||||
const pairs = [
|
||||
["useThresholdConeHalfAngleRad", "thresholdConeHalfAngleRad"],
|
||||
["useRefineIterations", "refineIterations"],
|
||||
["useGlobalIterations", "globalIterations"],
|
||||
["useSmoothStrength", "smoothStrength"],
|
||||
];
|
||||
pairs.forEach(([useName, paramName]) => {
|
||||
const useW = node.widgets.find(w => w.name === useName);
|
||||
const paramW = node.widgets.find(w => w.name === paramName);
|
||||
if (!useW || !paramW) return;
|
||||
function toggleEnabled() {
|
||||
const enabled = useW.value === true;
|
||||
toggleWidgetEnabled(paramW, enabled, node);
|
||||
node.setDirtyCanvas(true);
|
||||
}
|
||||
appendWidgetCB(useW, () => setTimeout(toggleEnabled, 50));
|
||||
setTimeout(toggleEnabled, 100);
|
||||
});
|
||||
}
|
||||
|
||||
function openaiProviderSettingsToggleHandler(openaiNode) {
|
||||
// Find all "use" parameter widgets for OpenAI Provider Settings (these are COMBO widgets)
|
||||
const useBackgroundWidget = openaiNode.widgets.find(w => w.name === "useBackground");
|
||||
@@ -2908,6 +2941,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
|
||||
"Pruna": [
|
||||
"prunaai:p-video@0 (P-Video)",
|
||||
"prunaai:p-video@avatar (P-Video Avatar)",
|
||||
"prunaai:p-video@animate (P-Video Animate)",
|
||||
],
|
||||
"SkyReels": [
|
||||
"skywork:skyreels@v4 (SkyReels V4)",
|
||||
@@ -3007,6 +3041,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
|
||||
"veed:fabric@1.0": {"width": 1280, "height": 720},
|
||||
"prunaai:p-video@0": {"width": 1280, "height": 720},
|
||||
"prunaai:p-video@avatar": {"width": 1280, "height": 720},
|
||||
"prunaai:p-video@animate": {"width": 1280, "height": 720},
|
||||
"heygen:avatar@4": {"width": 1280, "height": 720},
|
||||
"heygen:video-agent@0": {"width": 1280, "height": 720},
|
||||
"heygen:avatar@5": {"width": 1280, "height": 720},
|
||||
@@ -3106,6 +3141,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
|
||||
"veed:fabric@1.0": "720p",
|
||||
"prunaai:p-video@0": "720p",
|
||||
"prunaai:p-video@avatar": "720p",
|
||||
"prunaai:p-video@animate": "720p",
|
||||
"heygen:avatar@4": "720p",
|
||||
"heygen:video-agent@0": "720p",
|
||||
"heygen:avatar@5": "720p",
|
||||
@@ -5106,6 +5142,7 @@ export {
|
||||
threeDInferenceToggleHandler,
|
||||
threeDInferenceSettingsToggleHandler,
|
||||
threeDInferenceSettingsLatToggleHandler,
|
||||
threeDInferenceSettingsMeshClusterToggleHandler,
|
||||
ultralyticsProviderSettingsToggleHandler,
|
||||
openaiProviderSettingsToggleHandler,
|
||||
lightricksProviderSettingsToggleHandler,
|
||||
@@ -5122,6 +5159,7 @@ export {
|
||||
outpaintSettingsToggleHandler,
|
||||
safetyInputsToggleHandler,
|
||||
imageInferenceSettingsColorPaletteToggleHandler,
|
||||
imageInferenceSettingsMoodboardsToggleHandler,
|
||||
audioInputToggleHandler,
|
||||
speechInputToggleHandler,
|
||||
briaProviderMaskToggleHandler,
|
||||
@@ -5239,6 +5277,8 @@ function settingsToggleHandler(settingsNode) {
|
||||
const autoCropWidget = settingsNode.widgets.find(w => w.name === "autoCrop");
|
||||
const useDilatePixelsWidget = settingsNode.widgets.find(w => w.name === "useDilatePixels");
|
||||
const dilatePixelsWidget = settingsNode.widgets.find(w => w.name === "dilatePixels");
|
||||
const useCreativityWidget = settingsNode.widgets.find(w => w.name === "useCreativity");
|
||||
const creativityWidget = settingsNode.widgets.find(w => w.name === "creativity");
|
||||
|
||||
// Helper function to toggle widget enabled state
|
||||
function toggleWidgetState(useWidget, paramWidget, paramName) {
|
||||
@@ -5337,6 +5377,9 @@ function settingsToggleHandler(settingsNode) {
|
||||
if (useDilatePixelsWidget && dilatePixelsWidget) {
|
||||
toggleWidgetState(useDilatePixelsWidget, dilatePixelsWidget, "dilatePixels");
|
||||
}
|
||||
if (useCreativityWidget && creativityWidget) {
|
||||
toggleWidgetState(useCreativityWidget, creativityWidget, "creativity");
|
||||
}
|
||||
}
|
||||
|
||||
function outpaintSettingsToggleHandler(settingsNode) {
|
||||
@@ -5516,6 +5559,25 @@ function imageInferenceSettingsColorPaletteToggleHandler(paletteNode) {
|
||||
}
|
||||
}
|
||||
|
||||
function imageInferenceSettingsMoodboardsToggleHandler(moodboardsNode) {
|
||||
if (!moodboardsNode?.widgets) return;
|
||||
|
||||
const useStrengthWidget = moodboardsNode.widgets.find((w) => w && w.name === "useStrength");
|
||||
const strengthWidget = moodboardsNode.widgets.find((w) => w && w.name === "strength");
|
||||
if (!useStrengthWidget || !strengthWidget) return;
|
||||
|
||||
function toggleStrengthState() {
|
||||
const enabled = useStrengthWidget.value === true;
|
||||
toggleWidgetEnabled(strengthWidget, enabled, moodboardsNode);
|
||||
moodboardsNode.setDirtyCanvas(true);
|
||||
}
|
||||
|
||||
appendWidgetCB(useStrengthWidget, () => {
|
||||
setTimeout(toggleStrengthState, 50);
|
||||
});
|
||||
setTimeout(toggleStrengthState, 100);
|
||||
}
|
||||
|
||||
function syncProviderSettingsToggleHandler(syncNode) {
|
||||
// Find all "use" parameter widgets for Sync Provider Settings
|
||||
const useEditRegionWidget = syncNode.widgets.find(w => w.name === "useEditRegion");
|
||||
|
||||
@@ -27,6 +27,10 @@ class imageInferenceInputs:
|
||||
"tooltip": f"Optional tag describing {ordinal.capitalize()} Reference Image. Leave empty to omit.",
|
||||
"default": "",
|
||||
})
|
||||
optionalInputs[f"Reference Role {i}"] = ("STRING", {
|
||||
"tooltip": f"Optional role for {ordinal} reference image (e.g. person, garment). Leave empty to omit.",
|
||||
"default": "",
|
||||
})
|
||||
optionalInputs[f"Reference Type {i}"] = ("STRING", {
|
||||
"tooltip": f"Optional type for {ordinal} reference, e.g. 'sketch' for illustrative style models. Leave empty to omit.",
|
||||
"default": "",
|
||||
@@ -44,13 +48,13 @@ class imageInferenceInputs:
|
||||
optionalInputs[f"Super Resolution Reference Image {i}"] = ("IMAGE", {
|
||||
"tooltip": f"Specifies {ordinal.capitalize()} Super Resolution Reference Image for the inputs.",
|
||||
})
|
||||
|
||||
|
||||
return {
|
||||
"required": {},
|
||||
"optional": optionalInputs
|
||||
}
|
||||
|
||||
DESCRIPTION = "Configure custom inputs for Runware Image Inference, including reference images (with optional type e.g. 'sketch' for illustrative style models, and strength 0-1 for sketch) that can be passed to the inference node."
|
||||
DESCRIPTION = "Configure custom inputs for Runware Image Inference, including image/mask, reference images (with optional tag, role, type e.g. 'sketch' for illustrative style models, and strength 0-1 for sketch), and super resolution references."
|
||||
FUNCTION = "createInputs"
|
||||
RETURN_TYPES = ("RUNWAREIMAGEINFERENCEINPUTS",)
|
||||
RETURN_NAMES = ("Inference Inputs",)
|
||||
@@ -85,34 +89,41 @@ class imageInferenceInputs:
|
||||
for i in range(1, self.MAX_REFERENCE_IMAGES + 1):
|
||||
image = kwargs.get(f"Reference Image {i}", None)
|
||||
tag = kwargs.get(f"Reference Tag {i}", "")
|
||||
role = kwargs.get(f"Reference Role {i}", "")
|
||||
ref_type = kwargs.get(f"Reference Type {i}", "")
|
||||
strength = kwargs.get(f"Reference Strength {i}", 0.0)
|
||||
if image is not None:
|
||||
reference_slots.append((image, tag, ref_type, strength))
|
||||
reference_slots.append((image, tag, role, ref_type, strength))
|
||||
|
||||
if not reference_slots:
|
||||
return []
|
||||
|
||||
has_tags = any(
|
||||
isinstance(tag, str) and tag.strip() != ""
|
||||
for _, tag, _, _ in reference_slots
|
||||
for _, tag, _, _, _ in reference_slots
|
||||
)
|
||||
has_roles = any(
|
||||
isinstance(role, str) and role.strip() != ""
|
||||
for _, _, role, _, _ in reference_slots
|
||||
)
|
||||
has_type = any(
|
||||
isinstance(rt, str) and rt.strip() != ""
|
||||
for _, _, rt, _ in reference_slots
|
||||
for _, _, _, rt, _ in reference_slots
|
||||
)
|
||||
|
||||
if not has_tags and not has_type:
|
||||
if not has_tags and not has_roles and not has_type:
|
||||
return [
|
||||
rwUtils.convertTensor2IMG(image)
|
||||
for image, _, _, _ in reference_slots
|
||||
for image, _, _, _, _ in reference_slots
|
||||
]
|
||||
|
||||
references = []
|
||||
for image, tag, ref_type, strength in reference_slots:
|
||||
for image, tag, role, ref_type, strength in reference_slots:
|
||||
entry = {"image": rwUtils.convertTensor2IMG(image)}
|
||||
if isinstance(tag, str) and tag.strip() != "":
|
||||
entry["tag"] = tag.strip()
|
||||
if isinstance(role, str) and role.strip() != "":
|
||||
entry["role"] = role.strip()
|
||||
if isinstance(ref_type, str) and ref_type.strip() != "":
|
||||
entry["type"] = ref_type.strip()
|
||||
if ref_type.strip().lower() == "sketch":
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
"""
|
||||
Runware Image Inference Settings Moodboards
|
||||
Builds settings.moodboards: list of { "id": "<uuid>", "strength": <number> }.
|
||||
"""
|
||||
|
||||
from typing import Any, Dict, List, Tuple
|
||||
|
||||
|
||||
class RunwareImageInferenceSettingsMoodboards:
|
||||
"""Build moodboards list for image inference settings."""
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
return {
|
||||
"required": {
|
||||
"id": ("STRING", {
|
||||
"default": "",
|
||||
"tooltip": "Moodboard UUID (settings.moodboards[].id).",
|
||||
}),
|
||||
},
|
||||
"optional": {
|
||||
"useStrength": ("BOOLEAN", {
|
||||
"default": False,
|
||||
"label_on": "Enabled",
|
||||
"label_off": "Disabled",
|
||||
"tooltip": "Include strength in moodboards entry.",
|
||||
}),
|
||||
"strength": ("FLOAT", {
|
||||
"default": 0.35,
|
||||
"min": -0.5,
|
||||
"max": 1.5,
|
||||
"step": 0.01,
|
||||
"tooltip": "Moodboard strength (-0.5 to 1.5). Only used when useStrength is enabled.",
|
||||
}),
|
||||
},
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("RUNWAREIMAGEINFERENCEMOODBOARDS",)
|
||||
RETURN_NAMES = ("moodboards",)
|
||||
FUNCTION = "build_moodboards"
|
||||
CATEGORY = "Runware"
|
||||
DESCRIPTION = (
|
||||
"Build settings.moodboards for image inference settings. "
|
||||
"Outputs one-element array with required id and optional strength."
|
||||
)
|
||||
|
||||
def build_moodboards(self, **kwargs) -> Tuple[List[Dict[str, Any]]]:
|
||||
moodboard_id = str(kwargs.get("id") or "").strip()
|
||||
if not moodboard_id:
|
||||
return ([],)
|
||||
|
||||
entry: Dict[str, Any] = {"id": moodboard_id}
|
||||
if kwargs.get("useStrength", False):
|
||||
entry["strength"] = float(kwargs.get("strength", 0.35))
|
||||
|
||||
return ([entry],)
|
||||
+25
-2
@@ -3,7 +3,8 @@ Runware Image Inference Settings (registered as Runware Settings for workflow co
|
||||
Provides settings for image generation including temperature, systemPrompt, topP, layers,
|
||||
quality, background, style, search, promptExtend, editRegions, thinking (boolean),
|
||||
thinkingLevel (high/medium/low), sequential, renderingSpeed (TURBO/DEFAULT/QUALITY),
|
||||
magicPrompt (AUTO/ON/OFF), autoCrop, dilatePixels, and colorPalette
|
||||
magicPrompt (AUTO/ON/OFF), autoCrop, dilatePixels, creativity (raw/low/medium/high), colorPalette,
|
||||
and moodboards
|
||||
(from Runware Image Inference Settings Color Palette).
|
||||
"""
|
||||
|
||||
@@ -193,6 +194,17 @@ class RunwareSettings:
|
||||
"max": 100,
|
||||
"step": 1,
|
||||
}),
|
||||
"useCreativity": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include creativity in settings.",
|
||||
"default": False,
|
||||
}),
|
||||
"creativity": (["raw", "low", "medium", "high"], {
|
||||
"default": "medium",
|
||||
"tooltip": "Creativity level. Only used when 'Use Creativity' is enabled.",
|
||||
}),
|
||||
"moodboards": ("RUNWAREIMAGEINFERENCEMOODBOARDS", {
|
||||
"tooltip": "Connect Runware Image Inference Settings Moodboards. When connected with at least one entry, it is merged into settings.moodboards.",
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,7 +215,8 @@ class RunwareSettings:
|
||||
DESCRIPTION = (
|
||||
"Configure general settings for image generation: temperature, system prompt, top-p, layers, quality, background, style, search, "
|
||||
"promptExtend, editRegions (JSON), thinking (boolean), thinkingLevel (high/medium/low), sequential, "
|
||||
"renderingSpeed (TURBO/DEFAULT/QUALITY), magicPrompt (AUTO/ON/OFF), autoCrop, dilatePixels, and optional colorPalette from the Color Palette node."
|
||||
"renderingSpeed (TURBO/DEFAULT/QUALITY), magicPrompt (AUTO/ON/OFF), autoCrop, dilatePixels, "
|
||||
"creativity (raw/low/medium/high), and optional colorPalette and moodboards from dedicated settings nodes."
|
||||
)
|
||||
|
||||
def createSettings(self, **kwargs) -> tuple[Dict[str, Any]]:
|
||||
@@ -229,6 +242,7 @@ class RunwareSettings:
|
||||
useMagicPrompt = kwargs.get("useMagicPrompt", False)
|
||||
useAutoCrop = kwargs.get("useAutoCrop", False)
|
||||
useDilatePixels = kwargs.get("useDilatePixels", False)
|
||||
useCreativity = kwargs.get("useCreativity", False)
|
||||
|
||||
# Get value parameters
|
||||
temperature = kwargs.get("temperature", 1.0)
|
||||
@@ -241,6 +255,7 @@ class RunwareSettings:
|
||||
style = kwargs.get("style", "auto")
|
||||
renderingSpeed = kwargs.get("renderingSpeed", "DEFAULT")
|
||||
magicPrompt = kwargs.get("magicPrompt", "AUTO")
|
||||
creativity = kwargs.get("creativity", "medium")
|
||||
|
||||
# Build settings dictionary - only include what is enabled
|
||||
settings: Dict[str, Any] = {}
|
||||
@@ -290,6 +305,9 @@ class RunwareSettings:
|
||||
palette: Optional[List[Dict[str, Any]]] = kwargs.get("colorPalette")
|
||||
if palette is not None and isinstance(palette, list) and len(palette) > 0:
|
||||
settings["colorPalette"] = palette
|
||||
moodboards: Optional[List[Dict[str, Any]]] = kwargs.get("moodboards")
|
||||
if moodboards is not None and isinstance(moodboards, list) and len(moodboards) > 0:
|
||||
settings["moodboards"] = moodboards
|
||||
|
||||
if useRenderingSpeed:
|
||||
settings["renderingSpeed"] = str(renderingSpeed)
|
||||
@@ -299,6 +317,11 @@ class RunwareSettings:
|
||||
settings["autoCrop"] = bool(kwargs.get("autoCrop", False))
|
||||
if useDilatePixels:
|
||||
settings["dilatePixels"] = int(kwargs.get("dilatePixels", 10))
|
||||
if useCreativity:
|
||||
creativity = str(creativity)
|
||||
if creativity not in ("raw", "low", "medium", "high"):
|
||||
raise ValueError("creativity must be raw, low, medium, or high when useCreativity is enabled.")
|
||||
settings["creativity"] = creativity
|
||||
|
||||
# Clean up None values
|
||||
settings = {k: v for k, v in settings.items() if v is not None}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
"""
|
||||
Runware 3D Inference Settings Node
|
||||
Main settings for 3D inference: textureSize, decimationTarget, remesh, resolution,
|
||||
imageAutoFix, faceLimit, texture, pbr, Tripo mesh/texture options, material/quality,
|
||||
Main settings for 3D inference: textureSize, decimationTarget, remesh, remeshBand, remeshProject,
|
||||
resolution, imageAutoFix, faceLimit, texture, pbr, textureFormat, alphaMode, Tripo mesh/texture options, material/quality,
|
||||
polyCount, taPose, boundingBox, meshMode, addons, hdTexture, and sub-configs
|
||||
sparseStructure, shapeSlat, texSlat from connected nodes.
|
||||
sparseStructure, shapeSlat, texSlat, meshCluster from connected nodes.
|
||||
"""
|
||||
|
||||
from typing import Dict, Any
|
||||
@@ -425,6 +425,47 @@ class Runware3DInferenceSettings:
|
||||
"label_on": "true",
|
||||
"label_off": "false",
|
||||
}),
|
||||
"meshCluster": ("RUNWARE3DINFERENCESETTINGSLAT", {
|
||||
"tooltip": "Connect Runware 3D Inference Settings Mesh Cluster node.",
|
||||
}),
|
||||
"useRemeshBand": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include remeshBand in settings.",
|
||||
"default": False,
|
||||
}),
|
||||
"remeshBand": ("FLOAT", {
|
||||
"tooltip": "Narrow-band width (in voxels) for dual-contouring remeshing. Must be greater than 0 when remesh is true. Only used when enabled.",
|
||||
"default": 1.0,
|
||||
"min": 0.1,
|
||||
"max": 16.0,
|
||||
"step": 0.1,
|
||||
}),
|
||||
"useRemeshProject": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include remeshProject in settings.",
|
||||
"default": False,
|
||||
}),
|
||||
"remeshProject": ("FLOAT", {
|
||||
"tooltip": "Projection factor for snapping remeshed vertices back to the original surface. Must be greater than 0 when remesh is true. Only used when enabled.",
|
||||
"default": 0.01,
|
||||
"min": 0.01,
|
||||
"max": 1.0,
|
||||
"step": 0.01,
|
||||
}),
|
||||
"useTextureFormat": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include textureFormat in settings.",
|
||||
"default": False,
|
||||
}),
|
||||
"textureFormat": (["WEBP", "PNG"], {
|
||||
"tooltip": "Texture format stored in the GLB output: WEBP or PNG. Only used when 'Use Texture Format' is enabled.",
|
||||
"default": "WEBP",
|
||||
}),
|
||||
"useAlphaMode": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include alphaMode in settings.",
|
||||
"default": False,
|
||||
}),
|
||||
"alphaMode": (["OPAQUE", "BLEND", "MASK"], {
|
||||
"tooltip": "Material alpha mode. Only used when 'Use Alpha Mode' is enabled.",
|
||||
"default": "OPAQUE",
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -433,10 +474,11 @@ class Runware3DInferenceSettings:
|
||||
FUNCTION = "create"
|
||||
CATEGORY = "Runware"
|
||||
DESCRIPTION = (
|
||||
"Configure Runware 3D Inference settings: textureSize, decimationTarget, remesh, resolution, imageAutoFix, faceLimit, "
|
||||
"texture, pbr, textureSeed, textureAlignment, textureQuality, autoSize, orientation, quad, compress, "
|
||||
"Configure Runware 3D Inference settings: textureSize, decimationTarget, remesh, remeshBand, remeshProject, "
|
||||
"resolution, imageAutoFix, faceLimit, texture, pbr, textureSeed, textureAlignment, textureQuality, "
|
||||
"textureFormat, alphaMode, autoSize, orientation, quad, compress, "
|
||||
"smartLowPoly, generateParts, exportUv, geometryQuality, originalAlpha, material, quality, polyCount, "
|
||||
"taPose, boundingBox, meshMode, addons, hdTexture, and lat configs."
|
||||
"taPose, boundingBox, meshMode, addons, hdTexture, lat configs, and meshCluster."
|
||||
)
|
||||
|
||||
def create(self, **kwargs) -> tuple[Dict[str, Any]]:
|
||||
@@ -448,6 +490,10 @@ class Runware3DInferenceSettings:
|
||||
settings["decimationTarget"] = int(kwargs.get("decimationTarget", 500000))
|
||||
if kwargs.get("useRemesh", False):
|
||||
settings["remesh"] = bool(kwargs.get("remesh", True))
|
||||
if kwargs.get("useRemeshBand", False):
|
||||
settings["remeshBand"] = float(kwargs.get("remeshBand", 1.0))
|
||||
if kwargs.get("useRemeshProject", False):
|
||||
settings["remeshProject"] = float(kwargs.get("remeshProject", 0.01))
|
||||
if kwargs.get("useResolution", False):
|
||||
settings["resolution"] = int(kwargs.get("resolution", 1024))
|
||||
|
||||
@@ -473,6 +519,10 @@ class Runware3DInferenceSettings:
|
||||
settings["textureAlignment"] = kwargs.get("textureAlignment", "original_image")
|
||||
if kwargs.get("useTextureQuality", False):
|
||||
settings["textureQuality"] = kwargs.get("textureQuality", "standard")
|
||||
if kwargs.get("useTextureFormat", False):
|
||||
settings["textureFormat"] = kwargs.get("textureFormat", "WEBP")
|
||||
if kwargs.get("useAlphaMode", False):
|
||||
settings["alphaMode"] = kwargs.get("alphaMode", "OPAQUE")
|
||||
if kwargs.get("useAutoSize", False):
|
||||
settings["autoSize"] = bool(kwargs.get("autoSize", False))
|
||||
if kwargs.get("useOrientation", False):
|
||||
@@ -556,6 +606,10 @@ class Runware3DInferenceSettings:
|
||||
if tex is not None and isinstance(tex, dict) and len(tex) > 0:
|
||||
settings["texSlat"] = tex
|
||||
|
||||
mesh_cluster = kwargs.get("meshCluster", None)
|
||||
if mesh_cluster is not None and isinstance(mesh_cluster, dict) and len(mesh_cluster) > 0:
|
||||
settings["meshCluster"] = mesh_cluster
|
||||
|
||||
return (settings,)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
"""
|
||||
Runware 3D Inference Settings Mesh Cluster Node
|
||||
Outputs meshCluster config: thresholdConeHalfAngleRad, refineIterations,
|
||||
globalIterations, smoothStrength
|
||||
"""
|
||||
|
||||
import math
|
||||
from typing import Dict, Any
|
||||
|
||||
|
||||
class Runware3DInferenceSettingsMeshCluster:
|
||||
"""Runware 3D Inference Settings Mesh Cluster Node"""
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
return {
|
||||
"required": {},
|
||||
"optional": {
|
||||
"useThresholdConeHalfAngleRad": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include thresholdConeHalfAngleRad in meshCluster",
|
||||
"default": False,
|
||||
}),
|
||||
"thresholdConeHalfAngleRad": ("FLOAT", {
|
||||
"tooltip": "Cone half-angle threshold (radians) used during UV chart clustering. Only used when enabled.",
|
||||
"default": math.pi / 2,
|
||||
"min": 0.0,
|
||||
"max": math.pi,
|
||||
"step": 0.01,
|
||||
}),
|
||||
"useRefineIterations": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include refineIterations in meshCluster",
|
||||
"default": False,
|
||||
}),
|
||||
"refineIterations": ("INT", {
|
||||
"tooltip": "Local refinement iterations for chart clustering. Only used when enabled.",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 64,
|
||||
"step": 1,
|
||||
}),
|
||||
"useGlobalIterations": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include globalIterations in meshCluster",
|
||||
"default": False,
|
||||
}),
|
||||
"globalIterations": ("INT", {
|
||||
"tooltip": "Global iterations for chart clustering. Only used when enabled.",
|
||||
"default": 1,
|
||||
"min": 0,
|
||||
"max": 64,
|
||||
"step": 1,
|
||||
}),
|
||||
"useSmoothStrength": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include smoothStrength in meshCluster",
|
||||
"default": False,
|
||||
}),
|
||||
"smoothStrength": ("INT", {
|
||||
"tooltip": "Smoothing strength applied during chart clustering. Only used when enabled.",
|
||||
"default": 1,
|
||||
"min": 0,
|
||||
"max": 10,
|
||||
"step": 1,
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
RETURN_TYPES = ("RUNWARE3DINFERENCESETTINGSLAT",)
|
||||
RETURN_NAMES = ("Mesh Cluster",)
|
||||
FUNCTION = "create"
|
||||
CATEGORY = "Runware"
|
||||
DESCRIPTION = "Configure mesh cluster parameters for Runware 3D Inference settings."
|
||||
|
||||
def create(self, **kwargs) -> tuple[Dict[str, Any]]:
|
||||
out: Dict[str, Any] = {}
|
||||
if kwargs.get("useThresholdConeHalfAngleRad", False):
|
||||
out["thresholdConeHalfAngleRad"] = float(kwargs.get("thresholdConeHalfAngleRad", math.pi / 2))
|
||||
if kwargs.get("useRefineIterations", False):
|
||||
out["refineIterations"] = int(kwargs.get("refineIterations", 0))
|
||||
if kwargs.get("useGlobalIterations", False):
|
||||
out["globalIterations"] = int(kwargs.get("globalIterations", 1))
|
||||
if kwargs.get("useSmoothStrength", False):
|
||||
out["smoothStrength"] = int(kwargs.get("smoothStrength", 1))
|
||||
return (out,)
|
||||
|
||||
|
||||
NODE_CLASS_MAPPINGS = {
|
||||
"Runware3DInferenceSettingsMeshCluster": Runware3DInferenceSettingsMeshCluster,
|
||||
}
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"Runware3DInferenceSettingsMeshCluster": "Runware 3D Inference Settings Mesh Cluster",
|
||||
}
|
||||
@@ -96,6 +96,17 @@ class RunwareUltralyticsInputs:
|
||||
"step": 0.01,
|
||||
"tooltip": "Denoising strength (0.0001-1).",
|
||||
}),
|
||||
"useInpaintSize": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include inpaintSize parameter.",
|
||||
"default": False,
|
||||
}),
|
||||
"inpaintSize": ("INT", {
|
||||
"default": 1024,
|
||||
"min": 128,
|
||||
"max": 2048,
|
||||
"step": 1,
|
||||
"tooltip": "Image size to use for each inpainting region. Only used when useInpaintSize is enabled.",
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,6 +141,8 @@ class RunwareUltralyticsInputs:
|
||||
settings["CFGScale"] = kwargs.get("CFGScale", 8.0)
|
||||
if kwargs.get("useStrength", False):
|
||||
settings["strength"] = kwargs.get("strength", 0.3)
|
||||
if kwargs.get("useInpaintSize", False):
|
||||
settings["inpaintSize"] = int(kwargs.get("inpaintSize", 1024))
|
||||
|
||||
return (settings,)
|
||||
|
||||
|
||||
@@ -422,14 +422,8 @@ class txt2vid:
|
||||
genConfig[0]["providerSettings"] = providerSettings
|
||||
|
||||
# Add safety inputs if provided
|
||||
# Note: Video inference API only supports 'mode' key for safety
|
||||
if safetyInputs is not None and isinstance(safetyInputs, dict) and len(safetyInputs) > 0:
|
||||
# Filter to only include 'mode' (only allowed key for video inference)
|
||||
filtered_safety = {}
|
||||
if "mode" in safetyInputs:
|
||||
filtered_safety["mode"] = safetyInputs["mode"]
|
||||
if filtered_safety:
|
||||
genConfig[0]["safety"] = filtered_safety
|
||||
genConfig[0]["safety"] = safetyInputs
|
||||
|
||||
# Add video advanced feature inputs if provided
|
||||
if videoAdvancedFeatureInputs is not None and isinstance(videoAdvancedFeatureInputs, dict) and len(videoAdvancedFeatureInputs) > 0:
|
||||
|
||||
@@ -139,6 +139,7 @@ class videoModelSearch:
|
||||
"Pruna": [
|
||||
"prunaai:p-video@0 (P-Video)",
|
||||
"prunaai:p-video@avatar (P-Video Avatar)",
|
||||
"prunaai:p-video@animate (P-Video Animate)",
|
||||
],
|
||||
"SkyReels": [
|
||||
"skywork:skyreels@v4 (SkyReels V4)",
|
||||
@@ -278,6 +279,7 @@ class videoModelSearch:
|
||||
# Pruna Models (720p)
|
||||
"prunaai:p-video@0": {"width": 1280, "height": 720},
|
||||
"prunaai:p-video@avatar": {"width": 1280, "height": 720},
|
||||
"prunaai:p-video@animate": {"width": 1280, "height": 720},
|
||||
|
||||
# HeyGen Models (Model ID: heygen-avatar-iv, heygen-avatar-v)
|
||||
"heygen:avatar@4": {"width": 1280, "height": 720},
|
||||
@@ -421,6 +423,7 @@ class videoModelSearch:
|
||||
# Pruna Models
|
||||
"prunaai:p-video@0": "720p",
|
||||
"prunaai:p-video@avatar": "720p",
|
||||
"prunaai:p-video@animate": "720p",
|
||||
|
||||
# HeyGen Models
|
||||
"heygen:avatar@4": "720p",
|
||||
|
||||
@@ -225,6 +225,16 @@ class RunwareVideoSettings:
|
||||
"label_on": "true",
|
||||
"label_off": "false",
|
||||
}),
|
||||
"usePreserveAudio": ("BOOLEAN", {
|
||||
"tooltip": "Enable to include preserveAudio in video inference settings.",
|
||||
"default": False,
|
||||
}),
|
||||
"preserveAudio": ("BOOLEAN", {
|
||||
"tooltip": "Preserve source audio in output video. Only used when 'Use Preserve Audio' is enabled.",
|
||||
"default": True,
|
||||
"label_on": "Enabled",
|
||||
"label_off": "Disabled",
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,6 +253,8 @@ class RunwareVideoSettings:
|
||||
draft = kwargs.get("draft", False)
|
||||
use_audio = kwargs.get("useAudio", False)
|
||||
audio = kwargs.get("audio", False)
|
||||
use_preserve_audio = kwargs.get("usePreserveAudio", False)
|
||||
preserve_audio = kwargs.get("preserveAudio", True)
|
||||
use_voice_prompt = kwargs.get("useVoicePrompt", False)
|
||||
voice_prompt = (kwargs.get("voicePrompt") or "").strip()
|
||||
use_safety_filter = kwargs.get("useSafetyFilter", False)
|
||||
@@ -293,6 +305,8 @@ class RunwareVideoSettings:
|
||||
settings["draft"] = bool(draft)
|
||||
if use_audio:
|
||||
settings["audio"] = bool(audio)
|
||||
if use_preserve_audio:
|
||||
settings["preserveAudio"] = bool(preserve_audio)
|
||||
if use_voice_prompt and voice_prompt:
|
||||
settings["voicePrompt"] = voice_prompt
|
||||
if use_safety_filter:
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user