basicIn_media
One wire in, many out, and none of the wires are real
- media
- cached_media_2
- cached_media_3
- cached_media_4
- cached_media_5
- cached_media_6
- cached_media_7
- cached_media_8
- cached_media_9
- cached_media_10
- cached_media_11
- cached_media_12
- cached_media_13
- cached_media_14
- cached_media_15
- cached_media_16
- cached_media_17
- cached_media_18
- cached_media_19
- cached_media_20
- cached_media_21
- cached_media_22
- cached_media_23
- cached_media_24
- cached_media_25
- cached_media_26
- cached_media_27
- cached_media_28
- cached_media_29
- cached_media_30
- cached_media_31
- cached_media_32
- cached_media_33
- cached_media_34
- cached_media_35
- cached_media_36
- cached_media_37
- cached_media_38
- cached_media_39
- cached_media_40
- cached_media_41
- cached_media_42
- cached_media_43
- cached_media_44
- cached_media_45
- cached_media_46
- cached_media_47
- cached_media_48
- cached_media_49
- cached_media_50
- cached_media_51
- cached_media_52
- cached_media_53
- cached_media_54
- cached_media_55
- cached_media_56
- cached_media_57
- cached_media_58
- cached_media_59
- cached_media_60
- cached_media_61
- cached_media_62
- cached_media_63
- cached_media_64
basicIn_media looks like the laziest node in ComfyUI and is quietly one of the more interesting ones. It takes one media input - typed as the union IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY - and gives the same value back out of one media output. The Python function is pass_through. No processing, no conversion, no options.
So why does it exist? Because of what the frontend does with it.
The hub trick
The pack's web/media_relay.js redefines this node in the canvas as a media hub. Drag a wire from a Loader into its socket and the frontend records that source in the node's own properties, disconnects the visible wire, and draws a curve from the original node to the hub instead. Do it again with a second source and the hub now holds two. Drag out of the hub's output into five consumers and the frontend fans those out the same way.
The upshot: you attach your material once - a reference image, a driving video, a music bed - and then pull from a single tidy node anywhere in the graph. The hub relabels itself with a count (Media (3)) so you can see at a glance what's inside. Nodes that are themselves relays are ignored as sources, which is what stops you from nesting hubs into a loop.
This is the shared-media layer under the pack's AD (MiniMax H3) workflows, where a half-dozen nodes all want the same reference set. If you've used AD_Media_editor, you've used this mechanic already - that node is a hub plus a prompt editor bolted on top. basicIn_media is the bare version, and it's the one I'd reach for when I just want the tray.
Using it
The only input is media, and it's required, so an unwired hub is an error rather than a silent no-op. The only output is media, and it goes anywhere you'd put the original value. That single union type in the socket signature is doing real work here: it's why the same node can hold a video for one consumer and a string for another without a type complaint.
The honest caveat is that a union socket is a promise about the type, not about the value. Feed a LATENT into the hub and out the other side into something that wanted an image, and nothing in the graph will stop you - you'll get the error wherever it lands. Relays don't convert; they only move things.
Installing it
ComfyUI Manager → search ComfyUI-Apt_Preset, or from a terminal:
cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset
pip install -r ComfyUI-Apt_Preset/requirements.txt
Restart afterwards. You'll find it under Apt_Preset → IO_Port.
Where it bites
The hub is frontend state. The list of sources you attached lives in the node's properties, not in a Python object, which is why the connections survive a save/load and why deleting the node throws that list away - adding a fresh hub gives you an empty one, not the old wiring.
And if the tray ever looks wrong - a hub that shows no count, a source that isn't drawn - check whether the pack's web/ assets actually loaded (the pack declares WEB_DIRECTORY = "./web") before you go looking for a bug in the graph. On a stale browser cache or a half-applied update you get a plain pass-through node with a socket and no memory, which works, just without the point of it.
When you need the material back out, basicIn_media_unpack does the reverse - including pulling one specific source out of a bundle by type and index, which is where this design stops being a gimmick and starts being useful in a real workflow.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| cached_media | STRING | [] | — |
Outputs (64)
| Name | Type | Description |
|---|---|---|
| media | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_2 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_3 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_4 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_5 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_6 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_7 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_8 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_9 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_10 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_11 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_12 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_13 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_14 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_15 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_16 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_17 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_18 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_19 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_20 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_21 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_22 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_23 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_24 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_25 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_26 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_27 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_28 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_29 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_30 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_31 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_32 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_33 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_34 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_35 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_36 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_37 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_38 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_39 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_40 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_41 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_42 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_43 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_44 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_45 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_46 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_47 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_48 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_49 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_50 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_51 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_52 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_53 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_54 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_55 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_56 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_57 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_58 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_59 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_60 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_61 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_62 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_63 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |
| cached_media_64 | IMAGE,VIDEO,AUDIO,LATENT,STRING,ARRAY | — |