quark-downloader v0.6.0
|
|
Quark Downloader |
Dependencies
| Dependency | Windows | macOS | Linux |
|---|---|---|---|
| yt-dlp | PATH or auto-download to tools/ |
PATH via Homebrew | PATH (package manager / pipx) |
| ffmpeg | PATH or bundled | PATH via Homebrew | PATH (package manager) |
| 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 |
Windows only: auto, path, or bundled. macOS/Linux always use PATH (Homebrew / package manager). |
ffmpeg |
Windows only: auto, path, or bundled. macOS/Linux always use PATH. |
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"). On macOS and Linux, install yt-dlp and ffmpeg yourself (brew install yt-dlp ffmpeg, or your distro / pipx); Quark does not bundle or auto-download them there. Do not run with sudo — that writes config and downloads into root's home.
CLI color: Interactive and TTY output uses ANSI colors when supported. Disable with NO_COLOR=1 or force with FORCE_COLOR=1.
Stall watchdog: Playlist items that go silent too long are skipped (QUARK_STALL_TIMEOUT_SEC, default ~75s after output starts, ~90s grace before first output). Single-video stalls warn instead of killing.
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 '…' --emit-result-json # final __RESULT__ JSON line for tools/GUI
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
quark-downloader
- 0
- 0
- 0
- 0
- 0
- 19 days ago
- June 2, 2026
MIT License
Tue, 04 Aug 2026 21:37:03 GMT