A polished .NET implementation of a YouTube downloader and MP3/MP4 tagging toolset. Designed for users who want a clean, testable, and extensible downloader with metadata, album art, and lyrics support.
Keywords: ynet, youtube downloader .net, youtube mp3, youtube playlist downloader, youtubeexplode, ffmpeg, mp3 metadata, yt to mp3, yt downloader, windows youtube, youtube app, windows youtube download, youtube download, youtube mp4, youtube music
For the easiest way to get started, download the ready-to-use executable for your operating system from the GitHub Releases page. FFmpeg is already included in these packages, so no separate installation is required.
- Go to the GitHub Releases page for this project.
- Download the appropriate file for your OS (e.g., .dmg for macOS, .exe for Windows).
- Run the executable.
- Download single videos & entire playlists.
- Save downloads as MP3 & MP4 files.
- Select MP3 bitrate (e.g., 128k, 192k, 256k, 320k).
- Select video quality (best available, up to 2160p where available).
- Intelligent title and artist parsing for metadata tagging.
- Multi-artist support (e.g., "Artist1 ft. Artist2").
- Automatic album naming: uses derived album names.
- Embed high-quality cover art into MP3 files.
- Attempt lyrics scraping and embed lyrics into MP3s when found.
- Configurable output directory per user preference.
- Download queue management for sequential downloads.
- Real-time activity logging for debugging and monitoring.
- Ability to abort active downloads.
- Settings: FFmpeg path, default output directory, quality defaults, metadata toggles.
- Dark/Light/System appearance options in supported UIs.
- Clipboard paste support for quick URL entry.
- Toggleable progress bar for visual feedback.
- Project type: .NET 9.0 solution with library, tests, and platform UIs.
- Core library:
src/YTP.Core— download and metadata plumbing. - Windows UI:
src/YTP.WindowsUI— WPF application (Windows-only). - macOS UI:
src/YTP.MacUI— Avalonia project for macOS. - Tests:
src/YTP.Core.Tests— unit tests for core functionality. - Solution file:
ktd.sln
- .NET 9.0 SDK (download from https://dotnet.microsoft.com/download).
- Windows Desktop (for building/running the WPF
YTP.WindowsUIproject). - FFmpeg installed or available in the published bundle. The app will call
ffmpegby default if no path is configured.
Open PowerShell in the repository root and run:
# restore packages and build the entire solution
dotnet restore ktd.sln
dotnet build ktd.sln -c ReleaseBuild output will go into the standard bin/ and obj/ folders under each project.
Run the core console runner (quick confirmation of wiring and settings):
dotnet run --project src\YTP.Core\YTP.Core.csprojRun the Windows desktop application (WPF):
dotnet run --project src\YTP.WindowsUI\YTP.WindowsUI.csprojRun the macOS UI (Avalonia) on macOS:
dotnet run --project src/YTP.MacUI/YTP.MacUI.csprojNotes:
- The WPF UI will only run on Windows.
- The Avalonia macOS project requires the appropriate runtime on macOS.
Execute the test suite for the core library:
dotnet test src\YTP.Core.Tests\YTP.Core.Tests.csproj -c ReleasePublish the Windows UI as a single-file self-contained executable (example for x64):
dotnet publish src\YTP.WindowsUI\YTP.WindowsUI.csproj -c Release -r win-x64 /p:PublishSingleFile=true /p:SelfContained=true -o publish\windows\YTP.WindowsUIPublish the core library as a framework-dependent pack:
dotnet publish src\YTP.Core\YTP.Core.csproj -c Release -o publish\corePackaging recommendations:
- For WPF targets, publish for
win-x64orwin-x86as appropriate. - Include an FFmpeg binary in your published bundle or instruct users to install FFmpeg.
- Test the published app on a clean Windows machine to ensure bundled assets are present.
- The app exposes a Settings UI where users can set the FFmpeg path.
- If
FfmpegPathis empty, the code falls back to theffmpegcommand and expects it on PATH. - Settings are persisted by the library and loaded by each UI project.
- "FFmpeg Not Found": ensure
ffmpegis installed or set the path in Settings. - "Download Failed": verify the URL is public and not age-restricted or private.
- "No Metadata": some videos lack structured metadata; check the Activity Log for details.
- Crashes: check
ytp_unhandled_exception.txt(or similar) in the OS temp folder for stack traces written by the app.
If you need help, open an issue: https://github.com/NASSERRRR/ytp/issues/new When reporting a bug, please include:
- A clear description of the bug.
- Steps to reproduce the bug.
- Expected behavior vs. actual behavior.
- Any error messages from the "Activity Log".
- Your operating system.
- The version of each of the prerequisites that you are using.
Contributions are welcome. Please:
- Fork the repository.
- Create a feature branch:
git checkout -b feature/your-feature. - Add tests and documentation for your changes.
- Open a Pull Request describing the change and motivation.
- Download logic uses
YoutubeExplodefor fetching stream and metadata. - Conversion and merging are handled via FFmpeg called from
FFmpegService. - Image processing uses
SixLabors.ImageSharp. - Tagging uses
TagLibSharpfor ID3 and metadata writes.
This repository is released under the MIT License — see LICENSE for details.