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:
@@ -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
|
||||
|
||||
@@ -584,7 +584,7 @@ export const IMAGE_V2_NODE_LABELS: Record<string, string> = {
|
||||
'4': 'Loading diffusion model',
|
||||
'5': 'Loading CLIP',
|
||||
'6': 'Loading VAE',
|
||||
'7': 'Applying Concept LoRA',
|
||||
'7': 'Applying SNOFS',
|
||||
'8': 'Applying Consistency',
|
||||
'70': 'Applying LoRA',
|
||||
'71': 'Applying LoRA',
|
||||
|
||||
@@ -7,6 +7,7 @@ import { fetchLiveQueue } from '~/server/utils/comfy'
|
||||
import { isLtxWorkflow, isTextToVideo, isXaigenStudio, LTX_DISABLED_MESSAGE, ltxWorkflowEnabled, parseVideoWorkflow, type VideoWorkflowId } from '~/utils/videoModels'
|
||||
import { persistLoraFields } from '~/server/utils/loras'
|
||||
import { resolveLoraStack } from '~/utils/loras'
|
||||
import { imageV2StackSpecials } from '~/utils/imageV2'
|
||||
import { allowIdentityRefs, type PermanenceRef } from '~/utils/globalLocks'
|
||||
|
||||
export type StudioJobStatus = 'waiting' | 'running' | 'held' | 'complete' | 'error' | 'cancelled'
|
||||
@@ -837,9 +838,11 @@ async function startStudioEditJob(item: StudioJob) {
|
||||
}
|
||||
})
|
||||
await markStudioLive(item.ownerKey, item.id, live.id)
|
||||
const v2Engine = payload.engine === 'krea' ? 'krea' : 'flux'
|
||||
const v2Specials = imageV2StackSpecials(payload.loraStack, v2Engine)
|
||||
void runEditV2(live, {
|
||||
mode,
|
||||
engine: payload.engine === 'krea' ? 'krea' : 'flux',
|
||||
engine: v2Engine,
|
||||
task: payload.v2Task || 'scene',
|
||||
image: mode === 'generate' ? null : image,
|
||||
reference: mode === 'refine' || mode === 'generate' ? null : reference,
|
||||
@@ -851,10 +854,10 @@ async function startStudioEditJob(item: StudioJob) {
|
||||
steps: payload.steps,
|
||||
seed: live.library?.seed || payload.seed,
|
||||
cfg: payload.cfg,
|
||||
snofsModel: payload.snofsModel ?? 0,
|
||||
snofsClip: payload.snofsClip ?? 0,
|
||||
consistencyModel: payload.consistencyModel ?? (mode === 'generate' || payload.engine === 'krea' ? 0 : 0.7),
|
||||
consistencyClip: payload.consistencyClip ?? (mode === 'generate' || payload.engine === 'krea' ? 0 : 0.7),
|
||||
snofsModel: v2Specials.snofs?.strengthModel ?? payload.snofsModel ?? 0,
|
||||
snofsClip: v2Specials.snofs?.strengthClip ?? payload.snofsClip ?? 0,
|
||||
consistencyModel: v2Specials.consistency?.strengthModel ?? payload.consistencyModel ?? (mode === 'generate' || payload.engine === 'krea' ? 0 : 0.7),
|
||||
consistencyClip: v2Specials.consistency?.strengthClip ?? payload.consistencyClip ?? (mode === 'generate' || payload.engine === 'krea' ? 0 : 0.7),
|
||||
megapixels: payload.scaleToTotalPixels === false ? 0 : (payload.scaleMegapixels ?? 1),
|
||||
strength: payload.refineStrength,
|
||||
aspect: payload.aspect || 'auto',
|
||||
|
||||
Reference in New Issue
Block a user