Install
openclaw skills install music-identifyIdentify songs from audio clips using AudD API and optionally queue them to Spotify. Triggers on /songsearch command, voice messages with song identification intent, or when user asks "what song is this." Also handles recall queries like "what did I shazam" or "what was that song" by reading the music log. Works with any audio file (OGG, MP3, WAV, etc.).
openclaw skills install music-identifyIdentify songs from audio using AudD, return song info with Spotify link, and optionally queue to the user's active Spotify session.
Required on $PATH:
curl — HTTP requests to AudD and Spotify APIsjq — JSON parsing for all API responsespython3 — Spotify OAuth flow only (scripts/spotify-auth.py)| Credential | Location | Required | Purpose |
|---|---|---|---|
| AudD API key | ~/.config/audd/api_key | Yes | Song identification |
| Spotify OAuth tokens | ~/.config/spotify/tokens.json | No (optional) | Queue to Spotify |
| Spotify app credentials | ~/.config/spotify/credentials.json | No (optional) | Token refresh |
Security notes:
chmod 600./songsearch then follows with a voice message or audio filemkdir -p ~/.config/audd
echo "YOUR_KEY" > ~/.config/audd/api_key
chmod 600 ~/.config/audd/api_key
mkdir -p ~/.config/spotify
cat > ~/.config/spotify/credentials.json << 'EOF'
{"client_id": "...", "client_secret": "...", "redirect_uri": "https://your-host/callback"}
EOF
chmod 600 ~/.config/spotify/credentials.json
python3 scripts/spotify-auth.pychmod 600 ~/.config/spotify/tokens.jsonWhen a song identification is triggered:
/tmp/music-identify-<timestamp>.ogg). The host agent handles downloading audio from the messaging platform (Telegram, Discord, etc.) — this skill only needs the local file path.scripts/identify.sh /path/to/audio-file.ogg
memory/music-log.json.Supported formats: OGG/Opus, MP3, WAV, FLAC, M4A. No transcoding needed — AudD accepts all common audio formats.
After a successful identification, if Spotify tokens exist at ~/.config/spotify/tokens.json:
# Check if anything is playing
scripts/spotify-queue.sh status
# Queue the identified track
scripts/spotify-queue.sh queue "spotify:track:<track_id>"
If no active Spotify session is found, fall back to returning the Spotify link only.
Token refresh is handled automatically by spotify-queue.sh on 401 responses.
🎵 {title} by {artist} + Spotify link on next line. If Spotify active, note it was queued.🎵 {title} by {artist} (no link)Append identified songs to memory/music-log.json (one JSON object per line):
{"date":"2026-03-22","time":"14:30","title":"Viva La Vida","artist":"Coldplay","album":"Viva la Vida","spotify":"https://open.spotify.com/track/..."}
Create the file if it doesn't exist. For recall queries, read and present this log.
| Script | Purpose | Dependencies |
|---|---|---|
scripts/identify.sh <audio_file> | POST audio to AudD, return JSON | curl, jq |
scripts/spotify-auth.py [--url] | One-time Spotify OAuth flow | python3 |
scripts/spotify-queue.sh queue <uri> | Queue track to active Spotify | curl, jq |
scripts/spotify-queue.sh status | Check current Spotify playback | curl, jq |
Exit codes for identify.sh: 0=found, 1=not found, 2=error.
See references/audd-api.md for AudD endpoint details, parameters, and response format.