{"id":50763157,"url":"https://github.com/eyolas/voyagedl","last_synced_at":"2026-06-11T12:01:10.093Z","repository":{"id":355555062,"uuid":"1209262254","full_name":"eyolas/voyageDL","owner":"eyolas","description":"Desktop app to download YouTube videos \u0026 Deezer playlists as MP3 for offline listening. Built with Tauri v2, React \u0026 Rust","archived":false,"fork":false,"pushed_at":"2026-05-04T06:30:53.000Z","size":225,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-04T08:25:43.355Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eyolas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-13T08:50:27.000Z","updated_at":"2026-05-04T06:30:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/eyolas/voyageDL","commit_stats":null,"previous_names":["eyolas/voyagedl"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/eyolas/voyageDL","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eyolas%2FvoyageDL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eyolas%2FvoyageDL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eyolas%2FvoyageDL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eyolas%2FvoyageDL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eyolas","download_url":"https://codeload.github.com/eyolas/voyageDL/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eyolas%2FvoyageDL/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34197394,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-11T12:01:08.729Z","updated_at":"2026-06-11T12:01:10.049Z","avatar_url":"https://github.com/eyolas.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Voyage DL\n\nDesktop app to download music from YouTube and Deezer playlists as MP3 files for offline listening.\n\nBuilt with **Tauri v2** (Rust backend + React frontend), using `yt-dlp` and `ffmpeg` under the hood.\n\n## Features\n\n- Paste a YouTube video/playlist URL or a Deezer playlist URL\n- Automatic track listing with selection (pick which songs to download)\n- MP3 download with real-time progress tracking\n- Download queue management\n- Deezer integration: fetches playlist tracks via the Deezer API, then finds them on YouTube for download\n- Configurable download folder\n- Cross-platform: macOS (.dmg) and Windows (.msi / .nsis)\n\n## Prerequisites\n\n- [Node.js](https://nodejs.org/) \u003e= 18\n- [Rust](https://www.rust-lang.org/tools/install) \u003e= 1.70\n- [yt-dlp](https://github.com/yt-dlp/yt-dlp) in your PATH\n- [ffmpeg](https://ffmpeg.org/download.html) in your PATH\n- Tauri CLI v2:\n  ```bash\n  cargo install tauri-cli --version \"^2\"\n  ```\n\n## Getting Started\n\n```bash\n# Install frontend dependencies\nnpm install\n\n# Run in development mode (frontend + backend)\ncargo tauri dev\n```\n\nThe app opens automatically. In dev mode, `yt-dlp` and `ffmpeg` must be in your PATH.\n\n## Build for Production\n\n```bash\ncargo tauri build\n```\n\n- **macOS**: `.dmg` in `src-tauri/target/release/bundle/dmg/`\n- **Windows**: `.msi` in `src-tauri/target/release/bundle/msi/`, `.exe` in `src-tauri/target/release/bundle/nsis/`\n\n### Installing the macOS build\n\nThe `.app` is ad-hoc signed (no Apple Developer ID), so Gatekeeper blocks it on first launch — the app process starts but the window never appears. To unblock it after dragging `Voyage DL.app` into `/Applications`, run once:\n\n```bash\nxattr -cr \"/Applications/Voyage DL.app\"\n```\n\nAlternatively, after a blocked launch attempt, open **System Settings → Privacy \u0026 Security**, scroll to the bottom and click **Open Anyway**. Signing with a Developer ID + notarizing would remove this step but requires the Apple Developer Program ($99/year).\n\n### Bundling yt-dlp \u0026 ffmpeg\n\nFor a standalone app, include the binaries as Tauri sidecars:\n\n```bash\nmkdir -p src-tauri/binaries\n\n# macOS (Apple Silicon)\ncp $(which yt-dlp) src-tauri/binaries/yt-dlp-aarch64-apple-darwin\ncp $(which ffmpeg) src-tauri/binaries/ffmpeg-aarch64-apple-darwin\n\n# macOS (Intel)\n# yt-dlp-x86_64-apple-darwin, ffmpeg-x86_64-apple-darwin\n\n# Windows\n# yt-dlp-x86_64-pc-windows-msvc.exe, ffmpeg-x86_64-pc-windows-msvc.exe\n```\n\nFile names must follow the format: `{name}-{target-triple}[.exe]`. Tauri automatically selects the right binary for the platform.\n\n## Tech Stack\n\n| Layer    | Technology                                      |\n| -------- | ----------------------------------------------- |\n| Frontend | React 18 + TypeScript + Vite                    |\n| Backend  | Rust via Tauri v2                                |\n| Audio    | yt-dlp (extraction) + ffmpeg (MP3 conversion)   |\n| Deezer   | Deezer public API + yt-dlp ytsearch             |\n\n## Project Structure\n\n```\nsrc/                          # Frontend (React + TypeScript)\n├── App.tsx                   # Main component, screen routing\n├── components/\n│   ├── SetupScreen.tsx       # First launch: choose download folder\n│   ├── MainScreen.tsx        # Main screen: URL input \u0026 analysis\n│   ├── TrackList.tsx         # Track list with selection\n│   ├── DownloadProgress.tsx  # Download progress display\n│   ├── DownloadQueue.tsx     # Download queue\n│   ├── Settings.tsx          # Settings modal\n│   └── Alert.tsx             # Alert component\n└── hooks/\n    └── useConfig.ts          # Config management hook\n\nsrc-tauri/                    # Backend (Rust + Tauri v2)\n├── src/\n│   ├── main.rs               # Entry point\n│   ├── lib.rs                # Module exports\n│   ├── commands/\n│   │   ├── mod.rs            # Shared types (TrackInfo, DownloadSummary, Config)\n│   │   ├── config.rs         # Config read/write\n│   │   ├── youtube.rs        # YouTube URL analysis via yt-dlp\n│   │   ├── deezer.rs         # Deezer integration\n│   │   └── download.rs       # MP3 download with progress\n│   └── utils/\n│       └── sidecar.rs        # yt-dlp/ffmpeg sidecar management\n└── tauri.conf.json           # Tauri configuration\n```\n\n## How It Works\n\n1. **YouTube**: calls `yt-dlp --dump-json` to fetch metadata, then `yt-dlp -x --audio-format mp3` to download\n2. **Deezer**: fetches the playlist via the Deezer public API, searches each track on YouTube with `yt-dlp \"ytsearch1:artist title\"`, and downloads the result as MP3\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feyolas%2Fvoyagedl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feyolas%2Fvoyagedl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feyolas%2Fvoyagedl/lists"}