- New prompt_search.py (no ComfyUI imports): reads only the PNG 'prompt' chunk (tEXt/zTXt/iTXt), skips the large 'workflow' chunk, and extracts only text that feeds text-encoder nodes (following links to string/primitive/concat nodes). Model names, sampler names, filenames and other widgets are no longer matched, and filenames are no longer searched.
- Per-file results are cached by (mtime, size); repeat searches only touch new/changed files.
- gallery/list runs in a worker thread so large searches don't block ComfyUI's server; the scan stops when the client disconnects.
- Frontend aborts superseded search requests and ignores stale results.
- UI strings/locales and README updated; unit tests in tests/.
- galleryView: hoist Ctrl/Meta key handlers to module scope and remove them (plus a new blur reset) in teardownGalleryView(); disconnect the ResizeObserver; clear the ctrl-active body class; reset header-reveal state so a re-initialised gallery starts clean.
- overlay: make destroy() idempotent and make updateOverlayBounds() a no-op afterwards, so a pending rAF/ResizeObserver callback can't re-observe elements after disconnect().
- Fixed memory leak by revoking live preview blob URLs
- Fixed race condition that falsely marked completed runs as Cancelled
- Fixed double-decker card layout: 3D, Audio, and File cards now embed workflow images as background thumbnails
- Fixed Runtime Preview mode failing to deactivate after closing Text or 3D viewers
- Prevented video dimensions from leaking onto 3D and Audio cards
- Sorted workflow outputs by canvas execution order so final node output is always prioritized
- Fixed Windows Explorer failing to highlight files when paths have spaces