Merge pull request #88 from Runware/feature-Ultralytics/AddSettings/AddModelNames

Add Ultralytics, and settings.quality
This commit is contained in:
Sirshendu Ganguly
2026-02-03 22:04:32 -05:00
committed by GitHub
13 changed files with 423 additions and 10 deletions
+2
View File
@@ -61,6 +61,7 @@ from .modules.providerSettings.alibabaProviderSettings import RunwareAlibabaProv
from .modules.providerSettings.googleProviderSettings import RunwareGoogleProviderSettings
from .modules.providerSettings.blackForestProviderSettings import RunwareBlackForestProviderSettings
from .modules.providerSettings.xaiProviderSettings import RunwareXAIProviderSettings
from .modules.ultralyticsInputs import RunwareUltralyticsInputs
from .modules.providerSettings.syncSegment import RunwareSyncSegment
from .modules.providerSettings.syncProviderSettings import RunwareSyncProviderSettings
from .modules.vectorize import vectorize
@@ -152,6 +153,7 @@ NODE_CLASS_MAPPINGS = {
"Runware Google Provider Settings": RunwareGoogleProviderSettings,
"Runware BlackForest Labs Provider Settings": RunwareBlackForestProviderSettings,
"Runware xAI Provider Settings": RunwareXAIProviderSettings,
"Runware Image Inference Ultralytics": RunwareUltralyticsInputs,
"Runware Sync Segment": RunwareSyncSegment,
"Runware Sync Provider Settings": RunwareSyncProviderSettings,
"Runware Vectorize": vectorize,
+3 -1
View File
@@ -1,6 +1,6 @@
import { app } from "../../scripts/app.js";
import { api } from "../../scripts/api.js";
import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, mediaUUIDHandler, save3DFilepathHandler, videoTranscriptionHandler, videoOutputsHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, useParameterToggleHandler, imageInferenceToggleHandler, upscalerToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, xaiProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler } from "./utils.js";
import { promptEnhanceHandler, syncDimensionsNodeHandler, searchNodeHandler, APIKeyHandler, captionNodeHandler, mediaUUIDHandler, save3DFilepathHandler, videoTranscriptionHandler, videoOutputsHandler, handleCustomErrors, videoInferenceDimensionsHandler, videoModelSearchFilterHandler, audioModelSearchFilterHandler, useParameterToggleHandler, imageInferenceToggleHandler, upscalerToggleHandler, videoUpscalerToggleHandler, audioInferenceToggleHandler, acceleratorOptionsToggleHandler, bytedanceProviderSettingsToggleHandler, xaiProviderSettingsToggleHandler, ultralyticsProviderSettingsToggleHandler, openaiProviderSettingsToggleHandler, lightricksProviderSettingsToggleHandler, klingProviderSettingsToggleHandler, lumaProviderSettingsToggleHandler, briaProviderSettingsToggleHandler, pixverseProviderSettingsToggleHandler, alibabaProviderSettingsToggleHandler, mireloProviderSettingsToggleHandler, googleProviderSettingsToggleHandler, syncProviderSettingsToggleHandler, syncSegmentToggleHandler, settingsToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler } from "./utils.js";
import { RUNWARE_NODE_TYPES, RUNWARE_NODE_PROPS, SEARCH_TERMS } from "./types.js";
const nodeInitList = [];
@@ -84,6 +84,8 @@ app.registerExtension({
bytedanceProviderSettingsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.XAIPROVIDERSETTINGS) {
xaiProviderSettingsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.ULTRALYTICSINPUTS) {
ultralyticsProviderSettingsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.OPENAIPROVIDERSETTINGS) {
openaiProviderSettingsToggleHandler(node);
} else if(nodeClass === RUNWARE_NODE_TYPES.LIGHTRICKSPROVIDERSETTINGS) {
+5
View File
@@ -107,6 +107,7 @@ const RUNWARE_NODE_TYPES = {
ALIBABAPROVIDERSETTINGS: "Runware Alibaba Provider Settings",
BLACKFORESTPROVIDERSETTINGS: "Runware BlackForest Labs Provider Settings",
XAIPROVIDERSETTINGS: "Runware xAI Provider Settings",
ULTRALYTICSINPUTS: "Runware Image Inference Ultralytics",
GOOGLEPROVIDERSETTINGS: "Runware Google Provider Settings",
SYNCSEGMENT: "Runware Sync Segment",
SYNCPROVIDERSETTINGS: "Runware Sync Provider Settings",
@@ -369,6 +370,10 @@ const RUNWARE_NODE_PROPS = {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
},
[RUNWARE_NODE_TYPES.ULTRALYTICSINPUTS]: {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
},
[RUNWARE_NODE_TYPES.GOOGLEPROVIDERSETTINGS]: {
bgColor: DEFAULT_BGCOLOR,
colorModeOnly: true,
+90 -4
View File
@@ -1260,6 +1260,69 @@ function bytedanceProviderSettingsToggleHandler(bytedanceNode) {
}
}
function ultralyticsProviderSettingsToggleHandler(ultralyticsNode) {
const useParamPairs = [
["useMaskBlur", "maskBlur"],
["useMaskPadding", "maskPadding"],
["useConfidence", "confidence"],
["usePositivePrompt", "positivePrompt"],
["useNegativePrompt", "negativePrompt"],
["useSteps", "steps"],
["useCFGScale", "CFGScale"],
["useStrength", "strength"],
];
function toggleWidgetState(useWidget, paramWidget, paramName) {
if (!useWidget || !paramWidget) return;
function toggleEnabled() {
const enabled = useWidget.value === true;
if (paramWidget.inputEl) {
paramWidget.inputEl.disabled = !enabled;
paramWidget.inputEl.style.opacity = enabled ? "1" : "0.5";
paramWidget.inputEl.style.cursor = enabled ? "text" : "not-allowed";
paramWidget.inputEl.readOnly = !enabled;
}
paramWidget.disabled = !enabled;
if (paramWidget.options && paramWidget.options.element) {
paramWidget.options.element.disabled = !enabled;
paramWidget.options.element.style.opacity = enabled ? "1" : "0.5";
paramWidget.options.element.style.pointerEvents = enabled ? "auto" : "none";
}
if (!paramWidget.inputEl) {
const nodeElement = ultralyticsNode.htmlElements?.widgetsContainer || ultralyticsNode.htmlElements;
if (nodeElement) {
const input = nodeElement.querySelector(`input[name="${paramName}"], textarea[name="${paramName}"], select[name="${paramName}"]`);
if (input) {
input.disabled = !enabled;
input.style.opacity = enabled ? "1" : "0.5";
input.style.pointerEvents = enabled ? "auto" : "none";
}
}
}
ultralyticsNode.setDirtyCanvas(true);
}
appendWidgetCB(useWidget, () => {
setTimeout(toggleEnabled, 50);
});
setTimeout(toggleEnabled, 100);
}
useParamPairs.forEach(([useName, paramName]) => {
const useWidget = ultralyticsNode.widgets.find(w => w.name === useName);
const paramWidget = ultralyticsNode.widgets.find(w => w.name === paramName);
if (useWidget && paramWidget) {
toggleWidgetState(useWidget, paramWidget, paramName);
}
});
}
function xaiProviderSettingsToggleHandler(xaiNode) {
const useQualityWidget = xaiNode.widgets.find(w => w.name === "useQuality");
const qualityWidget = xaiNode.widgets.find(w => w.name === "quality");
@@ -1882,6 +1945,12 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"Hunyuan": [
"runware:hunyuanvideo@1.5 (HunyuanVideo-1.5)",
],
"xAI": [
"xai:grok-imagine@video (Grok Imagine Video)",
],
"VEED": [
"veed:fabric@1.0 (VEED Fabric 1.0)",
],
};
const MODEL_DIMENSIONS = {
@@ -1951,7 +2020,8 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"creatify:aurora@fast": {"width": 1280, "height": 720},
"creatify:aurora@0": {"width": 1280, "height": 720},
"runware:hunyuanvideo@1.5": {"width": 848, "height": 480},
"xai:1@1": {"width": 480, "height": 480},
"xai:grok-imagine@video": {"width": 480, "height": 480},
"veed:fabric@1.0": {"width": 1280, "height": 720},
};
const MODEL_RESOLUTIONS = {
@@ -2021,7 +2091,8 @@ function videoModelSearchFilterHandler(videoModelSearchNode) {
"creatify:aurora@fast": "720p",
"creatify:aurora@0": "720p",
"runware:hunyuanvideo@1.5": "480p",
"xai:1@1": "480p",
"xai:grok-imagine@video": "480p",
"veed:fabric@1.0": "720p",
};
const DEFAULT_DIMENSIONS = {"width": 1024, "height": 576};
@@ -2285,9 +2356,8 @@ function klingProviderSettingsToggleHandler(klingNode) {
const characterOrientationWidget = klingNode.widgets.find(w => w.name === "characterOrientation");
// Helper function to toggle widget enabled state (EXACT same pattern as imageInferenceToggleHandler)
// Callers guard with if (useX && xWidget) before invoking
function toggleWidgetState(useWidget, paramWidget, paramName) {
if (!useWidget || !paramWidget) return;
function toggleEnabled() {
const enabled = useWidget.value === true;
@@ -3288,6 +3358,7 @@ export {
acceleratorOptionsToggleHandler,
bytedanceProviderSettingsToggleHandler,
xaiProviderSettingsToggleHandler,
ultralyticsProviderSettingsToggleHandler,
openaiProviderSettingsToggleHandler,
lightricksProviderSettingsToggleHandler,
klingProviderSettingsToggleHandler,
@@ -3379,6 +3450,12 @@ function settingsToggleHandler(settingsNode) {
const systemPromptWidget = settingsNode.widgets.find(w => w.name === "systemPrompt");
const useTopPWidget = settingsNode.widgets.find(w => w.name === "useTopP");
const topPWidget = settingsNode.widgets.find(w => w.name === "topP");
const useLayersWidget = settingsNode.widgets.find(w => w.name === "useLayers");
const layersWidget = settingsNode.widgets.find(w => w.name === "layers");
const useTrueCFGScaleWidget = settingsNode.widgets.find(w => w.name === "useTrueCFGScale");
const trueCFGScaleWidget = settingsNode.widgets.find(w => w.name === "trueCFGScale");
const useQualityWidget = settingsNode.widgets.find(w => w.name === "useQuality");
const qualityWidget = settingsNode.widgets.find(w => w.name === "quality");
// Helper function to toggle widget enabled state
function toggleWidgetState(useWidget, paramWidget, paramName) {
@@ -3432,6 +3509,15 @@ function settingsToggleHandler(settingsNode) {
if (useTopPWidget && topPWidget) {
toggleWidgetState(useTopPWidget, topPWidget, "topP");
}
if (useLayersWidget && layersWidget) {
toggleWidgetState(useLayersWidget, layersWidget, "layers");
}
if (useTrueCFGScaleWidget && trueCFGScaleWidget) {
toggleWidgetState(useTrueCFGScaleWidget, trueCFGScaleWidget, "trueCFGScale");
}
if (useQualityWidget && qualityWidget) {
toggleWidgetState(useQualityWidget, qualityWidget, "quality");
}
}
function syncProviderSettingsToggleHandler(syncNode) {
+8
View File
@@ -191,6 +191,9 @@ class txt2img:
"settings": ("RUNWARESETTINGS", {
"tooltip": "Connect Runware Settings node to configure temperature, systemPrompt, and topP parameters.",
}),
"ultralytics": ("RUNWAREULTRALYTICSINPUTS", {
"tooltip": "Connect Runware Image Inference Ultralytics node to configure Ultralytics parameters (maskBlur, maskPadding, confidence, prompts, steps, CFGScale, strength).",
}),
}
}
@@ -233,6 +236,7 @@ class txt2img:
providerSettings = kwargs.get("providerSettings", None)
safetyInputs = kwargs.get("safetyInputs", None)
settings = kwargs.get("settings", None)
ultralytics = kwargs.get("ultralytics", None)
seedImage = kwargs.get("seedImage", None)
seedImageStrength = kwargs.get("strength", 0.8)
maskImage = kwargs.get("maskImage", None)
@@ -394,6 +398,10 @@ class txt2img:
if settings is not None and isinstance(settings, dict) and len(settings) > 0:
genConfig[0]["settings"] = settings
# Add ultralytics parameters if provided
if ultralytics is not None and isinstance(ultralytics, dict) and len(ultralytics) > 0:
genConfig[0]["ultralytics"] = ultralytics
if (multiInferenceMode):
return (None, genConfig)
else:
@@ -0,0 +1,142 @@
"""
Runware Image Inference Ultralytics Node
Provides Ultralytics-specific settings for image generation (providerSettings.ultralytics.*)
"""
from typing import Dict, Any
class RunwareUltralyticsProviderSettings:
"""Runware Image Inference Ultralytics - Ultralytics provider settings"""
@classmethod
def INPUT_TYPES(cls):
return {
"required": {},
"optional": {
"useMaskBlur": ("BOOLEAN", {
"tooltip": "Enable to include maskBlur parameter.",
"default": False,
}),
"maskBlur": ("INT", {
"default": 5,
"min": 0,
"max": 100,
"tooltip": "Mask feathering amount (0-100).",
}),
"useMaskPadding": ("BOOLEAN", {
"tooltip": "Enable to include maskPadding parameter.",
"default": False,
}),
"maskPadding": ("INT", {
"default": 5,
"min": 0,
"max": 20,
"tooltip": "Padding around face region (0-20).",
}),
"useConfidence": ("BOOLEAN", {
"tooltip": "Enable to include confidence parameter.",
"default": False,
}),
"confidence": ("FLOAT", {
"default": 0.5,
"min": 0.0,
"max": 1.0,
"step": 0.01,
"tooltip": "Detection confidence threshold (0-1).",
}),
"usePositivePrompt": ("BOOLEAN", {
"tooltip": "Enable to include positivePrompt parameter.",
"default": False,
}),
"positivePrompt": ("STRING", {
"default": "",
"multiline": True,
"tooltip": "Prompt for diffusion model.",
}),
"useNegativePrompt": ("BOOLEAN", {
"tooltip": "Enable to include negativePrompt parameter.",
"default": False,
}),
"negativePrompt": ("STRING", {
"default": "",
"multiline": True,
"tooltip": "Negative prompt for model.",
}),
"useSteps": ("BOOLEAN", {
"tooltip": "Enable to include steps parameter.",
"default": False,
}),
"steps": ("INT", {
"default": 20,
"min": 1,
"max": 100,
"tooltip": "Number of diffusion steps (1-100).",
}),
"useCFGScale": ("BOOLEAN", {
"tooltip": "Enable to include CFGScale parameter.",
"default": False,
}),
"CFGScale": ("FLOAT", {
"default": 8.0,
"min": 0.0,
"max": 50.0,
"step": 0.1,
"tooltip": "Classifier-free guidance scale (0-50).",
}),
"useStrength": ("BOOLEAN", {
"tooltip": "Enable to include strength parameter.",
"default": False,
}),
"strength": ("FLOAT", {
"default": 0.3,
"min": 0.0001,
"max": 1.0,
"step": 0.01,
"tooltip": "Denoising strength (0.0001-1).",
}),
}
}
DESCRIPTION = "Configure Ultralytics-specific settings for Runware Image Inference. providerSettings.ultralytics.*"
RETURN_TYPES = ("RUNWAREPROVIDERSETTINGS",)
RETURN_NAMES = ("providerSettings",)
FUNCTION = "create_provider_settings"
CATEGORY = "Runware/Provider Settings"
def create_provider_settings(self, **kwargs) -> tuple[Dict[str, Any]]:
"""Create Ultralytics provider settings"""
settings = {}
if kwargs.get("useMaskBlur", False):
settings["maskBlur"] = kwargs.get("maskBlur", 5)
if kwargs.get("useMaskPadding", False):
settings["maskPadding"] = kwargs.get("maskPadding", 5)
if kwargs.get("useConfidence", False):
settings["confidence"] = kwargs.get("confidence", 0.5)
if kwargs.get("usePositivePrompt", False):
val = kwargs.get("positivePrompt", "")
if val is not None and str(val).strip():
settings["positivePrompt"] = str(val).strip()
if kwargs.get("useNegativePrompt", False):
val = kwargs.get("negativePrompt", "")
if val is not None and str(val).strip():
settings["negativePrompt"] = str(val).strip()
if kwargs.get("useSteps", False):
settings["steps"] = kwargs.get("steps", 20)
if kwargs.get("useCFGScale", False):
settings["CFGScale"] = kwargs.get("CFGScale", 8.0)
if kwargs.get("useStrength", False):
settings["strength"] = kwargs.get("strength", 0.3)
return (settings,)
NODE_CLASS_MAPPINGS = {
"RunwareUltralyticsProviderSettings": RunwareUltralyticsProviderSettings,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"RunwareUltralyticsProviderSettings": "Runware Image Inference Ultralytics",
}
+12
View File
@@ -66,6 +66,14 @@ class RunwareSettings:
"min": 1.0,
"step": 0.1,
}),
"useQuality": ("BOOLEAN", {
"tooltip": "Enable to include quality parameter in API request",
"default": False,
}),
"quality": (["low", "medium", "high"], {
"default": "medium",
"tooltip": "Quality of the output image. Only used when 'Use Quality' is enabled.",
}),
}
}
@@ -84,6 +92,7 @@ class RunwareSettings:
useTopP = kwargs.get("useTopP", False)
useLayers = kwargs.get("useLayers", False)
useTrueCFGScale = kwargs.get("useTrueCFGScale", False)
useQuality = kwargs.get("useQuality", False)
# Get value parameters
temperature = kwargs.get("temperature", 1.0)
@@ -91,6 +100,7 @@ class RunwareSettings:
topP = kwargs.get("topP", 1.0)
layers = kwargs.get("layers")
trueCFGScale = kwargs.get("trueCFGScale")
quality = kwargs.get("quality", "medium")
# Build settings dictionary - only include what is enabled
settings: Dict[str, Any] = {}
@@ -106,6 +116,8 @@ class RunwareSettings:
settings["layers"] = int(layers)
if useTrueCFGScale:
settings["true_cfg_scale"] = float(trueCFGScale)
if useQuality:
settings["quality"] = quality
# Clean up None values
settings = {k: v for k, v in settings.items() if v is not None}
+143
View File
@@ -0,0 +1,143 @@
"""
Runware Image Inference Ultralytics Node
Provides Ultralytics parameters for image inference (ultralytics.*)
Parameters are passed to genConfig["ultralytics"] like settings.
"""
from typing import Dict, Any
class RunwareUltralyticsInputs:
"""Runware Image Inference Ultralytics - Ultralytics parameters for image inference"""
@classmethod
def INPUT_TYPES(cls):
return {
"required": {},
"optional": {
"useMaskBlur": ("BOOLEAN", {
"tooltip": "Enable to include maskBlur parameter.",
"default": False,
}),
"maskBlur": ("INT", {
"default": 5,
"min": 0,
"max": 100,
"tooltip": "Mask feathering amount (0-100).",
}),
"useMaskPadding": ("BOOLEAN", {
"tooltip": "Enable to include maskPadding parameter.",
"default": False,
}),
"maskPadding": ("INT", {
"default": 5,
"min": 0,
"max": 20,
"tooltip": "Padding around face region (0-20).",
}),
"useConfidence": ("BOOLEAN", {
"tooltip": "Enable to include confidence parameter.",
"default": False,
}),
"confidence": ("FLOAT", {
"default": 0.5,
"min": 0.0,
"max": 1.0,
"step": 0.01,
"tooltip": "Detection confidence threshold (0-1).",
}),
"usePositivePrompt": ("BOOLEAN", {
"tooltip": "Enable to include positivePrompt parameter.",
"default": False,
}),
"positivePrompt": ("STRING", {
"default": "",
"multiline": True,
"tooltip": "Prompt for diffusion model.",
}),
"useNegativePrompt": ("BOOLEAN", {
"tooltip": "Enable to include negativePrompt parameter.",
"default": False,
}),
"negativePrompt": ("STRING", {
"default": "",
"multiline": True,
"tooltip": "Negative prompt for model.",
}),
"useSteps": ("BOOLEAN", {
"tooltip": "Enable to include steps parameter.",
"default": False,
}),
"steps": ("INT", {
"default": 20,
"min": 1,
"max": 100,
"tooltip": "Number of diffusion steps (1-100).",
}),
"useCFGScale": ("BOOLEAN", {
"tooltip": "Enable to include CFGScale parameter.",
"default": False,
}),
"CFGScale": ("FLOAT", {
"default": 8.0,
"min": 0.0,
"max": 50.0,
"step": 0.1,
"tooltip": "Classifier-free guidance scale (0-50).",
}),
"useStrength": ("BOOLEAN", {
"tooltip": "Enable to include strength parameter.",
"default": False,
}),
"strength": ("FLOAT", {
"default": 0.3,
"min": 0.0001,
"max": 1.0,
"step": 0.01,
"tooltip": "Denoising strength (0.0001-1).",
}),
}
}
DESCRIPTION = "Configure Ultralytics parameters for Runware Image Inference. Passed as genConfig.ultralytics (like settings)."
RETURN_TYPES = ("RUNWAREULTRALYTICSINPUTS",)
RETURN_NAMES = ("Ultralytics",)
FUNCTION = "create_ultralytics_inputs"
CATEGORY = "Runware"
def create_ultralytics_inputs(self, **kwargs) -> tuple[Dict[str, Any]]:
"""Create Ultralytics parameters dict"""
settings = {}
if kwargs.get("useMaskBlur", False):
settings["maskBlur"] = kwargs.get("maskBlur", 5)
if kwargs.get("useMaskPadding", False):
settings["maskPadding"] = kwargs.get("maskPadding", 5)
if kwargs.get("useConfidence", False):
settings["confidence"] = kwargs.get("confidence", 0.5)
if kwargs.get("usePositivePrompt", False):
val = kwargs.get("positivePrompt", "")
if val is not None and str(val).strip():
settings["positivePrompt"] = str(val).strip()
if kwargs.get("useNegativePrompt", False):
val = kwargs.get("negativePrompt", "")
if val is not None and str(val).strip():
settings["negativePrompt"] = str(val).strip()
if kwargs.get("useSteps", False):
settings["steps"] = kwargs.get("steps", 20)
if kwargs.get("useCFGScale", False):
settings["CFGScale"] = kwargs.get("CFGScale", 8.0)
if kwargs.get("useStrength", False):
settings["strength"] = kwargs.get("strength", 0.3)
return (settings,)
NODE_CLASS_MAPPINGS = {
"RunwareUltralyticsInputs": RunwareUltralyticsInputs,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"RunwareUltralyticsInputs": "Runware Image Inference Ultralytics",
}
+14 -4
View File
@@ -102,7 +102,10 @@ class videoModelSearch:
"runware:hunyuanvideo@1.5 (HunyuanVideo-1.5)",
],
"xAI": [
"xai:1@1 (xAI Video 480p)",
"xai:grok-imagine@video (Grok Imagine Video)",
],
"VEED": [
"veed:fabric@1.0 (VEED Fabric 1.0)",
],
}
@@ -207,7 +210,10 @@ class videoModelSearch:
"runware:hunyuanvideo@1.5": {"width": 848, "height": 480},
# xAI Models
"xai:1@1": {"width": 480, "height": 480},
"xai:grok-imagine@video": {"width": 480, "height": 480},
# VEED Models (preserves input aspect ratio; resolution = shorter side)
"veed:fabric@1.0": {"width": 1280, "height": 720},
}
# Model resolutions mapping
@@ -311,7 +317,10 @@ class videoModelSearch:
"runware:hunyuanvideo@1.5": "480p",
# xAI Models
"xai:1@1": "480p",
"xai:grok-imagine@video": "480p",
# VEED Models (480p or 720p)
"veed:fabric@1.0": "720p",
}
MODEL_ARCHITECTURES = [
@@ -332,7 +341,8 @@ class videoModelSearch:
"Bria",
"Creatify",
"Hunyuan",
"xAI"
"xAI",
"VEED"
]
DEFAULT_DIMENSIONS = {"width": 1024, "height": 576}
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