Ship duration control, hidden previews, job resume, and desktop file purge.

The slider never left this machine, so deploy the generate UI with separate input/output hide toggles, reconnect in-progress jobs after refresh, and delete Comfy input/output files after they are saved to the library.
This commit is contained in:
2026-08-25 20:25:36 -05:00
parent 1a271c05a4
commit c5ed4d7ac4
16 changed files with 651 additions and 104 deletions
+15 -4
View File
@@ -49,6 +49,7 @@ export interface PublicFolder {
thumbnailDefault: boolean
protected: boolean
unlocked: boolean
clipCount: number
}
interface Catalog {
@@ -221,21 +222,26 @@ export function folderUnlocked(event: H3Event, folder: LibraryFolder) {
return folderUnlocks(event)[folder.id] === passwordVersion(folder.passwordHash)
}
export function publicFolder(event: H3Event, folder: LibraryFolder): PublicFolder {
export function publicFolder(event: H3Event, folder: LibraryFolder, clipCount = 0): PublicFolder {
return {
id: folder.id,
name: folder.name,
createdAt: folder.createdAt,
thumbnailDefault: folder.thumbnailDefault,
protected: Boolean(folder.passwordHash),
unlocked: folderUnlocked(event, folder)
unlocked: folderUnlocked(event, folder),
clipCount
}
}
export function publicLibrary(event: H3Event) {
const owner = libraryOwnerKey(event)
const catalog = readCatalog(owner)
const folders = catalog.folders.map(folder => publicFolder(event, folder))
const folders = catalog.folders.map(folder => publicFolder(
event,
folder,
catalog.clips.filter(clip => clip.folderId === folder.id).length
))
const unlockedIds = new Set(folders.filter(folder => folder.unlocked).map(folder => folder.id))
return {
folders,
@@ -253,10 +259,15 @@ export function assertLibraryOwner(event: H3Event) {
return { owner, catalog: readCatalog(owner) }
}
export function assertFolderAccess(event: H3Event, folderId: string) {
export function assertFolderExists(event: H3Event, folderId: string) {
const { owner, catalog } = assertLibraryOwner(event)
const folder = catalog.folders.find(item => item.id === folderId)
if (!folder) throw createError({ statusCode: 404, statusMessage: 'Folder not found' })
return { owner, catalog, folder }
}
export function assertFolderAccess(event: H3Event, folderId: string) {
const { owner, catalog, folder } = assertFolderExists(event, folderId)
if (!folderUnlocked(event, folder)) {
throw createError({ statusCode: 403, statusMessage: 'Folder is locked' })
}