Skip to content

seyallius/nomnom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

52 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

nomnom 🍽️

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.


What it does

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.


Features

One-click presets

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.

Quality control

Choose your video resolution: Best, 1080p, 720p, or 480p. Audio presets extract MP3 at the highest quality by default.

Smart file organization

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

Flag panel

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.

Download archive

Point nomnom at a yt-dlp archive file and it'll skip anything you've already downloaded. No duplicates, ever.

Terminal panel

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.

Live log panel

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

Stop button

Kill a download mid-flight with one click. No need to hunt for the process in your system monitor.


Screenshots

Main UI

main

Presets

preset_1

preset_2


Prerequisites

yt-dlp must be installed β€” nomnom is a GUI front-end; the actual downloading is done by yt-dlp under the hood.

Installing yt-dlp

Linux / macOS:

# pip (recommended β€” gets auto-updates)
pip install -U yt-dlp

# or Homebrew (macOS)
brew install yt-dlp

Windows:

winget install yt-dlp
# or
scoop install yt-dlp

Make sure it's on your PATH:

yt-dlp --version

Installation

Pre-built binaries

Grab the latest release from the Releases page:

Platform File
Linux .deb package or AppImage
macOS .dmg
Windows .msi installer

From crates.io

cargo install nomnom-app

Build from source

See 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 --release

Check INSTALL.md for Dioxus and system dependency details.


Usage

  1. Launch nomnom
  2. Pick a preset from the left sidebar β€” or go Custom
  3. Paste your URL (or pick a batch .txt file)
  4. Choose an output folder with the πŸ“ button
  5. 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.

Batch mode

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.

Archive mode

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.

Custom commands

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.


Architecture

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.


Contributing

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.


License

MIT

About

YT-DLP GUI Wrapper, but it eats URLs and spits out videos. simple.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors