MCPcopy
hub / github.com/cgzirim/seek-tune

github.com/cgzirim/seek-tune @main sqlite

repository ↗ · DeepWiki ↗
205 symbols 464 edges 30 files 37 documented · 18%
README

SeekTune :musical_note:

screenshot

Demo in Video | How it was made (YouTube)

Description 🎼

SeekTune is an implementation of Shazam's song recognition algorithm based on insights from these resources. It integrates Spotify and YouTube APIs to find and download songs.

Installation :desktop_computer:

Prerequisites

Steps

📦 Clone the repository:

git clone https://github.com/cgzirim/seek-tune.git
cd seek-tune

🎧 Spotify API Setup

  1. Get credentials: Follow the official getting started guide to create a Spotify app and obtain your Client ID and Client Secret.

  2. Configure: Create a .env file in the server directory: bash SPOTIFY_CLIENT_ID=your-client-id SPOTIFY_CLIENT_SECRET=your-client-secret

The app will automatically fetch and cache access tokens as needed.

🐳 Set Up with Docker

Prerequisites: Docker and Docker Compose 1. Build and run the application: Bash docker-compose up --build Visit the app at http://localhost:8080 2. To stop the application: Bash docker-compose down

💻 Set Up Natively

Install dependencies for the backend

cd server
go get ./...

Install dependencies for the client

cd client
npm install

Usage (Native Setup) :bicyclist:

▸ Start the Client App 🏃‍♀️‍➡️

# Assuming you're in the client directory:

npm start

▸ Start the Backend App 🏃‍♀️

In a separate terminal window:

cd server
go run *.go serve [-proto <http|https> (default: http)] [-port <port number> (default: 5000)]

▸ Download a Song 📥

Note: A link from Spotify's mobile app won't work. You can copy the link from either the desktop or web app.

go run *.go download <https://open.spotify.com/.../...>

▸ Save local songs to DB (supports all audio formats) 🗃️

go run *.go save [-f|--force] <path_to_song_file_or_dir_of_songs>

The -f or --force flag allows saving the song even if a YouTube ID is not found. Note that the frontend will not display matches without a YouTube ID.

Note: if *.go does not work try to use ./... instead.

▸ Find matches for a song/recording 🔎

go run *.go find <path-to-wav-file>

▸ Delete fingerprints and songs 🗑️

# Delete only database (default)
go run *.go erase
go run *.go erase db

# Delete both database and song files
go run *.go erase all

Example :film_projector:

Download a song

$ go run *.go download https://open.spotify.com/track/4pqwGuGu34g8KtfN8LDGZm?si=b3180b3d61084018
Getting track info...
Now, downloading track...
Fingerprints saved in MongoDB successfully
'Voilà' by 'André Rieu' was downloaded
Total tracks downloaded: 1

Find matches of a song

$ go run *.go find songs/Voilà\ -\ André\ Rieu.wav
Top 20 matches:
        - Voilà by André Rieu, score: 5390686.00
        - I Am a Child of God by One Voice Children's Choir, score: 2539.00
        - I Have A Dream by ABBA, score: 2428.00
        - SOS by ABBA, score: 2327.00
        - Sweet Dreams (Are Made of This) - Remastered by Eurythmics, score: 2213.00
        - The Winner Takes It All by ABBA, score: 2094.00
        - Sleigh Ride by One Voice Children's Choir, score: 2091.00
        - Believe by Cher, score: 2089.00
        - Knowing Me, Knowing You by ABBA, score: 1958.00
        - Gimme! Gimme! Gimme! (A Man After Midnight) by ABBA, score: 1941.00
        - Take A Chance On Me by ABBA, score: 1932.00
        - Don't Stop Me Now - Remastered 2011 by Queen, score: 1892.00
        - I Do, I Do, I Do, I Do, I Do by ABBA, score: 1853.00
        - Everywhere - 2017 Remaster by Fleetwood Mac, score: 1779.00
        - You Will Be Found by One Voice Children's Choir, score: 1664.00
        - J'Imagine by One Voice Children's Choir, score: 1658.00
        - When You Believe by One Voice Children's Choir, score: 1629.00
        - When Love Was Born by One Voice Children's Choir, score: 1484.00
        - Don't Stop Believin' (2022 Remaster) by Journey, score: 1465.00
        - Lay All Your Love On Me by ABBA, score: 1436.00

Search took: 856.386557ms

Final prediction: Voilà by André Rieu , score: 5390686.00

Database Options 👯‍♀️

This application uses SQLite as the default database, but you can switch to MongoDB if preferred.

Using MongoDB

  1. Install MongoDB
  2. Configure MongoDB Connection:
    To connect to your MongoDB instance, set the following environment variables:

  3. DB_TYPE: Set this to "mongo" to indicate using MongoDB.

  4. DB_USER: The username for your MongoDB database.
  5. DB_PASS: The password for your MongoDB database.
  6. DB_NAME: The name of the MongoDB database you want to use.
  7. DB_HOST: The hostname or IP address of your MongoDB server.
  8. DB_PORT: The port number on which your MongoDB server is listening.

Note: The database connection URI is constructed using the environment variables.
If the DB_USER or DB_PASS environment variables are not set, it defaults to connecting to mongodb://localhost:27017.

Resources :card_file_box:

Author :black_nib:

  • Chigozirim Igweamaka
  • Connect with me on LinkedIn.
  • Check out my other GitHub projects.
  • Follow me on Twitter.

License :lock:

This project is licensed under the MIT License - see the LICENSE file for details.

Extension points exported contracts — how you extend this code

DBClient (Interface)
(no doc) [2 implementers]
server/db/client.go

Core symbols most depended-on inside this repo

enosys
called by 27
client/public/wasm_exec.js
Close
called by 20
server/db/client.go
downloadStatus
called by 13
server/socketHandlers.go
cleanUp
called by 4
client/src/App.js
request
called by 4
server/spotify/spotify.go
buildTrack
called by 4
server/spotify/spotify.go
_resume
called by 3
client/public/wasm_exec.js
Spectrogram
called by 3
server/shazam/spectrogram.go

Shape

Function 136
Method 48
Struct 18
Class 2
Interface 1

Languages

Go69%
TypeScript31%

Modules by API surface

client/public/wasm_exec.js49 symbols
server/spotify/spotify.go20 symbols
server/db/sqlite.go14 symbols
server/db/client.go14 symbols
server/db/mongo.go13 symbols
server/wav/wav.go9 symbols
server/cmdHandlers.go8 symbols
server/spotify/youtube.go7 symbols
server/spotify/utils.go7 symbols
server/spotify/downloader.go7 symbols
server/shazam/spectrogram.go6 symbols
server/utils/logger.go5 symbols

Dependencies from manifests, versioned

cloud.google.com/go/computev1.23.4 · 1×
cloud.google.com/go/compute/metadatav0.2.3 · 1×
github.com/davecgh/go-spewv1.1.2-0.20180830191 · 1×
github.com/dlclark/regexp2v1.11.5 · 1×
github.com/dop251/gojav0.0.0-2025012521320 · 1×
github.com/felixge/httpsnoopv1.0.4 · 1×
github.com/go-logr/logrv1.4.1 · 1×
github.com/go-logr/stdrv1.2.2 · 1×
github.com/go-sourcemap/sourcemapv2.1.4+incompatible · 1×

Datastores touched

fingerprintsCollection · 1 repos
songsCollection · 1 repos
(mongodb)Database · 1 repos
song-recognitionDatabase · 1 repos

For agents

$ claude mcp add seek-tune \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact