Let Image v2 pick a LoRA or LoRA chain.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -8,8 +8,8 @@ import kreaComposeTemplate from '../assets/krea_v2_compose.json'
|
||||
import kreaRefineTemplate from '../assets/krea_v2_refine.json'
|
||||
import { IMAGE_SCALE_TO_TOTAL_PIXELS } from '~/server/utils/comfy'
|
||||
import { imageComfyFetch } from '~/server/utils/imageComfy'
|
||||
import { cachedComfyLoraNames } from '~/server/utils/loras'
|
||||
import { resolveComfyLoraName, loraIdentityKey } from '~/utils/loras'
|
||||
import { applyImageV2UserLoras, cachedComfyLoraNames } from '~/server/utils/loras'
|
||||
import { resolveComfyLoraName, loraIdentityKey, type LoraStackItem } from '~/utils/loras'
|
||||
import { clampImageCfg, clampImageScaleMegapixels, clampImageSteps } from '~/utils/generationPresets'
|
||||
import { isXaigenStudio } from '~/utils/videoModels'
|
||||
import {
|
||||
@@ -97,6 +97,7 @@ export interface ImageV2BuildParams {
|
||||
kreaClipName?: string
|
||||
kreaVaeName?: string
|
||||
kreaConceptLora?: string
|
||||
loraStack?: LoraStackItem[]
|
||||
}
|
||||
|
||||
function setInput(graph: WorkflowGraph, id: string, key: string, value: unknown) {
|
||||
@@ -462,6 +463,7 @@ function buildKreaItiWorkflow(params: ImageV2BuildParams) {
|
||||
setInput(graph, SAVE, 'filename_prefix', params.filenamePrefix || `aigen-v2-krea-${params.mode}`)
|
||||
patchScaleMegapixels(graph, params.megapixels ?? 1)
|
||||
const concept = applyKreaConceptIfNeeded(graph, params)
|
||||
const userLoras = applyImageV2UserLoras(graph, params.loraStack, 'krea')
|
||||
|
||||
assertImageV2Graph(graph, params.mode, compose ? params.imageBName : undefined, 'krea')
|
||||
const loaders = loadImageNames(graph)
|
||||
@@ -475,7 +477,10 @@ function buildKreaItiWorkflow(params: ImageV2BuildParams) {
|
||||
mask: refine ? { id: LOAD_MASK, file: graph[LOAD_MASK]?.inputs.image } : undefined,
|
||||
strength: denoise,
|
||||
loadImage: Object.fromEntries(loaders.map(item => [item.id, { title: item.title, file: item.image }])),
|
||||
loras: concept.name ? { concept: { name: concept.name, model: concept.snofsModel, clip: concept.snofsClip } } : { loaded: false },
|
||||
loras: {
|
||||
concept: concept.name ? { name: concept.name, model: concept.snofsModel, clip: concept.snofsClip } : { loaded: false },
|
||||
user: userLoras
|
||||
},
|
||||
steps,
|
||||
cfg,
|
||||
seed: params.seed,
|
||||
@@ -509,6 +514,7 @@ function buildKreaGenerateWorkflow(params: ImageV2BuildParams) {
|
||||
setInput(graph, '15', 'scheduler', 'simple')
|
||||
setInput(graph, SAVE, 'filename_prefix', params.filenamePrefix || 'aigen-v2-krea')
|
||||
const concept = applyKreaConceptIfNeeded(graph, params)
|
||||
const userLoras = applyImageV2UserLoras(graph, params.loraStack, 'krea')
|
||||
|
||||
assertImageV2Graph(graph, 'generate', undefined, 'krea')
|
||||
const loaders = loadImageNames(graph)
|
||||
@@ -527,7 +533,8 @@ function buildKreaGenerateWorkflow(params: ImageV2BuildParams) {
|
||||
loras: {
|
||||
concept: concept.name
|
||||
? { name: concept.name, model: concept.snofsModel, clip: concept.snofsClip }
|
||||
: { loaded: false, model: 0, clip: 0 }
|
||||
: { loaded: false, model: 0, clip: 0 },
|
||||
user: userLoras
|
||||
},
|
||||
steps,
|
||||
cfg,
|
||||
@@ -604,6 +611,7 @@ export function buildImageV2Workflow(params: ImageV2BuildParams) {
|
||||
setInput(graph, CONSISTENCY, 'strength_model', consistencyModel)
|
||||
setInput(graph, CONSISTENCY, 'strength_clip', consistencyClip)
|
||||
}
|
||||
const userLoras = applyImageV2UserLoras(graph, params.loraStack, 'flux')
|
||||
|
||||
assertImageV2Graph(graph, params.mode, generate || refine ? undefined : params.imageBName, engine)
|
||||
|
||||
@@ -624,7 +632,8 @@ export function buildImageV2Workflow(params: ImageV2BuildParams) {
|
||||
snofs: { name: graph[SNOFS]?.inputs.lora_name, model: snofsModel, clip: snofsClip },
|
||||
consistency: graph[CONSISTENCY]
|
||||
? { name: graph[CONSISTENCY]?.inputs.lora_name, model: consistencyModel, clip: consistencyClip }
|
||||
: { loaded: false, model: 0, clip: 0 }
|
||||
: { loaded: false, model: 0, clip: 0 },
|
||||
user: userLoras
|
||||
},
|
||||
steps,
|
||||
cfg,
|
||||
@@ -648,6 +657,10 @@ export const IMAGE_V2_NODE_LABELS: Record<string, string> = {
|
||||
'6': 'Loading VAE',
|
||||
'7': 'Applying Concept LoRA',
|
||||
'8': 'Applying Consistency',
|
||||
'user:lora:0': 'Applying LoRA',
|
||||
'user:lora:1': 'Applying LoRA',
|
||||
'user:lora:2': 'Applying LoRA',
|
||||
'user:lora:3': 'Applying LoRA',
|
||||
'9': 'Encoding prompt',
|
||||
'11': 'Encoding image A',
|
||||
'24': 'Encoding image B',
|
||||
|
||||
Reference in New Issue
Block a user