Files
1hew-ComfyUI-1hewNodes/web/js/core/format_step.js
T

60 lines
1.9 KiB
JavaScript

export const VIDEO_FORMATS = {
"4n+1": { frames: [4, 1] },
"n": { frames: [1, 0] },
"2n+1": { frames: [2, 1] },
"6n+1": { frames: [6, 1] },
"8n+1": { frames: [8, 1] },
};
export function resolveComboValue(widget, rawValue) {
if (rawValue === null || rawValue === undefined) {
return "";
}
if (typeof rawValue === "number") {
const values = widget?.options?.values;
const candidate = values?.[rawValue];
return candidate !== undefined && candidate !== null
? String(candidate).trim()
: String(rawValue).trim();
}
if (typeof rawValue === "string") {
const trimmed = rawValue.trim();
const asNumber = Number(trimmed);
if (
Number.isInteger(asNumber) &&
String(asNumber) === trimmed &&
widget?.options?.values?.[asNumber] !== undefined
) {
return String(widget.options.values[asNumber]).trim();
}
return trimmed;
}
return String(rawValue).trim();
}
export function resolveFormatConfig(formatName) {
const normalized = String(formatName ?? "").trim();
const direct = VIDEO_FORMATS[normalized];
if (direct?.frames?.length >= 2) {
return { step: direct.frames[0], mod: direct.frames[1] };
}
const lower = normalized.toLowerCase();
const lowerDirect = VIDEO_FORMATS[lower];
if (lowerDirect?.frames?.length >= 2) {
return { step: lowerDirect.frames[0], mod: lowerDirect.frames[1] };
}
if (lower === "" || lower === "n" || lower === "default") {
return { step: 1, mod: 0 };
}
const match = lower.match(/^(\d+)\s*n\s*\+\s*(\d+)$/);
if (match) {
return { step: Number(match[1]), mod: Number(match[2]) };
}
const nMatch = lower.match(/^(\d+)\s*n$/);
if (nMatch) {
return { step: Number(nMatch[1]), mod: 0 };
}
return null;
}