From claude-reachy-mini
Extract BPM and beat onsets from a Reachy Mini audio source — file or live stream — and return values that drop directly into a `dance-choreography` section table or feed app-runtime motion sync. Activate on phrasings like "BPM einer Audio-Datei", "extract beats for a dance app", "BPM detect", "beat tracking", "onset detection für Reachy-Tanz", "tempo estimation from audio". Do not activate for audio-capture tasks (Pollen's `reachy_mini.media.*` does that), pure audio-format conversion (FFmpeg without beat logic), stem separation or vocals detection, or BPM guessing from the gut — this skill always returns a measured value with a confidence level.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-reachy-mini:audio-beat-trackingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Spec: <https://github.com/nolte/claude-reachy-mini/blob/develop/spec/claude/audio-beat-tracking/de.md> (DE canonical) / [`en.md`](https://github.com/nolte/claude-reachy-mini/blob/develop/spec/claude/audio-beat-tracking/en.md).
Spec: https://github.com/nolte/claude-reachy-mini/blob/develop/spec/claude/audio-beat-tracking/de.md (DE canonical) / en.md.
Use this skill when the developer wants to:
dance-choreography artefactAudioFrame stream from the mic arrayreachy_mini.media.audio_*dance-choreography and reachy-mini-sdk| Field | Required | Default | Notes |
|---|---|---|---|
source | yes | — | {"mode": "file", "path": "<abs_path>"} or {"mode": "stream", "frames": <iterator>}; stream mode expects Pollen AudioFrame iterators or NumPy arrays |
expected_bpm_range | no | (60, 200) | Hardening hint against BPM halving / doubling. Out-of-range candidates are re-evaluated with doubled or halved BPM |
start_offset_s | no | 0.0 | File-mode only: skip an intro before analysis |
duration_s | no | full length | File-mode only: bound the analysis window |
window_s | no | 8.0 | Stream-mode only: rolling-window size; a fresh BPM estimate is yielded every 1 s |
The skill picks the canonical library — librosa by default (PyPI-stable, MIT/BSD-permissive) — and pins it. Alternatives aubio (real-time) and madmom (DNN, GPL) are documented in the spec but not the default.
reachy_mini.media.*.reachy-mini/app-logging.librosa, missing FFmpeg, ARM64 incompatibility — all explicit errors with a remediation hint, never a silent fallback.low confidence triggers a warning in the output ("verify against a metronome / listen back") instead of a silent assertion.python -c "import librosa, ffmpeg" (or whichever pinned version) resolves; on failure abort with uv pip install librosa ffmpeg-python.librosa and aubio work on both, madmom only when TF / PyTorch is installable.librosa.beat.beat_track (or the pinned library's equivalent) on the prepared signal, scoped by start_offset_s and duration_s if supplied.expected_bpm_range, re-evaluate with halved / doubled BPM and pick the candidate inside the range; record the original-vs-corrected value in warnings.high when the library exposes a stable score (e.g. librosa's default ≥ 0.5 plus tight inter-beat spacing); medium when the score is borderline; low when the inter-beat-interval standard deviation is high.window_s seconds (default 8.0).window_t0_s / window_t1_s and a lookahead_ms hint (typically 100–300 ms for librosa).File mode:
{
"mode": "file",
"source_path": "<resolved abs path>",
"duration_s": <float>,
"bpm": <float>,
"bpm_confidence": "high" | "medium" | "low",
"beats_s": [<float>, <float>, ...], # monotonically increasing seconds
"library": "librosa",
"library_version": "<x.y.z>",
"warnings": [<str>, ...] # e.g. "expected_bpm_range hardened from 240 to 120"
}
Stream mode (per window):
{
"mode": "stream",
"window_t0_s": <float>,
"window_t1_s": <float>,
"bpm": <float>,
"bpm_confidence": "high" | "medium" | "low",
"beats_s": [<float>, ...], # absolute seconds, NOT relative to the window
"lookahead_ms": <int>,
"library": "librosa",
"library_version": "<x.y.z>"
}
dance-choreography authoring: drop bpm straight into the choreography frontmatter bpm: <float> and beats_s length into the section table per section. Add a source: audio-beat-tracking, analyzed_at: <ISO date>, library: librosa==<ver> provenance comment alongside.beats_s to a scheduler that respects lookahead_ms. The skill does not own the scheduler — that lives in the app, supported by reachy-mini-sdk for SDK idioms.low-confidence BPM into a choreography file.dance-choreographygoto_target / set_target, safe-torque) → reachy-mini-sdkreachy_mini.media.* (out of skill scope)reachy-mini-on-deviceExternal canonical sources (cited via the spec, not duplicated here): librosa.beat.beat_track, aubio (real-time alternative), madmom (DNN alternative, GPL), Pollen's audio stack under src/reachy_mini/media/.
npx claudepluginhub nolte/claude-reachy-mini --plugin claude-reachy-miniProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.