EzFlex-PreviewAny
One Board That Previews Literally Any Socket
- input_1
- input_2
- input_3
- input_4
- input_5
- input_6
- input_7
- input_8
- input_9
- input_10
- input_11
- input_12
- input_13
- input_14
- input_15
- input_16
PreviewImage shows you an image. PreviewAudio plays you a file. There is no core node that shows you a conditioning dict, an empty latent's shape, or what a loaded CLIP object actually is - and when a graph misbehaves, that's usually the socket you want to look at.
EzFlex-PreviewAny is a board of up to 16 any-type inputs. It sniffs what each wire is carrying, renders a matching card, and - this is the part that makes it genuinely useful rather than decorative - passes the raw value straight through on an output port. So you can drop it mid-graph as a probe instead of only at the end.
What it accepts
Its 16 inputs are input_1 … input_16, all typed * with forceInput, which is ComfyUI's escape hatch for "connect anything" - the docs call it ANY, and the node is then responsible for making sense of what arrives. Cards appear and disappear as you connect and disconnect.
Type coverage, condensed:
- IMAGE → thumbnail plus a full-screen original. MASK → grayscale PNG.
- AUDIO → player, for the standard
{waveform, sample_rate}dict, a(waveform, sr)tuple, or a file object. - VIDEO → first-frame cover plus player (
VideoFromFile/VideoFromComponents). - LATENT → shape and dtype summary. CONDITIONING → a text summary.
- STRING / INT / FLOAT / BOOLEAN → text, truncated with a popup for the whole thing.
- LIST / TUPLE / SET / DICT → index-value and key-value trees.
- MODEL / CLIP / VAE → a metadata card, read from the safetensors, gguf, onnx or ckpt file.
- 3D → FILE_3D and MODEL_3D render offline in a three.js viewer; MESH (the Hunyuan3D/Trellis-style
Types.MESH) gets its vertices and faces exported to a temporary OBJ so it can be viewed too, up to 500k vertices / 1M faces. - Plus summary-only coverage for SPLAT, VOXEL, CONTROL_NET, CLIP_VISION, STYLE_MODEL, UPSCALE_MODEL, LORA_MODEL, GLIGEN, SAMPLER, SIGMAS, GUIDER, NOISE and SEGS.
How it knows what's connected
The inputs are * and optional, so the backend can't tell an unconnected slot from a connected one by type alone. The node reads the workflow JSON it gets handed as extra_pnginfo (hidden inputs unique_id and extra_pnginfo), walks its own input slots in workflow order, and builds one card per connected input - including the upstream output's label, which is what the card is titled with. Outputs are then named output_1..N and typed *, one per connected card, carrying the original value, not the preview text.
That design is why the card order is the workflow's input order, and why dragging cards to reorder in the panel is cosmetic: the mapping is by slot.
Inputs and outputs that matter to you
config (STRING, multiline) holds the save settings - whether the save buttons actually save, and where. If save is off, the buttons preview only, which is the sensible default. You never type in this field.
Outputs: output_1, output_2, … one per connected input, any-type, passing values through. Wire an image to a preview and to the SaveImage in the same graph, or park the probe between a loader and a sampler.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/blackbossokok/Comfyui-EzFlex-Presets
pip install -r requirements.txt # mutagen only
Manager: search EzFlex. Restart after. The 3D viewer ships its own three.js copy in the pack's web/libs, so there's no network fetch and no extra install; reading .gguf / .onnx metadata cards needs the optional pip install gguf onnx, and skipping it just means those files show a summary instead of a metadata card. ComfyUI 0.3.13+ per the pack metadata. No models, no API keys.
Common issues
A card shows "(not connected)". The slot is empty. Cards are per-connected-slot, so a disconnected wire removes its card on the next run.
Save button does nothing. Save is off in config - the README is explicit that this toggle decides whether clicks actually write files.
The board is heavy. Every card is a custom DOM widget; sixteen cards on a big workflow will cost you canvas responsiveness, and custom widgets are exactly what ComfyUI's Nodes 2.0 frontend rewrite broke for other packs. Fewer cards, or legacy canvas.
Outputs don't appear. The output count follows the connected input count, derived from the workflow metadata. If you're running a prompt through the HTTP API with no frontend metadata, that bookkeeping isn't there - preview nodes of this shape are built for the normal UI path.
Updating fixed it. A real one from the changelog: "cannot validate input" errors after switching presets in EzFlex-ParamPresetControl hit this node too, and were fixed in v1.2.2. If you're on an older build, update first.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| config | STRING | {"save":false,"savePath":""} | Preview Any settings (save to disk + relative save folder). |
| input_1opt | * | Any input 1. | |
| input_2opt | * | Any input 2. | |
| input_3opt | * | Any input 3. | |
| input_4opt | * | Any input 4. | |
| input_5opt | * | Any input 5. | |
| input_6opt | * | Any input 6. | |
| input_7opt | * | Any input 7. | |
| input_8opt | * | Any input 8. | |
| input_9opt | * | Any input 9. | |
| input_10opt | * | Any input 10. | |
| input_11opt | * | Any input 11. | |
| input_12opt | * | Any input 12. | |
| input_13opt | * | Any input 13. | |
| input_14opt | * | Any input 14. | |
| input_15opt | * | Any input 15. | |
| input_16opt | * | Any input 16. |
Outputs (0)
No outputs