Add MiniMax and PinkCherry LTX as pickable video engines, with still or text start.

Shot 1 can run text-to-video; later shots still extend from the last frame. Recommend output is also normalized into shot-script cards.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Towsty
2026-08-27 19:38:53 -05:00
co-authored by Cursor
parent 2bebeea526
commit 40cd17f35c
15 changed files with 676 additions and 120 deletions
+7 -2
View File
@@ -1,5 +1,6 @@
import { getSidecarImageHost } from '~/server/utils/imageComfy'
import { buildVisionPromptWorkflow } from '~/server/utils/promptWorkflow'
import { normalizeShotScript } from '~/utils/parseRecommend'
export type PromptJobStatus = 'queued' | 'running' | 'complete' | 'error'
@@ -206,7 +207,10 @@ function draftUserPrompt(draft: string, mode: string) {
: mode === 'shot-script'
? 'video-shot-script'
: 'video'
return `Studio mode: ${studio}\n\nDraft Prompt:\n${draft}`
const format = studio === 'image-edit'
? 'If this is a single edit, output only the refined prompt. If it needs phases, use ---pass 1--- blocks.'
: 'Output a MiniMax shot list. Each shot starts with "shot N" on its own line, then [SHOT CONFIGURATION], [SUBJECT DIRECTION & ACTION], and [AUDIO CUES], each on its own line. Blank line between shots. No markdown fences. No one-paragraph dump.'
return `Studio mode: ${studio}\n${format}\n\nDraft Prompt:\n${draft}`
}
export async function runPromptRecommend(job: PromptJob, params: {
@@ -227,7 +231,8 @@ export async function runPromptRecommend(job: PromptJob, params: {
const queued = await queuePromptGraph(graph, job.id)
job.message = 'Writing the recommended prompt…'
const text = await waitForPromptText(queued.prompt_id)
job.text = text.trim()
const trimmed = text.trim()
job.text = params.mode === 'edit' ? trimmed : normalizeShotScript(trimmed)
job.status = 'complete'
job.message = 'Recommended prompt ready'
}