Extended Media Preview
The grid that tells you your take loaded the right clips
- extended_media
Most of comfyui-daz-tools is about storing things: models, prompts, dimensions and LoRAs kept in named scenes and takes, switched from a dropdown instead of rewired by hand. Extended Media Preview is about seeing what got stored. You wire a take's extended_media into it and it paints a grid inside the node - every reference image, the first frame of every reference video, and a music note for every audio clip that take carries.
Why you'd want that is the whole case for the node. The four video config nodes (WAN2.2, LTX2.3, LTX2.5, MiniMaxH3) hold up to five images, two videos and two audios inside the take's JSON: first-frame/last-frame setups, REF2VA, MSR reference stacks. None of it goes through a Load Image node, so none of it gets a thumbnail anywhere in the graph. You switch scenes, queue, and find out later whether the right reference went in. This is the two-second eyeball check instead.
How it works
The Python side is small and honest. The only input is extended_media, typed DX_EXTENDED_MEDIA, and it's required. On execution the node walks the payload in a fixed order - images, then videos, then audios - and pulls one frame out of each: a still's only image, or a video's first frame from whichever window the take's trim handles set. Every frame is written into ComfyUI's temp directory as a PNG, capped at 1024px on the long side, and named by a hash of its own pixels - so a take that re-queues constantly (random seed, say) reuses its thumbnails instead of writing a fresh set each run.
The list then goes to the frontend, which fetches each PNG back through /view and lays out square cells - up to three to a row, sized to fill the node's area, so stretching the node grows the grid. Each cell shows the slot's name top-left (your label if you gave the slot one, otherwise the file name), the width × height top-right for images and video frames, and Image / Video / Audio bottom-left. Audio gets no waveform and no play button, just a ♪. Empty slots produce no cell, so a take with one extra image shows one big square and a fully loaded one shows a 3×3.
Worth noticing: the sizes shown are the sizes the config node outputs, so a slot marked for the take's dimensions rule reports its post-resize size - a quick way to confirm your scale factor and ÷32 rounding did what you meant.
Inputs and outputs
One input, extended_media, and no outputs at all - which is the point. It's an output node in ComfyUI's execution sense (always runs, cache works backward from it), and its only product is the UI grid. No socket to tap, so it's not a passthrough.
Feed it from the extended_media output of any of the four video WorkflowConfig nodes. Or hang it off a Media Splitter's last preview output, which hands the bundle on untouched and, being typed the same as the input, is the one output the engine still feeds when the splitter is bypassed. That's the tap point to use if you want the preview to survive muting the splitter.
Installation
Same pack, same clone. In ComfyUI Manager, search comfyui-daz-tools. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/denyazzolin/comfyui-daz-tools
Then restart. There's no requirements.txt in the repo and nothing in pyproject.toml beyond requires-python = ">=3.10", so nothing pip-installs. One dependency is worth knowing: the pack decodes video through PyAV, imported lazily, so you only meet it when a take loads a video slot, and it fails loudly rather than silently. Then hard-refresh the browser - the grid is drawn by the pack's web/daz_media_preview.js, and a stale tab shows a node with no interior.
Where people get stuck
A few things read as bugs and aren't.
An empty-looking node. Before the first execution the widget says "Waiting for input…"; after a run on a take with no extra media it says "No media". Both are correct.
A required input that isn't there. Because extended_media is required, bypassing whatever feeds it stops the queue with a missing-input error - as does wiring it to a class that never emits DX_EXTENDED_MEDIA, like the Workflow Config Image node, which has no extended media at all. The Media Splitter's preview output exists to dodge that.
Tiny cells. The grid sizes itself to the node (420×460 by default). Shrink the node and you get postage stamps.
Thumbnails vanishing after a restart. They live in ComfyUI/temp/, the scratch directory Preview Image also uses, and ComfyUI clears it on startup. They're rewritten next run, so nothing is broken - just don't treat anything there as a keep.
No playback. One frame per video, not a scrubber, and audio is a note. For a full mix, use the pack's Sound Mixer.
One last thing: this pack has essentially no community footprint - no threads worth searching for - so you're early. The upside is that it's auditable. One small Python class, one JS widget, and both read exactly the way they behave.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| extended_media | DX_EXTENDED_MEDIA | — |
Outputs (0)
No outputs