Commit Graph
120 Commits
Author SHA1 Message Date
Ewald 16da4a279c Restore browser navigation guard contract 2026-05-26 14:29:29 +02:00
Ewald a78f4572c8 Align frontend layout with ComfyUI conventions 2026-05-26 10:42:22 +02:00
Ewald 5c6ec82e8e migrate frontend source to TypeScript 2026-05-25 00:36:51 +02:00
Ewald 6587940862 refactor(app): enhance ComfyUI integration and settings sync - Implement two-way binding for ComfyUI settings in Majoor - Add new settings for auto-opening viewers and floating sidebar - Improve extension manager compatibility and dialog handling - Extend sidebar tab registration and controller discovery - Introduce graph canvas helpers for centering view and getting viewport bounds - Enhance minimap functionality with new graph canvas methods - Add settings sync with ComfyUI language 2026-05-23 18:35:21 +02:00
Ewald ddfe817b45 Polish asset manager UI and metadata helpers 2026-05-21 18:59:30 +02:00
Ewald 5bc7d71a24 Release v2.4.8 2026-05-18 00:25:14 +02:00
Ewald 0e2c7c9e8e Fix drag drop and viewer regressions 2026-05-18 00:09:30 +02:00
Ewald 22648e5961 chore: commit remaining workspace changes 2026-05-17 21:21:49 +02:00
Ewald 4e7207a05d feat: update drag drop, docs, and build outputs 2026-05-15 17:13:04 +02:00
Ewald 9501254ddc Improve MFV workflow tools and graph map handling 2026-05-11 11:47:35 +02:00
Ewald b2437259a9 Add MFV guide, Graph Map docs, and viewer integrations 2026-05-10 20:10:48 +02:00
Ewald f239f0b4fa fix(mfv): V key context, clear selection on folder nav, filter folder cards from MFV
- panelHotkeysController: move V key handler before isPanelHotkeyContext guard
  so it fires after subfolder navigation when hover/focus state has reset;
  only blocked when focus is on an input/textarea outside the panel
- browserNavigationController: add clearSelection param, call it before
  reloadGrid() in navigateFolder, resetToBrowserRoot, onOpenFolderAsset,
  onCustomSubfolderChanged so stale selection is cleared immediately
- panelRuntime: pass clearSelection via gridContainer._mjrSetSelection([])
- floatingViewerManager: filter folder-kind assets from selectedIds in
  _onSelectionChanged to avoid trying to load a folder as media
2026-05-07 21:21:40 +02:00
Ewald 16546ee7c2 Bump version and add ImageOps message 2026-05-01 19:41:58 +02:00
Ewald 1a01c5ef86 Update frontend grid and generated assets 2026-05-01 17:23:47 +02:00
Ewald f00fdb570c Fix MFV hotkeys, node stream, and video seek 2026-05-01 13:14:07 +02:00
Ewald 80c0aad5e7 audit profond : corrections et améliorations 2026-04-30 08:42:27 +02:00
Ewald b9ab229555 feat: add VectorCaptionOnIndex setting (Florence-2 captions during indexing)
- Add AI.VectorCaptionOnIndex UI setting with rollback on API error
- Backend: persist/read vector_caption_on_index via AppSettings
- Expose set_vector_caption_on_index via health route and clientOps API
- Wire is_vector_caption_on_index_enabled() into config + env vars
- Update vector_indexer to honour the caption-on-index flag
- Add tests: settings backend, health routes, vector indexer video alignment
- Extend grid_scope_switch_cache test coverage
2026-04-25 12:12:04 +02:00
Ewald 2b10814b2e feat(mfv): ImageOps live preview crop + node panel selection sync
- ImageOps preview bridge: stream cropped contain-fit rect of __imageops_state.canvas (removes square scope/letterbox); fall back to full canvas when user pan/zoom is active. Signature-cached encode (WeakMap) avoids re-encoding on every poll tick.
- Floating viewer: skip metadata enrichment for imageops-live-preview source; preserve user pan/zoom across stream frames of the same node; remove inline CSS overrides that blocked the MFV transform.
- Workflow Nodes panel: graph-selected node is auto-expanded, promoted to first position in its container, scrolled into view, and gets a subtle blue highlight (is-selected-from-graph).
2026-04-24 23:47:27 +02:00
Ewald b87da7b67f perf(grid): cold-start fast-load + stale-snapshot head refresh + race guards
- Early-fetch immediate (no setTimeout 800ms), persisted scope/sort key, includeTotal=false.

- Snapshot persisted in localStorage (was sessionStorage), with legacy migration.

- MIN_LOADING_SKELETON_MS=0; skeleton hides as soon as assets are present.

- New scheduleSnapshotHeadRefresh: re-fetch page 0 after fast-path cached:true and upsert new items at correct sort position. Fixes recent assets disappearing on scope switch (custom->output).

- offset=max(offset, assets.length) in didHydrate branch so prefetch loads next page, not page 0 again.

- refreshDuplicateAlerts non-blocking (fire-and-forget).

- Race guards: scheduleDeferredExecutionReload skips reload if scope/filter changed during prompt execution; scheduleSnapshotHeadRefresh aborts if context changes mid-fetch.

- Includes other staged misc edits (config, scanner, watcher, components).
2026-04-23 17:49:20 +02:00
Ewald 6cfcc84c1a fix: MFV seed randomize + subgraph widget live sync
- sidebarRunButton: add _walkAllNodes() to mirror ComfyUI's native
  beforeQueued/afterQueued widget cycle on all nodes incl. inner subgraph
  nodes so control_after_generate (randomize/increment/decrement) is
  applied correctly on each MFV run
- widgetAdapters: _syncWidgetDomElement falls back to
  cachedDeepestByFrame.widget.inputEl for PromotedWidgetView so typing
  in the sidebar updates the canvas textarea of subgraph outer widgets
  in real time
- widgetAdapters: spinner step forced to 1 for integer widgets;
  widget.value restored after callback to bypass step2 snapping
2026-04-22 10:19:53 +02:00
Ewald b2ef3d0f80 fix(assets): improve grid reload and scroll behavior
- Adjusting the infinite scroll loading point to 4 card rows from the bottom
- Improving grid state restoration after reloads
- Enhancing the early fetch mechanism for faster initial loads
- Optimizing execution runtime to handle large numbers of assets efficiently
- Updating viewer and run button behavior for better integration with ComfyUI
- Fix various bugs and edge cases
2026-04-20 23:10:42 +02:00
Ewald 8ae71eb31e Fix floating viewer playback and search responsiveness 2026-04-14 15:23:35 +02:00
Ewald 9b8b9f9a12 Improve MFV player UX and regression coverage 2026-04-14 09:00:43 +02:00
Ewald f448faaca3 Auto-open message history for reset/backfill; show ComfyUI run errors in MFV overlay 2026-04-13 14:34:20 +02:00
Ewald db88ad982a feat: add MajoorSaveImage & MajoorSaveVideo nodes, generation_time_ms extraction, topbar MFV button announcement
- 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
2026-04-12 19:16:07 +02:00
Ewald 7e985b8e6d feat(mfv): multi-pin A/B/C/D, node parameters sidebar, sidebar position setting
- 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
2026-04-10 21:47:01 +02:00
Ewald 13a69c1237 fix: wire video autoplay mode setting to grid cards
- Import APP_CONFIG in AssetCardInner.vue and read GRID_VIDEO_AUTOPLAY_MODE
- Add reactive videoMode ref updated via mjr-settings-changed listener
- Add bindVideoAutoplay() with IntersectionObserver for 'always' mode
- Add cleanupVideoBehaviors()/applyVideoMode() to switch between off/hover/always
- watch(videoMode) re-applies behavior on runtime setting change
- Fix rating reset bug: mark_recent_generated before ExifTool write (sync.py/watcher.py)
- Add scope-switch cache, exit-similar-scope, and rating/tags ID tests
2026-04-10 15:18:53 +02:00
Ewald 79f98217c5 feat(viewer): enhance video controls and asset navigation
- 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
2026-04-08 20:50:26 +02:00
MajoorWaldi 8b0b77051b feat(assets): implement grid snapshot caching
- 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
2026-04-08 13:48:20 +02:00
MajoorWaldi 654bed1b7b feat: add LiveStreamTracker for enhanced video and image handling
- 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.
2026-04-07 23:12:37 +02:00
Ewald 0c7466c20b feat: add LiveStreamTracker for enhanced media handling and tracking
- 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.
2026-04-07 14:53:37 +02:00
Ewald 082a6db57b feat: add LiveStreamTracker module for enhanced live streaming capabilities
- 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.
2026-04-07 12:16:38 +02:00
MajoorWaldi c860f38fbd Refactor executable path resolution in ExifTool and FFProbe; enhance vector search stats with coverage fields; improve DB backup naming and handling; add tests for new functionality 2026-04-06 09:41:58 +02:00
MajoorWaldi 99a429dffe feat: add LiveStreamTracker and entry module for enhanced video and image processing capabilities 2026-04-04 22:28:49 +02:00
Ewald 899f9dda35 feat: améliorer la gestion des événements de rechargement et la synchronisation des paramètres dans le panneau 2026-04-03 20:07:46 +02:00
MajoorWaldi 2fa41a0e76 feat: add useGridState and useVirtualGrid composables for asset management
- 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.
2026-04-03 11:04:55 +02:00
MajoorWaldi b0070544d0 feat: implement request deduplication in API client
- Added deduplication logic to prevent multiple simultaneous requests for the same asset metadata.
- Introduced a pending requests cache to manage in-flight promises.
- Updated `getAssetMetadata` and `vectorFindSimilar` functions to utilize the deduplication feature.
- Enhanced error handling to clear pending entries on request failures.

feat: add MediaBlobCache for media asset error tracking

- Created MediaBlobCache to manage blob URLs and track loading errors for media assets.
- Implemented methods to mark URLs as errored and acquire blob URLs with ref-counting.
- Integrated MediaBlobCache into the Card component to handle broken image URLs.

feat: reconcile selection IDs in grid management

- Added `reconcileSelectionIds` function to synchronize selected asset IDs with visible assets.
- Updated grid selection management to prune selections based on visibility.
- Enhanced the AssetsManagerPanel to trigger selection reconciliation on filter changes.

style: improve loading overlay and skeleton loaders

- Refined loading overlay styles for better user experience.
- Added CSS for skeleton loaders to provide visual feedback during asset loading.

test: add unit tests for API client deduplication and grid selection

- Implemented tests for deduplication logic in the API client.
- Added tests for the new `reconcileSelectionIds` function in the grid selection manager.
2026-03-30 17:04:33 +02:00
MajoorWaldi cd5a581e4f Bump version to v2.4.3 2026-03-29 23:44:39 +02:00
MajoorWaldi c3071914eb feat: Enhance asset management with new stack rename endpoint and improve filtering logic 2026-03-29 20:00:06 +02:00
Ewald 3fd6d6ad3c feat: Add recent asset upsert tracking and optimize reload conditions in asset manager 2026-03-29 18:55:01 +02:00
Ewald 31d8bb5958 feat: Implement startup warmup sequence and enhance asset manager panel rendering 2026-03-29 17:24:54 +02:00
Ewald 44c0c57f6e feat: Add asset management and real-time listener functionalities
- 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.
2026-03-29 01:03:49 +01:00
MajoorWaldi 71ef418bdd feat: Implement sibling asset hiding logic for PNG files
- Added functions to manage sibling asset states and determine if PNG siblings should be hidden based on their context (video, audio, model3D).
- Refactored asset appending logic to utilize the new sibling hiding functionality.
- Updated the backend to prioritize image assets over video assets in the same stack group.
- Introduced a new execution asset buffer to manage job-related assets efficiently.
- Created tests for sibling hiding logic and execution asset buffer functionality.
2026-03-28 17:58:23 +01:00
MajoorWaldi dc72be0139 feat: enhance JS testing and linting setup
- Added coverage reporting for Vitest with configuration in vitest.config.mjs
- Updated package.json to include new scripts for JS coverage, linting, and formatting
- Modified run_quality_gate.py to allow skipping ESLint and Prettier checks
- Introduced .prettierrc for consistent code formatting
- Created .prettierignore to exclude specific files and directories from formatting
2026-03-28 14:14:28 +01:00
MajoorWaldi c9be315b42 feat: Implement stack grouping for asset cards with popover management and enhanced CSS styling 2026-03-27 17:38:07 +01:00
MajoorWaldi cb171e826d feat: Add runtime bootstrap helpers and search request normalization
- 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.
2026-03-26 20:42:51 +01:00
MajoorWaldi c7f93f0eab Refactor and optimize various components
- Improved URL parameter handling in `appendAssetFilterQueryParams` for better readability and maintainability.
- Added error handling for performance marks in `startTimer` to prevent potential issues.
- Enhanced `setRuntimeStatePatch` to avoid modifying blocked keys in the runtime state.
- Introduced hard caps on recent file and execution start tracking to prevent memory growth.
- Reduced workflow cache size to limit memory usage.
- Implemented safe escaping for asset IDs in `findAssetElement` to mitigate XSS risks.
- Ensured proper grid reference invalidation during asset manager panel cleanup.
- Enhanced debounce utility with cancel and flush methods for better control.
- Updated SQLite facade to improve error handling and schema population.
- Simplified custom roots store error messages for clarity.
- Added validation for upload filenames to prevent reserved names and control characters.
- Improved path resolution logic to avoid race conditions with symlinks.
- Enhanced health check routes with raw socket peer IP validation for security.
- Added collision handling in staging file resolution to prevent infinite loops.
- Updated tests to reflect changes in query building and validation logic.
2026-03-21 16:20:26 +01:00
MajoorWaldi 3229a134fa feat(release): update to version 2.4.2 with new features and bug fixes 2026-03-17 23:00:25 +01:00
MajoorWaldi 1be34e889d fix(multiple): address various issues and improve system resilience
- Fix potential timeout leak in Card.js
- Enhance AssetsManagerPanel reload logic
- Optimize FloatingViewer drag interactions
- Refine plugin loader and manager for hot-reload safety
- Improve registry configuration handling
- Remove redundant file existence checks in assets_impl
- Implement rate limiting for asset renaming
2026-03-17 16:24:48 +01:00
MajoorWaldi d3ff55a753 feat(panel): add toast history tab to message popover
- Implement toast history functionality in the message popover
- Add new history tab next to messages and shortcuts
- Display recent toast notifications in the history panel
- Include clear button to remove toast history
- Add unread indicator to history tab when there are new entries
- Update message popover layout and styling to accommodate new tab
2026-03-13 00:10:15 +01:00