ワンクリックで
metadata-bwf
Broadcast Wave Format (BWF) and ID3 metadata manager — BEXT/iXML tagging
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Broadcast Wave Format (BWF) and ID3 metadata manager — BEXT/iXML tagging
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | metadata:bwf |
| description | Broadcast Wave Format (BWF) and ID3 metadata manager — BEXT/iXML tagging |
| version | 0.1.0 |
| author | Hermes Agent |
| license | MIT |
| metadata | {"hermes":{"tags":["audio","metadata","bwf","id3","broadcast","tagging"],"related_skills":["daw-master:sox-engine","daw-master:audio-analyzer"]}} |
Wrapper for BWF MetaEdit CLI plus mutagen-based ID3 tagging — professional audio metadata management.
Supports:
# Check availability
bwfmetaedit --version # should print version
# BWF MetaEdit (required for WAV/BWF)
sudo apt install bwfmetaedit # Debian/Ubuntu
brew install bwfmetaedit # macOS
sudo dnf install bwfmetaedit # Fedora
# Python mutagen (optional, for MP3 ID3)
pip install mutagen
BWF MetaEdit v26+ (2025) is the reference implementation from MediaArea.net.
Ubuntu / Pop!_OS 24.04: Download the .deb from mediaarea.net/BWFMetaEdit/Download/Ubuntu and install locally without sudo using:
ar x bwfmetaedit_*.deb
tar xf data.tar.zst
# Binary is in extracted/usr/bin/bwfmetaedit — add to PATH or symlink to ~/.local/bin
Other distros: Use your package manager (apt, dnf, pacman) or Flatpak/Snap.
from daw_master.metadata import write_bwf, read_bwf, tag_mp3, extract_metadata
# Write BWF metadata
result = write_bwf(
"sample.wav",
description="Take 1 — studio",
originator="Hermes Studios",
originator_reference="HS-2025-0042",
date="2025-04-29",
coding_history="REC/DATE=2025-04-29"
)
# Read BWF/iXML
info = read_bwf("sample.wav")
print(info.get("metadata", {}))
# {'DESCRIPTION': 'Take 1 — studio', 'ORIGINATOR': 'Hermes Studios', ...}
# Tag MP3
tag_mp3("track.mp3", title="Song", artist="Hermes", album="Debut", tracknumber="3")
# Universal extractor (auto-detects format)
meta = extract_metadata("sample.wav") # returns BWF fields if present
write_bwf(filepath, **fields) → dictWrite or update BEXT (Broadcast Wave) metadata on a WAV file.
Parameters
filepath (str): WAV file pathdescription (str, optional): BEXT description field (commonly used for take/comment)originator (str, optional): Who produced the fileoriginator_reference (str, optional): Unique reference ID assigned by originatortime_reference (int, optional): Sample frame count since midnight (SMPTE)date (str, optional): Recording date (YYYY-MM-DD or full timestamp)**extra_fields (dict): Any other BEXT chunks (e.g. coding_history="...", umid="...")Return
{success: bool, file: str, updated: [field_names]}Notes: Creates BEXT chunk if the file is plain WAV (automatically converted to BWF by bwfmetaedit). Overwrites existing fields by default.
read_bwf(filepath) → dictRead BEXT/iXML metadata from an audio file.
Parameters
filepath (str): Audio fileReturn
{success: bool, file: str, metadata: {str: str}}Metadata keys are uppercase BEXT field names (DESCRIPTION, ORIGINATOR, DATE, etc.). If the file has iXML chunks they appear with an iXML: prefix.
update_bwf(filepath, updates: dict) → dictUpdate many BWF fields with a single dict mapping field names (case-insensitive; underscores auto-converted to hyphens).
tag_mp3(filepath, **tags) → dictWrite ID3v2.4 tags to an MP3 file.
Supported keys (case-insensitive):
title, artist, album, tracknumber, genre, datecomment, composer, encoder, copyrightTXXX:<description> form for custom user-text frames, e.g. TXXX:LABEL="MyLabel"Return: {success, file, written: [frame_ids]}
Requires mutagen (pip install mutagen). If not available, returns error.
extract_metadata(filepath) → dictUniversal extractor. Returns a dict with:
format: "BWF", "ID3" or "mutagen"If the file is WAV/BWF → read via bwfmetaedit; if MP3 → via mutagen. Returns {success: False, error: str} if neither backend is available.
import os
from pathlib import Path
from daw_master.metadata import write_bwf
for wav in Path("samples/").rglob("*.wav"):
stem = wav.stem
write_bwf(
str(wav),
description=f"Hermes sample library — {stem}",
originator="Hermes Agent",
originator_reference=f"HERM-{stem.upper()}",
date="2025-04-29",
UMID="0x" + os.urandom(13).hex().upper() # unique material identifier
)
from daw_master.metadata import read_bwf
import json
manifest = {}
for wav in Path("final/").glob("*.wav"):
info = read_bwf(str(wav))
meta = info.get("metadata", {})
manifest[str(wav)] = {
"description": meta.get("DESCRIPTION", ""),
"originator": meta.get("ORIGINATOR", ""),
}
json.dump(manifest, open("metadata_manifest.json", "w"), indent=2)
from daw_master.metadata import tag_mp3
tag_mp3(
"export/beat_01.mp3",
title="Beat 01 — Drums Only",
artist="Hermes Beats",
album="Drum Pack Vol 1",
tracknumber="1",
genre="Hip-Hop",
date="2025",
TXXX_CUSTOM_ID="HERM-BEAT-001" # custom frame
)
write_bwf — this is normal and makes the file a Broadcast Wave.time_reference is samples since midnight — rarely needed manually.extra_fields to pass raw iXML blocks: write_bwf("file.wav", ixml="<xml>...</xml>").bwfmetaedit --verify file.wav can check compliance; this skill does not call verify automatically.Use skill metadata:bwf write_bwf file="sample.wav" description="..." originator="..."
Use skill metadata:bwf tag_mp3 file="track.mp3" artist="Hermes" title="..."
| Tool | Package | Purpose |
|---|---|---|
| bwfmetaedit | apt/dnf/brew | BWF BEXT/iXML read/write |
| mutagen | pip | MP3 ID3 tagging (optional but recommended) |
Use when working with the Sleepy Circuits Hypno 2 video synthesizer/resampler — 2-channel video mixer/looper, shader engine, MIDI CC mapping, CV/modulation, sampler. Firmware v0.0.163+.
Hardware instrument skills — reference guides for each device in the music studio setup.
GLSL fragment shader techniques adapted for the Hypno 2 video synthesizer — single-pass generative visuals and video effects optimized for Raspberry Pi 5, 5-uniform limit, CC-mapped parameters
Korg KAOSS DJ — USB DJ controller with X-Y touchpad, Serato DJ Intro integration, KAOSS effects, EQ, crossfader, and MIDI on Linux
Korg KAOSSILATOR dynamic phrase synthesizer (2007 model) — X-Y touchpad, 100 programs, gate arpeggiator, phrase loop recording, USB MIDI on Linux
Use when working with the Korg kaossilator 2S dynamic phrase synthesizer — X-Y touchpad, 150 programs, 50 arp patterns, loop recording, audio player, master recorder, microSD storage, and USB MIDI on Linux.