Tell it who the birthday person is, link a Spotify playlist, and Gemini AI curates the whole night — from wine o'clock to sunrise. Lands in your Spotify with custom cover art.
Waveform breaks the night into chapters. Each block has its own mood, its own energy, its own Spotify cover art — and they flow seamlessly into each other.
Four steps from zero to Spotify. No web app, no subscription, no data sold.
Drop your Spotify client ID and Gemini API key into a .env file. Both have generous free tiers. First launch auto-creates all config files from included templates.
Edit master_prompt.md — describe the party, list the artists your crowd loves, set rules like "no breakup songs." This is the AI's main instruction file.
Optional but powerful. Link any Spotify playlist and Gemini reads the actual song list to calibrate taste — genre ratios, energy level, artist choices. The prompt sets direction, the playlist calibrates sound.
Run python create_playlist.py. Choose Full Night, Split Night, or Both. The playlists land in your Spotify account with custom generated cover art for each block.
This simulates what running Waveform actually looks like in your terminal. Hit Generate to see the night come together.
No hardcoded song pools. Gemini reads your prompt and reference playlist fresh every time, so every generation is unique to your crowd.
Waveform remembers every song per playlist name. Regenerate without repeats, or start fresh — your call. Per-playlist history so different events never collide.
Each block gets auto-generated gradient cover art in the exact color palette of its mood. Wine & Chill gets deep crimson. Dance Floor gets hot pink. Actual art, in Spotify.
Songs are shuffled within each block so artists aren't clumped together — but the energy arc between blocks is always preserved. Best of both worlds.
List artists in blocked_artists.txt and they're excluded unconditionally — no matter what the AI or mood rules say. Hard veto, no exceptions.
Quick one-off tweaks from the menu without touching any files — "more 80s", "extra reggaeton", "no house music tonight." Layers on top of your master prompt.
If a playlist with the same name exists, Waveform asks: overwrite, append, or rename? No accidental duplicates, no lost playlists.
Switch between Gemini 2.0, 2.5 Flash, 2.5 Pro, and previews from the settings menu. Try different models for speed vs. quality tradeoffs on the same party.
Runs entirely on your machine with your own API keys. No accounts, no servers, no data collection. Your party, your music, your privacy.
Generate everything in one run. You can even ask for all three at once.
One big playlist, all blocks in order. Press play when guests arrive and don't touch it again. The night runs itself.
Separate playlists per vibe. Shuffle each one, switch when the energy shifts. More control, more flexibility for real DJing.
Get the full night playlist and all the split playlists at once, same songs across both. Decide on the night which to use.
Python 3.10+, a Spotify developer account, and a Gemini API key. Both API keys are free to get.
# Clone and install
git clone https://github.com/thepixelabs/waveform.git
cd waveform
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
# Set up credentials
cp .env.example .env
# Edit .env and add your Spotify + Gemini keys
# Run it
python create_playlist.py