Give video extensions the same pre-text, prompt, and post-text fields as the main form.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -4,6 +4,7 @@ import { persistLoraFields, parsePostedLoraStack, listStudioLoras } from '~/serv
|
||||
import { readLoraStack } from '~/utils/loras'
|
||||
import { parseExtendDuration } from '~/server/utils/extendChain'
|
||||
import { defaultVideoSteps, isLtxWorkflow, LTX_DISABLED_MESSAGE, ltxWorkflowEnabled, parseVideoWorkflow } from '~/utils/videoModels'
|
||||
import { composePromptParts } from '~/utils/promptParts'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const body = await readBody<{ clipId?: string; prompt?: string; promptPre?: string; promptPost?: string; duration?: number; lora?: unknown; loraStack?: unknown }>(event).catch(() => ({}))
|
||||
@@ -12,9 +13,6 @@ export default defineEventHandler(async (event) => {
|
||||
if (!clipId) {
|
||||
throw createError({ statusCode: 400, statusMessage: 'A clip is required to extend' })
|
||||
}
|
||||
if (!prompt) {
|
||||
throw createError({ statusCode: 400, statusMessage: 'An extension prompt is required' })
|
||||
}
|
||||
|
||||
const { owner } = assertLibraryOwner(event)
|
||||
const source = getClip(owner, clipId)
|
||||
@@ -27,8 +25,15 @@ export default defineEventHandler(async (event) => {
|
||||
const destFolder = publicLibrary(event).folders.find(folder => folder.id === source.folderId)
|
||||
const folderLocked = Boolean(destFolder?.protected && !destFolder.unlocked)
|
||||
const durationSeconds = parseExtendDuration(body?.duration)
|
||||
const promptPre = String(body?.promptPre ?? source.promptPre ?? '').trim()
|
||||
const promptPost = String(body?.promptPost ?? source.promptPost ?? '').trim()
|
||||
const promptPre = body && Object.prototype.hasOwnProperty.call(body, 'promptPre')
|
||||
? String(body.promptPre || '').trim()
|
||||
: String(source.promptPre || '').trim()
|
||||
const promptPost = body && Object.prototype.hasOwnProperty.call(body, 'promptPost')
|
||||
? String(body.promptPost || '').trim()
|
||||
: String(source.promptPost || '').trim()
|
||||
if (!composePromptParts(promptPre, prompt, promptPost)) {
|
||||
throw createError({ statusCode: 400, statusMessage: 'An extension prompt is required' })
|
||||
}
|
||||
const workflow = parseVideoWorkflow(source.workflow)
|
||||
if (isLtxWorkflow(workflow) && !ltxWorkflowEnabled()) {
|
||||
throw createError({ statusCode: 400, statusMessage: LTX_DISABLED_MESSAGE })
|
||||
@@ -47,8 +52,8 @@ export default defineEventHandler(async (event) => {
|
||||
payload: {
|
||||
prompt,
|
||||
promptMid: prompt,
|
||||
promptPre: promptPre || undefined,
|
||||
promptPost: promptPost || undefined,
|
||||
promptPre,
|
||||
promptPost,
|
||||
name: nextClipPartName(clipTitle(source)),
|
||||
folderId: source.folderId,
|
||||
aspect: source.aspect || '16:9',
|
||||
|
||||
Reference in New Issue
Block a user