- Remove hardcoded DB reset notice from i18n dictionary
- Remove DB reset notice version check from versionCheck.js
- Delete unused imports and variables related to DB reset notice
- Unify filename key normalization: VirtualAssetGridHost and useVirtualGrid
now import and call getFilenameKey() from AssetCardRenderer instead of
duplicating the String().trim().toLowerCase() inline expression.
- Make virtualizer overscan adaptive: compute ceil(scrollHeight / rowHeight)
clamped to [3, 20] so tall viewports buffer more rows without wasting
memory on small ones; falls back to 6 when no scroll element is present.
- Preserve Shift+Click anchor on reconcileSelection: add preserveAnchor
option to setSelection (default false, no behaviour change for existing
callers) and pass it as true from reconcileSelection so pruning invisible
assets out of the selection no longer resets the range anchor.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- nodes.py: MajoorSaveImage (PNG with generation_time_ms in text chunks) and MajoorSaveVideo (MP4 via PyAV, GIF, WebP with metadata persistence)
- extractors_png.py: read generation_time_ms from PNG text chunks
- extractors.py: extract generation_time_ms from merged EXIF data into metadata dict
- extractors_video.py: extract generation_time_ms from ffprobe format tags
- messageCenter.js: add generation-time-persistence tip and topbar MFV button announcement
- CHANGELOG.md: document topbar MFV button and custom nodes
- README.md: add Custom Nodes section with input tables
- docs/CUSTOM_NODES.md: full node reference and extraction pipeline docs
- docs/DOCUMENTATION_INDEX.md: add CUSTOM_NODES.md entry
- registry.py: re-export PromptServer, _request_path_and_method, _requires_auth,
_extract_app_paths, _extract_table_paths so tests and mypy can import them
- registerRealtimeListeners: add force option to upsertLiveAssetIntoGrid;
_mjrAssetIndexedHandler passes force:true to bypass query filter
- grid_loader_adaptive_paging test: add APP_DEFAULTS to config.js mock
- register_realtime_listeners test: use expect.objectContaining for upsertAsset
assertions to tolerate mtime injection
- FloatingViewer.impl.js: add missing _resetMfvZoom() method (was called
from floatingViewerLoader/Mode but never defined on the class)
- viewerShell.js: return genInfoTitle + genInfoTitleLeft from createViewerStageShell
- ViewerRuntime.js: destructure genInfoTitle + genInfoTitleLeft (were undefined
=> gen info body was never populated)
- floatingViewerPopout.js: inject document.documentElement.style.cssText as
:root{...} in popup head so ComfyUI CSS vars are available; set body
background to #0d0d0d; remove broken history.replaceState (Chrome blocks
it from about:blank)
- __init__.py: remove unused FailureSeverity/StageStatus imports
- Hook canvas.onNodeDeselected (was missing) so sidebar clears when
deselecting all nodes (click on empty canvas)
- Add DOM-level pointerup listener on canvas.canvas as fallback for
ComfyUI selection paths that bypass LiteGraph callbacks
- Add requestAnimationFrame retry in open() if canvas is null at call time
- Write widget values in real-time on input event (number + textarea)
instead of only on change/blur; partial states (-/./empty) are skipped
for number inputs; blur still clamps and syncs displayed value
- Multi-Pin references: toggle buttons A/B/C/D to pin up to 4 images
- Node Parameters sidebar: view/edit workflow node widgets inside MFV
- Run button in viewer toolbar for immediate re-queue
- Expandable text areas for long prompts
- Sidebar position setting (right/left/bottom) via Settings
- Toolbar layout: Run and Node Parameters pushed to far right
- Message Center: 2 new announcements for the features
- Docs: VIEWER_FEATURE_TUTORIAL, FLOATING_VIEWER_WORKFLOW_SIDEBAR
- CHANGELOG v2.4.5, README aligned
- Remove absolute positioning from rightArea, use flex:1 1 0 flow layout
- Move titleLine (filename+badges) to leftArea in compare mode for 3-column layout
- Mirror paddingLeft=84px to match paddingRight in compare mode for symmetry
- centerArea flex:0 0 auto in compare so mode buttons stay centered
- Export leftArea, centerArea, titleLine, titleWrap, modeButtons from toolbar
- Add overflow:hidden to left/right meta and areas for text truncation
- Split asset_path_service into smaller, more focused modules
- Introduce new protocols for asset context preparation
- Reorganize import statements for better clarity
- Extract helper functions to improve code readability and reusability
- Update type annotations to use Protocol for better type checking
- Mark "Frontend Consolidation post-Vue" as completed
- Update status of various refactoring tasks
- Add completion date (2025-06-11)
- Clarify checklist usage for individual PRs
- Update TODOs and criteria for acceptance
- Add EXECUTION_IDLE_GRACE_MS config to control post-execution delay
- Implement post-execution work scheduling to optimize resource handling
- Enhance asset upsert logic for live assets during stack finalization
- Add runtime status synchronization to backend
- Improve execution start/end handling with new job ID tracking
- Refactor live asset event processing to reduce complexity
- Optimize imports and event handling in various modules
- Add dynamic theming with radial gradients and blurred effects
- Refine layout and spacing for various components
- Enhance filmstrip appearance and behavior
- Improve info panel styling and positioning
- Update general styling for buttons, tooltips, and other elements
- Add keyboard shortcuts for video in-point (I), out-point (O), and navigation (Home/End)
- Implement swipe gesture for navigating between assets in the viewer
- Add option to copy prompt to clipboard (Ctrl/Cmd+C)
- Improve stack group card functionality and representative selection
- Optimize image preloading for smoother navigation
- Enhance audio visualizer with WebGL support and mode switching
- Refine feed card appearance and interaction
- Explicitly track AI-related properties for Vue reactivity
- Ensure updates after backfill operations are detected
- Improve tracking for workflow, generation data, AI info, auto tags, caption, and vector
- Add grid snapshot caching to improve performance and reduce server requests
- Implement sessionStorage-based cache storage with size and TTL limitations
- Update grid loader to interact with the snapshot cache
- Modify asset upsert logic to work with cached snapshots
- Add functions to remember and retrieve snapshots
- Update CSS class names for grid skeleton layout
- Add support for string paths in addition to object arrays
- Implement new buildKey function for generating unique keys
- Introduce SUPPORTED_PATH_EXT_RE regex for valid file extensions
- Update pushItem and addItems functions to handle string inputs
- Add new pushPathString function for processing string paths
- Add session storage for temporary token storage
- Implement logic to clear local storage token after bootstrap refresh
- Refactor token refresh process to handle remote cookie refresh without exposing token
- Update fetchAPI function to use new token refresh logic
- Add tests for new token handling behavior
- Implemented LiveStreamTracker to manage live streaming of images and videos.
- Introduced functions for loading and saving images and videos, including handling of various formats.
- Added event listeners for new generation outputs and preview streaming integration with ComfyUI API.
- Established hooks for node selection changes to track and manage content updates.
- Created utility functions for parsing URLs and file paths to streamline input handling.
- Implement new API endpoints for getting and setting index directory
- Add corresponding frontend functionality in settings advanced section
- Introduce new toast messages for index directory-related actions
- Update i18n dictionary with new index directory-related translations
- Implemented LiveStreamTracker in LiveStreamTracker-DEOsWH5q.js to manage media loading and saving events.
- Introduced functions for handling image and video inputs, including URL parsing and widget integration.
- Added event listeners for new generation outputs to facilitate real-time updates.
- Created entry point in entry-DJOMRGDR.js to support the new tracking functionality.
- Implemented LiveStreamTracker with functionalities for tracking and managing live stream events.
- Introduced event listeners for new generation outputs and preview blobs.
- Added utility functions for handling image and video inputs and outputs.
- Established hooks for canvas node selection and changes.
- Created entry point for the LiveStreamTracker in entry-DSb73AW-.js.
- Added `_activeVideoAssetId` to track the currently active video asset in `playerBarManager.js`.
- Updated sync logic to ensure controls are remounted only when the asset changes.
- Improved handling of video synchronization and FPS settings.
feat(sideBySide): sanitize prompts for display
- Introduced `sanitizePromptForDisplay` to clean up prompts before displaying.
- Updated `_extractGridGenInfo` to use the new sanitization function for prompts.
feat(sidebar): enhance workflow section with size options and stats
- Added size options for the minimap in `SidebarWorkflowSection.vue`.
- Implemented workflow statistics display, including nodes, links, and groups.
- Persisted size and label settings for the minimap.
fix(generation): prevent filepath prompts from being displayed
- Updated prompt handling in `generationSectionState.js` to sanitize prompts.
- Added tests to ensure filepath-like prompts do not affect UI behavior.
feat(gridLoader): implement adaptive paging for grid loader
- Introduced `getAdaptivePageLimit` to dynamically adjust page size based on empty append batches.
- Updated `useGridLoader` to utilize adaptive paging logic.
feat(vectorIndexer): add regex for path-like prompts
- Implemented `_looks_like_path_prompt` to identify and handle path-like prompts in `vector_indexer.py`.
test: add unit tests for prompt sanitization and grid loader
- Created tests for prompt sanitization logic in `generation_prompt_sanitization.vitest.mjs`.
- Added tests for adaptive paging behavior in `grid_loader_adaptive_paging.vitest.mjs`.
- Implemented tests for sidebar workflow section functionality in `sidebar_workflow_section.vitest.mjs`.
- Added tests for player bar FPS synchronization in `viewer_player_bar_fps_sync.vitest.mjs`.
docs: update user guide and add privacy/offline documentation
- Added a privacy and offline usage guide in `PRIVACY_OFFLINE.md`.
- Updated user guide to reference new privacy documentation.
- Updated the _STRIPPABLE_EXTS set to include the .avif extension
- This change ensures that AVIF images are considered for ComfyUI metadata stripping during the drag-and-drop operation
- Add new API endpoints for route logging settings
- Implement new settings in the advanced settings page
- Update installation instructions to reflect the correct WinGet package ID for ExifTool
- Add Recommended Remote LAN Setup option in Settings for trusted LAN configurations
- Implement loopback recovery bootstrap for local browser sessions
- Automatically rotate legacy token hashes to new plaintext tokens
- Update documentation to reflect new remote setup process and security features
- Add runtime write authorization status indicators in Assets Manager
- Improve client-side token handling and session management
- Update environment variables guide with new bootstrap capabilities