You send a Spotify link to a friend. They reply "I don't have Spotify." You roll your eyes. That's why LinkPark exists.
LinkPark takes a track, it could be a messy URL you copied from an app or just a few lyrics you vaguely remember, then figures out exactly what song it is. It then spits out clean, tracker-free links for every major streaming platform so you can actually share music without the back-and-forth.
LinkPark handles the heavy lifting in the background by orchestrating a "Metadata-First" resolution pipeline. It uses randomized sequential proxy fallbacks for Odesli, YouTube OEmbed for metadata discovery, and automated scraper-based recovery for streaming links. It purposely scrubs out annoying tracking parameters (like ?si= or &mt=) and uses a server-side O(1) response cache to ensure near-instantaneous resolution for repeat searches.
What's different here? By combining OEmbed, scraping, and deep-search via Tinyfish and Apple Music, LinkPark almost always provides links for the "Big 3" (Spotify, YouTube Music, and Apple Music) even when Odesli's native matching fails! ;D
- Robust URL Drops: Intelligent extraction of Artist/Song from messy URLs via OEmbed and Scraping.
- Sequential Proxy Fallback: Shuffles multiple external proxies to bypass rate limits and regional blocks.
- O(1) Server-Side Cache: Instant results for repeat resolutions and shared links.
- Proof-of-Work (PoW) Security: Uses SHA-256 challenges to prevent API abuse without requiring complex auth.
- Native 30s Audio Previews: Integrated player for instant verification.
LinkPark is flexible. You can run it in three different ways depending on how much you care about API key security and pain:
If you want to host everything in one place (like on Render, Vercel, or a VPS), just point your hosting service to this repository.
- The
server.jsacts as both the web server and a secure API proxy. - Setup:
- Add
TFKEYto your environment variables. - Set
PROXY = '/api/search'inindex.htmland push. - Your API key stays safe on the server and is never seen by the browser.
- Add
You can keep the frontend on GitHub Pages and host the proxy elsewhere.
- Setup:
- Deploy the
server.jsto a service like Vercel or Render. - Add
TFKEYS,SERVICE, andPOW_DIFFICULTYto that service's environment variables. - Set
SERVICEto a comma-separated list of frontend origins that may use the proxy, for examplehttps://your-site.example,https://your-user.github.io. - Optional proxy tuning envs:
PROXY_TOKEN_TTL_SECONDS,SESSION_RATE_LIMIT_WINDOW_MS,SESSION_RATE_LIMIT_MAX,API_RATE_LIMIT_WINDOW_MS, andAPI_RATE_LIMIT_MAX. - Set
PROXY = 'https://your-proxy-url.com/api/search'inindex.htmland push.
- Deploy the
- This is great if you want to keep the "static" feel of GitHub Pages but still want a secure key.
Perfect for testing things out on your machine without setting up a server.
- Setup:
- Clone the folder.
- Create a
config.jsin the root:window.LINKPARK_CONFIG = { TFKEY: "your_key_here" };
- Leave
PROXY = ''inindex.html. - Open
index.htmlin your browser. (Note: Search might fail in some browsers due to CORS if run directly from a file).
- Frontend: Plain HTML, CSS, and Vanilla JavaScript.
- Primary Resolution: Odesli API
- Deep Search: Tinyfish API
- Metadata & Audio Previews: iTunes Search API
The repo includes a pytest stress test that runs the real Express proxy, uses the normal /api/challenge proof-of-work flow, replaces only Tinyfish with a local simulator, and then slowly resolves 50 random tracks through /api/resolve over 10 minutes. Odesli and iTunes are still real network calls.
python -m pip install -r requirements-dev.txt
RUN_LINKPARK_STRESS=1 python -m pytest tests/stress/test_odesli_reliability.py -qUseful knobs:
LINKPARK_STRESS_COUNT=5 LINKPARK_STRESS_DURATION_SECONDS=60 RUN_LINKPARK_STRESS=1 python -m pytest tests/stress/test_odesli_reliability.py -qThe LinkPark logo uses the Open Sans font (licensed under the Apache License, Version 2.0).
Free to do whatever, just don't abuse my api at preview site :D
