This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
Song Saver: share a reel or Short, get the song later.
I watch a reel, love the music, and by the time I open a search bar I've forgotten it. Song Saver removes the remembering. You share the link from your phone to a small server on your laptop and carry on with your day. In the background it downloads the audio, transcribes the lyrics, identifies the track, and adds it to a phone-friendly list you open whenever you feel like it. Anyone who has ever lost a song to a scroll gets to be a little lazier.
Code
How I Built It
-
Whisper (faster-whisper,
basemodel): open-weight speech-to-text, runs locally and transcribes the lyrics. - gemma3:1b via Ollama: reads the noisy transcript and picks the single most searchable lyric line.
- LRCLIB: an open lyrics database used to match that line to a track.
- yt-dlp: downloads only the audio of the shared link.
- Python stdlib server: a background queue, so sharing returns instantly, plus a small web page listing every saved song.
Flow: share, queue, download audio, Whisper, gemma, LRCLIB, saved list. If a song can't be identified, the entry is still saved, so nothing is lost.
Why Does Open Innovation Matter?
- Privacy: my shared links and listening habits never go to a closed service. Transcription and lyric-picking happen on my own machine.
- Cost: no API keys and no per-request fees, so I set it up once and never pay again.
-
Swappable parts: if Whisper
basemishears a song, I change one word tosmall. If gemma struggles, I point Ollama at another model. A closed API wouldn't let me tune or swap the parts that way. - Open data: LRCLIB is a community-built lyrics database, so the whole pipeline is open end to end.
Limitations
Sped-up audio, instrumentals, and non-English lyrics are hard for Whisper base, and Instagram sometimes blocks yt-dlp (YouTube Shorts work reliably). Next steps: an on-phone version with whisper.cpp, and audio fingerprinting for instrumental tracks.
Top comments (0)