Install
openclaw skills install galdrgaldr analyzes music from YouTube or local audio files into structured listener-state traces for AI agents: pulse, pattern, momentum, breath, texture, harmon...
openclaw skills install galdrUse this skill when an OpenClaw agent needs to analyze music from a YouTube URL or local audio file and produce a grounded listening-experience prompt from measurable audio structure.
galdr is a music perception CLI for AI agents. Its default workflow is ARC: analyze a track into time-ordered listener-state traces, then assemble those traces into a prompt for grounded listening-experience prose. The metrics are evidence. The ARC prompt is the main user-facing output.
Installing this skill teaches OpenClaw how to use galdr. It does not install the galdr command itself.
Before starting:
galdr --version
If missing, install the CLI from a trusted source:
pip install galdr
# or from source:
git clone https://github.com/sellemain/galdr.git
cd galdr
pip install -e .
Preferred trusted sources:
If provenance matters, verify the PyPI metadata or install from the source repository before running it.
Use galdr when the user asks to:
Do not use galdr for:
Prefer the ARC path unless the user explicitly asks for raw metrics, comparison, debugging, or agent-internal traces.
Default sequence:
--template arc --mode full.The stream is evidence. Walk the track through time before summarizing. Do not invent emotional claims that the structure does not support.
# Step 1: fetch audio + context (slug auto-derived from title)
galdr fetch "https://youtu.be/..." --analyze
# galdr prints the slug at the end:
# Slug : artist-song-title
# Next : galdr assemble artist-song-title --template arc --mode full
# Step 2: assemble the prompt locally
galdr assemble artist-song-title --template arc --mode full > prompt.txt
Override auto-derived metadata if needed:
galdr fetch "https://youtu.be/..." --artist "Oliver Anthony" --title "Rich Men North of Richmond" --analyze
If YouTube download behavior is flaky:
galdr doctor
galdr update-deps
galdr doctor reports the active Python executable, yt-dlp command/version, ffmpeg/ffprobe, JavaScript runtimes, and impersonation support. galdr update-deps upgrades yt-dlp[default,curl-cffi] in the same Python environment galdr is using.
The analysis command is
galdr listen, notgaldr analyze.
galdr listen track.wav --name my-track
galdr assemble my-track --template arc --mode full > prompt.txt
Galdr is strongest when read as a time-ordered listener-state trace. The stream is the primary evidence. Whole-track interpretation comes after walking the track through time.
Start with:
analysis/<slug>/<slug>_stream.jsonanalysis/<slug>/<slug>_perception.jsondocs/PERCEPTION-MODEL.mdUseful extras:
*_harmony_stream.json*_melody_stream.json*_overtone_stream.json*_report.jsongaldr assemble <slug> --mode blindReading order:
PERCEPTION-MODEL.md first.*_stream.json as the main evidence surface.Do not:
Minimal recipe:
galdr listen track.wav --name my-track
jq '.[0:12]' analysis/my-track/my-track_stream.json
jq '.summary' analysis/my-track/my-track_perception.json
galdr assemble my-track --mode blind > prompt.txt
Only do this if the operator explicitly wants model-written prose. Review the assembled ARC prompt before piping it to claude, llm, or any other external model endpoint.
galdr assemble my-track --template arc --mode full | claude
galdr assemble my-track --template arc --mode full | llm
import subprocess, re
fetch = subprocess.run(
["galdr", "fetch", url, "--analyze"],
capture_output=True, text=True, check=True
)
slug = re.search(r"Slug\s*:\s*(\S+)", fetch.stdout).group(1)
prompt = subprocess.run(
["galdr", "assemble", slug, "--template", "arc", "--mode", "full"],
capture_output=True, text=True, check=True
).stdout
# Review prompt before sending it to any external model endpoint.
| Mode | What's included |
|---|---|
full (default) | metrics + lyrics + background + frames |
lyrics | metrics + lyrics |
context | metrics + background |
blind | metrics only (structural, no cultural context) |
--template arc prepends the default listening-experience rules: tone, format, interpretation bounds, and the instruction to walk the track through time. Omit it only when you want a raw data block.
ARC is the default output path. The metrics exist to keep that prose grounded: use them as evidence for what changes, returns, releases, locks, or breaks over time.
See references/metrics.md for full metric reference.
Quick read:
pattern near 1.0 → listener is locked; near 0 → constant disruptiontexture negative → harmonic dominant (warm, tonal); positive → percussive dominantpressure_balance building/releasing/sustaining → heard-pressure shape across the trackpattern_breaks at the end → planned release; distributed → varied structuresilence depth below -60dB with re-lock above 0.93 attention → structured withdrawal/returnWhen writing experience prose yourself from galdr evidence, prefer galdr assemble <slug> --template arc --mode full. If you are writing from raw assembled output without the template:
galdr compare track-a track-b # side-by-side structural comparison
galdr frames slug # extract + describe video frames at structural moments
galdr fetch "url" --no-download # context only (Wikipedia + lyrics), no audio
galdr fetch "url" --censor # sanitize explicit lyrics before saving
galdr doctor # inspect yt-dlp/media runtime health
galdr update-deps # upgrade yt-dlp reliability extras
galdr catalog # list all indexed tracks
galdr catalog --track NAME # summary card for one track