Majoor Assets Manager for ComfyUI
Majoor Assets Manager is an advanced asset browser for ComfyUI that provides a comprehensive solution for managing, organizing, and viewing your generated assets. It integrates directly into ComfyUI, offering features like full-text search, metadata extraction, rating and tagging systems, and advanced viewing capabilities.
User Guide - Complete documentation with features, installation, and usage instructions. Documentation Index - All docs (install, viewer, metadata, settings, etc).
GitHub
- Repository: https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager
- Author: MajoorWaldi
License
Copyright (c) 2026 Ewald ALOEBOETOE (MajoorWaldi).
Licensed under the GNU General Public License v3.0. See LICENSE.
Optional attribution request (non-binding): see NOTICE.
Key Features
Search & Filtering
- Full-text search powered by SQLite FTS5 (BM25 ranking).
- Scope: Outputs, Inputs, Custom roots, Collections.
- Filters: kind, min rating, workflow-only, date filters, sorting.
- Optional: hide PNG siblings of video previews.
- Summary line: total assets + selected count + current context.
Metadata & Viewer
- Extracts generation info from PNG/WEBP/video (ExifTool/FFprobe; degrades gracefully).
- Viewer modes: single, A/B compare, side-by-side.
- Navigation: zoom/pan, 1:1 pixel zoom, quick next/prev navigation.
- Tools: exposure (EV), gamma, channel view (RGB/R/G/B/Alpha/Luma), analysis (false color, zebra).
- Scopes (optional): downscaled RGB histogram + luma waveform.
- Overlays: grid (thirds/center/safe/golden), pixel probe, loupe.
- Compare: wipe (slider) and difference mode.
- Export: save current frame to PNG + copy to clipboard (best-effort).
- Generation Info panel: prompt/model/sampling/image parameters + workflow minimap, with loading/error feedback and retry for transient failures.
- Video: loops by default; player bar provides seek, In/Out range, loop/once, frame stepping, and FPS/step controls.
- Context menu: tags, rating, add to collection, open in folder, rename, delete.
Ratings, Tags, Collections
- Ratings/tags stored in the index DB and (optionally) synced into files when enabled.
- Collections: create, add items (duplicates skipped and reported), remove items, open as a view. Large collections are capped for safety (configurable).
Drag & Drop
- Drag an asset onto the ComfyUI canvas: stage to input, inject paths into compatible nodes.
- Drag out to the OS (Explorer/Desktop): uses
DownloadURL/text/uri-listand supports multi-selection ZIP (flat ZIP; folders excluded).
UX Details
- Filename collision indicator: if multiple assets share the same filename, the extension badge shows
EXT+(e.g.PNG+). - Context menus: add/remove collection, open viewer, open in folder, copy path, etc.
Installation
ComfyUI Manager (recommended)
Install via the ComfyUI Manager UI.
Manual
cd ComfyUI/custom_nodes
git clone https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager ComfyUI-Majoor-AssetsManager
pip install -r ComfyUI-Majoor-AssetsManager/requirements.txt
Restart ComfyUI.
If dependencies are missing at startup, the extension may attempt a best-effort pip install -r requirements.txt automatically (can be disabled with MJR_AM_NO_AUTO_PIP=1).
Optional (recommended): install ExifTool + FFprobe (metadata extraction)
The Assets Manager works without these tools, but metadata extraction (generation info, media probe) and tag/rating sync to files are best-effort and will be degraded if the tools are missing.
Verify they are available in your PATH:
exiftool -ver
ffprobe -version
If they are not in PATH, set MAJOOR_EXIFTOOL_PATH and/or MAJOOR_FFPROBE_PATH (see Environment Variables below).
Windows
Option A (Scoop):
scoop install ffmpeg exiftool
Option B (Chocolatey):
choco install -y ffmpeg exiftool
Option C (WinGet):
winget install -e --id Gyan.FFmpeg
winget install -e --id PhilHarvey.ExifTool
If the IDs differ on your machine, use winget search ffmpeg / winget search exiftool.
Option D (manual download):
- FFprobe is included with FFmpeg builds: install FFmpeg and ensure the
bin/folder is in yourPATH. - ExifTool: download from
https://exiftool.org/and pointMAJOOR_EXIFTOOL_PATHtoexiftool.exeif needed.
macOS
brew install ffmpeg exiftool
Linux
Debian/Ubuntu:
sudo apt-get update
sudo apt-get install -y ffmpeg exiftool
Package names can vary by distro (e.g. perl-Image-ExifTool on some).
Usage
- Open the Assets Manager panel/tab.
- Pick a scope (Outputs / Inputs / Custom / Collections).
- Use search + filters; right-click cards for actions; double-click to open the viewer.
- Use Collections to save sets of files and browse them later.
- Drag assets:
- to the ComfyUI canvas (staging/inject path),
- or to your OS (single file or a ZIP for multi-selection).
Hotkeys (high level)
Hotkeys are ignored while typing inside inputs.
Ctrl/Cmd+S: trigger an index scan for the current scope.D: toggle details sidebar for the current selection.0-5: set rating for the current selection (when interacting with the grid).- Viewer:
- Viewer hotkeys are consumed (don’t leak to ComfyUI/global handlers).
Esc: close viewer0-5: set rating (single view)Shift+Arrow: step video frames (single video)F: false color toggleZ: zebra toggleG: grid cycle (off -> thirds -> center -> safe -> golden)I: pixel probe toggleL: loupe toggleC: copy last probed color hexAlt+1: toggle 1:1 zoom
Settings
Settings are stored under the mjrSettings key in localStorage (browser-side).
Backend persistence is currently limited to probeBackend.mode (stored in the SQLite metadata table). It uses a version bump so changes propagate quickly even with multiple backend instances. Other settings are intentionally browser-local and won't sync across machines/browsers.
- Page size (assets per request)
- Auto-scan (on open / on startup)
- Status poll interval
- Sidebar position (left/right)
- Hide PNG siblings (video previews)
- Sync rating/tags to files (best-effort; requires tools)
- Media probe backend (auto/exiftool/ffprobe/both)
- Observability (request logging)
- Tags cache TTL (ms)
- Workflow minimap display toggles
Environment Variables (backend)
MAJOOR_OUTPUT_DIRECTORY- override output directoryMAJOOR_EXIFTOOL_PATH/MAJOOR_EXIFTOOL_BIN- ExifTool pathMAJOOR_FFPROBE_PATH/MAJOOR_FFPROBE_BIN- FFprobe pathMAJOOR_MEDIA_PROBE_BACKEND-auto|exiftool|ffprobe|bothMAJOOR_ENABLE_FILE_WATCHER- auto reindexing (defaultfalse)MAJOOR_WATCHER_INTERVAL/MAJOOR_WATCHER_JOIN_TIMEOUT/MAJOOR_WATCHER_PATHSMAJOOR_DB_TIMEOUT/MAJOOR_DB_MAX_CONNECTIONS/MAJOOR_DB_QUERY_TIMEOUTMAJOOR_TO_THREAD_TIMEOUT- timeout (seconds) forasyncio.to_thread(...)work in HTTP handlers (default30)MAJOOR_MAX_METADATA_JSON_BYTES- max metadata JSON size stored in DB/cache (default2097152)MJR_AM_NO_AUTO_PIP- set to1to disable best-effort dependency auto-install on startupMJR_COLLECTION_MAX_ITEMS- max items per collection JSON (default50000)MJR_ALLOW_SYMLINKS- allow symlink/junction custom roots (defaultoff)MAJOOR_TRUSTED_PROXIES- comma-separated IPs/CIDRs allowed to supplyX-Forwarded-For/X-Real-IP(default127.0.0.1,::1)
Security Model (high level)
- CSRF: state-changing endpoints require
X-Requested-With: XMLHttpRequest(orX-CSRF-Token) and validateOriginvsHostwhen present. - Rate limiting: in-memory per-client limits exist on expensive endpoints (search/scan/metadata/batch-zip). Client identity is based on IP;
X-Forwarded-Foris only honored when the connection comes fromMAJOOR_TRUSTED_PROXIES. - Path safety: file operations validate root containment for output/input/custom roots and reject paths outside allowed roots (symlink/junction handling is opt-in).
- Batch ZIP: ZIP building streams from an open file handle (avoids TOCTOU rename/replace races).
Files & Storage
- Index DB:
<output>/_mjr_index/assets.sqlite - Custom roots store:
<output>/_mjr_index/custom_roots.json - Collections store:
<output>/_mjr_index/collections/*.json - Temporary drag-out ZIPs:
<output>/_mjr_batch_zips/(auto-cleaned)
Development
python -m pytest -q
Tests (Windows)
Batch runners generate both JUnit XML and a styled HTML report in tests/__reports__/:
- Full suite:
run_tests.bat(ortests/run_tests_all.bat) - Quick suite (skips the long Comfy output scan):
run_tests_quick.bat - Metadata / parser suite:
run_tests_parser.bat(runstests/metadata/)
Open the report index:
tests/__reports__/index.html
Test runtime DB artifacts (*.db, *.db-wal, *.db-shm, etc.) are created under:
tests/__pytest_tmp__/
Parser samples scan (metadata suite):
- Put sample files under
tests/parser/(subfolders supported), or setMJR_TEST_PARSER_DIRto an external folder.
Release (zip)
On Windows, build a clean drop-in zip (excludes .git/, caches, etc.):
pwsh -File scripts/make_release_zip.ps1
Architecture
backend/- Python backend (routes + features)features/index(scan/search),features/metadata(extract),features/tags(sync),features/collectionsroutes/handlers(HTTP),routes/core(security/paths/response)
js/- frontend extensionfeatures/grid,features/panel,features/viewer,features/dndcomponents(Card/Viewer/Sidebar/menus),app(settings/bootstrap),theme
Viewer Roadmap (bigger items)
- GPU grade (WebGL2): exposure/gamma/channels/zebra/false color.
- OffscreenCanvas + Worker fallback for heavy processing.
- Cache processed frame while paused (instant grade tweaks).
