Restore Studio 2 Load hydrate, sticky negatives, and strip actions.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -28,7 +28,7 @@ export default defineEventHandler(async (event) => {
|
||||
await resolveRequestSize(owner,request);
|
||||
const id = crypto.randomUUID(), record = { id, owner, request, state: 'waiting', queuedAt: Date.now(), familyId: crypto.randomUUID(), outputs: [], purgeResult: 'Not yet saved' };
|
||||
saveRecord(record);
|
||||
const row = await addStudioJob({ ownerKey: owner, kind: ['video', 'extend'].includes(request.mode) ? 'video' : 'edit', familyId: record.familyId, payload: { ...request.settings, studio2Id: id, prompt: request.compiledPrompt, folderId: request.folderId, extensions: [], referenceStillIds: [], useIdentityRefs: false, queueAutoRun: true } as StudioJobPayload });
|
||||
const row = await addStudioJob({ ownerKey: owner, kind: ['video', 'extend'].includes(request.mode) ? 'video' : 'edit', familyId: record.familyId, payload: { ...request.settings, studio2Id: id, studio2Request: structuredClone(request), prompt: request.compiledPrompt, folderId: request.folderId, extensions: [], referenceStillIds: [], useIdentityRefs: false, queueAutoRun: true } as StudioJobPayload });
|
||||
saveRecord({ ...readRecord(owner, id), queueId: row.id });
|
||||
kickStudioQueue();
|
||||
return { id, seed:request.settings.seed, width:request.settings.width, height:request.settings.height };
|
||||
|
||||
@@ -139,11 +139,44 @@ export async function updateGenerationLogByStudioJob(
|
||||
export async function requeueGenerationLog(owner: string, id: string) {
|
||||
const entry = getGenerationLogEntry(owner, id)
|
||||
const { addStudioJob, kickStudioQueue } = await import('~/server/utils/studioQueue')
|
||||
let payload = structuredClone(entry.payload)
|
||||
if (payload?.studio2Id || payload?.studio2Request) {
|
||||
const { saveRecord, readRecord } = await import('~/server/utils/studio2/store')
|
||||
let request = payload.studio2Request
|
||||
if (!request && payload.studio2Id) {
|
||||
try { request = structuredClone(readRecord(owner, payload.studio2Id).request) }
|
||||
catch { request = null }
|
||||
}
|
||||
if (!request) throw createError({ statusCode: 400, statusMessage: 'That Studio 2 job has no saved request to re-queue.' })
|
||||
const studio2Id = crypto.randomUUID()
|
||||
saveRecord({
|
||||
id: studio2Id,
|
||||
owner,
|
||||
request: structuredClone(request),
|
||||
state: 'waiting',
|
||||
queuedAt: Date.now(),
|
||||
familyId: crypto.randomUUID(),
|
||||
outputs: [],
|
||||
purgeResult: 'Not yet saved'
|
||||
})
|
||||
payload = {
|
||||
...payload,
|
||||
...structuredClone(request.settings || {}),
|
||||
studio2Id,
|
||||
studio2Request: structuredClone(request),
|
||||
prompt: request.compiledPrompt || payload.prompt,
|
||||
folderId: request.folderId || payload.folderId,
|
||||
extensions: [],
|
||||
referenceStillIds: [],
|
||||
useIdentityRefs: false,
|
||||
queueAutoRun: true
|
||||
}
|
||||
}
|
||||
const studio = await addStudioJob({
|
||||
ownerKey: owner,
|
||||
familyId: crypto.randomUUID(),
|
||||
kind: entry.kind,
|
||||
payload: structuredClone(entry.payload)
|
||||
payload
|
||||
})
|
||||
await kickStudioQueue()
|
||||
return { studioJobId: studio.id, entry: listGenerationLog(owner, 1)[0] || getGenerationLogEntry(owner, id) }
|
||||
|
||||
@@ -17,6 +17,8 @@ export type StudioJobKind = 'video' | 'edit' | 'music'
|
||||
|
||||
export interface StudioJobPayload {
|
||||
studio2Id?: string
|
||||
/** Full Studio 2 validateRequest snapshot for Load / Re-queue. */
|
||||
studio2Request?: Record<string, any>
|
||||
upscale?: { sourceId: string; scale: 2 | 4; target: string; fps: string | number; enhance: string }
|
||||
prompt: string
|
||||
promptMid?: string
|
||||
|
||||
Reference in New Issue
Block a user