diff --git a/pages/index.vue b/pages/index.vue index 0a35ec2..060da45 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -316,7 +316,7 @@ -

Output preview hides library thumbs and autoplay. Click the player to reveal; click anywhere else on the page to hide it again. Folder default applies to output preview when you pick a new still.

+

Output preview hides library thumbs and autoplay. Click the player or still to reveal; click anywhere else on the page to hide it again. Folder default applies to output preview when you pick a new still.

@@ -1351,6 +1351,7 @@ let lastFrameObjectUrl = '' let lastFrameGen = 0 const awaitingReveal = ref(false) const concealOutput = ref(false) +const concealEditOutput = ref(false) const lockedSave = ref(false) const playerSize = ref({ width: 1344, height: 768 }) const toasts = ref<{ id: string; message: string }[]>([]) @@ -2150,6 +2151,7 @@ async function resumeTrack(kind: 'video' | 'edit', id: string, hidden: boolean, const snap = await $fetch>(`/api/generate/${id}`) if (kind === 'edit') { editJobId.value = id + concealEditOutput.value = hidden editSettledUi = false } else { videoJobId.value = id @@ -2211,11 +2213,15 @@ async function resumeActiveJob() { } function onSitePointerDown(event: PointerEvent) { - if (!concealOutput.value || awaitingReveal.value || lockedSave.value || !videoUrl.value) return const root = outputPanel.value const target = event.target as Node | null if (root && target && root.contains(target)) return - concealAndPause() + if (concealOutput.value && !awaitingReveal.value && !lockedSave.value && videoUrl.value) { + concealAndPause() + } + if (concealEditOutput.value && !editAwaitingReveal.value && !editLockedSave.value && editResultUrl.value) { + editAwaitingReveal.value = true + } } function concealAndPause() { @@ -2532,6 +2538,7 @@ function openStill(still: LibraryStill) { studioMode.value = 'edit' browseFolderId.value = still.folderId editResultUrl.value = `/api/library/stills/${still.id}` + concealEditOutput.value = still.hideInput === true editAwaitingReveal.value = still.hideInput === true editLockedSave.value = false editDownloadName.value = clipFileName(stillTitle(still)) @@ -2567,6 +2574,7 @@ async function removeStill(still: LibraryStill, family = false) { if ([...ids].some(id => editResultUrl.value.includes(id))) { editResultUrl.value = '' editAwaitingReveal.value = false + concealEditOutput.value = false editLockedSave.value = false } await loadLibrary() @@ -2780,6 +2788,7 @@ async function editImage() { editProgress.value = 2 editResultUrl.value = '' editAwaitingReveal.value = false + concealEditOutput.value = hideThumbnail.value editLockedSave.value = false editStatusMessage.value = 'Checking Beast ComfyUI...' editMaxStep.value = editSteps.value @@ -2804,6 +2813,7 @@ async function editImage() { body.append('seed', seedInput.value || 'random') body.append('folderId', folderId.value) body.append('hideInput', String(showPrivacyToggles.value && hideInputPreview.value)) + body.append('hideThumbnail', String(showPrivacyToggles.value && hideThumbnail.value)) body.append('name', clipName.value.trim()) if (extraPasses.length) body.append('passes', JSON.stringify(extraPasses)) editDownloadName.value = clipFileName(clipName.value.trim() || prompt.value.split(/[.!?\n]/)[0] || 'aigen-edit') @@ -2813,8 +2823,8 @@ async function editImage() { }) editJobId.value = started.jobId editMaxStep.value = started.steps - persistActiveJob('edit', started.jobId, started.hideThumbnail === true || hideInputPreview.value, started.folderLocked === true) - listen('edit', started.jobId, started.hideThumbnail === true || hideInputPreview.value, started.folderLocked === true) + persistActiveJob('edit', started.jobId, started.hideThumbnail === true || hideThumbnail.value, started.folderLocked === true) + listen('edit', started.jobId, started.hideThumbnail === true || hideThumbnail.value, started.folderLocked === true) void pollComfyHealth() } catch (error: any) { editSettledUi = true @@ -2971,7 +2981,10 @@ function applyEditEvent(payload: Record, hidden: boolean, folderLoc if (payload.stillId && !locked) { editResultUrl.value = `/api/library/stills/${payload.stillId}` editLockedSave.value = false - if (payload.hideThumbnail || hidden) editAwaitingReveal.value = payload.type !== 'checkpoint' + if (payload.hideThumbnail || hidden) { + concealEditOutput.value = true + if (payload.type !== 'checkpoint') editAwaitingReveal.value = true + } } if (payload.type === 'checkpoint' && payload.stillId) { @@ -3010,7 +3023,8 @@ function applyEditEvent(payload: Record, hidden: boolean, folderLoc editStatusMessage.value = 'Saved to the locked folder. Unlock it to view.' } else { editResultUrl.value = `/api/library/stills/${payload.stillId}` - editAwaitingReveal.value = Boolean(payload.hideThumbnail || hidden) + concealEditOutput.value = Boolean(payload.hideThumbnail || hidden) + editAwaitingReveal.value = concealEditOutput.value editLockedSave.value = false editStatusMessage.value = total > 1 ? 'Edit chain finished' : 'Edit finished' editCompletedChainStep.value = total diff --git a/server/api/edit.post.ts b/server/api/edit.post.ts index 2e18b86..bafa0ce 100644 --- a/server/api/edit.post.ts +++ b/server/api/edit.post.ts @@ -75,6 +75,7 @@ export default defineEventHandler(async (event) => { const destFolder = library.folders.find(folder => folder.id === folderId) const folderLocked = Boolean(destFolder?.protected && !destFolder.unlocked) const hideInput = fields.hideInput === 'true' + const hideThumbnail = fields.hideThumbnail === 'true' const steps = parseSteps(fields.steps) const cfg = parseCfg(fields.cfg) const seed = fields.seed && fields.seed !== 'random' @@ -107,11 +108,11 @@ export default defineEventHandler(async (event) => { const job = createJob() job.kind = 'edit' job.maxStep = steps - job.hideThumbnail = hideInput + job.hideThumbnail = hideThumbnail job.library = { ownerKey, folderId, - hideThumbnail: hideInput, + hideThumbnail, hideInput, folderLocked, name: (fields.name || '').trim().slice(0, 80), @@ -161,7 +162,7 @@ export default defineEventHandler(async (event) => { jobId: job.id, seed, steps, - hideThumbnail: hideInput, + hideThumbnail, folderLocked, dual: Boolean(reference), chainTotal @@ -294,7 +295,7 @@ async function runEdit( data: buffer, width: size?.width || 0, height: size?.height || 0, - hideInput: job.hideThumbnail === true || library.hideInput === true, + hideInput: job.hideThumbnail === true, role: 'output', name: passName || undefined, prompt,