بنقرة واحدة
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 ويثبّتها لك.
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.
استنادا إلى تصنيف 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) |