Two sides of the same coin:
projects/spotify/tokens.json (auto-refreshes)projects/spotify/.env ( SPOTIFY_CLIENT_ID, SPOTIFY_CLIENT_SECRET)scripts/build-lyric-index.md for how to build one. Lyrics are copyrighted and not included in this skill. You'll need to curate your own lyric-index.json and optionally lyrics-db.json.Search the lyric index for lines that literally say what you mean:
bash
node scripts/lyric-engine.js search "phrase to find"
Returns matching lines with IDs, timestamps, and scores. Use literal phrases — search for what the lyrics actually say, not metaphors.
Send specific lyric lines to the active Spotify device:
bash
node scripts/lyric-engine.js speak "artist::track::lineNum" "artist::track::lineNum"
Each clip plays its exact timestamp window, then advances to the next with a brief pause. Chain multiple IDs to build a sentence.
bash
node scripts/bumblebee.js devices
Verify an active Spotify device exists before attempting playback. 🟢 = active.
Bumblebee doesn't paraphrase — it finds lyrics that literally say the words. The goal is chaining real song lines into a coherent sentence or feeling that the listener can understand.
Give the engine a message and it finds the best lyric chain:
bash
node scripts/lyric-engine.js compose "I miss you and I want to see you"
Returns a chain of clips with a ready-to-use speak command. The engine uses greedy phrase-matching: longest matching phrase first, then fills gaps.
For more nuanced messages, the agent should:
Rephrase the feeling as literal words someone would sing. "Tell her I love her" → search for "te quiero", "I love you", "eres lo que más quiero"
Search for 2-4 key phrases that build the message: bash
node scripts/lyric-engine.js search "I need you"
node scripts/lyric-engine.js search "come back"
node scripts/lyric-engine.js search "I'll be waiting"
Pick the best line from each search — prefer lines where the matching phrase IS the whole line (not buried in a long verse)
Chain them into a speak command: bash
node scripts/lyric-engine.js speak "artist::track::3" "artist::track::12" "artist::track::7"
node scripts/lyric-engine.js index "Artist" "Track"node scripts/lyric-engine.js batch-indexnode scripts/lyric-engine.js catalogThe original bumblebee.js supports mood-based playback from a curated clips database:
bash
node scripts/bumblebee.js play greeting
node scripts/bumblebee.js say greeting motivation celebration
Available intents: greeting, motivation, freedom, empathy, celebration, goodnight, warning, pride, lets_go.
batch-index to start, then add songs that match your user's taste.version: "1.0.0"
An AI DJ that reads the moment and plays the right music. Knows 5 frequency profiles that map to different states of mind and times of day.
FrequencyVibeTimeKey ArtistsArchitectSolo builder, focus, flow state9AM-5PM, 10PM-2AMC418, Jarre, Tangerine Dream, VangelisDreamerSynthwave, retro-futurism, night cruising8PM-3AMKavinsky, M83, Com Truise, PerturbatorMexican SoulHeritage, roots, identityAnytimeJosé José, Vicente, Natalia, Café TacvbaSeekerPost-midnight processing, healing11PM-6AMSolfeggio, 528Hz, 639Hz, ambientCinephileFilm scores, thinking, reflecting7PM-2AMJóhannsson, Zimmer, Richter, Greenwood
bash
node scripts/r2-dj.js vibe
Reads time of day + recent listening → detects the right frequency → builds and plays a queue. Outputs a JSON summary for the agent's reply.
bash
node scripts/r2-dj.js vibe --frequency seeker
node scripts/r2-dj.js vibe --frequency architect --device iPhone
bash
node scripts/r2-dj.js now # What's playing
node scripts/r2-dj.js pause # Pause
node scripts/r2-dj.js skip # Next track
node scripts/r2-dj.js volume 50 # Set volume
node scripts/r2-dj.js play "Nils Frahm Says" # Search + play
node scripts/r2-dj.js play spotify:track:xxx # Play URI directly
node scripts/r2-dj.js search "ambient electronic" # Search tracks
bash
node scripts/r2-dj.js context # Time, recent plays, detected frequency, devices
node scripts/r2-dj.js frequencies # List all frequency profiles
node scripts/r2-dj.js history # Recent listening history
node scripts/r2-dj.js devices # Spotify devices
r2-dj.js vibe (auto-detect)r2-dj.js vibe --frequency architectr2-dj.js vibe --frequency dreamerr2-dj.js vibe --frequency seekerr2-dj.js play "song name"vibe --frequency <key>---JSON_SUMMARY--- is for agent parsing, not user display