- 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.
- 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
- Implemented useGridState to manage grid state, including asset selection and loading states.
- Created useVirtualGrid to centralize virtualization helpers for improved performance.
- Added createVueApp for isolated Vue 3 + Pinia application instances.
- Introduced Vite configuration for building the ComfyUI-Majoor-AssetsManager with external dependencies.
- Implemented entry UI registration for the Assets Manager, including sidebar and bottom panel integration.
- Created real-time listeners for execution events, asset updates, and enrichment status.
- Developed execution runtime controller to manage job tracking, asset buffering, and indexing.
- Introduced lazy initialization for vector services to optimize resource usage.
- Added HTTP handlers for plugin management, enabling listing, enabling, and reloading of plugins.
- Added StacksService to manage asset stacks, including CRUD operations and automatic stacking based on job_id and workflow_hash.
- Created API routes for stacks, including listing, retrieving by job_id, managing stack members, setting cover assets, dissolving stacks, merging stacks, and triggering automatic stacking.
- Introduced new ColorSpaces and Volume classes in the three.js addon for enhanced color management and volume rendering capabilities.
- Introduced runtime bootstrap helpers in `mjr_am_backend.features.runtime` for dependency initialization.
- Implemented `apply_startup_settings` to handle various startup configurations.
- Added search request normalization helpers in `mjr_am_backend.features.search` including `SearchRequestContext` and `parse_search_request` for better query handling.
- Created audit logging helpers in `mjr_am_backend.routes.core.audit_log` for state-changing route handlers.
- Developed a quality gate script in `scripts/run_quality_gate.py` to enforce code quality checks.
- Added comprehensive tests for audit routes, scan consistency, vendor routes, and code quality metrics.
- Implement NodeStreamRegistry for managing adapters that handle ComfyUI node outputs.
- Create BaseAdapter interface for defining adapter structure and behavior.
- Add DefaultImageAdapter for standard image output handling.
- Implement KnownNodesAdapter for well-known ComfyUI nodes with specific output formats.
- Introduce VideoAdapter for handling video output from nodes.
- Establish NodeStream feature flag for controlled rollout.
- Add tests for NodeStreamController to ensure proper behavior when feature is disabled.
- Implement basic 3D model thumbnail rendering with fallback icon
- Update viewer mode selection logic to handle 3D models
- Add checks for 3D model interactions in the viewer
- Extend drag & drop support to include 3D model assets
- Implement new tabbed interface in message popover
- Add shortcut guide tab alongside messages tab
- Update MFV toggle button to use new tooltip format
- Enhance scroll handling for open popovers
- Adjust search input to display keyboard shortcuts
- Update Floating Viewer buttons with new tooltip format
- Add keyboard shortcut for toggling MFV (Ctrl/Cmd+V)
- Added new AI_FEATURES.md guide covering all AI-powered capabilities
- Updated DOCUMENTATION_INDEX.md to include new AI features guide
- Added AI Features section to README.md with overview and models used
- Improved backfill warning information in README.md
- Updated reset index / delete DB procedures in DB_MAINTENANCE.md
- Added configuration options for AI features in README.md
- Update .gitignore to prevent tracking of local directories and accidental files.
- Improve installation instructions in INSTALLATION.md for faster dependency resolution using `uv`.
- Replace regex-based string replacement with safer `replaceAll` in i18n.js to mitigate ReDoS risks.
- Add documentation for global state key registry in runtimeState.js.
- Prevent timer leaks in toast.js by stopping the cleaner timer when no active toasts remain.
- Use replaceChildren instead of innerHTML for safer DOM manipulation in Viewer_impl.js.
- Update FloatingViewer.js to improve icon handling and enhance generation time display.
- Implement JSON sanitization for NaN/Infinity values in utils.py to ensure valid JSON output.
- Adjust mypy configuration to target Python 3.10.
- Update requirements.txt to specify compatible versions for pywin32.
- Add comprehensive tests for environment variable helpers in test_config.py.
- Added versioning and last updated dates to multiple documentation files.
- Introduced new features in the Drag & Drop Guide, Hotkeys & Shortcuts Guide, Installation Guide, Ratings, Tags & Collections Guide, Search & Filtering Guide, Security Model & Environment Variables Guide, Settings & Configuration Guide, and Viewer Feature Tutorial.
- Enhanced the Hotkeys & Shortcuts Guide with new shortcuts for the Majoor Floating Viewer (MFV) and improved organization.
- Updated installation prerequisites to include full Linux support and clarified Python version compatibility.
- Improved the Testing documentation with detailed test coverage sections for both backend and frontend.
- Modified API client to ensure proper authentication token handling.
- Updated health route handlers to improve logging for token operations.
- Created a backup README file with comprehensive project information and installation instructions.
- Remove duplicate code in parser_impl.py
- Split scan.py into multiple modules
- Refactor SettingsPanel.js into smaller components
- Extract subsystems from Viewer_impl.js
This refactoring reduces code duplication, improves modularity, and prepares the codebase for further improvements. No new functionality was added or changed.
- Implement safe URL validation and opener/noreferrer flags in ViewerContextMenu
- Add event listener management and disposal in customRootsController
- Fix removeEventListener options inconsistency in filtersController
- Update list URL construction for custom scope in endpoints.js
- Add disposal of customRootsController bindings in AssetsManagerPanel
- Move token from local to session storage on client side
- Set httpOnly cookie for server-side token on bootstrap/rotate
- Add token validation and auto-sanitization
- Implement retry logic for failed operations
- Add input validation for collection names
- Update toast durations and error handling
- Remove specific exports from SettingsPanel.js
- Add new exports from settingsRuntime.js and settingsCore.js
- Update module documentation to reflect current structure
- Introduced fallback readers for metadata extraction when ExifTool/ffprobe are unavailable, utilizing Pillow and hachoir for images and media files respectively.
- Added settings for metadata fallback preferences, allowing users to toggle image and media fallback options.
- Implemented route collision logging to prevent overlapping API paths.
- Added middleware for authentication on sensitive routes, ensuring secure access.
- Updated API documentation to reflect new endpoints and settings.
- Enhanced unit tests for metadata handling, case sensitivity in file paths, and fallback mechanisms.
- Removed compatibility shims for shared modules, consolidating imports under mjr_am_shared.
feat(config): extend watcher debounce time to 3000 ms and add backward-compatible aliases for file size settings
feat(enricher): modify enrichment queue to support priority and add method to get queue length
feat(scanner): adjust batch size logic to incorporate initial and minimum batch sizes
feat(service): add runtime status method to expose enrichment queue length
feat(watcher): implement methods to flush pending files and get pending count
feat(watcher_scope): restrict watcher scope to output only for safety
feat(health): add runtime status endpoint for diagnostics including DB connections and watcher status
feat(scan): create endpoint to flush watcher pending queue and ensure scope is output only
docs: update DB query timeout documentation to reflect new default of 60 seconds
docs: revise security and settings documentation for updated DB query timeout
feat(api): add runtime status API client method and endpoint
feat(settings): introduce runtime status dashboard in the UI for monitoring DB and watcher metrics
fix(grid): enhance error messaging for asset loading failures and attach grid metrics display
test: add tests for watcher scope enforcement and flush functionality
- Added DuplicatesService for background duplicate analysis and similarity detection.
- Introduced endpoints for analyzing duplicates, checking status, and merging tags.
- Created utility functions for file hashing and perceptual hashing.
- Implemented watcher settings for runtime tuning of debounce and deduplication.
- Added database maintenance tools for resetting and deleting the database.
- Enhanced error handling with sanitization for client responses.
- Added tests for duplicates service and error handling.
- Updated ESLint configuration for better code quality checks.
- Introduced filename validation and logging utilities.
- Updated Card.js to improve generation time handling and display logic.
- Simplified SidebarView.js by removing unnecessary timeout logic and added event dispatching on close.
- Enhanced collectionsController.js with localized strings for collection management dialogs and messages.
- Removed auto scan trigger from AssetsManagerPanel.js and improved scroll restoration logic.
- Added localization support in customRootsController.js for folder management prompts and messages.
- Updated gridController.js to include localized messages for grid interactions.
- Enhanced sidebarController.js to persist sidebar open/close state.
- Improved sortController.js to use localized sort option labels.
- Added sidebar open state management in panelState.js.
- Enhanced customPopoverView.js and filterPopoverView.js with localized labels and button texts.
- Updated headerView.js to include version information and link to GitHub repository.
- Improved statusDot.js with localized tool capabilities and status messages.
- Added a safe zlib decompression function to handle large compressed data in parsing_utils.py, ensuring it respects a maximum decompressed size limit.
- Refactored the MetadataService class in service.py to improve file grouping logic and reduce redundancy by introducing helper functions for grouping existing paths and fetching EXIF/FFprobe data.
- Updated the Windows rating mapping in sync.py to clarify the mapping of star ratings to Windows-style percent fields for better compatibility.
- Improved error handling and logging in viewer/info.py for safer extraction of media info and file stats.
- Enhanced JSON parsing in scan.py to catch specific JSON decoding errors.
- Streamlined hotkeys documentation in HOTKEYS_SHORTCUTS.md and SHORTCUTS.md for clarity and conciseness.
- Improved keyboard shortcut handling in GridKeyboard.js and GridView.js to ensure proper focus management and keyboard shortcut installation.
- Added keyboard shortcuts for grid view actions including opening viewer, showing metadata, comparing assets, and side-by-side viewing.
- Integrated shortcut displays in context menus for grid and viewer actions.
- Implemented search focus and clear functionalities with keyboard shortcuts in the Assets Manager panel.
- Improved asset rating handling with debounce logic for better performance.
- Created a comprehensive shortcuts documentation file for user reference.
- Refactored context menu cleanup and session management for better reliability.
- Create js/components/buttons.js specific for shared UI elements
- Refactor toolbar.js and Viewer.js to use shared buttons
- Fix viewer overlay theme variable inheritance
- specific ignore patterns added to .gitignore