Apply and print SNOFS from the LoRA dials, not a leftover Concept LoRA row.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Towsty
2026-09-02 21:33:30 -05:00
co-authored by Cursor
parent ca2380f4ae
commit 9fd96cb990
6 changed files with 94 additions and 28 deletions
+34 -11
View File
@@ -9,7 +9,15 @@ import { emitChainJob } from '~/server/utils/watch'
import { saveStill, stillChainName } from '~/server/utils/library'
import { comfyJobPrefix } from '~/utils/outputNames'
import { joinPromptParts } from '~/utils/promptParts'
import { parseImageV2Engine, type ImageV2Engine, type ImageV2Mode, type ImageV2Task } from '~/utils/imageV2'
import { isXaigenStudio } from '~/utils/videoModels'
import {
imageV2StackSpecials,
mergeLegacyImageV2Loras,
parseImageV2Engine,
type ImageV2Engine,
type ImageV2Mode,
type ImageV2Task
} from '~/utils/imageV2'
import type { EditImageFile } from '~/server/utils/imageChain'
export type EditV2RunParams = {
@@ -96,6 +104,21 @@ export async function runEditV2(job: Job, params: EditV2RunParams) {
await ensureComfyLoraNames('image')
if (!generate && params.megapixels > 0) await assertImageScaleToTotalPixelsNode()
const krea = engine === 'krea' ? await resolveKreaGenerateAssets() : null
const appliedStack = mergeLegacyImageV2Loras(params.loraStack?.length ? params.loraStack : library.loraStack, {
engine,
mode: params.mode,
xaigen: isXaigenStudio(),
snofsModel: params.snofsModel,
snofsClip: params.snofsClip,
consistencyModel: params.consistencyModel,
consistencyClip: params.consistencyClip,
kreaConcept: krea?.conceptLora
})
const appliedSpecials = imageV2StackSpecials(appliedStack, engine)
const snofsModel = appliedSpecials.snofs?.strengthModel ?? params.snofsModel
const snofsClip = appliedSpecials.snofs?.strengthClip ?? params.snofsClip
const consistencyModel = appliedSpecials.consistency?.strengthModel ?? params.consistencyModel
const consistencyClip = appliedSpecials.consistency?.strengthClip ?? params.consistencyClip
if (!generate && params.mode === 'compose' && params.reference) {
uploadedRef = await uploadImage({
@@ -201,10 +224,10 @@ export async function runEditV2(job: Job, params: EditV2RunParams) {
imageBName: uploadedRef?.name,
maskName: uploadedMask?.name,
strength: params.strength,
snofsModel: params.snofsModel,
snofsClip: params.snofsClip,
consistencyModel: params.consistencyModel,
consistencyClip: params.consistencyClip,
snofsModel,
snofsClip,
consistencyModel,
consistencyClip,
steps: params.steps,
cfg: params.cfg,
seed,
@@ -218,7 +241,7 @@ export async function runEditV2(job: Job, params: EditV2RunParams) {
kreaClipName: krea?.clip,
kreaVaeName: krea?.vae,
kreaConceptLora: krea?.conceptLora,
loraStack: params.loraStack?.length ? params.loraStack : (library.loraStack || undefined)
loraStack: appliedStack
})
const queued = await queuePrompt(built.graph, job.clientId)
job.promptId = queued.prompt_id
@@ -277,10 +300,10 @@ export async function runEditV2(job: Job, params: EditV2RunParams) {
engine,
task: params.task,
negative: params.negative,
snofsModel: params.snofsModel,
snofsClip: params.snofsClip,
consistencyModel: params.consistencyModel,
consistencyClip: params.consistencyClip,
snofsModel,
snofsClip,
consistencyModel,
consistencyClip,
steps: params.steps,
cfg: params.cfg,
megapixels: params.mode === 'generate' || !(params.megapixels > 0) ? undefined : params.megapixels,
@@ -293,7 +316,7 @@ export async function runEditV2(job: Job, params: EditV2RunParams) {
seed,
sourceStillId: params.sourceStillId || library.stillId,
referenceStillId: params.referenceStillId,
...persistLoraFields(params.loraStack)
...persistLoraFields(appliedStack)
}
})
job.stillId = still?.id