Nodes/ComfyUI In-N-Out Bucket/Batch Audio Metadata
ComfyUI Node

Batch Audio Metadata

Unpack your audio manifest with Batch Audio Metadata

By littleowl·Created 3 months ago·Updated 3 months ago· 2
Batch Audio Metadata
  • manifest
  • key
  • media_type
  • file_format
  • created_at
  • batch_size
  • sample_rate
  • channels
  • duration_seconds
  • description
  • tags
  • source
  • derived

Every asset in ComfyUI_In-N-Out_Bucket carries a sidecar manifest - a JSON file stored next to it in the bucket that records things like the key, sample rate, channel count, duration, and any tags you've set. The Input, Load, and Output bucket nodes hand you that manifest as a BUCKET_MANIFEST value, but a dict is only useful if something can read it. Batch Audio Metadata is the thing that reads it.

Feed it a manifest, and it unpacks the whole thing into twelve separate typed outputs. That's it. There's no bucket I/O here, no S3 call, nothing clever. It's a pure pass-through node that exists because "get the duration as a FLOAT" and "get the key as a STRING" are things you keep wanting in a real workflow.

What the outputs actually are

The full output list, from the schema:

  • key (STRING) - the asset key, e.g. <subfolder>/<uuid>. Wire this into a save-name builder or an API response.
  • media_type, file_format - "audio" and "flac"/"mp3"/"opus".
  • created_at (STRING) - the write timestamp, as an ISO string. Empty when the manifest was derived (see below).
  • batch_size (INT) - how many objects the asset spans.
  • sample_rate (INT), channels (INT), duration_seconds (FLOAT) - the audio-specific fields you'll actually use.
  • description, tags (comma-separated), source - whatever metadata has been written.
  • derived (BOOLEAN) - true when no stored manifest existed and the node had to infer one from the audio at load time.

Where it fits

The obvious use is filename or routing logic: grab duration_seconds to decide whether a clip qualifies for the "long form" queue, pass tags into a text-encode node, or stuff key into an HTTP request so a downstream service can fetch the actual file. It also pairs with Set Audio Metadata - set tags on one branch, then read them back anywhere downstream.

One honest note: for a single-node workflow you rarely need this. Its value shows up when you're building ComfyUI as an API and the caller needs to know what it just got. That's exactly the scenario this pack is pointed at.

Install

ComfyUI Manager is the easy path (search In-N-Out Bucket), or:

cd ComfyUI/custom_nodes
git clone https://github.com/littleowl/ComfyUI_In-N-Out_Bucket.git
pip install -r ComfyUI_In-N-Out_Bucket/requirements.txt
cp ComfyUI_In-N-Out_Bucket/.env.example ComfyUI_In-N-Out_Bucket/.env

Then restart ComfyUI. Dependencies are just boto3 and python-dotenv - PyAV (the audio/video transcoder) already ships with ComfyUI. You'll find the node under buckets/audio.

Troubleshooting

The one thing that trips people up: if the Input node that produced your manifest hit a derived asset (no <key>.json in the bucket yet), created_at comes back empty and derived is true. That's not a bug - it means the metadata was inferred on the fly. Write a manifest with Set Audio Metadata (or re-save the asset) and the fields fill in. A manifest output that's None because S3 was unreachable will make the outputs default rather than crash, so if you see empty strings where data should be, check the endpoint and credentials first.

Categorybuckets/audio

Inputs (1)

NameTypeDefaultDescription
manifestBUCKET_MANIFESTAudio manifest from a bucket node.

Outputs (12)

NameTypeDescription
keySTRING
media_typeSTRING
file_formatSTRING
created_atSTRING
batch_sizeINT
sample_rateINT
channelsINT
duration_secondsFLOAT
descriptionSTRING
tagsSTRINGComma-separated tags.
sourceSTRING
derivedBOOLEAN