Load Audio from URL
Feed a hosted audio track straight into ComfyUI — no manual downloads
- audio
Load Audio from URL does exactly one thing: it downloads an audio file from a link and hands it to ComfyUI as a proper AUDIO output. No API, no key, no model files - it's the download step you normally do by hand, turned into a node.
You'll reach for it whenever your workflow needs an audio track that lives on the internet. The case that actually matters: video models that condition on audio. LTX-2's whole party trick is synced audio+video from a reference track, and a stack of music-video and lipsync workflows want their MP3 as an AUDIO tensor, not as a file sitting on your desktop. If you're prototyping a workflow from a YouTube-sourced or CDN-hosted track and don't want to babysit a download into your input folder every time you tweak the graph, this saves you a step. It's a small convenience, not a magic node - but small conveniences are what keep graphs shareable.
How it works
The mechanism is plain: requests.get() fetches the URL (with a 30-second timeout), the bytes get decoded in memory via torchaudio.load(), and the result comes out in the standard ComfyUI audio format - a dict with waveform and sample_rate, batch dimension added. That's the same shape ComfyUI's built-in Load Audio node emits, so anything that accepts AUDIO will take this output happily.
There's a cache toggle that's more useful than it looks. When on (the default), the node hashes the URL and stashes the downloaded file in ComfyUI's temp directory (audio_cache/<md5>.mp3), so re-running the workflow with the same URL skips the network entirely. Two things to know about that cache: it lives in the temp directory, so it gets wiped on restart - think of it as "don't re-download during this session," not a permanent library. And the node always names the cached file .mp3 no matter what the source actually was, which can trip up later loads if you feed it a WAV or OGG.
The inputs and outputs
Only two things to set, and one of them you'll never touch:
url(required) - the only input that matters. Must point directly at an audio file (.mp3,.wav,.ogg…), not at a streaming page or a player. If you paste a YouTube or SoundCloud link, it will fail.cache(optional, default on) - leave it on. Flip it off if the URL's contents change (e.g. a regenerated file served from the same link) and you want a fresh download.
The output is audio of type AUDIO - wire it into any node with an audio input, most commonly the audio-conditioning input of a video model or the audio-mux input on your final video combine node.
Installing it
Easiest way: ComfyUI Manager → "Install Custom Nodes" → search media-url-loader (or "Load Audio from URL") → install, restart, done.
Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/poomshift/media-url-loader
# restart ComfyUI
The pack's requirements.txt lists requests, torch, torchaudio, Pillow, numpy, and opencv-python. You already have most of those if ComfyUI runs; opencv-python is only actually needed by the sibling video node in the pack, but the installer will grab it anyway. No model downloads, no weights, no API key.
Where it bites
Most failures here show up as a red error box with a ValueError:
- "Failed to load audio file" - usually this is torchaudio not being able to decode the format, not a broken URL. MP3 decoding in particular needs the right torchaudio backend (ffmpeg or libsndfile) present on your system. If the file plays fine in a browser but the node chokes, check your torchaudio/ffmpeg install first.
- "Failed to download audio" - the 30-second timeout or a blocked host. Big files on slow links will time out, and the audio path doesn't send a custom User-Agent header (the image node in the same pack does - a small inconsistency), so hosts that reject default Python requests will 403 you. Grab a direct CDN link if you can.
It's a tiny pack with a tiny footprint, and for "give me this track as an AUDIO tensor" it's about as painless as it gets.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| url | STRING | — | |
| cacheopt | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |