Keep uploaded stills in the input picker and generated work in the library, and run image-edit passes as a chain like video extensions.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Towsty
2026-08-27 09:58:08 -05:00
co-authored by Cursor
parent f88dfa1146
commit 860aeafb1e
9 changed files with 1001 additions and 177 deletions
+3 -1
View File
@@ -3,6 +3,8 @@ export default defineEventHandler(async (event) => {
const id = String(getRouterParam(event, 'id') || '')
const still = getStill(owner, id)
assertFolderAccess(event, still.folderId)
await deleteStill(owner, id)
const family = ['1', 'true'].includes(String(getQuery(event).family || '').toLowerCase())
if (family) await deleteStillFamily(owner, id)
else await deleteStill(owner, id)
return publicLibrary(event)
})
+23
View File
@@ -0,0 +1,23 @@
export default defineEventHandler(async (event) => {
const { owner } = assertLibraryOwner(event)
const id = String(getRouterParam(event, 'id') || '')
const body = await readBody<{ folderId?: string; name?: string; family?: boolean }>(event).catch(() => ({} as { folderId?: string; name?: string; family?: boolean }))
const folderId = String(body?.folderId || '')
const hasName = typeof body?.name === 'string'
const family = body?.family === true
if (!folderId && !hasName) {
throw createError({ statusCode: 400, statusMessage: 'Choose a library folder or a new name' })
}
const still = getStill(owner, id)
assertFolderAccess(event, still.folderId)
if (folderId) {
assertFolderExists(event, folderId)
if (family) await moveStillFamily(owner, id, folderId)
else await moveStill(owner, id, folderId)
}
if (hasName) {
if (family) await renameStillFamily(owner, id, body.name || '')
else await renameStill(owner, id, body.name || '')
}
return publicLibrary(event)
})