97 lines
2.9 KiB
JavaScript
97 lines
2.9 KiB
JavaScript
import { loraManagerAdapter } from './lora_manager.js';
|
|
import { rgthreePowerLoraLoaderAdapter } from './rgthree_power_lora_loader.js';
|
|
|
|
export const CUSTOM_NODE_MODEL_ADAPTERS = Object.freeze([
|
|
loraManagerAdapter,
|
|
rgthreePowerLoraLoaderAdapter,
|
|
]);
|
|
|
|
function getNodeTypeCandidates(node) {
|
|
return [
|
|
node?.comfyClass,
|
|
node?.type,
|
|
node?.constructor?.comfyClass,
|
|
node?.constructor?.ComfyClass,
|
|
].filter(Boolean);
|
|
}
|
|
|
|
function normalizeModelEntry(entry) {
|
|
if (!entry || typeof entry !== 'object') return null;
|
|
const identity = String(entry.identity || '').trim();
|
|
if (!identity) return null;
|
|
const hasStrength = (
|
|
entry.strength !== null
|
|
&& entry.strength !== undefined
|
|
&& entry.strength !== ''
|
|
);
|
|
const numericStrength = hasStrength ? Number(entry.strength) : Number.NaN;
|
|
return {
|
|
identity,
|
|
active: entry.active !== false,
|
|
strength: Number.isFinite(numericStrength) ? numericStrength : null,
|
|
};
|
|
}
|
|
|
|
export function getCustomNodeModelAdapter(node) {
|
|
const nodeTypes = getNodeTypeCandidates(node);
|
|
return CUSTOM_NODE_MODEL_ADAPTERS.find(
|
|
adapter => adapter.nodeTypes.some(nodeType => nodeTypes.includes(nodeType))
|
|
) || null;
|
|
}
|
|
|
|
export function getCustomNodeModelCategory(nodeType = '') {
|
|
const normalizedNodeType = String(nodeType || '').trim();
|
|
const adapter = CUSTOM_NODE_MODEL_ADAPTERS.find(
|
|
candidate => candidate.nodeTypes.includes(normalizedNodeType)
|
|
);
|
|
return adapter?.category || '';
|
|
}
|
|
|
|
export function getCustomNodeOriginalIdentity(model = {}) {
|
|
return (
|
|
model.custom_node_original_identity
|
|
|| model.original_lora_name
|
|
|| ''
|
|
);
|
|
}
|
|
|
|
export function getCustomNodeModelEntries(node) {
|
|
const adapter = getCustomNodeModelAdapter(node);
|
|
if (!adapter) return [];
|
|
return (adapter.getModelEntries(node) || [])
|
|
.map(normalizeModelEntry)
|
|
.filter(Boolean);
|
|
}
|
|
|
|
export function isCustomNodeModelWidget(node, widgetName = '') {
|
|
return Boolean(
|
|
getCustomNodeModelAdapter(node)?.isModelWidget?.(widgetName)
|
|
);
|
|
}
|
|
|
|
export function getCustomNodeModelListSignature(node) {
|
|
const entries = getCustomNodeModelEntries(node)
|
|
.map(entry => ({
|
|
identity: entry.identity,
|
|
active: entry.active,
|
|
}))
|
|
.sort((left, right) => (
|
|
left.identity.localeCompare(right.identity)
|
|
|| Number(left.active) - Number(right.active)
|
|
));
|
|
return JSON.stringify(entries);
|
|
}
|
|
|
|
export function getCustomNodeModelStrengthSignature(node) {
|
|
const entries = getCustomNodeModelEntries(node)
|
|
.map(entry => ({
|
|
identity: entry.identity,
|
|
strength: entry.strength,
|
|
}))
|
|
.sort((left, right) => (
|
|
left.identity.localeCompare(right.identity)
|
|
|| (left.strength ?? 0) - (right.strength ?? 0)
|
|
));
|
|
return JSON.stringify(entries);
|
|
}
|