Keep family pre/post text on shot queues and wrap the mid prompt at Comfy time.

Later shots were starting a new job without those wrappers, so only the first clip got them.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Towsty
2026-09-03 07:17:00 -05:00
co-authored by Cursor
parent f05f8f3597
commit 1206afe8fd
9 changed files with 86 additions and 32 deletions
+14 -4
View File
@@ -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 { persistPromptWrappers } from '~/utils/promptParts'
import { imageV2StackSpecials } from '~/utils/imageV2'
import { allowIdentityRefs, type PermanenceRef } from '~/utils/globalLocks'
@@ -823,6 +824,7 @@ async function startStudioEditJob(item: StudioJob) {
folderLocked: payload.folderLocked,
name: payload.name,
prompt: payload.prompt,
promptMid: payload.promptMid || payload.prompt,
promptPre: payload.promptPre,
promptPost: payload.promptPost,
aspect: payload.aspect || 'auto',
@@ -897,6 +899,7 @@ async function startStudioEditJob(item: StudioJob) {
folderLocked: payload.folderLocked,
name: payload.name,
prompt: payload.prompt,
promptMid: payload.promptMid || payload.prompt,
promptPre: payload.promptPre,
promptPost: payload.promptPost,
aspect: payload.aspect || 'auto',
@@ -1076,8 +1079,8 @@ export async function startStudioJob(item: StudioJob) {
hideInput: payload.hideInput,
folderLocked: payload.folderLocked,
name: payload.name,
prompt: payload.prompt,
promptMid: payload.promptMid,
prompt: payload.promptMid || payload.prompt,
promptMid: payload.promptMid || payload.prompt,
promptPre: payload.promptPre,
promptPost: payload.promptPost,
aspect: payload.aspect,
@@ -1140,7 +1143,14 @@ export async function startStudioJob(item: StudioJob) {
globalLocks: payload.globalLocks,
permanenceRefs: payload.permanenceRefs,
...persistLoraFields(payload.loraStack || payload.loraName),
initial: { prompt: payload.prompt, duration: payload.duration, permanenceRefs: payload.shotPermanenceRefs?.[0], ...persistLoraFields(resolveLoraStack(payload.loraStack || payload.loraName, payload.shotLoraStacks?.[0] || payload.shotLoras?.[0])) },
...persistPromptWrappers(payload),
initial: {
prompt: payload.promptMid || payload.prompt,
duration: payload.duration,
permanenceRefs: payload.shotPermanenceRefs?.[0],
...persistLoraFields(resolveLoraStack(payload.loraStack || payload.loraName, payload.shotLoraStacks?.[0] || payload.shotLoras?.[0])),
...persistPromptWrappers(payload)
},
extensions: extensions.map((item, index) => ({
...item,
...persistLoraFields(item.loraStack || item.loraName || payload.shotLoraStacks?.[index + 1] || payload.shotLoras?.[index + 1])
@@ -1169,7 +1179,7 @@ export async function startStudioJob(item: StudioJob) {
}
void runGeneration(job, {
prompt: payload.prompt,
prompt: payload.promptMid || payload.prompt,
image: stillFile,
width: payload.width,
height: payload.height,