Put ACE-Step music jobs on the same studio queue as video and image.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { startMusicJob } from '~/server/utils/musicChain'
|
||||
import { addStudioJob, kickStudioQueue, listStudioJobs, videoJobsBusy } from '~/server/utils/studioQueue'
|
||||
import { comfyConfigured } from '~/server/utils/comfy'
|
||||
import {
|
||||
clampLyricsStrength,
|
||||
@@ -67,27 +67,54 @@ export default defineEventHandler(async (event) => {
|
||||
engine: engine === 'ace-step-1.5' ? 'ace15' : 'ace'
|
||||
})
|
||||
|
||||
const job = await startMusicJob({
|
||||
const samplerName = String(body.sampler_name || 'euler')
|
||||
const scheduler = String(body.scheduler || 'simple')
|
||||
const familyId = crypto.randomUUID()
|
||||
const studio = await addStudioJob({
|
||||
ownerKey,
|
||||
folderId,
|
||||
name: clipName,
|
||||
tags,
|
||||
lyrics,
|
||||
duration,
|
||||
steps,
|
||||
seed,
|
||||
cfg,
|
||||
lyricsStrength,
|
||||
instrumental,
|
||||
folderLocked,
|
||||
engine,
|
||||
samplerName: String(body.sampler_name || 'euler'),
|
||||
scheduler: String(body.scheduler || 'simple')
|
||||
familyId,
|
||||
kind: 'music',
|
||||
payload: {
|
||||
prompt: tags,
|
||||
name: clipName,
|
||||
folderId,
|
||||
aspect: 'audio',
|
||||
width: 0,
|
||||
height: 0,
|
||||
steps,
|
||||
turbo: false,
|
||||
seed,
|
||||
cfg,
|
||||
fps: 0,
|
||||
samplerName,
|
||||
scheduler,
|
||||
duration,
|
||||
sound: !instrumental,
|
||||
workflow: 'v1',
|
||||
useIdentityRefs: false,
|
||||
hideThumbnail: false,
|
||||
folderLocked,
|
||||
referenceStillIds: [null, null, null, null],
|
||||
extensions: [],
|
||||
queueAutoRun: false,
|
||||
lyrics,
|
||||
instrumental,
|
||||
lyricsStrength,
|
||||
musicEngine: engine
|
||||
}
|
||||
})
|
||||
await kickStudioQueue()
|
||||
let latest = listStudioJobs(ownerKey).find(item => item.id === studio.id)
|
||||
if (!latest?.liveJobId && !(await videoJobsBusy())) {
|
||||
await kickStudioQueue()
|
||||
latest = listStudioJobs(ownerKey).find(item => item.id === studio.id)
|
||||
}
|
||||
const liveJobId = latest?.liveJobId || ''
|
||||
|
||||
return {
|
||||
jobId: job.id,
|
||||
queued: job.status === 'queued',
|
||||
jobId: liveJobId || studio.id,
|
||||
studioJobId: studio.id,
|
||||
queued: !liveJobId,
|
||||
seed,
|
||||
duration,
|
||||
steps,
|
||||
|
||||
@@ -33,7 +33,8 @@ export default defineEventHandler(async (event) => {
|
||||
: listJobs().filter((job) => {
|
||||
if (job.status === 'complete' || job.status === 'error' || job.status === 'cancelled') return false
|
||||
if (kind === 'edit') return job.kind === 'edit'
|
||||
if (kind === 'video') return job.kind !== 'edit'
|
||||
if (kind === 'music') return job.kind === 'music'
|
||||
if (kind === 'video') return job.kind !== 'edit' && job.kind !== 'music'
|
||||
return true
|
||||
})
|
||||
for (const job of targets) {
|
||||
@@ -47,7 +48,9 @@ export default defineEventHandler(async (event) => {
|
||||
for (const row of listStudioJobs(owner)) {
|
||||
if (row.status !== 'running' && row.status !== 'held') continue
|
||||
if (kind === 'edit' && row.kind !== 'edit') continue
|
||||
if (kind === 'music' && row.kind !== 'music') continue
|
||||
if (kind === 'video' && row.kind === 'edit') continue
|
||||
if (kind === 'video' && row.kind === 'music') continue
|
||||
await cancelStudioJob(owner, row.id).catch(() => null)
|
||||
}
|
||||
const ok = await interruptComfy()
|
||||
|
||||
@@ -16,11 +16,13 @@ export default defineEventHandler((event) => {
|
||||
const byId = new Map(queues.map(queue => [queue.id, queue]))
|
||||
const jobs = active.map((job) => {
|
||||
const shots = job.shotQueueId ? byId.get(job.shotQueueId) || null : null
|
||||
const kind = job.kind === 'edit' ? 'edit' : 'video'
|
||||
const kind = job.kind === 'edit' ? 'edit' : job.kind === 'music' ? 'music' : 'video'
|
||||
const shotSummary = shots ? summarizeQueue(shots) : null
|
||||
const plannedShots = shotSummary
|
||||
? undefined
|
||||
: kind === 'edit'
|
||||
: kind === 'music'
|
||||
? undefined
|
||||
: kind === 'edit'
|
||||
? (job.payload.passes?.length
|
||||
? [
|
||||
{ prompt: job.payload.prompt, duration: 0 },
|
||||
|
||||
Reference in New Issue
Block a user