basicIn_media_unpack
Pull exactly one thing out of a media bundle
- media
- media_1
- media_2
- media_3
- media_4
- media_5
- media_6
- media_7
- media_8
- media_9
- media_10
- media_11
- media_12
- media_13
- media_14
- media_15
- media_16
- media_17
- media_18
- media_19
- media_20
- media_21
- media_22
- media_23
- media_24
- media_25
- media_26
- media_27
- media_28
- media_29
- media_30
- media_31
- media_32
- media_33
- media_34
- media_35
- media_36
- media_37
- media_38
- media_39
- media_40
- media_41
- media_42
- media_43
- media_44
- media_45
- media_46
- media_47
- media_48
- media_49
- media_50
- media_51
- media_52
- media_53
- media_54
- media_55
- media_56
- media_57
- media_58
- media_59
- media_60
- media_61
- media_62
- media_63
- media_64
- index_video
- index_text
- index_image
- index_audio
basicIn_media_unpack is the counterpart to the pack's media hubs: the hubs collect a pile of mixed material onto one wire, this node takes that wire back apart. If the pack's stage workflows look clean, it's because hubs and unpacks are doing the wire management.
The two settings that matter
output_index (an INT, default 1, up to 5000) and shot_mode (a boolean). Everything else is inputs.
The index counts per type, not across everything. Connect three videos, three images and three text blocks, set output_index to 2, and you get the second video, the second image and the second text, all at once, each on its own output. That's the one thing to internalise, because the natural reading - "index 2 means item 2 in the bundle" - is wrong and will have you chasing a phantom off-by-one.
The four outputs are index_video, index_text, index_image and index_audio. Wire each to whatever needs it. If the index runs past the end of a lane, that lane is blocked rather than errored - downstream nodes just don't execute. That's deliberate, and it's why a missing output is usually "my index is too high", not "the node broke".
How it decides what's what
Every input declares its own type. You get media (the hub wire) plus media_1 through media_64, each paired with a media_type_N string. Give media_type_1 the value video and that socket is treated as video no matter what's actually plugged in; image or image_batch for images, audio for audio, and batch or text for text. Leave the field blank and the node guesses from the payload: a string is text, a dict with a waveform is audio, something with get_components is video, a 4D tensor is an image, a list of strings is text.
That guessing is mostly reliable - except for text that arrives as a list of strings, as it does out of the pack's own prompt nodes. Declare it batch and each element becomes an indexed text entry. Skipping that step is the classic way to get one giant text block where you wanted shot four.
Text is also split on segment headers. A single string containing #segment 1--------- style markers (or the 【Segment 1】 variant) is torn into one entry per segment, so a shot list authored as one blob addresses cleanly by index.
shot_mode, which is the clever bit
With shot_mode off, you're indexing raw lanes. With it on, you index text segments and the node reads the material tags inside the selected segment to decide what to hand you. Write a shot that says "Picture 2 holds the pose, Video 1 drives the camera" and the node outputs that exact image on index_image, that exact video on index_video, and the segment's text on index_text. The tag syntax is lenient - <Picture 1>, Picture #1, 图片 1, with or without brackets, case-insensitive, and Video/Audio do the same for the other lanes. If the segment references nothing that resolves, all four outputs block.
The practical effect is a shot list that routes its own references. You add a shot to the story, tag which material it uses, and the graph follows - no re-wiring between takes.
Under the hood, and why it stays cheap
Each media_N input is declared lazy, and the node implements check_lazy_status to ask only for the sockets the current index actually needs. In plain ComfyUI every connected input gets evaluated; here, a pose video you aren't referencing this run never gets pulled. That's why this node is worth using even when you could technically wire things directly: it turns a bundle of expensive inputs into one decode instead of six.
Installing it
ComfyUI Manager → ComfyUI-Apt_Preset, or:
cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset
pip install -r ComfyUI-Apt_Preset/requirements.txt
Restart ComfyUI; it lives under Apt_Preset → IO_Port, next to basicIn_media.
Where it frustrates people
The per-type indexing above is the big one. The second is silent blocking: nothing ran, nothing errored, and the fix is to lower the index or add a media_type_N. The third is type mismatch at the ends - the outputs are VIDEO, STRING, IMAGE and AUDIO specifically, so index_video won't plug into an image input even if the payload would have worked, and you'll want the pack's type-conversion nodes or a decode in between. And because the frontend draws the hub's wires rather than real links, a socket can look empty while still resolving at run time - check the node's actual connections when something seems disconnected.
Inputs (131)
| Name | Type | Default | Description |
|---|---|---|---|
| output_index | INT | 11–5000 | — |
| shot_mode | BOOLEAN | false | 开启后按文本分段索引输出该段实际引用的素材 |
| mediaopt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_1opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_1opt | STRING | — | |
| media_2opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_2opt | STRING | — | |
| media_3opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_3opt | STRING | — | |
| media_4opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_4opt | STRING | — | |
| media_5opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_5opt | STRING | — | |
| media_6opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_6opt | STRING | — | |
| media_7opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_7opt | STRING | — | |
| media_8opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_8opt | STRING | — | |
| media_9opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_9opt | STRING | — | |
| media_10opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_10opt | STRING | — | |
| media_11opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_11opt | STRING | — | |
| media_12opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_12opt | STRING | — | |
| media_13opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_13opt | STRING | — | |
| media_14opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_14opt | STRING | — | |
| media_15opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_15opt | STRING | — | |
| media_16opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_16opt | STRING | — | |
| media_17opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_17opt | STRING | — | |
| media_18opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_18opt | STRING | — | |
| media_19opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_19opt | STRING | — | |
| media_20opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_20opt | STRING | — | |
| media_21opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_21opt | STRING | — | |
| media_22opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_22opt | STRING | — | |
| media_23opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_23opt | STRING | — | |
| media_24opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_24opt | STRING | — | |
| media_25opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_25opt | STRING | — | |
| media_26opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_26opt | STRING | — | |
| media_27opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_27opt | STRING | — | |
| media_28opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_28opt | STRING | — | |
| media_29opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_29opt | STRING | — | |
| media_30opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_30opt | STRING | — | |
| media_31opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_31opt | STRING | — | |
| media_32opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_32opt | STRING | — | |
| media_33opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_33opt | STRING | — | |
| media_34opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_34opt | STRING | — | |
| media_35opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_35opt | STRING | — | |
| media_36opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_36opt | STRING | — | |
| media_37opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_37opt | STRING | — | |
| media_38opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_38opt | STRING | — | |
| media_39opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_39opt | STRING | — | |
| media_40opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_40opt | STRING | — | |
| media_41opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_41opt | STRING | — | |
| media_42opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_42opt | STRING | — | |
| media_43opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_43opt | STRING | — | |
| media_44opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_44opt | STRING | — | |
| media_45opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_45opt | STRING | — | |
| media_46opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_46opt | STRING | — | |
| media_47opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_47opt | STRING | — | |
| media_48opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_48opt | STRING | — | |
| media_49opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_49opt | STRING | — | |
| media_50opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_50opt | STRING | — | |
| media_51opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_51opt | STRING | — | |
| media_52opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_52opt | STRING | — | |
| media_53opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_53opt | STRING | — | |
| media_54opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_54opt | STRING | — | |
| media_55opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_55opt | STRING | — | |
| media_56opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_56opt | STRING | — | |
| media_57opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_57opt | STRING | — | |
| media_58opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_58opt | STRING | — | |
| media_59opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_59opt | STRING | — | |
| media_60opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_60opt | STRING | — | |
| media_61opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_61opt | STRING | — | |
| media_62opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_62opt | STRING | — | |
| media_63opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_63opt | STRING | — | |
| media_64opt | IMAGE,VIDEO,AUDIO,STRING,ARRAY | — | |
| media_type_64opt | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| index_video | VIDEO | — |
| index_text | STRING | — |
| index_image | IMAGE | — |
| index_audio | AUDIO | — |