AI2Go Multi Audio Loader
Three audio files, one node, three sockets — no more loader sprawl
- count
- audio_1
- audio_2
- audio_3
- audio_4
- audio_5
- audio_6
- audio_7
- audio_8
ComfyUI's stock Load Audio node is strictly one-in-one-out. So the moment a workflow needs two or three sound files at different points in the same run - a voiceover here, a music bed there, a sound effect for a specific clip - you end up dragging in the same loader twice, three times, and keeping the graph straight gets old fast. The AI2Go Multi Audio Loader is the fix: drop up to eight files onto a single node and every one gets its own audio_N output socket, all loaded in one execution.
It's from AI2Go-Utils, the node pack by the AIKnowledge2Go YouTube channel - which has since rebranded to Into The Latent and moved to a new repo, leaving this one frozen at v1.6.1 but fully functional. That's worth knowing before you install (more below), not a reason to avoid it.
How it works
You drop files straight onto the node's field (or click it to browse). Each file is uploaded into ComfyUI's input/ folder - the same place stock Load Image puts things - so a saved workflow still resolves the files after a restart. The actual file list lives in a hidden files_json widget that the front-end keeps in sync; you're never meant to hand-edit it.
At run time each row is decoded with PyAV into the standard ComfyUI AUDIO structure - a waveform tensor plus a sample rate. The one behavior you should actually care about: audio is never resampled. A 44.1 kHz file and a 48 kHz file come out at their own native rates, exactly like stock LoadAudio. That's honest but it's also your problem to solve downstream if something expects a uniform rate - no free normalization here.
The inputs and outputs that matter
The only input you'll touch is output_slots, and you can probably leave it on auto:
auto(default) - sockets appear as you add files, disappear as you remove them.- A fixed number (
1–8) - pins the socket count so your wires survive you swapping files around. Handy once the graph is wired and you're just rotating files in.
Everything else is the drop zone itself. Outputs are count plus audio_1 through audio_8, each an AUDIO socket that feeds anything taking audio - Save Audio, a video muxer, an audio-reactive setup. count is the number of files actually emitted, not the number of rows; switch a row off and it stops counting.
The off-toggle trap
Every row has an on/off switch. Here's the subtle part: switching a row off keeps its socket position - nothing shifts - and that socket outputs None. That's exactly the same as leaving an unplugged OPTIONAL input, so it's safe for wires feeding optional sockets downstream. But if a switched-off row feeds a REQUIRED input, that node will fail on None. When in doubt, remove the row instead of toggling it.
Removing or reordering rows does shift what each socket carries, and the node warns you in its status line whenever a change touches a socket that has a wire. Check your connections after you shuffle.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/Little-God1983/ComfyUI-AI2Go-Utils
Then restart ComfyUI. ComfyUI Manager also finds it by searching "ComfyUI-AI2Go-Utils". No extra Python dependencies - it uses Pillow and PyAV, both already shipped with ComfyUI. It coexists fine with KJNodes.
One heads-up: this repo is frozen and issues are closed. The author's continued work lives at ComfyUI-IntoTheLatent-Utils, where the nodes are renamed AI2Go* → ITL*. Old workflows won't pick up the new names automatically, so keeping this pack installed for legacy graphs is the expected setup.
Common issues
- "not found in the input folder - re-add it": you moved or deleted the source file in
input/. Re-drop it onto the node. - "no audio stream in the file": you dropped a video (or a silent file) onto the audio loader. It decodes audio only.
- Mismatched sample rates downstream: the loader won't fix these for you - that's by design.
It's a niche tool, but for multi-track audio work it kills a whole class of graph clutter. If you're feeding several clips into an audio-reactive or lip-sync pipeline in one pass, this is the one.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| files_json | STRING | [] | Authoritative file list as JSON. Hidden in the UI and kept in sync by the front-end — drop files onto the node instead of editing this. |
| output_slots | COMBO | auto | How many output sockets to show. 'auto' follows the number of loaded files, so sockets appear and disappear as you edit the list. Pick a fixed number to keep the sockets (and your wires) in place while you swap files around — extra sockets with no file behind them output nothing, so don't wire more than you load. |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| count | INT | — |
| audio_1 | AUDIO | — |
| audio_2 | AUDIO | — |
| audio_3 | AUDIO | — |
| audio_4 | AUDIO | — |
| audio_5 | AUDIO | — |
| audio_6 | AUDIO | — |
| audio_7 | AUDIO | — |
| audio_8 | AUDIO | — |