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:
Towsty
2026-09-02 15:01:20 -05:00
co-authored by Cursor
parent c4e18eeb2c
commit e7298d9693
11 changed files with 195 additions and 83 deletions
+17 -5
View File
@@ -3,6 +3,8 @@ import { join } from 'node:path'
import { getJob, listJobs, type Job } from '~/server/utils/jobs'
import { parsePostedLoraStack, persistLoraFields } from '~/server/utils/loras'
import type { LoraStackItem } from '~/utils/loras'
import { persistPromptWrappers } from '~/utils/promptParts'
import type { QueuedExtension } from '~/server/utils/library'
export type ShotQueueStatus = 'idle' | 'running' | 'paused' | 'complete' | 'error'
export type ShotSegmentStatus = 'pending' | 'running' | 'complete' | 'error'
@@ -10,6 +12,8 @@ export type ShotSegmentStatus = 'pending' | 'running' | 'complete' | 'error'
export interface ShotQueueSegment {
index: number
prompt: string
promptPre?: string
promptPost?: string
duration: number
status: ShotSegmentStatus
clipId?: string
@@ -187,7 +191,7 @@ export async function createShotQueue(params: {
loraName?: string
loraStack?: LoraStackItem[]
initial: { prompt: string; duration: number; permanenceRefs?: import('~/utils/globalLocks').PermanenceRef[]; loraName?: string; loraStack?: LoraStackItem[] }
extensions: { prompt: string; duration: number; permanenceRefs?: import('~/utils/globalLocks').PermanenceRef[]; loraName?: string; loraStack?: LoraStackItem[] }[]
extensions: QueuedExtension[]
jobId?: string
}): Promise<ShotQueue> {
const now = Date.now()
@@ -231,7 +235,8 @@ export async function createShotQueue(params: {
duration: item.duration,
status: 'pending' as const,
permanenceRefs: item.permanenceRefs,
...persistLoraFields(item.loraStack || item.loraName)
...persistLoraFields(item.loraStack || item.loraName),
...persistPromptWrappers(item)
}))
]
}
@@ -473,10 +478,16 @@ export function listOwnersWithQueues() {
.filter(owner => existsSync(queuesPath(owner)))
}
export function remainingFromQueue(queue: ShotQueue): { prompt: string; duration: number; permanenceRefs?: import('~/utils/globalLocks').PermanenceRef[]; loraName?: string; loraStack?: LoraStackItem[] }[] {
export function remainingFromQueue(queue: ShotQueue): QueuedExtension[] {
return queue.segments
.filter(segment => segment.index > 0)
.map(segment => ({ prompt: segment.prompt, duration: segment.duration, permanenceRefs: segment.permanenceRefs, ...persistLoraFields(segment.loraStack || segment.loraName) }))
.map(segment => ({
prompt: segment.prompt,
duration: segment.duration,
permanenceRefs: segment.permanenceRefs,
...persistLoraFields(segment.loraStack || segment.loraName),
...persistPromptWrappers(segment)
}))
}
export function lastCompletedIndex(queue: ShotQueue) {
@@ -491,6 +502,7 @@ export function liveSegmentPrompt(queue: ShotQueue, extensionIndex: number) {
prompt: segment?.prompt || '',
duration: segment?.duration || 5,
permanenceRefs: segment?.permanenceRefs,
...persistLoraFields(segment?.loraStack || segment?.loraName)
...persistLoraFields(segment?.loraStack || segment?.loraName),
...persistPromptWrappers(segment)
}
}