Move Concept and Consistency into the Image v2 LoRA chain.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -36,6 +36,7 @@ import {
|
||||
clampImageV2Strength,
|
||||
composeImageV2Prompt,
|
||||
imageV2WorkflowFile,
|
||||
mergeLegacyImageV2Loras,
|
||||
parseImageV2Engine,
|
||||
type ImageV2Engine,
|
||||
type ImageV2Mode,
|
||||
@@ -401,7 +402,18 @@ function applyKreaConceptLora(graph: WorkflowGraph, loraName: string, model: num
|
||||
}
|
||||
|
||||
function applyKreaConceptIfNeeded(graph: WorkflowGraph, params: ImageV2BuildParams) {
|
||||
const merged = mergeLegacyImageV2Loras(params.loraStack, {
|
||||
engine: 'krea',
|
||||
mode: params.mode,
|
||||
xaigen: isXaigenStudio(),
|
||||
snofsModel: params.snofsModel,
|
||||
snofsClip: params.snofsClip,
|
||||
kreaConcept: params.kreaConceptLora
|
||||
})
|
||||
const conceptName = isXaigenStudio() ? String(params.kreaConceptLora || '').trim() : ''
|
||||
if (conceptName && merged.some(item => loraIdentityKey(item.name) === loraIdentityKey(conceptName))) {
|
||||
return { snofsModel: 0, snofsClip: 0 }
|
||||
}
|
||||
const snofsModel = conceptName ? clampImageV2Strength(params.snofsModel, 0) : 0
|
||||
const snofsClip = conceptName ? clampImageV2Strength(params.snofsClip, 0) : 0
|
||||
if (!conceptName || (snofsModel <= 0 && snofsClip <= 0)) return { snofsModel: 0, snofsClip: 0 }
|
||||
@@ -413,6 +425,19 @@ function applyKreaConceptIfNeeded(graph: WorkflowGraph, params: ImageV2BuildPara
|
||||
return { snofsModel, snofsClip, name: resolved }
|
||||
}
|
||||
|
||||
function imageV2UserStack(params: ImageV2BuildParams, engine: ImageV2Engine) {
|
||||
return mergeLegacyImageV2Loras(params.loraStack, {
|
||||
engine,
|
||||
mode: params.mode,
|
||||
xaigen: isXaigenStudio(),
|
||||
snofsModel: params.snofsModel,
|
||||
snofsClip: params.snofsClip,
|
||||
consistencyModel: params.consistencyModel,
|
||||
consistencyClip: params.consistencyClip,
|
||||
kreaConcept: params.kreaConceptLora
|
||||
})
|
||||
}
|
||||
|
||||
function requireKreaModels(params: ImageV2BuildParams) {
|
||||
if (!params.kreaUnetName || !params.kreaClipName || !params.kreaVaeName) {
|
||||
throw createError({
|
||||
@@ -463,7 +488,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')
|
||||
const userLoras = applyImageV2UserLoras(graph, imageV2UserStack(params, 'krea'), 'krea')
|
||||
|
||||
assertImageV2Graph(graph, params.mode, compose ? params.imageBName : undefined, 'krea')
|
||||
const loaders = loadImageNames(graph)
|
||||
@@ -514,7 +539,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')
|
||||
const userLoras = applyImageV2UserLoras(graph, imageV2UserStack(params, 'krea'), 'krea')
|
||||
|
||||
assertImageV2Graph(graph, 'generate', undefined, 'krea')
|
||||
const loaders = loadImageNames(graph)
|
||||
@@ -596,22 +621,9 @@ export function buildImageV2Workflow(params: ImageV2BuildParams) {
|
||||
setInput(graph, SAVE, 'filename_prefix', params.filenamePrefix || (generate ? 'aigen-v2-generate' : 'aigen-v2'))
|
||||
if (!generate) patchScaleMegapixels(graph, params.megapixels ?? 1)
|
||||
|
||||
if (conceptAllowed) {
|
||||
setInput(graph, SNOFS, 'lora_name', resolveRequiredLora(IMAGE_V2_SNOFS_LORA, 'SNOFS'))
|
||||
setInput(graph, SNOFS, 'strength_model', snofsModel)
|
||||
setInput(graph, SNOFS, 'strength_clip', snofsClip)
|
||||
} else {
|
||||
bypassLoraToBaseLoaders(graph, SNOFS)
|
||||
}
|
||||
if (generate && consistencyModel <= 0 && consistencyClip <= 0) {
|
||||
if (graph[SNOFS]) bypassLoraNode(graph, CONSISTENCY, SNOFS, SNOFS)
|
||||
else bypassLoraToBaseLoaders(graph, CONSISTENCY)
|
||||
} else {
|
||||
setInput(graph, CONSISTENCY, 'lora_name', resolveRequiredLora(IMAGE_V2_CONSISTENCY_LORA, 'Consistency'))
|
||||
setInput(graph, CONSISTENCY, 'strength_model', consistencyModel)
|
||||
setInput(graph, CONSISTENCY, 'strength_clip', consistencyClip)
|
||||
}
|
||||
const userLoras = applyImageV2UserLoras(graph, params.loraStack, 'flux')
|
||||
if (graph[CONSISTENCY]) bypassLoraToBaseLoaders(graph, CONSISTENCY)
|
||||
if (graph[SNOFS]) bypassLoraToBaseLoaders(graph, SNOFS)
|
||||
const userLoras = applyImageV2UserLoras(graph, imageV2UserStack(params, 'flux'), 'flux')
|
||||
|
||||
assertImageV2Graph(graph, params.mode, generate || refine ? undefined : params.imageBName, engine)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user