A generation with a compare node indexes two temp preview files next to
the output, so one generation showed a badge of 3. Skip assets whose
source is temp.
The Run group is rendered asynchronously inside the actionbar, and the
observer only watched the actionbar's direct children, so the button stayed
at the end once Run appeared. Observe the subtree and re-anchor when the
button is not right after the Run group.
- Watcher: a sidecar JSON created or edited next to an unchanged media
file now invalidates that file's metadata cache and scan journal and
forces a re-extraction; a non-incremental re-index no longer skips
assets that already have a metadata row when the cache was cleared.
- Merge index rows that are one file under different Windows path
spellings at startup, keeping the best rating, all tags, the stack
cover, execution ids and the vector embedding.
- Remove deleted/removed assets from the generated feed too.
- Scope the floating viewer's single-letter shortcuts to the viewer
(pointer, focus or pop-out) instead of the whole page.
- Take LGraph/LGraphCanvas types from comfyui-frontend-types and drop
@comfyorg/litegraph; delete five dead frontend files.
- Fix an order-dependent test that leaked an input-directory override.
- Fix assets_fts triggers: the external-content FTS5 table was updated
with plain UPDATE/DELETE, so every rename or move failed with
"database disk image is malformed" and the watcher fell back to
delete + re-index, losing ratings, tags and collections. Use the FTS5
'delete' command, limit the update trigger to filename/subfolder and
repair existing databases (plus an FTS rebuild) at startup.
- Wait for the prompt history entry before post-execution ingestion:
ComfyUI fires on_prompt_end before task_done() stores history, so
outputs of prompts queued from the API or another client could be
missed.
- Scan prune only removes assets whose absence is confirmed; a stat
error or an unreadable scan root no longer deletes user data. Report
pruned assets instead of SQLite change counts.
- Emit mjr-assets-removed for watcher deletes and scan prunes and
mjr-asset-updated for moves so open grids update in place.
- Annotate mjr-scan-complete with origin and needs_refresh; reload the
grid once when live events cannot cover a change and summarise a
finished directory scan in one ComfyUI core toast.
- Document the comparison with ComfyUI core's asset system.
- Use the typed ToastManager API (success/error/info/warning/loading)
instead of the deprecated add(); add() stays as a fallback for older
frontends.
- Accept a toast manager without add() so toasts keep working once
ComfyUI drops the deprecated methods.
- Tracked operations (DB restore/reset, vector backfill) show one
loading toast updated in place via its ToastId instead of stacking a
toast per step; dismiss them on extension teardown.
- Persistent toasts use the largest safe timer delay instead of
Infinity; history action links become native toast action buttons
(http(s) or same-origin paths only).
- Route genInfoOverridePicker and comfyAlert through the core toast API;
drop the app.ui.toast fallback, the no-op fallback dismisser and the
unused .mjr-toast CSS.
- Keep the Majoor message center as a read-only history; it no longer
pops open by itself on reset/backfill.
- Document the notification audit.
- Move the read-only OpenAPI compat surface from /api/v2/assets to
/mjr/am/compat/assets so it never squats ComfyUI core's /api namespace;
the legacy alias is opt-in via MJR_AM_LEGACY_API_V2_ASSETS=1.
- Allow Python 3.14 (requires-python <3.15) and add 3.14 to CI and tox.
- Stop wrapping api.queuePrompt: progress tracking now resolves the
running prompt from the core Jobs API (getJobDetail), then /queue and
/history, driven by websocket events. Remove wrapHostQueuePrompt.
- Add opt-in Majoor.Integration.HideNativeAssetsTab setting that hides
ComfyUI's native Assets sidebar tab through the official
getSidebarTabs/unregisterSidebarTab API and restores it when disabled.
- Fix all 913 type errors in tsconfig.test.json and type-check tests in
CI; drop a duplicated `stubs` key in asset_card_inner test; make
addToastHistory's type argument optional for the object form.
- Update audit report, changelog, API reference and env var docs.
- Sidebar prewarm no longer steals the Vue host from an already-open panel:
mountKeepAlive only attaches on first creation unless explicitly allowed,
and teardown resets the prewarm state and removes its detached container.
- Topbar MFV button now also observes the actionbar container's parent so a
full replacement of .actionbar-container (not just mutations inside it) is
detected and the button is remounted.
- get() skips request deduplication when a caller passes its own AbortSignal,
since the shared fetch only ever wired up the first caller's signal.
- The API client now rejects response envelopes missing a boolean `ok` field
(including bare arrays) and downgrades ok:true responses paired with an
HTTP error status to INVALID_RESPONSE.
- frontend-compat-nightly.yml: upstream ComfyUI_frontend's build:types now
emits per-file declarations mirroring src/ instead of one bundled file, so
the previous entrypoint paths no longer exist. The activation step now also
checks dist/src/types/index.d.ts and copies the whole dist/ tree so the
unbundled declaration's relative imports keep resolving.