Majoor Assets Manager for ComfyUI 🧩
An asset browser that lives directly inside ComfyUI: browse outputs/inputs/custom roots, search (FTS5), inspect generation metadata, rate/tag, collect, and drag assets into ComfyUI (or out to your OS).
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 (2-4).
- Video frame stepping in viewer (Shift + Arrow keys), zoom/pan.
- Viewer 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 at the end), remove items, open as a view.
Drag & Drop 🧲
- Drag an asset onto the ComfyUI canvas (video-focused): 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.
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:
Esccloses, Shift+Arrow steps video frames (single video).
Settings 🧰
Settings are stored under the mjrSettings key in localStorage.
- 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)
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_TIMEOUT
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
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
