Add a persistent clip library with folders, optional password, and hidden-thumbnail glow.

Generated videos save into a chosen folder, sensitive clips skip thumbnails until played, and Docker writes the catalog to a Coolify volume.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Towsty
2026-08-25 18:03:26 -05:00
co-authored by Cursor
parent 30669c7a27
commit 83051e0ea3
20 changed files with 749 additions and 60 deletions
+25 -1
View File
@@ -34,9 +34,31 @@ export default defineEventHandler(async (event) => {
? Number(fields.seed)
: Math.floor(Math.random() * 2_147_483_647)
const length = frameLength(Number(fields.duration || 5))
const hideThumbnail = fields.hideThumbnail === 'true'
assertLibraryAccess(event)
const library = publicLibrary(event)
const folderId = library.folders.some(folder => folder.id === fields.folderId)
? fields.folderId
: library.folders[0]?.id
if (!folderId) {
throw createError({ statusCode: 400, statusMessage: 'Create a library folder before generating' })
}
const job = createJob()
job.maxStep = steps
job.hideThumbnail = hideThumbnail
job.library = {
folderId,
hideThumbnail,
prompt,
aspect: fields.aspect || 'auto',
width,
height,
steps,
turbo,
seed,
thumb: image.data
}
emitJob(job, { type: 'status', message: 'Uploading image...', progress: 2 })
void runGeneration(job, { prompt, image, width, height, steps, seed, turbo, length }).catch((error) => {
@@ -54,7 +76,9 @@ export default defineEventHandler(async (event) => {
height,
aspect: fields.aspect || 'auto',
steps,
turbo
turbo,
folderId,
hideThumbnail
}
})