Finish the current video shot list before starting the next queued video.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user