The invisible architect of your event. From the first pour to the final sunrise.
Stop managing music; start managing the vibe. Waveform engineers the full arc — arrival through the dance floor to early-morning reflection — and drops it straight into your Spotify, with custom cover art for every chapter.
Waveform engineers the night into five distinct chapters. Each is a shift in energy, a new chapter of the story, and a custom visual identity in your Spotify library.
Python 3.10+. A Spotify developer account (free). A Gemini API key (also free). That's the whole stack.
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 example templates.
Edit master_prompt.md — describe the party, list the artists your crowd loves, set rules like "no breakup songs." This is Gemini's main instruction file and it takes plain English.
Optional but powerful. Link any Spotify playlist and Gemini reads the actual tracks to calibrate taste — genre ratios, energy, artist mix. It learns what this crowd responds to.
Run python create_playlist.py. Choose Full Night, Split Night, or Both. Playlists land in Spotify within minutes, each block with its own gradient cover art.
This is exactly what Waveform looks like in your terminal. Hit Generate to see the arc build in real time.
No hardcoded song pools. Gemini reads your prompt and reference playlist fresh every run — every generation is unique to your crowd and moment. It does not sample from a pre-built catalogue.
Waveform remembers every song per playlist name. Regenerate any time without repeats, or clear history to start fresh. Per-playlist tracking so different events never collide.
Each block gets auto-generated gradient cover art in its exact palette. Wine & Chill gets deep crimson. Dance Floor gets hot pink. Real art, uploaded directly to Spotify.
Songs shuffle within each block so artists are not clumped together — but the energy arc between blocks is always preserved. Best of both worlds.
List artists in blocked_artists.txt and they are excluded unconditionally — no matter what Gemini says. Hard veto. No exceptions.
Quick tweaks from the menu without touching files — "more 80s", "extra reggaeton", "no house tonight." Layers on top of your master prompt.
Switch between Gemini 2.0, 2.5 Flash, 2.5 Pro, and preview releases from the settings menu. Speed versus quality tradeoff, your choice per run.
If a playlist with the same name already exists, Waveform asks: overwrite, append, or rename? No accidental duplicates, no lost work.
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 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 independently. Switch when the energy shifts. More control for real DJing.
Full night playlist and all the split playlists at once. Decide on the night which to use.
# 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 — add Spotify + Gemini keys, set BIRTHDAY_NAME
# Run it
python create_playlist.py