Save Image gains format, input_color_space and crf options backed by the core Save Image (Advanced) encoders. Save Video gains mp4/mkv/webm with H.264 or AV1 and keeps the source bit depth and HDR colour space. Both nodes return their frames, and the video sidecar PNG now honours --disable-metadata.
The frontend called checkMajoorVersion() unconditionally on startup,
and the backend /mjr/am/releases endpoint made outbound requests to
api.github.com to power it. This violates the no-internet-requests
policy for core ComfyUI code, even for update checks framed as
diagnostic or opt-out. Removes the endpoint, the frontend check, the
now-dead version-update badge dot in HeaderSection.vue, and associated
tests/docs.
The unanchored `tools/` pattern matched that directory at any depth,
stripping the ExifTool/FFProbe adapters out of published packages and
causing ModuleNotFoundError at startup. Anchored to /tools/ so only
the root-level dev-scripts folder is excluded. Bump to 2.5.3.
Exclude development-only content from Registry packages while retaining runtime
docs and vendor assets. Centralize environment access and media process execution,
validate filesystem inputs, and restrict nested media protocols.
Route update checks through the backend GitHub boundary and read version metadata
without spawning Git. Preserve annotated-tag priority over lightweight nightly
tags, including packed refs, with regression coverage. Rebuild the frontend bundle.
Validation: Python tests with coverage, JS tests, targeted media/version regression
tests, and the canonical Python quality gate.
Docs:
- Fix stale version/date banner in docs/DOCUMENTATION_INDEX.md (2.4.9 -> 2.5.1)
- Normalize CHANGELOG.md section headers to plain text (strip inconsistent
emoji prefixes used in older entries)
- Add missing diacritics in French command labels (locales/fr/commands.json)
- Add ToC anchors for nested Installation subsections in README.md
Backend:
- Document the comfy_entrypoint() wrapper's rationale in __init__.py
Frontend:
- Wire tsconfig.strict.json into an actual npm script (typecheck:js:strict,
now part of quality:strict) instead of leaving it dead/unenforced
- Fix the 8 strict-mode type errors this surfaced across
comfyWorkflowParser.ts, canvasLoaderNode.ts, FloatingViewer.impl.ts and
workflowGraphMapActions.ts
- Rebuild dist/ to match source
Deferred (too large/risky to blind-fix in this pass):
- ui/vue/** ESLint+Vue+TS linting: typescript-eslint currently has no
compatible release for this repo's typescript@7.0.2, so adding
eslint-plugin-vue/typescript-eslint is blocked upstream
- Converting all 44 .vue SFCs to lang="ts" with typed defineProps
- Eliminating the ~230 any/as any occurrences under ui/vue
- Auditing/reducing the ~1082 except Exception: blocks repo-wide
- 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.
- 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).
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>
- 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
- 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
- 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
- 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
- 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
- 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.
- 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
- 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
- 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