Remove Object URL usage for image previews

This commit is contained in:
Austin Mroz
2025-11-01 16:39:18 -07:00
parent dffb07c745
commit a7e8f948a6
3 changed files with 15 additions and 17 deletions

View File

@@ -177,10 +177,12 @@ const formatTime = (time?: number) => {
const onProgressPreviewReceived = async ({ detail }: CustomEvent) => { const onProgressPreviewReceived = async ({ detail }: CustomEvent) => {
if (props.task.displayStatus === TaskItemDisplayStatus.Running) { if (props.task.displayStatus === TaskItemDisplayStatus.Running) {
if (progressPreviewBlobUrl.value) { const reader = new FileReader()
URL.revokeObjectURL(progressPreviewBlobUrl.value) reader.onloadend = () => {
if (typeof reader.result !== 'string') return
progressPreviewBlobUrl.value = reader.result
} }
progressPreviewBlobUrl.value = URL.createObjectURL(detail) reader.readAsDataURL(detail)
} }
} }

View File

@@ -719,18 +719,18 @@ export class ComfyApp {
api.addEventListener('b_preview_with_metadata', ({ detail }) => { api.addEventListener('b_preview_with_metadata', ({ detail }) => {
// Enhanced preview with explicit node context // Enhanced preview with explicit node context
const { blob, displayNodeId } = detail const { blob, displayNodeId } = detail
const { setNodePreviewsByExecutionId, revokePreviewsByExecutionId } = const { setNodePreviewsByExecutionId } = useNodeOutputStore()
useNodeOutputStore() const reader = new FileReader()
// Ensure clean up if `executing` event is missed.
revokePreviewsByExecutionId(displayNodeId)
const blobUrl = URL.createObjectURL(blob)
// Preview cleanup is handled in progress_state event to support multiple concurrent previews
const nodeParents = displayNodeId.split(':') const nodeParents = displayNodeId.split(':')
for (let i = 1; i <= nodeParents.length; i++) { reader.onloadend = () => {
setNodePreviewsByExecutionId(nodeParents.slice(0, i).join(':'), [ if (typeof reader.result !== 'string') return
blobUrl for (let i = 1; i <= nodeParents.length; i++) {
]) setNodePreviewsByExecutionId(nodeParents.slice(0, i).join(':'), [
reader.result
])
}
} }
reader.readAsDataURL(blob)
}) })
api.init() api.init()

View File

@@ -261,10 +261,6 @@ export const useNodeOutputStore = defineStore('nodeOutput', () => {
const previews = app.nodePreviewImages[nodeLocatorId] const previews = app.nodePreviewImages[nodeLocatorId]
if (!previews?.[Symbol.iterator]) return if (!previews?.[Symbol.iterator]) return
for (const url of previews) {
URL.revokeObjectURL(url)
}
delete app.nodePreviewImages[nodeLocatorId] delete app.nodePreviewImages[nodeLocatorId]
delete nodePreviewImages.value[nodeLocatorId] delete nodePreviewImages.value[nodeLocatorId]
} }