gib me URLs β a clean, fast yt-dlp desktop GUI built in Rust with Dioxus
nomnom wraps yt-dlp in a native desktop app so you can grab videos, playlists, channels, or audio without ever touching a terminal.
You paste a YouTube URL, pick how you want it (video or audio, single file or whole playlist), hit download, and you're done. The files land in your Downloads folder, neatly sorted by uploader and date. If you want to fine-tune things, there's a panel with 30+ toggles for yt-dlp flags, and a raw terminal for when you just want to type the command yourself.
Eight ready-made profiles cover the most common use cases:
| Video | Audio | |
|---|---|---|
| Single URL | π¬ Single Video | π΅ Single Audio |
| Batch file | π Batch Videos | π Batch Audio |
| Playlist | π Video Playlist | π§ Audio Playlist |
| Channel | πΊ Channel Videos | π» Channel Audio |
Each preset wires up the right combination of download type, source handling, quality, and metadata flags. Pick one and go β or switch to Custom mode and configure everything yourself.
Choose your video resolution: Best, 1080p, 720p, or 480p. Audio presets extract MP3 at the highest quality by default.
Files don't all dump into one folder. nomnom uses yt-dlp output templates to keep things tidy:
Downloads/
βββ My Video Title - [ChannelName - Jan 01 2025].mp4 β single downloads
βββ Playlists/
β βββ @ChannelName/
β βββ PlaylistTitle/
β βββ 001 - First Video - [Jan 2025].mp4
β βββ 002 - Second Video - [Jan 2025].mp4 β playlists
βββ Channels/
βββ @ChannelName/
βββ Video One - [Dec 2024].mp4
βββ Video Two - [Nov 2024].mp4 β channels
Thirty-plus yt-dlp flags, organized into categories you actually care about:
- π Playlist β playlist order, reverse, etc.
- π·οΈ Metadata β thumbnails, chapters, info JSON, descriptions
- ποΈ Format β force MP4, MKV, remux
- π¬ Subtitles β download, embed, language filter
- π΅ Audio β extraction, format, quality
- π Network β proxy, geo-bypass, SSL
- βοΈ Misc β no-overwrites, resume, SponsorBlock, verbose mode
Toggle them on or off β they stack with whatever preset you've selected.
Point nomnom at a yt-dlp archive file and it'll skip anything you've already downloaded. No duplicates, ever.
For when the GUI doesn't expose the flag you need. Type any command and run it directly β output streams into the same log panel. There's also a live command preview above the download button so you always know exactly what's going to run.
Color-coded streaming output from yt-dlp's stdout/stderr:
| Color | Meaning |
|---|---|
| π’ Green | Success (β Done!) |
| π΄ Red | Errors and warnings |
| π£ Purple | Commands and status |
| π΅ Cyan | Download progress |
| π Orange | Info messages |
| βͺ Gray | General output |
Kill a download mid-flight with one click. No need to hunt for the process in your system monitor.
Main UI
Presets
yt-dlp must be installed β nomnom is a GUI front-end; the actual downloading is done by yt-dlp under the hood.
Linux / macOS:
# pip (recommended β gets auto-updates)
pip install -U yt-dlp
# or Homebrew (macOS)
brew install yt-dlpWindows:
winget install yt-dlp
# or
scoop install yt-dlpMake sure it's on your PATH:
yt-dlp --versionGrab the latest release from the Releases page:
| Platform | File |
|---|---|
| Linux | .deb package or AppImage |
| macOS | .dmg |
| Windows | .msi installer |
cargo install nomnom-appSee INSTALL.md for the full walkthrough. Quick version:
# Clone and build
git clone https://github.com/syeallius/nomnom.git
cd nomnom
just build # or: cargo build --releaseCheck INSTALL.md for Dioxus and system dependency details.
- Launch nomnom
- Pick a preset from the left sidebar β or go Custom
- Paste your URL (or pick a batch
.txtfile) - Choose an output folder with the π button
- Hit Download
The log panel shows exactly what yt-dlp is doing in real time. The command preview above the download button lets you verify the full yt-dlp command before it runs.
Create a plain text file with one URL per line, then switch the source to Batch File and pick it. nomnom will feed
it to yt-dlp's --batch-file option.
Set an archive file path in the Archive row. nomnom passes it to --download-archive so yt-dlp remembers what
you've already grabbed and skips those.
Use the Terminal panel to run any yt-dlp command you want. Handy for testing new flags, running filter expressions, or using tools that aren't exposed in the GUI yet.
nomnom is a single-window Dioxus desktop app. All state lives in the root App component as signals β no global
context, no hidden state machines. Child components receive props and write back through those same signals.
src/
βββ main.rs # Entry point, window config
βββ app.rs # Root component, owns all state
βββ components/
β βββ preset_panel.rs # 8 preset cards + Custom
β βββ flag_panel.rs # Categorized toggle buttons
β βββ mode_selector.rs # Type / Source / Quality pills
β βββ url_bar.rs # URL input, folder picker, download trigger
β βββ terminal_panel.rs # Raw command execution
β βββ output_log.rs # Color-coded streaming log
βββ core/
βββ download_mode.rs # DownloadType, DownloadSource, Quality
βββ flags.rs # All yt-dlp flag definitions
βββ presets.rs # Pre-configured flag bundles
βββ runner.rs # Subprocess management, log streaming
The core/ modules have no Dioxus dependencies β they're plain Rust and can be tested independently.
PRs and issues are welcome. If you're adding a new yt-dlp flag, just append it to all_flags().
For new presets, add an entry to all_presets() β the preset panel picks it up automatically.


