Skip to content

Commit a4bb84e

Browse files
authored
Merge pull request #163 from Runware/feature-sourceful
Added Support for Riverflow 2.5
2 parents 85ec737 + b23989d commit a4bb84e

11 files changed

Lines changed: 453 additions & 21 deletions

__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from .modules.vaeSearch import vaeSearch
2727
from .modules.referenceImages import referenceImages
2828
from .modules.imageInferenceInputs import imageInferenceInputs
29+
from .modules.imageInferenceInputsFonts import RunwareImageInferenceInputsFonts
2930
from .modules.imageInferenceAdvancedFeatures import RunwareImageInferenceAdvancedFeatures
3031
from .modules.imageWatermarkAdvancedFeature import RunwareWatermarkAdvancedFeature
3132
from .modules.imageRegionalPromptingAdvancedFeature import RunwareRegionalPromptingAdvancedFeature
@@ -112,6 +113,10 @@
112113
from .modules.imageInferenceSettingsMoodboards import RunwareImageInferenceSettingsMoodboards
113114
from .modules.imageInferenceSettingsStructuredPrompt import RunwareImageInferenceSettingsStructuredPrompt
114115
from .modules.imageInferenceSettingsPromptEnhance import RunwareImageInferenceSettingsPromptEnhance
116+
from .modules.imageInferenceSettingsScoringRubric import (
117+
RunwareImageInferenceSettingsScoringRubric,
118+
RunwareImageInferenceSettingsScoringRubricCombine,
119+
)
115120
from .modules.videoAdvancedFeatureInputs import videoAdvancedFeatureInputs
116121
from .modules.advancedFeatureSettings.wanAnimateAdvancedFeatureSettings import RunwareWanAnimateAdvancedFeatureSettings
117122
from .modules.saveImage import RunwareSaveImage
@@ -166,6 +171,7 @@
166171
"Runware IPAdapters Combine": ipAdapterCombine,
167172
"Runware Reference Images": referenceImages,
168173
"Runware Image Inference Inputs": imageInferenceInputs,
174+
"Runware Image Inference Inputs Fonts": RunwareImageInferenceInputsFonts,
169175
"Runware Image Advanced Feature Input": RunwareImageInferenceAdvancedFeatures,
170176
"Runware Watermark Advanced Feature": RunwareWatermarkAdvancedFeature,
171177
"Runware Regional Prompting Advanced Feature": RunwareRegionalPromptingAdvancedFeature,
@@ -254,6 +260,8 @@
254260
"Runware Image Inference Settings Moodboards": RunwareImageInferenceSettingsMoodboards,
255261
"Runware Image Inference Settings Structured Prompt": RunwareImageInferenceSettingsStructuredPrompt,
256262
"Runware Image Inference Settings Prompt Enhance": RunwareImageInferenceSettingsPromptEnhance,
263+
"Runware Image Inference Settings Scoring Rubric": RunwareImageInferenceSettingsScoringRubric,
264+
"Runware Image Inference Settings Scoring Rubric Combine": RunwareImageInferenceSettingsScoringRubricCombine,
257265
"Runware Video Advanced Feature Inputs": videoAdvancedFeatureInputs,
258266
"Runware Wan Animate Advanced Feature Settings": RunwareWanAnimateAdvancedFeatureSettings,
259267
"Runware Save Image": RunwareSaveImage,

clientlibs/main.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { app } from "../../scripts/app.js";
22
import { api } from "../../scripts/api.js";
3-
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, imageInferenceSettingsStructuredPromptToggleHandler, imageInferenceSettingsPromptEnhanceToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceReferenceVoiceToggleHandler, audioInferenceSpeechVoicesToggleHandler, videoInputsFrameToggleHandler, referenceVideosToggleHandler } from "./utils.js";
3+
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, imageInferenceSettingsStructuredPromptToggleHandler, imageInferenceSettingsPromptEnhanceToggleHandler, imageInferenceSettingsScoringRubricToggleHandler, audioInputToggleHandler, speechInputToggleHandler, briaProviderMaskToggleHandler, wanAnimateAdvancedFeatureSettingsToggleHandler, videoAdvancedFeatureInputsToggleHandler, audioInferenceInputsToggleHandler, audioInferenceReferenceVoiceToggleHandler, audioInferenceSpeechVoicesToggleHandler, videoInputsFrameToggleHandler, referenceVideosToggleHandler } from "./utils.js";
44
import { RUNWARE_NODE_TYPES, RUNWARE_NODE_PROPS, SEARCH_TERMS } from "./types.js";
55

66
const nodeInitList = [];
@@ -157,6 +157,8 @@ app.registerExtension({
157157
imageInferenceSettingsStructuredPromptToggleHandler(node);
158158
} else if(nodeClass === RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSPROMPTENHANCE) {
159159
imageInferenceSettingsPromptEnhanceToggleHandler(node);
160+
} else if(nodeClass === RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSSCORINGRUBRIC) {
161+
imageInferenceSettingsScoringRubricToggleHandler(node);
160162
} else if(nodeClass === RUNWARE_NODE_TYPES.AUDIOINPUT) {
161163
audioInputToggleHandler(node);
162164
} else if(nodeClass === RUNWARE_NODE_TYPES.SPEECHINPUT) {

clientlibs/types.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ const RUNWARE_NODE_TYPES = {
7676
VAE: "Runware VAE Search",
7777
REFERENCEIMAGES: "Runware Reference Images",
7878
IMAGEINFERENCEINPUTS: "Runware Image Inference Inputs",
79+
IMAGEINFERENCEINPUTSFONTS: "Runware Image Inference Inputs Fonts",
7980
IMAGEINFERENCEADVANCEDFEATURES: "Runware Image Advanced Feature Input",
8081
VIDEOINFERENCE: "Runware Video Inference",
8182
VIDEOMODELSEARCH: "Runware Video Model Search",
@@ -161,6 +162,8 @@ const RUNWARE_NODE_TYPES = {
161162
IMAGEINFERENCESETTINGSMOODBOARDS: "Runware Image Inference Settings Moodboards",
162163
IMAGEINFERENCESETTINGSSTRUCTUREDPROMPT: "Runware Image Inference Settings Structured Prompt",
163164
IMAGEINFERENCESETTINGSPROMPTENHANCE: "Runware Image Inference Settings Prompt Enhance",
165+
IMAGEINFERENCESETTINGSSCORINGRUBRIC: "Runware Image Inference Settings Scoring Rubric",
166+
IMAGEINFERENCESETTINGSSCORINGRUBRICCOMBINE: "Runware Image Inference Settings Scoring Rubric Combine",
164167
VIDEOADVANCEDFEATUREINPUTS: "Runware Video Advanced Feature Inputs",
165168
WANANIMATEADVANCEDFEATURESETTINGS: "Runware Wan Animate Advanced Feature Settings",
166169
SAVEIMAGE: "Runware Save Image",
@@ -370,6 +373,10 @@ const RUNWARE_NODE_PROPS = {
370373
bgColor: DEFAULT_BGCOLOR,
371374
colorModeOnly: true,
372375
},
376+
[RUNWARE_NODE_TYPES.IMAGEINFERENCEINPUTSFONTS]: {
377+
bgColor: DEFAULT_BGCOLOR,
378+
colorModeOnly: true,
379+
},
373380
[RUNWARE_NODE_TYPES.IMAGEINFERENCEADVANCEDFEATURES]: {
374381
bgColor: DEFAULT_BGCOLOR,
375382
colorModeOnly: true,
@@ -642,6 +649,14 @@ const RUNWARE_NODE_PROPS = {
642649
bgColor: DEFAULT_BGCOLOR,
643650
colorModeOnly: true,
644651
},
652+
[RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSSCORINGRUBRIC]: {
653+
bgColor: DEFAULT_BGCOLOR,
654+
colorModeOnly: true,
655+
},
656+
[RUNWARE_NODE_TYPES.IMAGEINFERENCESETTINGSSCORINGRUBRICCOMBINE]: {
657+
bgColor: DEFAULT_BGCOLOR,
658+
colorModeOnly: true,
659+
},
645660
[RUNWARE_NODE_TYPES.VIDEOADVANCEDFEATUREINPUTS]: {
646661
bgColor: DEFAULT_BGCOLOR,
647662
colorModeOnly: true,

clientlibs/utils.js

Lines changed: 90 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2135,12 +2135,9 @@ function sourcefulProviderSettingsToggleHandler(sourcefulNode) {
21352135
}
21362136

21372137
function sourcefulProviderSettingsFontsToggleHandler(fontsNode) {
2138-
const useFont1Widget = fontsNode.widgets.find(w => w.name === "useFont1");
2139-
const fontUrl1Widget = fontsNode.widgets.find(w => w.name === "fontUrl1");
2140-
const text1Widget = fontsNode.widgets.find(w => w.name === "text1");
2141-
const useFont2Widget = fontsNode.widgets.find(w => w.name === "useFont2");
2142-
const fontUrl2Widget = fontsNode.widgets.find(w => w.name === "fontUrl2");
2143-
const text2Widget = fontsNode.widgets.find(w => w.name === "text2");
2138+
if (!fontsNode?.widgets) return;
2139+
if (fontsNode._sourcefulProviderSettingsFontsToggleHandlerRegistered) return;
2140+
fontsNode._sourcefulProviderSettingsFontsToggleHandlerRegistered = true;
21442141

21452142
function toggleFontGroup(useWidget, fontUrlWidget, textWidget, fontParamName, textParamName) {
21462143
if (!useWidget || !fontUrlWidget || !textWidget) return;
@@ -2180,11 +2177,13 @@ function sourcefulProviderSettingsFontsToggleHandler(fontsNode) {
21802177
setTimeout(toggleEnabled, 100);
21812178
}
21822179

2183-
if (useFont1Widget && fontUrl1Widget && text1Widget) {
2184-
toggleFontGroup(useFont1Widget, fontUrl1Widget, text1Widget, "fontUrl1", "text1");
2185-
}
2186-
if (useFont2Widget && fontUrl2Widget && text2Widget) {
2187-
toggleFontGroup(useFont2Widget, fontUrl2Widget, text2Widget, "fontUrl2", "text2");
2180+
for (let i = 1; i <= 2; i++) {
2181+
const useFontWidget = fontsNode.widgets.find(w => w && w.name === `useFont${i}`);
2182+
const fontUrlWidget = fontsNode.widgets.find(w => w && w.name === `fontUrl${i}`);
2183+
const textWidget = fontsNode.widgets.find(w => w && w.name === `text${i}`);
2184+
if (useFontWidget && fontUrlWidget && textWidget) {
2185+
toggleFontGroup(useFontWidget, fontUrlWidget, textWidget, `fontUrl${i}`, `text${i}`);
2186+
}
21882187
}
21892188
}
21902189

@@ -5260,6 +5259,7 @@ export {
52605259
imageInferenceSettingsMoodboardsToggleHandler,
52615260
imageInferenceSettingsStructuredPromptToggleHandler,
52625261
imageInferenceSettingsPromptEnhanceToggleHandler,
5262+
imageInferenceSettingsScoringRubricToggleHandler,
52635263
audioInputToggleHandler,
52645264
speechInputToggleHandler,
52655265
briaProviderMaskToggleHandler,
@@ -5380,6 +5380,14 @@ function settingsToggleHandler(settingsNode) {
53805380
const dilatePixelsWidget = settingsNode.widgets.find(w => w.name === "dilatePixels");
53815381
const useCreativityWidget = settingsNode.widgets.find(w => w.name === "useCreativity");
53825382
const creativityWidget = settingsNode.widgets.find(w => w.name === "creativity");
5383+
const useBackgroundModeWidget = settingsNode.widgets.find(w => w.name === "useBackgroundMode");
5384+
const backgroundModeWidget = settingsNode.widgets.find(w => w.name === "backgroundMode");
5385+
const useBackgroundColorWidget = settingsNode.widgets.find(w => w.name === "useBackgroundColor");
5386+
const backgroundColorWidget = settingsNode.widgets.find(w => w.name === "backgroundColor");
5387+
const useEnhancePromptWidget = settingsNode.widgets.find(w => w.name === "useEnhancePrompt");
5388+
const enhancePromptWidget = settingsNode.widgets.find(w => w.name === "enhancePrompt");
5389+
const useScoringPromptWidget = settingsNode.widgets.find(w => w.name === "useScoringPrompt");
5390+
const scoringPromptWidget = settingsNode.widgets.find(w => w.name === "scoringPrompt");
53835391

53845392
// Helper function to toggle widget enabled state
53855393
function toggleWidgetState(useWidget, paramWidget, paramName) {
@@ -5481,6 +5489,18 @@ function settingsToggleHandler(settingsNode) {
54815489
if (useCreativityWidget && creativityWidget) {
54825490
toggleWidgetState(useCreativityWidget, creativityWidget, "creativity");
54835491
}
5492+
if (useBackgroundModeWidget && backgroundModeWidget) {
5493+
toggleWidgetState(useBackgroundModeWidget, backgroundModeWidget, "backgroundMode");
5494+
}
5495+
if (useBackgroundColorWidget && backgroundColorWidget) {
5496+
toggleWidgetState(useBackgroundColorWidget, backgroundColorWidget, "backgroundColor");
5497+
}
5498+
if (useEnhancePromptWidget && enhancePromptWidget) {
5499+
toggleWidgetState(useEnhancePromptWidget, enhancePromptWidget, "enhancePrompt");
5500+
}
5501+
if (useScoringPromptWidget && scoringPromptWidget) {
5502+
toggleWidgetState(useScoringPromptWidget, scoringPromptWidget, "scoringPrompt");
5503+
}
54845504
}
54855505

54865506
function outpaintSettingsToggleHandler(settingsNode) {
@@ -5705,6 +5725,65 @@ function imageInferenceSettingsMoodboardsToggleHandler(moodboardsNode) {
57055725
setTimeout(toggleStrengthState, 100);
57065726
}
57075727

5728+
function imageInferenceSettingsScoringRubricToggleHandler(rubricNode) {
5729+
if (!rubricNode?.widgets) return;
5730+
if (rubricNode._imageInferenceSettingsScoringRubricToggleHandlerRegistered) return;
5731+
rubricNode._imageInferenceSettingsScoringRubricToggleHandlerRegistered = true;
5732+
5733+
function toggleWidgetState(useWidget, paramWidgets, paramNames) {
5734+
if (!useWidget) return;
5735+
const widgets = Array.isArray(paramWidgets) ? paramWidgets : [paramWidgets];
5736+
const names = Array.isArray(paramNames) ? paramNames : [paramNames];
5737+
5738+
function toggleEnabled() {
5739+
const enabled = useWidget.value === true;
5740+
5741+
widgets.forEach((paramWidget, index) => {
5742+
if (!paramWidget) return;
5743+
toggleWidgetEnabled(paramWidget, enabled, rubricNode);
5744+
const paramName = names[index];
5745+
if (!paramWidget.inputEl && paramName) {
5746+
const nodeElement = rubricNode.htmlElements?.widgetsContainer || rubricNode.htmlElements;
5747+
if (nodeElement) {
5748+
const input = nodeElement.querySelector(
5749+
`input[name="${paramName}"], textarea[name="${paramName}"], select[name="${paramName}"]`
5750+
);
5751+
if (input) {
5752+
input.disabled = !enabled;
5753+
input.style.opacity = enabled ? "1" : "0.5";
5754+
input.style.pointerEvents = enabled ? "auto" : "none";
5755+
}
5756+
}
5757+
}
5758+
});
5759+
5760+
rubricNode.setDirtyCanvas(true);
5761+
}
5762+
5763+
appendWidgetCB(useWidget, () => setTimeout(toggleEnabled, 50));
5764+
setTimeout(toggleEnabled, 100);
5765+
}
5766+
5767+
const usePassingScoreWidget = rubricNode.widgets.find((w) => w && w.name === "usePassingScore");
5768+
const passingScoreWidget = rubricNode.widgets.find((w) => w && w.name === "passingScore");
5769+
if (usePassingScoreWidget && passingScoreWidget) {
5770+
toggleWidgetState(usePassingScoreWidget, passingScoreWidget, "passingScore");
5771+
}
5772+
5773+
for (let i = 1; i <= 5; i++) {
5774+
const useScoreGuidanceWidget = rubricNode.widgets.find((w) => w && w.name === `useScoreGuidance${i}`);
5775+
const scoreWidget = rubricNode.widgets.find((w) => w && w.name === `score${i}`);
5776+
const guidanceDescriptionWidget = rubricNode.widgets.find((w) => w && w.name === `guidanceDescription${i}`);
5777+
if (useScoreGuidanceWidget && (scoreWidget || guidanceDescriptionWidget)) {
5778+
toggleWidgetState(
5779+
useScoreGuidanceWidget,
5780+
[scoreWidget, guidanceDescriptionWidget].filter(Boolean),
5781+
[`score${i}`, `guidanceDescription${i}`]
5782+
);
5783+
}
5784+
}
5785+
}
5786+
57085787
function imageInferenceSettingsStructuredPromptToggleHandler(node) {
57095788
if (!node?.widgets) return;
57105789

modules/imageInference.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ def INPUT_TYPES(cls):
204204
"tooltip": "Connect Runware Safety Inputs node to configure safety and content moderation settings.",
205205
}),
206206
"settings": ("RUNWARESETTINGS", {
207-
"tooltip": "Connect Runware Image Inference Settings for temperature, systemPrompt, topP, layers, quality, background, style, search, promptExtend, editRegions (JSON), thinking, thinkingLevel (high/medium/low), sequential, colorPalette (via Color Palette node), etc.",
207+
"tooltip": "Connect Runware Image Inference Settings for temperature, systemPrompt, topP, layers, quality, backgroundMode, backgroundColor, enhancePrompt, scoringPrompt, background, style, search, promptExtend, editRegions (JSON), thinking, thinkingLevel (low/medium/high/xhigh), sequential, colorPalette (via Color Palette node), etc.",
208208
}),
209209
"ultralytics": ("RUNWAREULTRALYTICSINPUTS", {
210210
"tooltip": "Connect Runware Image Inference Ultralytics node to configure Ultralytics parameters (maskBlur, maskPadding, confidence, prompts, steps, CFGScale, strength).",

0 commit comments

Comments
 (0)