Nodes/ComfyUI-EagleBridge/Eagle Save Audio
ComfyUI Node

Eagle Save Audio

Your ACE-Step track, filed with the lyrics still attached

By jambread-git·Created about a month ago·Updated 23 days ago· 1
Eagle Save Audio
  • audio
  • audio
◄eagle_folder_id►
◄file_name_template%datetime%_%rand%►
◄local_subfolderEagleBridge/Audio/%date%/►
◄formatwav►
◄bitrate192k►
◄save_local_copytrue►
◄previewtrue►
◄memo►
◄website►

Music generation is the newest, thinnest layer of this whole hobby - it got bolted on once the video clips started needing soundtracks, and it lives in bespoke node packs with their own dependencies rather than anywhere near the centre of ComfyUI. That's exactly why the output side is a mess. A folder of audio_00042.flac tells you nothing about which caption produced the good take, and the lyrics you typed are gone the moment the tab closes.

Eagle Save Audio is the audio half of this pack. Feed it an AUDIO, it encodes the file and registers it in your Eagle library with the prompt, the lyrics, the model name, duration and channel layout written into the item's annotation - so the track and everything you'd need to remake it live in the same place.

How it works

It takes ComfyUI's AUDIO dict (waveform tensor plus sample rate), splits it per batch item, writes each one to disk, then POSTs the absolute path to Eagle's local API at 127.0.0.1:41595/api/item/addFromPath.

The writing is not one code path. WAV goes out through Python's standard wave module as 16-bit PCM - quick, lossless, no dependencies. FLAC, MP3 and Opus go through PyAV (libmp3lame, libopus, flac), which is a real dependency and a real failure point. Opus only accepts 8/12/16/24/48 kHz, so the node snaps your sample rate to the nearest supported one and resamples with torchaudio if the rate actually changed. Compressed exports also only handle mono or stereo - hand it a 4-channel waveform and you get a RuntimeError rather than a silent downmix.

The metadata half is a breadth-first walk up the graph looking for the nearest non-empty string input. For the prompt it checks, in priority order: caption, prompt, tags, sample_query, description. For lyrics: lyrics, lyric. That key list is not arbitrary - it's ACE-Step shape. If your music workflow uses any of those names, the caption and the words land in Eagle on their own and you never touch a text box. If it uses something else, you get a blank field and no complaint.

The inputs worth setting

  • audio - any node that outputs ComfyUI AUDIO; ACE-Step-style packs, TTS nodes, MMAudio. The node passes it through on its audio output, so you can keep it mid-chain instead of ending the graph.
  • eagle_folder_id - the Eagle destination. Right-click the folder in Eagle, Copy Link, paste the part after id=. Blank means library root. http://127.0.0.1:41595/api/folder/list in a browser lists the IDs if you'd rather read them off.
  • format - wav (default), flac, mp3, opus. bitrate - 64k to 320k, default 192k, and only MP3 and Opus read it. WAV and FLAC are lossless; the setting is ignored, which is one less thing to think about.
  • preview - shows a player with a seek bar. That player is pack JavaScript, not core ComfyUI, which is why the README tells you to hard-refresh after an update.

file_name_template and local_subfolder behave like the image node (EagleBridge/Audio/%date%/ by default, %model% supported), and memo / website get appended to the annotation / stored on the item. Batches produce one file and one Eagle entry per item.

The honest catch: no workflow inside the file

ComfyUI's whole culture runs on "the file is the project" - but that's a PNG trick, and audio containers don't get it. The node does not embed the workflow in the WAV or the FLAC. Everything it knows ends up as text in Eagle's annotation, which is fine if you're actually using Eagle and useless if you're not. If you want the graph back later, save the workflow JSON separately or keep a PNG from the same run.

Installing it

Manager, search ComfyUI-EagleBridge (Registry name eagle-bridge). Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/jambread-git/ComfyUI-EagleBridge
pip install -r ComfyUI-EagleBridge/requirements.txt

Worth knowing: that requirements file installs requests and nothing else. PyAV is not a declared dependency of this pack - the code imports av optionally and throws PyAV is required to save MP3 audio if it's missing. In practice ComfyUI ships PyAV itself, so a normal install already has it. Check before you install a second copy:

python -c "import av; print(av.__version__)"

Where it goes wrong

Eagle has to be running with a library open, on the same machine, or the save fails with Could not connect to Eagle API. There's no timeout on those requests, so a stuck Eagle stalls the queue instead of erroring.

Opus with an odd source sample rate and no torchaudio in the environment is the other predictable one - the error message says so explicitly. If you just want a file and don't care about the codec, WAV never touches PyAV or torchaudio at all. And Eagle dedupes on content rather than filename, so re-running a seed and getting "no new item" is Eagle working as designed.

CategoryEagleBridge

Inputs (10)

NameTypeDefaultDescription
audioAUDIO—
eagle_folder_idSTRINGPaste the Eagle destination folder ID. Leave blank to save to the Eagle Library Root. To find folder IDs, open http://127.0.0.1:41595/api/folder/list in a browser while Eagle is running.
file_name_templateSTRING%datetime%_%rand%Supports %date%, %time%, %datetime%, %index%, %rand%.
local_subfolderSTRINGEagleBridge/Audio/%date%/Supports %date%, %time%, %datetime%, %model%.
formatCOMBOwav4 options: wav, flac, mp3, opus
bitrateCOMBO192kUsed by MP3/Opus. WAV and FLAC are lossless and ignore this setting.
save_local_copyBOOLEANtrue—
previewBOOLEANtrueShow ComfyUI's audio player after saving.
memoSTRING—
websiteSTRING—

Outputs (1)

NameTypeDescription
audioAUDIO—