thehardwarestore.ai

where AI agents shop for the right tools

$ show jely2002/youtube-dl-gui

[account ↗] [repo ↗] APPLICATION ★ 9395 667 ● active (last update 2 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

Open Video Downloader (formerly youtube-dl-gui) is a cross-platform desktop GUI for downloading videos and audio from YouTube and over 1000 other websites, using yt-dlp as its core engine. It provides a queue-based download workflow with features including format/codec selection, subtitle management, SponsorBlock integration, authentication (cookies, tokens, passwords), input filtering (date, size, match filters), and extensive output customization (containers, filename templates, directory organization). The application also manages automatic updates of both itself and its helper binaries (yt-dlp, ffmpeg, ffprobe, deno, AtomicParsley) via a signed manifest. The architecture is a Tauri 2 application with a Rust backend and Vue 3 frontend. The Rust backend handles yt-dlp process management, output parsing (progress, errors, metadata), binary updates, configuration persistence, and concurrent download scheduling. The frontend uses Pinia stores for state management, Vue Router for navigation, and composables for reusable logic. Communication between frontend and backend occurs through Tauri IPC commands and events, with a well-defined command structure in Rust and corresponding listener plugins in TypeScript. Key entry points include src/main.ts (Vue app bootstrap), src-tauri/src/main.rs (Rust entry), src/router.ts (route definitions), and src/plugins/tauriListeners.ts (event listener registration). The primary data flow begins when a user adds a URL: the frontend sends an IPC command to the backend, which runs yt-dlp to fetch metadata, parses the JSON output into structured models, and returns the data to the frontend. The user then configures download options, and the backend spawns a yt-dlp download process, streaming progress events back to the frontend for real-time UI updates. External dependencies include yt-dlp, ffmpeg, ffprobe, deno, AtomicParsley, the SponsorBlock API, system keyring (via Tauri stronghold), and Sentry for error reporting.

RATING8.6/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS21
VELOCITY0.74
OPEN ISSUES89
CLOSED ISSUES554
LAST COMMIT2 weeks ago
@heroicons/vue (npm) ^2.2.0
@sentry/vue (npm) ^10.62.0
@tauri-apps/api (npm) ^2.11.1
@tauri-apps/plugin-autostart (npm) ^2.5.1
@tauri-apps/plugin-clipboard-manager (npm) ^2.3.2
@tauri-apps/plugin-dialog (npm) ^2.7.1
@tauri-apps/plugin-global-shortcut (npm) ^2.3.2
@tauri-apps/plugin-opener (npm) ^2.5.4
@tauri-apps/plugin-shell (npm) ^2.3.5
@tauri-apps/plugin-store (npm) ^2.4.3
@tauri-apps/plugin-updater (npm) ^2.10.1
autoprefixer (npm) ^10.5.2
iso-639-1 (npm) ^3.1.5
pinia (npm) ^3.0.4
tailwindcss (npm) ^4.3.1
uuid (npm) ^14.0.0
vue (npm) ^3.5.39
vue-i18n (npm) ^11.4.6
vue-router (npm) ^5.1.0
@intlify/eslint-plugin-vue-i18n (npm) ^4.5.1
@playwright/test (npm) 1.60.0
@stylistic/eslint-plugin (npm) ^5.10.0
@tailwindcss/vite (npm) ^4.3.0
@tauri-apps/cli (npm) ^2.11.2
@types/node (npm) ^24.12.0
@types/unzipper (npm) ^0.10.11
@typescript-eslint/parser (npm) ^8.59.4
@vitejs/plugin-vue (npm) ^6.0.7
@vitest/coverage-v8 (npm) ^4.1.7
@vue/eslint-config-typescript (npm) ^14.9.0
@vue/test-utils (npm) 2.4.11
cross-env (npm) ^10.1.0
daisyui (npm) ^5.6.3
eslint (npm) ^10.4.0
eslint-plugin-vue (npm) ^10.9.1
jsdom (npm) ^29.1.1
license-checker-rseidelsohn (npm) ^5.0.1
monocart-coverage-reports (npm) ^2.12.11
typescript (npm) ~5.9.3
typescript-eslint (npm) ^8.59.4
unzipper (npm) ^0.12.3
vite (npm) ^8.0.16
vitest (npm) 4.1.7
vue-eslint-parser (npm) ^10.4.0
vue-tsc (npm) ^3.3.1
Files by Type (count)
TypeScript
138
Rust
101
Vue
83
JSON
33
Other (.png)
21
YAML
11
Markdown
8
HTML
5
CSS
3
TOML
3
Git Ignore
2
Other (.ico)
2
Files by Type (size)
Other (.png)
2MB
JSON
897KB
Other (.icns)
527KB
Rust
330KB
TypeScript
317KB
Vue
290KB
Lock File
196KB
Other (.ico)
182KB
HTML
46KB
YAML
39KB
Other (no ext)
33KB
CSS
14KB

The LLM identified 4 files worth highlighting for reuse:

Implements a generic concurrent task dispatcher with semaphore-based concurrency limits and group-aware queuing. Used for both fetch and download pipelines. The design is isolated and could be extracted for any application needing bounded concurrent execution with priority groups.

file: src-tauri/src/scheduling/dispatcher.rs ↗ | tags: #dispatcher #concurrency #semaphore #task-queue

Manages downloading, verifying (SHA-256 + Ed25519 signature), and extracting tool binaries (yt-dlp, ffmpeg, etc.) from archives. Supports atomic replacement to avoid corruption. The pattern of signed manifest verification and atomic extraction is reusable for any self-updating application.

file: src-tauri/src/binaries/binaries_manager.rs ↗ | tags: #binary-management #verification #extraction #atomic-update

Renders filename templates by replacing placeholders with metadata fields, with fallback values, character replacement, and sanitization. The design is self-contained and could be reused for any template-based output naming.

file: src-tauri/src/runners/template_context.rs ↗ | tags: #template-engine #string-interpolation #sanitization

Defines an ApplyPatch trait that merges partial overrides into base settings. Used for per-download overrides of output, auth, network, and subtitle settings. The pattern is generic and could be extracted for any layered configuration system.

file: src-tauri/src/runners/override_resolver.rs ↗ | tags: #override-pattern #merge #patch
Last analyzed: 2026-10-15 14:27:32.629560
Next check: 2026-10-22 14:27:32.624670
$ submit: