A desktop app that takes Spotify or YouTube track URLs — or local audio files — finds the best audio match on YouTube, downloads it, optionally retunes from 440 Hz to 432 Hz, organizes files into your existing folder structure, and uploads them to iBroadcast — all in one automated pipeline.
- Flexible input — paste Spotify URLs or YouTube URLs (mixed batches supported), or add local audio files via Add Files
- Local file upload — pull in MP3/FLAC/WAV files from disk; metadata is read from embedded tags (with filename fallback) and the same retune/organize/upload pipeline applies
- Spotify metadata — scrapes track title, artist, album, duration, and cover art from the public Spotify page (no API key required)
- YouTube audio matching — searches YouTube via yt-dlp and picks the best audio-only match using duration and title scoring
- Cover art & album tags — embeds cover artwork (APIC) and album metadata into the ID3 tags so iBroadcast shows the right album and artwork; album falls back gracefully when the source has none
- Batch downloads — parallel downloads with dynamic thread count based on queue size
- 440 Hz / 432 Hz — optional pitch retune per batch before saving
- Folder confirmation — per-song folder dialog with last-used folder suggestion; app never creates or renames folders
- iBroadcast upload — uploads processed files to a configurable playlist with duplicate detection
- Python 3.11+
- ffmpeg — must be on
PATH - Node.js — required by yt-dlp for YouTube signature solving
- iBroadcast account (for upload step)
git clone https://github.com/Spyro7883/TuneBridge.git
cd TuneBridge
pip install -r requirements.txtCopy .env.example to .env and fill in your iBroadcast credentials:
cp .env.example .envIBROADCAST_USERNAME=your@email.com
IBROADCAST_PASSWORD=yourpassword
python tunebridge.py- Paste one or more Spotify or YouTube URLs into the input box (one per line), and/or click Add Files to pick local audio files
- Select 440 Hz or 432 Hz for the batch
- Click Start Processing
- Confirm the destination folder for each song as it completes
- Click Upload to iBroadcast when ready
| Variable | Description |
|---|---|
IBROADCAST_USERNAME |
iBroadcast account email |
IBROADCAST_PASSWORD |
iBroadcast account password |
The iBroadcast upload step is skipped silently if credentials are not configured.
| Component | Library |
|---|---|
| GUI | PySide6 |
| YouTube download | yt-dlp |
| Audio retune | librosa, soundfile |
| Audio processing | ffmpeg, numpy |
| Metadata scraping | requests (Spotify public page) |
| ID3 tagging | mutagen |
- The app scrapes Spotify's public page for metadata — no Spotify API key or Premium account needed
- yt-dlp requires Node.js to solve YouTube's signature challenges; keep both up to date
- Folders must already exist on disk; the app will not create them
TuneBridge is provided for personal use only. The user is responsible for ensuring their use of the app complies with all applicable terms of service and local laws:
- YouTube Terms of Service restrict downloading content; use this tool only for content you have the right to download (e.g. your own uploads, Creative Commons material, or where YouTube provides a download button).
- Spotify metadata is scraped from public pages — no account is required and no Spotify API credentials are used.
- iBroadcast uploads are made via the official API using your own account credentials.
This project is not affiliated with, endorsed by, or sponsored by Spotify, YouTube, Google, or iBroadcast. All trademarks are the property of their respective owners.
The author accepts no responsibility for misuse. If you are unsure whether your intended use is permitted, do not use this tool.
MIT
