Commit Graph
83 Commits
Author SHA1 Message Date
Ewald b700104588 feat: modernize ComfyUI integration and add KJNodes previews 2026-08-12 11:16:06 +02:00
MajoorWaldi 6b34e87098 feat: opt-in folder browsing default + browse-mode index kickoff
- Default 'Show folders in Input / Output panels' (browser.showFolders) to
  disabled: fresh installs keep the classic flat grid until the user opts in
  (backend settings service, frontend defaults, settings UI toggle).
- Gate the root-level 'Create folder here' context menu on the setting.
- Kick off a throttled incremental background scan when browse mode serves
  the first page, so unindexed files get indexed/enriched and asset status
  dots resolve instead of staying pending (blue).
- Document the feature and setting in README, CHANGELOG, and
  docs/SETTINGS_CONFIGURATION.md.
2026-08-06 18:07:26 +02:00
Ewald e3999f8ef9 docs: document Collect Files feature (new guide, README, API reference, index, changelog) 2026-07-24 15:44:31 +02:00
Ewald 10f851aaae Add metadata FTS backfill, registry logging collision fixes, i18n locales, and doc updates 2026-07-22 16:33:34 +02:00
Ewald b98edbb80f Fix viewer paths and clarify write access 2026-07-10 11:43:00 +02:00
Ewald faf4055e08 Improve asset sidebar viewer and panel UX 2026-07-02 17:38:46 +02:00
Ewald 11d1a9c659 Clarify remote LAN write auth failures 2026-06-25 17:15:55 +02:00
Ewald 67a8aa4961 Release 2.4.9 and fix LTX video drops 2026-06-25 12:29:16 +02:00
Ewald bacc50000e Improve VRAM controls and settings organization 2026-06-16 17:17:19 +02:00
Ewald 5c31f29ecc Add workflow roots and fix video previews 2026-06-11 20:50:18 +02:00
Ewald 20a50040a6 Add workflow library scope 2026-06-09 10:28:25 +02:00
MajoorWaldi 99398aad5d Fix mojibake text and update default settings 2026-05-31 20:03:25 +02:00
Ewald 85a82f130a test: migrate ui/tests from .mjs to .ts
- Rename 132 *.vitest.mjs -> *.vitest.ts
- Rename vitest.setup.mjs -> vitest.setup.ts
- Rename helpers/vitestEnvironment.mjs -> vitestEnvironment.ts
- Delete settings_store.test.mjs (Node test runner, superseded by .vitest.ts)
- Fix .mjs imports in vitest.setup.ts and grid_loader_adaptive_paging.vitest.ts

Config updates:
- vitest.config.mjs: setupFiles, include, coverage.include -> .ts
- tsconfig.test.json: new dedicated config for test files (strict:false)
- knip.json: update project pattern for tests
- package.json: add typecheck:tests script (audit-only)
2026-05-26 13:04:05 +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 a363a77a6b feat(db): Phase C tag normalization — v18/v19 migrations, normalized FTS, readers v2, stop-write, drop legacy columns
- m018_fts_from_normalized_tags: replace FTS triggers to read from asset_tags+tags
  instead of the legacy JSON asset_metadata.tags column
- m019_drop_legacy_tag_columns: remove asset_metadata.tags and tags_text via
  create-copy-swap; includes invariant check (aborts if legacy tags not backfilled)
- registry.py: MIGRATIONS = [M017, M018, M019]
- schema_fts.py / schema_sql.py: FTS helpers and baseline triggers rewritten to
  source from normalized tables with asset_tags guard
- TagsRepository: normalized read path (get_tags_for_asset, list_assets_with_tag,
  search_assets_by_tags) + sync_from_legacy_row repair helper
- Readers v2: searcher, result_hydrator, metadata_helpers, updater, rating_tags_service,
  rename_service, stacks/service, duplicates/service migrated to asset_tags/tags JOIN
- Stop-Write: writes no longer update asset_metadata.tags / tags_text
- sqlite_facade: ahas_table helper; sqlite_recovery updated
- deps.py: TagsRepository wired into service container
- scripts/tag_drift_doctor.py: detects assets with legacy tags not backfilled
- ADR 0009, ARCHITECTURE_MAP, RATINGS_TAGS_COLLECTIONS, adr/README updated
- Tests: test_drop_legacy_tag_columns (2), test_fts_from_normalized (6),
  test_tags_dual_write, test_tags_normalized_readers + regression fixes across
  test_rating_tags_import, test_index_metadata_helpers, test_index_searcher,
  test_asset_updater, test_deps, test_schema_heal
- Full suite: 1687 passed, 2 skipped, 2 pre-existing failures (test_health_routes)
2026-05-22 15:00:27 +02:00
Ewald 9876e36c22 chore: viewer, context menu, stacks, docs updates 2026-05-21 08:09:38 +02:00
Ewald 5bc7d71a24 Release v2.4.8 2026-05-18 00:25:14 +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 f00fdb570c Fix MFV hotkeys, node stream, and video seek 2026-05-01 13:14:07 +02:00
Ewald cb8544483d Stabilize assets grid pagination 2026-04-26 15:47:47 +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 9cb0d1dac8 docs: add MFV default toggle settings 2026-04-15 16:30:01 +02:00
Ewald dae292725c release: v2.4.5 2026-04-15 15:43:41 +02:00
Ewald 7d1dd830b9 Add MFV player shortcuts and docs 2026-04-14 10:15:42 +02:00
EwaldandClaude Sonnet 4.6 396684185c chore: remove internal planning docs from repo
Remove PLAN_REFACTO_COMPLET, PLAN_REFACTO_V2_LONG_TERME, and VUE_MIGRATION_PLAN
as they are internal development artifacts not relevant to end users.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 08:50:25 +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 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 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 1982b3ab3c Add local and CI quality gates 2026-04-10 11:05:27 +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 eb5684fbdd docs: update README and architecture map
- Update frontend stack description in README
- Add detailed architecture and module responsibilities in ARCHITECTURE_MAP.md
- Update PLAN_REFACTO_COMPLET_MAJOOR_ASSETS_MANAGER.md with latest changes
2026-04-10 09:32:30 +02:00
Ewald 847fccf087 refactor(mjr_am_backend): complete backend refactoring and update documentation
- Commit DB split, security, registry, and observability lots
- Create missing asset management sub-services
- Extend Vue panel tests and implement teardown
- Update dependency policy and ADRs
- Document refactoring progress and next steps
2026-04-10 06:25:52 +02:00
Ewald f9a72d2507 Refactor SQLite facade and introduce FTS schema management
- Delegated column validation and repair functions to transaction_manager.
- Introduced new schema management helpers for full-text search (FTS) in schema_fts.py.
- Added schema_sql.py for SQL constants and identifier safety helpers.
- Implemented vector embeddings schema repair in schema_vec.py.
- Updated tests to accommodate changes in function signatures and behavior.
2026-04-09 17:14:22 +02:00
Ewald 21ddd64596 refactor(mjr_am_backend): pass backend refactoring - security/registry/assets_impl
- Update refactoring plan in docs/PLAN_REFACTO_COMPLET_MAJOOR_ASSETS_MANAGER.md
- Move load_asset_filepath_by_id and load_asset_row_by_id to features/assets/service.py
- Extract security_proxies.py, security_auth_context.py, security_rate_limit.py, security_csrf.py from security.py
- Extract registry_middlewares.py from registry.py
- Reduce size of assets_impl.py, security.py, and registry.py
- Update task status and next steps in the refactoring plan
2026-04-09 14:35:26 +02:00
Ewald 57dfbaddb7 refactor(mjr_am_backend): update architectural plan and status
- Review and update the master plan against the current state of the repo
- Formalize the end of the frontend migration in the master plan
- Add new modules and changes to the checklist
- Update the target structure and criteria for acceptance
- Add new sections for database splitting, handlers separation, and registry/security/observability clarification
- Update the summary and operational resume
2026-04-09 11:08:10 +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 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 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 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
MajoorWaldi d03b8705d6 chore: release 2.4.4 2026-04-05 20:37:19 +02:00