Finish the current video shot list before starting the next queued video.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Towsty
2026-08-30 07:24:47 -05:00
co-authored by Cursor
parent 61d711f989
commit 18f350c32a
5 changed files with 95 additions and 32 deletions
+21 -9
View File
@@ -451,7 +451,12 @@ export async function continueQueuedExtensions(
export async function continueQueuedExtensionsIfNeeded(job: Job) {
if (!job.library) return
if (job.status === 'error' || job.status === 'cancelled' || job.status === 'complete') return
if (job.status === 'error' || job.status === 'cancelled') return
if (job.status === 'complete') {
const leftover = remainingAfterCurrentShot(job.library)
if (!leftover.length) return
job.status = 'running'
}
if (chainShouldHold(job)) {
job.library.stopAfterCurrent = true
return
@@ -512,6 +517,15 @@ export async function runGeneration(job: Job, params: VideoChainParams) {
}
export async function startQueueBurst(owner: string, queueId: string, count: number | 'all') {
await ensureComfyReady((status) => {
console.log(JSON.stringify({
src: 'video-chain',
event: 'wake',
queueId,
state: status.state,
message: status.message
}))
})
const { queue, count: n } = await prepareQueueBurst(owner, queueId, count)
const lastIndex = lastCompletedIndex(queue)
const clipId = queue.currentClipId
@@ -585,15 +599,13 @@ export async function startQueueBurst(owner: string, queueId: string, count: num
}).catch(async (error) => {
removeExtendTemp(job.library?.extendTmpDir)
const message = error instanceof Error ? error.message : String(error)
if (job.status === 'error' || job.status === 'cancelled') {
await finishQueueBurst(owner, queue.id, false, message).catch(() => null)
setQueueJob(queue.id, null)
return
}
job.status = 'error'
const transient = /still busy|COMFY_BUSY|offline|never answered|host agent|unreachable|asleep|Starting Comfy|ComfyUI \(1\)|instance picker/i.test(message)
job.error = message
emitJob(job, { type: 'error', error: message, message })
await finishQueueBurst(owner, queue.id, false, message).catch(() => null)
if (!transient && job.status !== 'cancelled') {
job.status = 'error'
emitJob(job, { type: 'error', error: message, message })
}
await finishQueueBurst(owner, queue.id, true, transient ? undefined : message).catch(() => null)
setQueueJob(queue.id, null)
}).finally(() => {
void onLiveVideoSettled(job)