quark-downloader v0.5.0

a simple yt-dlp wrapper built with crystal
Quark Downloader

Quark Downloader

Crystal CI GitHub release AUR version

Dependencies

Dependency Windows macOS Linux
yt-dlp PATH or auto-download to tools/ PATH via Homebrew PATH
ffmpeg PATH or bundled PATH via Homebrew PATH
GUI (optional) Win32 AppKit UI Tk / wish (apt install tk)

Note: Distro/apt yt-dlp is often too old. Prefer pipx install yt-dlp and Node or Deno. Quark warns on stale versions and passes EJS flags when a JS runtime is on PATH.

Build: Crystal | just | Windows installer: Inno Setup 7 + packaging/quark-downloader.iss | macOS app/DMG: Xcode Command Line Tools (swiftc) + just dmg

Binaries

Program Purpose
quark-downloader Full CLI - interactive in a terminal, or scriptable with flags
quark-downloader-gui Thin UI that collects options and runs the CLI as a subprocess
quark-downloader-gui-helper macOS only: native AppKit windows for the GUI (built with swiftc)

The GUI queues multiple URLs (Add/Remove list) and downloads them sequentially with combined progress ("URL 2 of 5"). Playlist URLs download every item into a folder named after the playlist (see playlist_folders), with per-item progress and a failure summary.

Package maintainers can ship the CLI alone (quark-downloader on PATH) and optionally a GUI package that installs quark-downloader-gui, quark-downloader-gui.tcl (same directory), packaging/quark-downloader-gui.desktop, and depends on Tk / wish (Linux). On macOS the GUI prefers the native quark-downloader-gui-helper beside the binary and falls back to Tk when it is missing.

Windows shortcuts from the installer open the GUI; the CLI remains in the install folder as Quark Downloader (CLI). Use Check for updates in settings to compare against the latest GitHub release and open the installer download when a newer version is published.

Configuration

On first run, Quark creates quark-downloader.conf under the user config directory:

Setting Values
download_dir Default output folder (~ is supported)
yt_dlp auto, path, or bundled
ffmpeg auto, path, or bundled
gui_download_mode progress for the GUI progress dialog, or external_cli to open the CLI window after Download
download_logs true or false; applies to both CLI and GUI downloads
gui_theme light or dark; applies to the macOS/Linux GUI (Windows uses its native light UI)
strip_video_ids true (default) drops the trailing [VIDEOID] from filenames
sanitize_filenames true (default) makes filenames mostly ASCII-safe on all platforms ( -> -, accents transliterated, Windows-invalid characters removed)
filename_spaces keep (default), underscore, dash, or remove
playlist_folders true (default) saves playlist downloads into a folder named after the playlist (sanitized with the same rules)

The download-naming settings are grouped under Download Naming in the GUI settings. The GUI gear button opens all settings without editing the file by hand. Logs are rotated in the config directory under logs/. Existing config files are updated with missing default keys on load.

Commands

just run          # crystal run CLI
just run-gui      # crystal run GUI
just build        # release -> build/ (both binaries; UPX on Windows; AppKit helper on macOS)
just dmg          # macOS: build "Quark Downloader.app" + DMG into dist/
just clean
crystal spec      # run focused tests

The DMG is ad-hoc signed: after downloading, right-click > Open the first time (or xattr -dr com.apple.quarantine "Quark Downloader.app"). Inside the app bundle, downloaded tools are stored under ~/.config/quark-downloader/tools/.

Build scripts live under scripts/, grouped by platform.

CLI (non-interactive)

quark-downloader --url 'https://example.com/video' --type video --format mp4 --output-dir ~/Downloads --no-pause
quark-downloader --url 'https://a/1' --url 'https://a/2'   # bulk: repeat --url; failures don't stop the queue
quark-downloader --batch-file urls.txt                     # one URL per line, # comments ignored
quark-downloader --url 'https://www.youtube.com/playlist?list=...'  # playlist -> own folder
quark-downloader --print-default-output-dir

Run with no arguments for the interactive prompt flow.

Env (Windows)

QUARK_SKIP_YTDLP_UPDATE=1 | QUARK_SKIP_FFMPEG_DOWNLOAD=1

Repository

quark-downloader

Owner
Statistic
  • 0
  • 0
  • 0
  • 0
  • 0
  • 9 days ago
  • June 2, 2026
License

MIT License

Links
Synced at

Fri, 12 Jun 2026 23:52:39 GMT

Languages