Nodes/comfy-audio-tagger/Save M4A with Tags 🍏
ComfyUI Node

Save M4A with Tags 🍏

For the Apple-Side of the Family 🍏

By lakeconstance78Β·Created 7 days agoΒ·Updated 2 days agoΒ· 0
Save M4A with Tags 🍏
  • audio
  • cover_image
  • audio
  • file_path
β—„filename_prefixaudio/ComfyUI_M4Aβ–Ί
β—„titleMy Titleβ–Ί
β—„artistMy Artistβ–Ί
β—„albumMy Albumβ–Ί
β—„genreMy Genreβ–Ί
β—„year2026β–Ί
β—„publisherMy Publisherβ–Ί
β—„copyrightMy Copyrightβ–Ί
β—„composerMy Composerβ–Ί
β—„album_artistMy Album Artistβ–Ί
β—„bpm120β–Ί
β—„initial_keyC majβ–Ί
β—„isrcMy ISRCβ–Ί
β—„encoderComfyUI Audio Taggerβ–Ί
β—„track_number1β–Ί
β—„licenseCC-BY 4.0 (Attribution - Credit required)β–Ί
β—„commentGenerated with ComfyUIβ–Ί
β—„lyricsβ–Ί

Save M4A with Tags 🍏 is the comfy-audio-tagger node for the moment your generated track has to live in the Apple ecosystem. M4A (AAC in an MP4 container) is what iPhone, macOS, iTunes, and most of the Apple-adjacent world expect to see, and its tagging uses MP4 metadata atoms - the ©nam, ©ART style keys - instead of the ID3 frames or Vorbis comments the other save nodes use. Same idea as the rest of the pack: generate a track, embed the prompt and settings in the file itself, and the file behaves like a real song in every Apple app instead of a nameless blob.

Inputs, and the one that's different

Everything you'd expect is there - audio, filename_prefix (default audio/ComfyUI_M4A), the full set of tag strings, the license dropdown, multiline comment/lyrics, optional cover_image. Outputs are the pack standard: audio passthrough plus file_path.

But the M4A node has a quirk you should know about before you get confused later. MP4 atoms have no native "license" slot, so the node merges the license into the comment field as License: CC-BY 4.0 (...) | Generated with ComfyUI. Open the file in any other tag editor and that's what you'll see in Comments - a concatenated string. The pack's own reader node knows to split it back out into separate license and comment outputs, so inside ComfyUI the round-trip is clean. Everywhere else, it's one string. It's a reasonable compromise for a format limitation, but it's the kind of thing that makes you double-check a file before sending it to a distributor.

Two other small format behaviors: BPM and track number get written as integers (the node tries int() and quietly skips if your text isn't numeric), and cover art goes in as an MP4 covr atom in JPEG form.

The FFmpeg catch

This is the node most likely to bite you on a bare install. Writing M4A requires torchaudio's FFmpeg backend, and unlike the FLAC node (which uses torchaudio's native FLAC support) this one genuinely needs FFmpeg present on the system. If it's missing, the node prints a warning to the console and passes the audio through without saving - file_path comes back empty. Most ComfyUI setups have FFmpeg already, because video nodes demand it; but if you've built a minimal audio-only install, this is the node that will silently do nothing until you add FFmpeg. When a run "completes" and no file appears, check file_path first - that's the tell.

Install

The whole pack is one small repo with a single Python dependency, and installing it gets you all five save nodes plus the readers:

cd ComfyUI/custom_nodes
git clone https://github.com/lakeconstance78/comfy-audio-tagger
cd comfy-audio-tagger
pip install -r requirements.txt   # Windows portable: ..\..\..\python_embeded\python.exe -m pip install -r requirements.txt

or search "ComfyUI Audio Tagger" in ComfyUI Manager, then restart.

Honest verdict: if your output is going anywhere Apple, this is the node - M4A at ~256kbps is a solid, widely-played compromise between the MP3 you can put anywhere and the FLAC you should keep for yourself. If nobody on your pipeline is on Apple hardware, you can skip it and never miss it.

CategoryAudio Tagger

Inputs (20)

NameTypeDefaultDescription
audioAUDIOβ€”
filename_prefixSTRINGaudio/ComfyUI_M4Aβ€”
titleSTRINGMy Titleβ€”
artistSTRINGMy Artistβ€”
albumSTRINGMy Albumβ€”
genreSTRINGMy Genreβ€”
yearSTRING2026β€”
publisherSTRINGMy Publisherβ€”
copyrightSTRINGMy Copyrightβ€”
composerSTRINGMy Composerβ€”
album_artistSTRINGMy Album Artistβ€”
bpmSTRING120β€”
initial_keySTRINGC majβ€”
isrcSTRINGMy ISRCβ€”
encoderSTRINGComfyUI Audio Taggerβ€”
track_numberSTRING1β€”
licenseCOMBOCC-BY 4.0 (Attribution - Credit required)8 options: CC-BY 4.0 (Attribution - Credit required), CC0 1.0 (Public Domain - Free for any use), CC-BY-SA 4.0 (ShareAlike - Credit + adapt under same license), CC-BY-NC 4.0 (NonCommercial - Credit + no commercial use), CC-BY-NC-SA 4.0 (NonCom + ShareAlike - No commercial + adapt under same), CC-BY-ND 4.0 (NoDerivs - Credit + no modifications), +2
commentSTRINGGenerated with ComfyUIβ€”
lyricsSTRINGβ€”
cover_imageoptIMAGEβ€”

Outputs (2)

NameTypeDescription
audioAUDIOβ€”
file_pathSTRINGβ€”