Commit Graph
139 Commits
Author SHA1 Message Date
Ewald ed8e33c5e4 Prepare 2.5.0 features and release notes 2026-07-09 11:18:28 +02:00
Ewald cdd0314ad9 Fix search filter parsing and grid query typing 2026-07-01 16:16:26 +02:00
Ewald 2633e67ede Improve workflow metadata and viewer UX 2026-06-30 22:58:41 +02:00
Ewald 5fadbbbeb1 Fix metadata sidebar extraction and display 2026-06-29 18:07:21 +02:00
Ewald 6f116a3eb4 Fix generation prompt tracing 2026-06-29 08:54:20 +02:00
Ewald 30ae52d978 Integrate ComfyUI app mode and workflow UX fixes 2026-06-22 16:03:28 +02:00
Ewald 431faa8557 Fix security findings and test environment 2026-06-22 09:35:10 +02:00
Ewald b97f13d153 Optimize asset grid and viewer performance 2026-06-17 10:09:52 +02:00
Ewald bacc50000e Improve VRAM controls and settings organization 2026-06-16 17:17:19 +02:00
Ewald 5230dd43a2 Fix Python CI quality failures 2026-06-12 14:04:00 +02:00
Ewald 85d6da74fb fix: add type: ignore[index] for Result.data indexing in tests 2026-06-12 10:21:09 +02:00
Ewald 79cece3f01 fix: mypy type-ignore annotations in test_duplicates_service 2026-06-12 10:20:26 +02:00
Ewald 43a1fad285 chore: update dist, tests, and UI components 2026-06-12 10:19:33 +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
Ewald 4660c90b28 Fix CI event tests and bundle drift check 2026-06-03 15:05:49 +02:00
Ewald 99f6fe0ec3 test(types): satisfy mypy for StreamReader protocol stub 2026-06-02 17:22:07 +02:00
Ewald 8628122377 fix(ci): resolve ts typecheck and aiohttp test stub incompatibility 2026-06-02 17:21:42 +02:00
Ewald 31e5ae0d73 Fix asset grid refresh and media card handling 2026-06-02 16:25:20 +02:00
MajoorWaldi 99398aad5d Fix mojibake text and update default settings 2026-05-31 20:03:25 +02:00
Ewald a78f4572c8 Align frontend layout with ComfyUI conventions 2026-05-26 10:42:22 +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 37c65f984e fix(tests): add mypy None guards in test_fts_from_normalized + type-ignore in test_asset_updater 2026-05-22 15:03:38 +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 9c19dfb6b5 feat(db): versioned migration runner + Repository pattern + normalized tags (Phase 3.2)
Introduces a forward-only, additive, idempotent migration framework on top of the existing legacy implicit-repair path (which remains the source of truth for schema versions <= 16). Versioned migrations live in mjr_am_backend/adapters/db/migrations/ and are tracked in a new schema_migrations bookkeeping table. The runner is invoked on every startup right after migrate_schema(); pending migrations are applied in version order, already-applied ones short-circuit.

First migration v17 normalize_tags creates a parallel tags + asset_tags relational layer (case-insensitive UNIQUE on tag name, cascade-delete on asset side, covering index on tag_id). Backfill reads asset_metadata.tags JSON safely (malformed rows skipped) and uses INSERT OR IGNORE everywhere for full idempotency. The legacy JSON column is NOT touched; existing v16 readers keep working.

Adds a Repository layer under mjr_am_backend/data/repositories/ to isolate raw SQL from services. First repository TagsRepository exposes ensure / get_by_name / list_all / attach / detach / list_for_asset / list_assets_with_tag / count on the new normalized tables, all returning Result.

Tests: 6 migration-runner tests (version validation, idempotency, bookkeeping, failure propagation, registry application) and 7 TagsRepository tests (CRUD, case-insensitivity, cascade-delete) - 13/13 passing. Existing test suite remains green (regressions limited to 2 pre-existing health_routes failures unrelated to this change).

Phase 3.2 closes the DB hardening item of the v3 improvement plan.
2026-05-21 23:15:55 +02:00
Ewald 625920846c feat(plugins): introduce Blueprint manifest format (Phase 3.3)
Adds a declarative blueprint.{yaml,json} manifest layer on top of the existing dynamic-module plugin loader. Each plugin can now ship as a self-contained package with a manifest describing name, version, author, type, entrypoint class, and capabilities. The legacy flat .py plugin format remains fully supported.

Manifest schema v1 with fields: schema_version, name (slug), version (semver), author, type (metadata_extractor), entrypoint.{module,class}, optional capabilities/tags/license/homepage/description/min_majoor_version. Path-traversal and module-name injection are rejected at parse time. YAML manifests require PyYAML (already shipped by ComfyUI core); JSON manifests need no extra deps.

Loader: PluginLoader.discover_plugins now treats subdirectories with a blueprint manifest as blueprint packages (taking precedence over plain Python-package scanning). New PluginLoader.blueprints property and get_stats[blueprints] field expose loaded manifests for listing endpoints.

Migrated bundled examples to blueprint layout: plugins/examples/wanvideo/, plugins/examples/custom_node_template/, plugins/examples/rgthree/ (YAML variant).

Tests: 11 new tests in tests/features/test_blueprint_plugins.py covering manifest parsing edge cases (bad name, bad semver, unknown type, path traversal, schema mismatch), YAML support, discovery skipping invalid manifests, and loader integration including a missing-entrypoint warning path.
2026-05-21 22:31:15 +02:00
Ewald 912ebb975d feat(api): add /api/v2/assets/* OpenAPI compat layer (Phase 3.1)
Read-only surface mirroring ComfyUI core OpenAPI assets spec under a /api/v2/ prefix to avoid collision with the existing /api/assets/* endpoints served by core.

Endpoints:

- GET  /api/v2/assets (list with name_contains, include/exclude_tags, sort, limit/offset)

- GET  /api/v2/assets/{id} (numeric ID, blake3:hex hash, or filename fallback)

- GET  /api/v2/assets/{id}/content (FileResponse, path-allowlist enforced)

- GET  /api/v2/assets/{id}/tags

- HEAD /api/v2/assets/hash/{hash} (existence check)

11 unit tests in tests/features/test_api_v2_assets.py covering payload shape, pagination, hash check (match/miss/malformed), 404 paths, and disallowed content paths.
2026-05-21 22:24:46 +02:00
Ewald 120c822c6f File path refacto 2026-05-21 21:07:16 +02:00
Ewald ddfe817b45 Polish asset manager UI and metadata helpers 2026-05-21 18:59:30 +02:00
Ewald b18cafcb3b Integrate Comfy core asset ingestion 2026-05-21 18:56:04 +02:00
Ewald 9876e36c22 chore: viewer, context menu, stacks, docs updates 2026-05-21 08:09:38 +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 d174c1c141 test: fix mypy typing in asset operation service tests 2026-05-09 22:35:12 +02:00
Ewald 015c673d6d feat(viewer): add workflow graph map and viewer sync updates 2026-05-09 22:34:37 +02:00
Ewald 0bb9232ca7 Improve geninfo extraction and Happy Horse prompts 2026-05-06 23:14:48 +02:00
Ewald 8a7ab04558 Tighten remaining audit surfaces 2026-05-01 17:47:00 +02:00
Ewald 777d080494 Protect vector mutation routes 2026-05-01 17:36:12 +02:00
Ewald 0b72e50024 Harden mutation security defaults 2026-05-01 17:30:15 +02:00
Ewald 1ffd37f099 Fix mypy gate for search route tests 2026-05-01 04:36:42 +02:00
Ewald dbe876cff2 Fix asset manager pagination and preview stability 2026-05-01 04:35:04 +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 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 4e80b95bbc feat(geninfo): add api_node_extractor with 28+ comfy-core API providers
- New module mjr_am_backend/features/geninfo/api_node_extractor.py
- Covers all comfy_api_nodes/ providers: Alibaba Wan, Kling AI,
  Luma Dream Machine, MiniMax/Hailuo, Runway, Vidu, Google Veo,
  Black Forest Labs (Flux), xAI Grok, Ideogram, Recraft, Moonvalley,
  Pixverse, LTX Video, ByteDance Seedance/Seedream, Google Gemini,
  OpenAI/Sora, Stability AI, Reve, Bria, Magnific, Topaz, HitPaw,
  Wavespeed, Quiver, Sonilo, ElevenLabs
- _refine_engine_type(): classifies engine.type from class_type fragments
  (txt2img, txt2vid, img2vid, img2img, vid2vid, audio)
- _populate_api_node_output(): extracts duration, resolution->size, ratio
- ByteDance dotted-key pattern handled by _populate_seedance_output
- Hooked into payload_builder._build_no_sampler_result (first fallback)
2026-04-20 11:58:37 +02:00
Ewald 792b2a376e fix(graph_converter): improve text fallback handling for primitive strings
- Add special handling for primitive string nodes in text fallback
- Set text and value from non-empty primitive string nodes
- Update tests to cover new behavior
2026-04-15 15:12:39 +02:00
Ewald c3f4cca73a Support string concatenation in geninfo prompt tracing 2026-04-15 11:12:19 +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
Ewald 379eb96df9 fix: allow index directory override to create non-existing path 2026-04-14 20:41:19 +02:00