Set Audio Metadata
Label your clips so the bucket stops being anonymous
- manifest
- manifest
Here's the thing about a bucket full of audio: every clip is a UUID key, and UUIDs tell you nothing. Set Audio Metadata is how you attach the meaning - a description, tags, a source - to an audio asset's sidecar manifest, without re-encoding the audio or touching a single sample.
Inputs: manifest (BUCKET_MANIFEST, from any audio bucket node), plus optional description, tags (comma-separated), and source. Output: the updated manifest, written back to the bucket as <key>.json.
How it works
The empty-means-keep rule is the whole ergonomic: leave a field blank and it's left exactly as it is. Fill in description now, come back tomorrow and add tags, and you've never clobbered anything. Because the write happens on the manifest sidecar, the audio bytes themselves are untouched - lossless in the most literal sense.
That's the pattern the pack is built around: the manifest is the source of truth a database would otherwise provide, so a voiceover directory stays self-describing and an index can be rebuilt from the files at any time. Tags ride as comma-separated strings, matching what Batch Audio Metadata emits downstream.
When you'd reach for it
Any time you're building a reusable audio library: a TTS pass that generates a dozen takes, each annotated with the prompt or character; a dubbing pipeline that tags clips by language and scene; a curation step where a human (or an LLM) reviews and labels. In an API context, it's how a job reports "this is the clip for scene 7, line 3" - the tag becomes queryable by whatever consumes your bucket.
Install
ComfyUI Manager (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
Restart, under buckets/audio. Deps: boto3 + python-dotenv; PyAV ships with ComfyUI.
Gotchas
The empty-keeps semantics mean you can't clear a field by emptying it - write a replacement string if you need to unset something. And this node only touches metadata; if your description shows up empty later, check that the manifest you wired in actually carried a key (a derived manifest still works - it gets persisted - but the bucket must be reachable to write). Standard S3 connectivity rules apply: endpoint, credentials, and S3_ADDRESSING_STYLE=path for RustFS/MinIO.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| manifest | BUCKET_MANIFEST | Manifest from an audio bucket node. | |
| descriptionopt | STRING | Empty = keep existing. | |
| tagsopt | STRING | Comma-separated tags. Empty = keep existing. | |
| sourceopt | STRING | Empty = keep existing. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| manifest | BUCKET_MANIFEST | The updated manifest that was written. |