diff --git a/clientlibs/utils.js b/clientlibs/utils.js index af2379c..99fb589 100644 --- a/clientlibs/utils.js +++ b/clientlibs/utils.js @@ -1422,6 +1422,8 @@ function videoSettingsToggleHandler(settingsNode) { const temperatureWidget = settingsNode.widgets.find(w => w && w.name === "temperature"); const useOcclusionDetectionWidget = settingsNode.widgets.find(w => w && w.name === "useOcclusionDetection"); const occlusionDetectionWidget = settingsNode.widgets.find(w => w && w.name === "occlusionDetection"); + const useKeyframeIdWidget = settingsNode.widgets.find(w => w && w.name === "useKeyframeId"); + const keyframeIdWidget = settingsNode.widgets.find(w => w && w.name === "keyframeId"); function toggleWidgetState(useWidget, paramWidget, paramName) { if (!useWidget || !paramWidget) return; @@ -1456,6 +1458,7 @@ function videoSettingsToggleHandler(settingsNode) { if (useEmotionWidget && emotionWidget) toggleWidgetState(useEmotionWidget, emotionWidget, "emotion"); if (useTemperatureWidget && temperatureWidget) toggleWidgetState(useTemperatureWidget, temperatureWidget, "temperature"); if (useOcclusionDetectionWidget && occlusionDetectionWidget) toggleWidgetState(useOcclusionDetectionWidget, occlusionDetectionWidget, "occlusionDetection"); + if (useKeyframeIdWidget && keyframeIdWidget) toggleWidgetState(useKeyframeIdWidget, keyframeIdWidget, "keyframeId"); } function videoInferenceSettingsTtsToggleHandler(node) { @@ -2782,7 +2785,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) { ], "PixVerse": [ "pixverse:1@1 (PixVerse v3.5)", "pixverse:1@2 (PixVerse v4)", - "pixverse:1@3 (PixVerse v4.5)", "pixverse:1@5-fast (PixVerse v5 Fast)", "pixverse:1@6 (PixVerse v5.5)", "pixverse:1@7 (PixVerse v5.6)", "pixverse:1@8 (PixVerse v6)", "pixverse:lipsync@1 (PixVerse LipSync)", + "pixverse:1@3 (PixVerse v4.5)", "pixverse:1@5-fast (PixVerse v5 Fast)", "pixverse:1@6 (PixVerse v5.5)", "pixverse:1@7 (PixVerse v5.6)", "pixverse:1@8 (PixVerse v6)", "pixverse:lipsync@1 (PixVerse LipSync)", "pixverse:modify@0 (PixVerse Modify)", ], "Vidu": [ "vidu:1@0 (Vidu Q1 Classic)", "vidu:1@1 (Vidu Q1)", @@ -2907,6 +2910,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) { "pixverse:1@7": {"width": 640, "height": 360}, "pixverse:1@8": {"width": 640, "height": 360}, "pixverse:lipsync@1": {"width": 640, "height": 360}, + "pixverse:modify@0": {"width": 640, "height": 360}, "vidu:1@0": {"width": 1920, "height": 1080}, "vidu:1@1": {"width": 1920, "height": 1080}, "vidu:1@5": {"width": 1920, "height": 1080}, @@ -3003,6 +3007,7 @@ function videoModelSearchFilterHandler(videoModelSearchNode) { "pixverse:1@7": "360p", "pixverse:1@8": "360p", "pixverse:lipsync@1": "360p", + "pixverse:modify@0": "360p", "vidu:1@0": "1080p", "vidu:1@1": "1080p", "vidu:1@5": "1080p", diff --git a/modules/videoModelSearch.py b/modules/videoModelSearch.py index 97b77fb..d49edd0 100644 --- a/modules/videoModelSearch.py +++ b/modules/videoModelSearch.py @@ -61,6 +61,7 @@ class videoModelSearch: "pixverse:1@7 (PixVerse v5.6)", "pixverse:1@8 (PixVerse v6)", "pixverse:lipsync@1 (PixVerse LipSync)", + "pixverse:modify@0 (PixVerse Modify)", ], "Vidu": [ "vidu:1@0 (Vidu Q1 Classic)", @@ -202,6 +203,7 @@ class videoModelSearch: "pixverse:1@7": {"width": 640, "height": 360}, "pixverse:1@8": {"width": 640, "height": 360}, "pixverse:lipsync@1": {"width": 640, "height": 360}, + "pixverse:modify@0": {"width": 640, "height": 360}, # Vidu Models "vidu:1@0": {"width": 1920, "height": 1080}, @@ -342,6 +344,7 @@ class videoModelSearch: "pixverse:1@7": "360p", "pixverse:1@8": "360p", "pixverse:lipsync@1": "360p", + "pixverse:modify@0": "360p", # Vidu Models "vidu:1@0": "1080p", diff --git a/modules/videoSettings.py b/modules/videoSettings.py index 72683e3..a306680 100644 --- a/modules/videoSettings.py +++ b/modules/videoSettings.py @@ -174,6 +174,17 @@ class RunwareVideoSettings: "label_on": "true", "label_off": "false", }), + "useKeyframeId": ("BOOLEAN", { + "tooltip": "Enable to include settings.keyframe.keyframe_id in video inference settings.", + "default": False, + }), + "keyframeId": ("INT", { + "tooltip": "Keyframe ID for settings.keyframe.keyframe_id. Only used when 'Use Keyframe ID' is enabled.", + "default": 0, + "min": 0, + "max": 2147483647, + "step": 1, + }), "segments": ("RUNWAREVIDEOINFERENCESETTINGSSEGMENTS", { "tooltip": "Connect Runware Video Inference Settings Segments for settings.segments[] (startTime, endTime, audio, audioStartTime, audioEndTime).", }), @@ -227,6 +238,8 @@ class RunwareVideoSettings: temperature = kwargs.get("temperature", 0.7) use_occlusion_detection = kwargs.get("useOcclusionDetection", False) occlusion_detection = kwargs.get("occlusionDetection", False) + use_keyframe_id = kwargs.get("useKeyframeId", False) + keyframe_id = kwargs.get("keyframeId", 0) segments_cfg = kwargs.get("segments", None) settings: Dict[str, Any] = {} @@ -265,6 +278,8 @@ class RunwareVideoSettings: settings["temperature"] = float(temperature) if use_occlusion_detection: settings["occlusionDetection"] = bool(occlusion_detection) + if use_keyframe_id: + settings["keyframe"] = {"keyframe_id": int(keyframe_id)} if tts_cfg is not None and isinstance(tts_cfg, dict) and len(tts_cfg) > 0: settings["tts"] = tts_cfg