EzFlex-MediaLoader
A File Browser Inside Your Workflow (Read the Security Bit)
The built-in loaders are one file at a time: LoadImage gives you a dropdown, LoadVideo another, audio a third. A workflow built on "these six reference images and this one driving video" ends up as six nodes and a filename convention held together by hope.
EzFlex-MediaLoader is a file explorer embedded in a node. Directory tree, back/forward/up, manual path, search, multi-select. You organize files into groups and cards, and each card gets its own output port.
The card indirection, which is the whole design
Each card's port is typed EZFLEX_MEDIA_CARD - a dark-red custom socket that only connects to EzFlex-MediaOut. That's not an oversight, it's the point: the port carries a card object (its files, their real types, its structure), not a media value. The README says the reason out loud - it stops you accidentally wiring a card into a built-in node and getting a nonsense result.
So the pair is: MediaLoader organizes and loads, MediaOut unpacks. Real IMAGE/VIDEO/AUDIO/FILE_3D/STRING values only exist downstream of MediaOut, and those values match ComfyUI's built-in loaders so they feed standard nodes directly. The top bar has a "Load output" action that drops a MediaOut node and wires it for you, which is the fastest way to see the shape of it.
What it loads
Image (.png .jpg .jpeg .webp .gif .bmp .tif .tiff), video (.mp4 .webm .mov .mkv .avi .m4v), audio (.mp3 .wav .flac .ogg .aac .m4a .opus .wma), 3D (.obj .glb .gltf .fbx .stl .ply .3ds .dae .blend), and text or anything else as a STRING - text files give you their contents, everything else gives you a path. One card holding several files yields a batch value, and MediaOut is where it gets split back into per-file ports. Cards, groups and files all drag to reorder; double-click renames, long-press merges, click previews.
The security bit - actually read this one
The browser can see ComfyUI's own input and output folders by default. To reach anything else you type a path in the toolbar and explicitly register it as a root. And here's the honest framing from the README, which deserves credit for stating it plainly instead of hiding it in a footnote:
only people who can reach your ComfyUI port can see the roots you registered and their subfolders.
Which means: on the default localhost binding, adding a root affects nobody but you. If you're running --listen 0.0.0.0 - several all-in-one packages do - or behind a tunnel or reverse proxy, anyone who can reach that port can list and download files from every registered root and everything beneath it. That's the same exposure argument the ecosystem has been having about ComfyUI security since the LLMVISION incident, when an ordinary-looking custom node turned out to ship malware: the network surface is the part people forget.
What the pack does about it, verified in the source rather than just the README: root management is local-only, checked against a loopback request address and a loopback Host header (the second check blunts DNS-rebinding), and registering C:\ or / is refused outright - "a drive/filesystem root cannot be a browsable root". Deleting a root is one dropdown selection away. The rule that actually protects you is still the boring one: don't expose ComfyUI to a network you don't control, and if you must, register a specific media folder and nothing above it.
Inputs and outputs
One input: config, multiline STRING, default "{}" - "groups / cards / files". Panel-written; don't touch. Outputs: one EZFLEX_MEDIA_CARD port per card, named after the card's label, count changing as you add and remove cards. Presets (group and card state) save to the panel and persist server-side with the install.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/blackbossokok/Comfyui-EzFlex-Presets
pip install -r requirements.txt
mutagen is the genuine mandatory dependency here - it's how the pack reads audio and video container tags. Manager users search EzFlex; restart after. No models to download, no API keys. The pack declares ComfyUI 0.3.13+ (official i18n endpoint for panel strings).
Common issues
A folder doesn't appear in the tree. Not registered as a root. Type the path, hit "Save root" - and remember the security note above before you do it on a machine with a public port.
Files show in the browser but the card errors at runtime. The file moved or the root was deleted after the card was saved; config stores paths, and it can't know they went stale. Re-pick the file in the card.
You want the values in a stock node and the port won't connect. By design. Add EzFlex-MediaOut.
Multi-file cards confuse downstream nodes. Cards batch; MediaOut splits. Use split mode there if you want one port per file.
Card order looks wrong. Cards follow the file order in the card, and files reorder by drag. Check the card's own list rather than the canvas.
Panel slowness with big folders. The browser scans directories (with a short cache, per the source), so a root pointing at tens of thousands of files will feel bad. Register the shoot folder, not the whole drive.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| config | STRING | {} | Config JSON generated by the Media Loader panel (groups / cards / files). |
Outputs (0)
No outputs