Files
Azornes-Comfyui-Model-Resolver/web/resolver/search/base_model_alias_methods.js
T

103 lines
4.1 KiB
JavaScript

import { normalizeSearchToken } from '../utils/search_utils.js';
export const baseModelAliasMethods = {
getBaseModelAliases() {
const baseModelsList = this.baseModels?.base_models;
if (Array.isArray(baseModelsList) && baseModelsList.length > 0) {
return baseModelsList.map(m => ({ value: m.name, aliases: m.aliases || [] }));
}
// Fallback to hardcoded list
return [
{ value: 'Z-Image', aliases: ['zimage', 'z image', 'z-image', 'z_image', 'zImageTurbo', 'z image turbo'] },
{ value: 'Pony', aliases: ['pony', 'ponyxl', 'pony diffusion', 'pony realism'] },
{ value: 'Illustrious', aliases: ['illustrious', 'illustriousxl', 'illustrious xl'] },
{ value: 'SDXL 1.0', aliases: ['sdxl', 'sdxl10', 'sdxl 1.0', 'stable diffusion xl'] },
{ value: 'SD 1.5', aliases: ['sd15', 'sd 1.5', 'sd1.5', 'stable diffusion 1.5'] },
{ value: 'Flux.1 D', aliases: ['flux', 'flux1', 'flux.1', 'flux dev', 'flux.1 d', 'flux1d'] },
{ value: 'Flux.1 S', aliases: ['flux schnell', 'flux.1 s', 'flux1s'] },
{ value: 'Qwen Image', aliases: ['qwen image', 'qwenimage', 'qwen-image'] },
{ value: 'Hunyuan 1', aliases: ['hunyuan', 'hunyuan1'] },
{ value: 'WAN Video', aliases: ['wan', 'wan video', 'wanvideo'] },
{ value: 'NoobAI', aliases: ['noobai', 'noob ai'] },
{ value: 'HiDream', aliases: ['hidream', 'hi dream'] }
];
},
normalizeBaseModelToken(value = '') {
return normalizeSearchToken(value);
},
getBaseModelTokenVariants(value = '') {
const text = String(value || '').trim();
if (!text) return new Set();
const variants = [
text,
text.replace(/(\d+)(?:[\s._-]+0)+(?!\d)/g, '$1')
];
const normalized = this.normalizeBaseModelToken(text);
if (normalized.startsWith('flux1') && normalized.length > 'flux1'.length) {
variants.push(`flux${normalized.slice('flux1'.length)}`);
}
return new Set(
variants
.map(item => this.normalizeBaseModelToken(item))
.filter(Boolean)
);
},
resolveBaseModelAliasExact(value = '') {
const tokens = this.getBaseModelTokenVariants(value);
if (!tokens.size) return '';
for (const entry of this.getBaseModelAliases()) {
const aliases = [entry.value, ...(entry.aliases || [])];
if (aliases.some(alias => {
const aliasTokens = this.getBaseModelTokenVariants(alias);
return [...aliasTokens].some(aliasToken => tokens.has(aliasToken));
})) {
return entry.value;
}
}
return '';
},
resolveBaseModelAlias(value = '') {
const tokens = this.getBaseModelTokenVariants(value);
if (!tokens.size) return '';
const exact = this.resolveBaseModelAliasExact(value);
if (exact) return exact;
for (const entry of this.getBaseModelAliases()) {
const aliases = [entry.value, ...(entry.aliases || [])];
if (aliases.some(alias => {
const aliasTokens = this.getBaseModelTokenVariants(alias);
return [...aliasTokens].some(aliasToken => (
aliasToken && [...tokens].some(token => (
aliasToken.includes(token) || token.includes(aliasToken)
))
));
})) {
return entry.value;
}
}
return '';
},
resolveBaseModelAliasFromPath(path = '') {
const text = String(path || '').trim();
if (!text) return '';
const parts = text
.split(/[\\/]+/)
.map(part => part.trim())
.filter(Boolean);
const directoryParts = parts.filter(part => !this.hasModelExtension(part));
for (const part of directoryParts) {
const exact = this.resolveBaseModelAliasExact(part);
if (exact) return exact;
}
return '';
},
};