Commit Graph
257 Commits
Author SHA1 Message Date
MajoorWaldi 1c6653a21d refactor(i18n): remove unused db reset notice and related code
- 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
2026-04-16 13:55:54 +02:00
EwaldandClaude Sonnet 4.6 81ff7d1fb5 Grid audit fixes: unified filename key, adaptive overscan, selection anchor
- 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>
2026-04-15 15:07:52 +02:00
Ewald 89119b777f Fix floating viewer defaults and button regressions 2026-04-15 13:38:32 +02:00
Ewald 85aca69bc8 Default floating viewer streaming controls on 2026-04-15 12:31:49 +02:00
Ewald d72a31f4e3 Fix Florence vector health regression and sync backfill polling exports 2026-04-15 10:22:27 +02:00
Ewald 7b00cd9e50 Fix Florence-2 startup and refresh UI bundle 2026-04-15 09:44:21 +02:00
MajoorWaldiandMajoorWaldi 31e7e89376 fix: only forward opts to loadPreviewBlob when non-empty
Agent-Logs-Url: https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager/sessions/5601e848-036c-4cd0-adf1-b974e4bd50c9

Co-authored-by: MajoorWaldi <129623145+MajoorWaldi@users.noreply.github.com>
2026-04-14 15:42:11 +00:00
Ewald 1493e76254 Fix viewer stepping and geninfo regressions 2026-04-14 17:19:13 +02:00
Ewald 8ae71eb31e Fix floating viewer playback and search responsiveness 2026-04-14 15:23:35 +02:00
Ewald 6222b3d225 Optimize search queries and sync viewer updates 2026-04-14 11:38:25 +02:00
Ewald 7d1dd830b9 Add MFV player shortcuts and docs 2026-04-14 10:15:42 +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 7a18c8f4d9 Remove latent preview fallback and sync settings/UI artifacts 2026-04-13 13:40:26 +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 0b39bb91d5 feat: improve drag-and-drop & runtime listeners 2026-04-12 17:50:48 +02:00
Ewald c6ffdf3dcb Add top bar Viewer button for MFV 2026-04-11 22:53:08 +02:00
Ewald d7014bc942 fix: re-export registry internals + force-upsert on ASSET_INDEXED + fix test mocks
- 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
2026-04-11 20:31:47 +02:00
Ewald 7fb30f4c2d feat: realtime upsert immediate flush + pending-blue dot + feed card-size slider
- useGridLoader: add upsertAssetNow() — bypasses 200ms debounce via flushUpsertBatch()
- VirtualAssetGridHost: expose _mjrUpsertAssetNow on grid container
- gridApi: export upsertAssetNow(gridContainer, asset)
- entry: wire upsertAssetNow into registerRealtimeListeners
- registerRealtimeListeners: immediate:true on asset-added/asset-indexed handlers;
  pending-blue dot (has_workflow/has_generation_data=null) for unenriched new assets
- feedHost: add card-size toolbar (slider + -/+ buttons) in Generated Feed header;
  persists to settings.feed.minSize and dispatches mjr-settings-changed live
- theme: fix feed card meta-row layout (flex + gap) so items no longer collide
2026-04-11 20:17:15 +02:00
Ewald f56d6284da fix: MFV popup dark theme, gen info panel, reset zoom + popout polish
- 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
2026-04-11 19:06:23 +02:00
Ewald ec7ffdea3c fix(mfv-sidebar): node parameters auto-sync with graph nodes
- 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
2026-04-11 12:41:19 +02:00
Ewald 97649c9887 perf/test: audit backlog — lazy viewer imports, structured logging, perf budget + unit tests
- ViewerRuntime.js: convert 6 heavy static imports (abCompare, sideBySide,
  model3d, scopes, genInfo, frameExport) to dynamic lazy imports with
  _prewarmViewerModules(); all 8 call sites updated with optional chaining
- logging.js: add mjrDbg() export (gated by APP_CONFIG.DEBUG_VERBOSE_ERRORS);
  replace labeled console.debug() calls in bootstrap.js, useGridLoader.js,
  entry.js
- ttlCache.vitest.mjs: add 4 LRU edge-case tests (10k flood, re-set order,
  post-expiry pruning)
- grid_perf_budget.vitest.mjs: new CI perf-budget suite — 5 tests at 10k+
  assets (budget 400ms, actual ~40ms)
- backfill_jobs.py: new route module extracted from db_maintenance handler
- test_backfill_jobs.py: 61 direct unit tests covering all public functions
- test_db_corruption_recovery.py: new recovery scenario tests
- auth/fetch test suites: auth_refresh_race, client_auth_token, fetch_utils
- js_dist rebuilt

Tests: 393 JS passed, 1428 Python passed, 2 skipped
2026-04-11 11:56:01 +02:00
Ewald a2053d0cba refactor(v2): plan V2 complet — splits JS, tests frontend, durcissement securite
Chantier F - Typage Python
- ruff S101 déplacé en per-file-ignores (pyproject.toml)
- pyrightconfig.json : mode standard confirmé

Chantier G - Assertions & bare-except
- 16 blocs except documentés dans config.py
- --cov-branch activé, seuil coverage 60→68%

Chantier H - Cache settings
- Stratégie documentée dans settings.py
- _resolve_index_dir() logguée dans config.py

Chantier I - Split gros fichiers JS
- client.js 1509L → client.js 406L + clientAuth.js + clientOps.js + fetchUtils.js
- toolbar.js 927L → toolbar.js 458L + toolbarActions.js + toolbarControls.js
- FloatingViewer.js → FloatingViewer.impl.js + floatingViewer*(8 modules)
- Viewer_impl.js → ViewerRuntime.js + viewerShell.js + viewerThemeStyles.js + viewerOverlayDismiss.js
- model3dRenderer.js → model3dRenderer.impl.js + model3dCore.js + model3dLoaders.js + model3dSupport.js
- dialogs.js → dialogs.js + DialogTemplates.js

Chantier J - Tests frontend (Phases 1-2)
- use_drag_drop.vitest.mjs : 5 tests
- use_grid_state.vitest.mjs : 18 tests
- security_client_headers, security_deep_merge, security_runtime_state, runtime_store, dialog_templates
- Total: 80 fichiers test / 350 tests vitest

Chantier K - Pinia migration
- runtimeState.js entièrement migré vers Pinia
- getOptionalRuntimeStore.js + runtimeEnrichmentState.js ajoutés

Chantier L - Durcissement sécurité
- tests/security/test_rate_limit.py : 8 tests rate-limit (state machine complète)
- clientAuth.js : docstring sessionStorage security boundary
- three.js 0.183.2 audité : 0 CVE (Snyk)

Chantier M - Simplification config
- deps.py, tool_detect.py, utils.py nettoyés

docs: PLAN_REFACTO_V2_LONG_TERME.md ajouté et clôturé
.gitignore: coverage/ ajouté
2026-04-11 09:38:41 +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 e11d417310 fix: viewer header symmetric layout in compare mode
- 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
2026-04-10 15:42:53 +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 1982b3ab3c Add local and CI quality gates 2026-04-10 11:05:27 +02:00
Ewald a767295896 refactor(assets): improve structure and modularity of asset handling
- 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
2026-04-10 10:41:41 +02:00
Ewald 88a672132a docs(refactor): update MAJOR ASSETS_MANAGER refactor plan
- 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
2026-04-10 09:46:27 +02:00
Ewald f5917eef6e feat(execution): implement idle grace period and enhance asset handling
- 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
2026-04-09 01:55:32 +02:00
Ewald b8d166fe71 feat(viewer): modernize viewer overlay UI
- 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
2026-04-09 00:24:55 +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
Ewald 1ab690bb98 fix(grid): enhance AssetCardInner reactivity for AI processing updates
- 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
2026-04-08 17:46:10 +02:00
Ewald 7070e8d1e9 Refactor code structure for improved readability and maintainability 2026-04-08 17:07:52 +02:00
Ewald ALOEBOETOE 879e31ed78 Merge pull request #59 from MajoorWaldi/codex/viewer-resource-forbidden-relpath
feat(assets): implement grid snapshot caching
2026-04-08 13:53:46 +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
Ewald 39b55380db feat(output): support path strings in extractOutputFiles
- 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
2026-04-08 09:45:50 +02:00
Ewald 4e8fa8ab8d feat(minimap): enhance minimap functionality with zoom and navigation features
feat(extractors): add path prompt detection and improve workflow parameter handling

test(extractors): add tests for skipping filepath-like prompts and ensuring overrides
2026-04-08 09:42:39 +02:00
MajoorWaldi edd2186f4e fix(api): improve authentication token handling and refresh logic
- 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
2026-04-08 09:07:59 +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
MajoorWaldi 9f9480e2f9 feat(settings): add index directory setting for Majoor
- 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
2026-04-07 16:39:13 +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 ALOEBOETOEandCopilot Autofix powered by AI addce04d2e Potential fix for code scanning alert no. 16: Clear text storage of sensitive information
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-04-07 12:25:57 +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
Ewald ba272531ef feat(viewer): enhance player bar manager with active video asset tracking
- 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.
2026-04-07 10:35:43 +02:00
MajoorWaldi fbd1d182e8 fix(dnd): include avif images in ComfyUI metadata stripping
- 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
2026-04-06 18:28:58 +02:00
MajoorWaldi df96cac6ac feat(settings): add verbose logging options for route registration and startup
- 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
2026-04-06 18:07:19 +02:00
MajoorWaldi 977179de90 feat(security): implement settings-first remote setup flow and improve documentation
- 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
2026-04-06 16:59:18 +02:00
MajoorWaldi 4f8f6307df feat: add remote access security settings and enhance initial setup experience for ComfyUI users 2026-04-06 12:01:15 +02:00
MajoorWaldi 07262353f4 feat: add remote access write permissions and bootstrap token handling; enhance error messaging for write access issues 2026-04-06 10:26:23 +02:00