Naptrack 1.0.5
dotnet tool install --global Naptrack --version 1.0.5
dotnet new tool-manifest
dotnet tool install --local Naptrack --version 1.0.5
#tool dotnet:?package=Naptrack&version=1.0.5
nuke :add-package Naptrack --version 1.0.5
<p align="center">
███╗ ██╗ █████╗ ██████╗ ████████╗██████╗ █████╗ ██████╗██╗ ██╗
████╗ ██║██╔══██╗██╔══██╗╚══██╔══╝██╔══██╗██╔══██╗██╔════╝██║ ██╔╝
██╔██╗ ██║███████║██████╔╝ ██║ ██████╔╝███████║██║ █████╔╝
██║╚██╗██║██╔══██║██╔═══╝ ██║ ██╔══██╗██╔══██║██║ ██╔═██╗
██║ ╚████║██║ ██║██║ ██║ ██║ ██║██║ ██║╚██████╗██║ ██╗
╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝
</p>
Grab audio and video from the web. Built originally to get lofi tracks offline for coding sessions.
Paste a link, hit Download MP3 or Download MP4. That's it.
<p align="center"> <img src="assets/Naptrack.gif" alt="Naptrack Demo" width="700" /> </p>
Built with .NET 10 and RazorConsole.
Features
- Download audio (MP3) or video (MP4) from YouTube, TikTok, Instagram, Facebook, and 1000+ sites
- One-press Download MP3 / Download MP4 buttons
- Auto-downloads
yt-dlpandffmpegon first run (no manual setup) - Keeps
yt-dlpup to date automatically, so sites do not start refusing downloads as it ages - Native folder picker to change download location
- Cross-platform: Windows, Linux, macOS
- Keyboard-driven TUI with animated spinners
Installation
Option 1: .NET Tool (requires .NET 10 SDK)
dotnet tool install -g Naptrack
Then run from anywhere:
naptrack
Option 2: Standalone Binary (no dependencies)
Download the latest release for your platform from Releases. No .NET installation needed.
Or build it yourself:
# Windows
dotnet publish -r win-x64
# Linux
dotnet publish -r linux-x64
# macOS Intel
dotnet publish -r osx-x64
# macOS Apple Silicon
dotnet publish -r osx-arm64
The output is a single executable in bin/Release/net10.0/<runtime>/publish/.
Usage
- Launch
naptrack - Paste a URL (YouTube, TikTok, Instagram, Facebook, etc.)
- Tab to [ Download MP4 ] or [ Download MP3 ] and press Enter — or press Enter in the URL box to repeat the format you used last
- File downloads to your configured folder
Keyboard Shortcuts
| Key | Action |
|---|---|
| Tab | Move between the URL box and the download buttons |
| Shift+Tab | Switch to the settings ([ Change ], [ Open ], [ Update ]) and back |
| Enter | Download / press the focused button |
| ↑ / ↓ | Recall recent links |
| Esc | Clear the URL box, or leave the settings |
| Ctrl+E | Open the download folder |
| Ctrl+L | Change the download folder |
| Ctrl+U | Update yt-dlp |
| Ctrl+P | Toggle "this video only" / "whole playlist" for a playlist link |
| Ctrl+V | Paste (Windows) |
| Cmd+V | Paste (macOS) |
| Ctrl+Shift+V | Paste (Linux) |
| Ctrl+C | Quit |
Configuration
- Download folder: press Shift+Tab, then [ Change ] to pick a folder or [ Open ] to view it (or Ctrl+L / Ctrl+E from anywhere)
- The URL box empties as soon as a download is accepted, so it is ready for the next link. The link is not lost — press ↑ to bring it back from history if a download needs another go.
- Settings are saved to:
- Windows:
%APPDATA%\Naptrack\config.json - Linux:
~/.config/Naptrack/config.json - macOS:
~/Library/Application Support/Naptrack/config.json
- Windows:
Dependencies
Naptrack automatically downloads these on first run if not found:
They live alongside your settings, in bin/ next to config.json.
Keeping yt-dlp current
yt-dlp is the part of Naptrack that goes out of date. Sites change what they accept on no
schedule, and an old build fails in a way that looks like being blocked: the video is found and
its formats are listed, then the download itself comes back HTTP Error 403.
So Naptrack tracks yt-dlp's nightly channel — the same code that becomes the next stable release, published as it lands — and checks for a newer build at most once a day, updating in the background while it starts. If you are offline, rate limited, or already current, nothing happens and nothing is said.
The version in use is shown in the app. It turns yellow once the build is more than two weeks old, and [ Update ] next to it (Shift+Tab to reach it, or Ctrl+U) fetches the newest build immediately. That button is what the "Access denied" message is pointing you at.
If you already have yt-dlp installed through pip, Homebrew or a package manager, Naptrack uses it and leaves it alone — updating someone else's install is not its business. The exception is a system copy that has gone stale: rather than leave you with downloads that cannot succeed, Naptrack installs its own up-to-date copy and uses that instead. Yours is left untouched.
JavaScript runtime (optional)
YouTube's player challenges are JavaScript, and yt-dlp now warns that extracting without an engine to run them is deprecated and may drop some formats. yt-dlp finds Deno by itself; Naptrack additionally detects Node or Bun and points yt-dlp at whichever it finds. None of them are required, and installing one is not a fix for being blocked — it affects which formats are available, not whether the download is allowed.
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
v1.0.5 - Fixes pasted links being appended to the previous URL, updates that only appeared after pressing Tab (a pasted link, a cancelled download), a cancelled download coming back to life, playlist links downloading every video when "one video" was chosen, and a crafted link being able to pass extra options to yt-dlp. Config saves are atomic and no longer race each other, errors are read from yt-dlp's ERROR lines instead of its warnings, MP4 falls back to other formats when a site offers none, and non-ASCII titles and folder names show correctly on Windows. The interface now has Download MP4 and Download MP3 buttons under the URL box, folder and yt-dlp settings beside them reached with Shift+Tab, coloured download rows, and the version shown next to the banner.