meloDL is a native macOS app for downloading and converting audio with a clean, settings-first workflow.
- macOS 15.5+ (SwiftUI desktop app)
- Accepts media URLs and downloads audio tracks, including playlists.
- Supports many websites via
yt-dlp, including YouTube (Music), SoundCloud, TikTok, Instagram, and X (Twitter) and many more. - Full supported website list: https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md
- Supports configurable output format and quality.
- Supports playlist downloads with queue/status UI.
- Prevents obvious re-downloads by checking an indexed local library before downloading.
- Supports duplicate cleanup workflows backed by full library indexing and byte-level audio hashing.
- Supports Rekordbox XML import to improve duplicate matching for DJ workflows.
- Uses staged duplicate-review sessions so changes can be reviewed, adjusted, and confirmed before final cleanup.
- Includes a short post-action undo window for smart cleanup actions.
- Optionally embeds metadata and thumbnails (depending on audio format).
- Supports automatic update checks for bundled download binaries (
yt-dlp,ffmpeg,ffprobe).
meloDLuses bundled command-line tools:yt-dlpffmpeg/ffprobe
- The app orchestrates these tools through
Processexecution in Swift. - For playlist URLs, the app can prefetch entries and process multiple items.
- Users can define library paths that are indexed for duplicate-aware download decisions.
- The index supports deeper duplicate cleanup by hashing raw audio bytes for high-confidence matching.
- Rekordbox XML exports can be imported to assist duplicate resolution in existing DJ libraries.
- Duplicate actions are staged for manual review before confirmation, with an undo grace period after smart cleanup.
GitHubUpdateServicechecks GitHub releases for:yt-dlp/yt-dlpeugeneware/ffmpeg-static
- Updated binaries are downloaded and replaced in Application Support.
- Version metadata is tracked in
Application Support/meloDL/versions.json.
- The macOS app itself updates through Sparkle.
- Sparkle reads an update feed (
appcast.xml) from the URL configured inInfo.plist(SUFeedURL). - Each app release should publish:
- A signed (and ideally notarized) release artifact (DMG/ZIP)
- A corresponding
appcast.xmlentry generated by Sparkle tooling
See PRIVACY.md for the basic privacy and data-handling disclaimer.
MIT. See LICENSE.
