ears
SKILL.md
Ears π΅
Music toolkit for OpenClaw β Spotify + η½ζδΊι³δΉ.
Spotify β scripts/spotify.py
Setup (one-time)
- User creates a Spotify app at https://developer.spotify.com/dashboard
- Set redirect URI to
http://127.0.0.1:8989/login - Enable Web API
- Set redirect URI to
- Save the client ID:
python3 scripts/spotify.py config --client-id CLIENT_ID - Authenticate (opens browser):
python3 scripts/spotify.py auth
Config stored in ~/.config/openclaw-spotify/. Token auto-refreshes.
Commands
Info
spotify.py now # Currently playing
spotify.py top-tracks [range] [n] # Top tracks (short_term|medium_term|long_term)
spotify.py top-artists [range] [n] # Top artists
spotify.py recent [n] # Recently played
spotify.py playlists # List playlists
spotify.py playlist <id> [n] # Tracks in a playlist
spotify.py saved [n] # Liked tracks
spotify.py following # Followed artists
spotify.py search <query> # Search tracks/artists
spotify.py devices # Available playback devices
Playback Control
spotify.py play # Resume
spotify.py play <query> # Search and play first match
spotify.py play spotify:track:ID # Play by URI
spotify.py pause
spotify.py next
spotify.py prev
Playlist Management
spotify.py create-playlist <name>
spotify.py add-to-playlist <playlist_id> <track_uri> [...]
Raw API
spotify.py raw GET /me/player
spotify.py raw PUT /me/player/volume '{"volume_percent": 50}'
Notes
- If API returns 401, the script auto-refreshes the token.
playrequires an active Spotify device.- Time ranges:
short_term(~4 weeks),medium_term(~6 months),long_term(all time).
η½ζδΊι³δΉ β scripts/netease.py
Setup (one-time)
Dependencies:
pip3 install pyncm
brew install qrencode # optional, for terminal QR codes
Login via QR code (recommended):
python3 scripts/netease.py login-qr
- Generates a QR code image, user scans with η½ζδΊ app
- For Discord/remote: save QR as PNG with
qrencode -o qr.png -s 10 <URL>and send the image
Login via SMS:
python3 scripts/netease.py login <phone> [country_code]
Session stored in ~/.config/openclaw-ears/netease-session.json.
Commands
Auth
netease.py login <phone> [country] # Login via SMS (default country: 86)
netease.py login-qr # Login via QR code scan
netease.py status # Check login status
Browse
netease.py search <query> # Search songs
netease.py playlists # Your playlists
netease.py playlist <id> # Tracks in a playlist
netease.py recent # Recently played
netease.py likes # Your liked songs
Audio
netease.py url <track_id> [bitrate] # Get audio URL (default 320kbps)
netease.py download <id|query> [dir] # Download a single track
netease.py download-playlist <id> [dir] [--limit N] # Download playlist
Playback (macOS desktop app only)
netease.py play-mac toggle # Play/pause
netease.py play-mac next # Next track
netease.py play-mac prev # Previous track
Notes
- QR login sessions expire; re-login when needed.
- Audio download requires login. Some tracks may be VIP-only or region-locked.
- Playback control only works on macOS with NeteaseMusic.app installed (no remote control).
- Unlike Spotify, η½ζδΊ has no remote playback protocol β phone playback cannot be controlled.
YouTube Music β scripts/ytmusic.py
Setup (one-time)
Dependencies:
pip3 install ytmusicapi
brew install yt-dlp # optional, for audio download
Login (OAuth, opens browser):
python3 scripts/ytmusic.py login
Auth stored in ~/.config/openclaw-ears/ytmusic-auth.json.
Commands
Auth
ytmusic.py login # OAuth login (opens browser)
ytmusic.py login-headers # Login via browser headers
ytmusic.py status # Check login status
Browse
ytmusic.py search <query> # Search songs
ytmusic.py search-albums <query> # Search albums
ytmusic.py artist <id|name> # Artist info + top songs
ytmusic.py album <browse_id> # Album tracks
ytmusic.py playlists # Your playlists
ytmusic.py playlist <id> # Tracks in a playlist
ytmusic.py likes # Liked songs
ytmusic.py history # Play history
Audio
ytmusic.py url <video_id> # Get YouTube/YTMusic URLs
ytmusic.py play <id|query> # Open in browser and play
ytmusic.py download <id|query> [dir] # Download audio (requires yt-dlp)
Notes
- Search works without login. Playlists/likes/history require auth.
playopens YouTube Music in the default browser.- Download uses
yt-dlpβ install separately (brew install yt-dlp). - No remote playback control API β
playonly opens browser on local machine.
Apple Music β scripts/applemusic.py
Setup
No setup needed for search. Music.app control requires macOS Automation permission:
- System Settings β Privacy & Security β Automation β enable Music.app for Terminal
Commands
Search (no auth, uses iTunes Search API)
applemusic.py search <query> # Search songs
applemusic.py search-albums <query> # Search albums
applemusic.py artist <name> # Artist info + top songs
applemusic.py album <album_id> # Album tracks
applemusic.py lookup <track_id> # Track details
Play
applemusic.py play <id|query> # Open in Music.app / browser
applemusic.py preview <id|query> # Play 30s preview locally (afplay)
Music.app Control (macOS only)
applemusic.py now # Currently playing
applemusic.py pause # Pause
applemusic.py resume # Resume
applemusic.py next # Next track
applemusic.py prev # Previous track
applemusic.py local-playlists # List local playlists
Notes
- Search uses the free iTunes Search API β no Apple Developer account needed.
- Music.app control requires macOS Automation permission.
previewplays a 30-second preview clip viaafplay.- No access to personal library (liked songs, playlists) without MusicKit ($99/yr Apple Developer).
QQ ι³δΉ β scripts/qqmusic.py
Setup
No setup needed for search. Login required for playlists and some downloads.
Login via browser cookie (paste):
python3 scripts/qqmusic.py login
Login via QR code (QQ app scan):
python3 scripts/qqmusic.py login-qr
Cookie stored in ~/.config/openclaw-ears/qqmusic-cookie.txt.
Commands
Auth
qqmusic.py login # Login via browser cookie
qqmusic.py login-qr # Login via QQ QR code
qqmusic.py status # Check login status
Browse
qqmusic.py search <query> # Search songs
qqmusic.py search-albums <query> # Search albums
qqmusic.py playlists # Your playlists (needs login)
qqmusic.py playlist <id> # Tracks in a playlist
Audio
qqmusic.py url <songmid> # Get audio URL
qqmusic.py play <mid|query> # Open in browser
qqmusic.py download <mid|query> [dir] # Download audio
Notes
- Search works without login.
- Login uses QQ/WeChat cookie from browser β no official OAuth.
- VIP tracks may not be downloadable without VIP subscription.
- No playback control API.
Weekly Installs
1
Repository
h1an1/openclaw-earsGitHub Stars
1
First Seen
Mar 2, 2026
Security Audits
Installed on
amp1
cline1
openclaw1
opencode1
cursor1
kimi-cli1