Join pre/prompt/post into the first MiniMax prompt, not only later shots.

The motion prompt field is what Comfy actually runs. Wrappers are now composed into that string on submit, and shot 1 falls back to it if the separate pre/post fields do not arrive.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Towsty
2026-09-03 07:24:00 -05:00
co-authored by Cursor
parent 1206afe8fd
commit ce85e7f513
8 changed files with 88 additions and 33 deletions
+10 -3
View File
@@ -8,7 +8,7 @@ import { imageDimensions } from '~/server/utils/resolution'
import { emitChainJob } from '~/server/utils/watch'
import { saveStill, stillChainName } from '~/server/utils/library'
import { comfyJobPrefix } from '~/utils/outputNames'
import { joinPromptParts } from '~/utils/promptParts'
import { restorePromptParts, wrappedPromptForComfy } from '~/utils/promptParts'
export type EditImageFile = { filename: string; data: Buffer; type?: string }
@@ -32,7 +32,14 @@ export type EditRunParams = {
export async function runEdit(job: Job, params: EditRunParams) {
const library = job.library
if (!library) throw new Error('Edit job is missing library metadata')
const prompts = [params.prompt, ...params.passes.map(item => item.prompt)]
const prompts = [
library.promptMid || restorePromptParts(params.prompt, {
pre: library.promptPre,
prompt: params.prompt,
post: library.promptPost
}).prompt,
...params.passes.map(item => item.prompt)
]
const chainTotal = prompts.length
const batch = params.passMode !== 'chain'
const unit = batch ? 'Batch' : 'Pass'
@@ -68,7 +75,7 @@ export async function runEdit(job: Job, params: EditRunParams) {
if (job.status === 'cancelled') throw new Error('Job interrupted.')
if (index > 0 && library.stopAfterCurrent === true) break
const mid = (batch || index === 0) ? composeFillPrompt(prompts[index], filled.padded) : prompts[index]
const prompt = joinPromptParts(library.promptPre, mid, library.promptPost)
const prompt = wrappedPromptForComfy(library, mid, index === 0 ? params.prompt : mid)
const last = index === prompts.length - 1
if (index > 0) {
await ensureComfyReady((status) => {
+10 -3
View File
@@ -8,7 +8,7 @@ import { imageDimensions } from '~/server/utils/resolution'
import { emitChainJob } from '~/server/utils/watch'
import { saveStill, stillChainName } from '~/server/utils/library'
import { comfyJobPrefix } from '~/utils/outputNames'
import { joinPromptParts } from '~/utils/promptParts'
import { restorePromptParts, wrappedPromptForComfy } from '~/utils/promptParts'
import { isXaigenStudio } from '~/utils/videoModels'
import {
imageV2StackSpecials,
@@ -69,7 +69,14 @@ export async function runEditV2(job: Job, params: EditV2RunParams) {
const extraPasses = canChain
? (params.passes || []).map(item => ({ prompt: String(item.prompt || '').trim() })).filter(item => item.prompt)
: []
const prompts = [params.prompt, ...extraPasses.map(item => item.prompt)]
const prompts = [
library.promptMid || restorePromptParts(params.prompt, {
pre: library.promptPre,
prompt: params.prompt,
post: library.promptPost
}).prompt,
...extraPasses.map(item => item.prompt)
]
const chainTotal = prompts.length
const batch = params.passMode !== 'chain'
const unit = batch ? 'Batch' : 'Pass'
@@ -218,7 +225,7 @@ export async function runEditV2(job: Job, params: EditV2RunParams) {
mode: params.mode,
engine,
task: params.task,
prompt: joinPromptParts(library.promptPre, prompt, library.promptPost),
prompt: wrappedPromptForComfy(library, prompt, index === 0 ? params.prompt : prompt),
negative: params.negative,
imageAName: uploaded?.name,
imageBName: uploadedRef?.name,
+1 -1
View File
@@ -1179,7 +1179,7 @@ export async function startStudioJob(item: StudioJob) {
}
void runGeneration(job, {
prompt: payload.promptMid || payload.prompt,
prompt: payload.prompt,
image: stillFile,
width: payload.width,
height: payload.height,