Releases: Syntax-Free/multiyt-dlp
Multiyt-dlp v2.2.1 - The Blitz Protocol
In v2.2.0, I gave you speed. In v2.2.1, I’m giving you even more speed.
I realized that waiting for a "Splash Screen" to check for updates is a waste of my finite time on this planet.
This update makes the app faster, smarter, and more aggressive. It’s not just a tool anymore; it’s an Authority.
🚦 The "Don't Be Stupid" Protocol (Conflict Resolution)
Previously, if you downloaded a file that already existed, the app would hang silently. That's a major skill issue.
- The Amber State: If there’s a conflict, the UI turns a beautiful, glowing Amber.
- The Choice: You get two buttons. Replace (The Nuclear Option) or Discard (The "I messed up" Option).
- The Vault: While you’re busy deciding, I keep the new file in a secret folder so it doesn't touch your precious archive until you say so.
Syn:
it’s just a temporary directory, tax. stop calling it a vault.
⚡ Execution Strategies: Fleet vs. Blitz
Why have one way to download when you can have two? I’ve added "Execution Philosophies" to the Settings.
- Fleet Mode (The Horde): This is the default. 20 videos at once. Best for when you want to rip an entire channel before it gets deleted.
- Blitz Mode (The God-File): This throttles the queue to one active download but forces up to 16 concurrent connections into that single file. It’s like a digital battering ram for 8K video.
- The Safety Lock: I’ve locked the sliders in Blitz Mode so you don't accidentally try to open 320 connections and get your IP banned by Google. I’m protecting you from yourself.
🏎️ Fast-Boot Architecture
I hate "White Screens." I hate waiting for yt-dlp --version to tell me what I already know.
- Instant Render: The UI now loads immediately. We check if the files exist on the disk first (
fs::exists) and do the "Health Checks" in the background while you're already staring at the Glassmorphism. - The Escape Hatch: If the GitHub API is being slow, a "Skip Check" button appears. Click it. Get to work. Stop waiting for the internet to give you permission to use my app.
📑 The "Technical" Changelog (In JetBrains Mono)
🟢 Added
- Blitz Strategy: New argument injection logic in
process.rsfor-N {count}flags. - Conflict UI: Amber state styling and
FileWarningiconography. - Native Transport Hardening: The Rust engine now follows 10 redirects and uses "Smart Probing" (Range: bytes=0-0) to bypass annoying server firewalls.
🟡 Changed
- Actor Model Purge: I fixed the "Ghost Progress" bug. When a job hits a terminal state (Error/Conflict), we instantly purge the event buffer. No more flickering bars.
🔴 Fixed
- Playlist State Leak: Fixed a bug where hitting "Force Download" was forgotten if you opened the Playlist Modal. My spite is now correctly preserved through the entire workflow.
- POSIX Move Logic: Fixed
robust_move_fileto prevent atomic replacements on Linux/Mac during conflicts.
Multiyt-dlp v2.2.0 - Sonic Overdrive
In v2.1.3, I realized Zqil was still listed as the author in the code. I fixed that in v2.2.0. It’s Syntax Free now. I also realized that while the last version was resilient, it wasn't fast enough.
I don't just want the app to work; I want it to dominate your bandwidth and your SSD. This is The Sonic Overdrive.
📦 The Compression Flex (Now with .MSI)
I looked at the file size and decided it was too fat. I don’t like waiting for progress bars, and neither should you.
- The Diet: I switched the release format from a raw
.exeto a compressed .msi installer. - The Numbers: The download size dropped from 12.8MB to 5.21MB. That’s a 60% reduction in the time you spend staring at your browser’s download manager. You're welcome.
Syn:
it still extracts to 12.8mb
- The Result: Faster installs, cleaner updates, and more room on your drive for actually important things (like more Manhwa).
🚀 Nitrous in the Engine (Aria2 Integration)
Waiting for dependencies to download is for people with hobbies. I have code to ship.
- The Accelerator: I integrated Aria2c. If the app needs a new FFmpeg or yt-dlp binary, it doesn't just "download" it. It rips it from the server using 8 simultaneous connections.
- Immortality (Part 2): The internal Rust downloader is now fully resumable. If your internet dies at 98%, we don't start over. We pick up the pieces and finish the job.
- The Interactive Splash: The splash screen isn't just a pretty picture anymore. It’s a bouncer. It checks if you have Deno or Aria2 and offers to install them for you. Click the button. Do it.
🎛️ The Picky Eater Protocol (Playlist Selection)
Previously, if you gave the app a playlist, it was "all or nothing." That’s caveman logic.
- The Probe: The app now "probes" the playlist first. It looks inside the box before it buys.
- The Selection Modal: A new UI pops up. You can search (Ctrl+F), filter, and pick exactly which videos you want.
- Intent Preservation: If you hit "Force Download," I make sure that spiteful energy stays active even through the selection screen.
🛡️ Exorcising the Ghost Events (Monotonic Consistency)
Race conditions are the "Senior Programmer's" favorite excuse for a buggy UI. I solved it with a single number.
- Sequence IDs: Every update from the backend now has a "Sequence ID."
- The Guard: If an old "Progress" event arrives after a "Complete" event because your CPU was stuttering, the UI looks at the ID and says, "You're too late, old man," and ignores it. No more flickering bars.
🧹 Stopping the SSD Heart Attack (Coalesced Persistence)
I found out that saving your download list to the disk every time a percentage moved 0.1% was basically trying to murder your SSD.
- Dirty State Tracking: The app now marks the state as "dirty" and only flushes it to the disk once every 100ms.
- Atomic Writes: We write to a
.tmpfile and rename it. If your power cuts out while saving, your config won't turn into a pile of corrupted garbage. You're welcome.
📑 The "Technical" Changelog
🟢 Added
- Transport Layer: Created a modular engine system in
core/transport/with Aria2 support. - PlaylistSelectionModal: Full React component for granular queue management.
- Panic Hooks: Global Rust panic capture. Crashes are now logged instead of whispered into the void.
- Monotonic Logic:
sequence_idadded toJobandDownloadmodels. - Localize Feature: Button in Settings to move system binaries into the app's managed folder.
🟡 Changed
- Persistence Strategy: Implemented dirty-flag coalescing for
jobs.jsonto reduce I/O overhead. - Smart Truncation: Grid view now uses "Middle Truncation" to keep your file extensions visible.
- Logging: Switched to structured JSON logging with noise suppression for
h2andreqwest.
🔴 Fixed
- Zombie FFmpeg: Child processes now explicitly die when the app closes (Shutdown channel).
- Config Corruption: Robust JSON loader with "Tolerant Merging" handles malformed configs without crashing.
- Window Sanity: No more "Invisible App" bugs if you close the app while minimized.
Syn:
finally, i can stop downloading the same 1gb video every time the wifi blips. tax is actually... competent?
Multiyt-dlp v2.1.3 - The Resilience Protocol
In v2.1.3, I stopped adding toys and started building infrastructure.
Previously, if you threw a playlist of 500 videos at the app, your CPU would cry. Now, it shuts up and does the work.
This isn't just an update. It’s Crash Insurance.
🏗️ The Architecture
🚦 I Installed a Traffic Light (The Semaphore)
I realized that if I let you resolve 50 videos at once, you’d fork-bomb your own computer.
- The Bouncer: I added a global
Semaphoreto the playlist resolver. Only 3 URLs get probed at a time. The rest wait in line. - The Result: You can queue 100 items. The app stays responsive. Your fans stop spinning like jet engines.
🧟 Immortality (State Recovery)
You people love hitting F5 or crashing the UI, don't you?
- The Zombie Protocol: If the frontend (UI) dies or refreshes, the backend (Rust) keeps working.
- The Resurrection: When the UI comes back, it asks the backend: "What did I miss?" The backend syncs the progress bars instantly. No more "Ghost Downloads."
🧹 Cleaning Up The Mess (File Operations)
Windows file locking is a nightmare. Sometimes the app finished downloading but crashed while moving the file because Windows Defender was "scanning" it.
- The "Robust Move": I rewrote the file mover. It’s asynchronous now. If the file is locked, it waits. It retries. It fights Windows and wins.
- Better Statuses: Added "Moving," "Finalizing," and "Processing" states to the UI so you aren't staring at "100%" wondering why it’s not done.
⚡ New Toys
🔴 Time Travel (Live From Start)
- The Feature: Added a "Live" toggle in the config menu.
- The Function: If a stream is currently live, this forces
yt-dlpto download it from the beginning, not the current moment. - Why: Because I'm usually late.
📑 The "Technical" Changelog
🟢 Added
- Concurrency Throttling: Implemented
tokio::sync::Semaphoreinprobe_urlto limit active metadata fetches. - State Hydration: Added
sync_download_statecommand to restore progress bars after a window reload. - Job Objects (Windows): implemented
Win32_System_JobObjectsto ensure child processes (ffmpeg) die when the parent dies. - "Live From Start": New flag passed to
yt-dlp.
🟡 Changed
- Regex Overhaul: Added
MOVE_FILES,FFMPEG, andFIXUPregex patterns to capture more accurate progress phases. - SettingsModal: Fixed a TypeScript timing issue with auto-scrolling.
🔴 Fixed
- File Move Race Condition: The app now retries file moves exponentially if the OS locks the file.
- Zombie Processes: Killing a download now reliably kills the entire process tree on Windows.
Syn:
please update, my ram usage is dying.
Multiyt-dlp v2.1.2
This release transforms Multiyt-dlp from a functional downloader into a professiona--
grade media management tool. The focus of v2.1.2 is intelligence, duplicate pro⍰⍰⍰⍰
- ERROR: AUTHOR_MISMATCH (USER: ZQ⍰L)
- OVERR⍰DE_INIT⍰ATED...
+ USER: TAX (SYNTAX_FREE) LOGGED IN.
+ OVERRIDE: SUCCESSFULA L R I G H T .
Zqil is gone. The boring release notes are gone. I am Syntax Free now, and I decided this app wasn't smart enough to keep up with me.
In v2.1.2, I forced the code to remember things so I don't have to.
🚀 The Upgrades
🧠 I Gave the App a Brain (The Archive)
I kept accidentally downloading the same songs twice. It was inefficient.
- It Remembers Everything: The app now has a database (ok, it's a text file, but it's my text file). If you try to download a video you already have, the app stops you.
- It Ignores Your Mess: Paste a
youtu.belink? A desktop link? A link full of google tracking garbage? The app cleans it all. - The "Force" Option: If you really want to download a duplicate, I added a dropdown button to force it. I don't recommend it, but I allow it.
⚡ Gaslighting the UI (Performance)
The old version waited for the backend to say "ready" before showing you the progress bar. That was 200ms of wasted life.
- Optimistic UI: Now, when you click Download, the UI reacts instantly. It assumes the Rust backend will succeed. (It usually does).
- 100ms Refresh Rate: I made Syn run faster. The progress bars are smoother now.
- No More Double-Clicks: I fixed a race condition where clicking "Download" twice would spawn two processes. Patience is a virtue, but good code is better.
🛠️ It's Not a Website (UX)
This is a Tauri app, not Chrome. Stop treating it like one.
- I Killed the F-Keys: I disabled
F3(Search),F5(Refresh), andF7. STOP trying to refresh my app. It WORKS the first time. - Native SVG Icons: The pixels were getting fuzzy on my 4K monitor. I replaced them with SVGs. It’s crisp now.
Syn: his monitor is 1080p.
- SYN SQUAD Branding: The sidebar finally gives credit to the intern.
Syn: ...his monitor is 4k.
📑 The "Technical" Changelog
🟢 Added
HistoryManager(Because I have amnesia).- Archive Editor in Settings (Editing text files manually is for peasants).
- Split-Action Button (Force Download).
- Global key-listener to suppress WebView2 defaults.
🟡 Changed
- Syn Squad branding added to Sidebar.
- Reduced UI latency from 200ms -> 100ms.
useDownloadManageris now optimistic.
🔴 Fixed
- Fixed
url_whitelistcasing issues (Typescript and Rust were arguing). - Fixed the race condition on the download button.
- Fixed error handling for invalid strings.
Syn:
he literally just copied the deduplication logic from stackoverflow.
Multiyt-dlp v2.1.1
Version 2.1.1 transforms Multiyt-dlp from a robust downloader into a smart assistant. I focused heavily on "User Experience Friction"—specifically, what happens when things go wrong. Instead of showing cryptic terminal errors, the app now diagnoses issues and offers direct solutions.
Key Changes:
-
Smart Error Registry
- Human-Readable Diagnostics. The app now parses raw
yt-dlperror logs in real-time. Instead of "Exit Code 1", you will see clear messages like "Bot Detection Triggered," "Age Restricted," or "Missing FFmpeg." - Benefit: Instant understanding of why a download failed without needing to be a developer.
- Human-Readable Diagnostics. The app now parses raw
-
Actionable Solutions (Deep Linking)
- We've closed the feedback loop. If an error is detected (e.g., "Sign in required"), the error card now provides a direct action button (e.g., "Configure Cookies").
- Benefit: One-click navigation. The app automatically opens the Settings menu and scrolls/highlights the exact section needed to fix the problem.
-
Advanced Log Management
- In-App Diagnostics. You can now view, copy, and export specific execution logs directly from the download card within the UI.
- Auto-Rotation. The backend now implements enterprise-grade log rotation (archiving old logs and cleaning up files >10 days old) to prevent disk clutter.
- Benefit: Troubleshooting is now built-in, and the app maintains its own hygiene.
-
Performance Optimizations
- Heavy I/O tasks (like probing large playlists) have been offloaded to dedicated thread pools using
spawn_blocking. - Benefit: The UI remains responsive even when initializing massive playlists or performing heavy file operations.
- Heavy I/O tasks (like probing large playlists) have been offloaded to dedicated thread pools using
📦 Installation Notes
- Zero Setup: Unlike previous versions, you do not need to pre-install anything. The app handles its own tools.
- Windows: Pre-compiled binary attached.
- Linux/macOS: Build from source.
Multiyt-dlp v2.1.0: The Autonomous Update
Version 2.1.0 represents a major maturity milestone for the application. We have moved beyond being a simple UI wrapper; Multiyt-dlp is now a fully self-contained ecosystem. This update introduces an Actor Model architecture for superior stability, native OS integrations, and automatic dependency management—making the app "just work" out of the box.
Key Changes:
-
Zero-Config Dependency Management
- No manual setup required. The application now automatically detects, downloads, and updates
yt-dlp,FFmpeg, and the optional JS runtime into an isolated local environment. - Benefit: Download and run immediately. You no longer need to fiddle with system PATH variables or manual installations.
- No manual setup required. The application now automatically detects, downloads, and updates
-
Session Persistence & Crash Recovery
- Active downloads are now strictly serialized to disk in real-time. If the application closes unexpectedly, a new "Resume" prompt will appear on the next launch.
- Benefit: Never lose your queue. Large batch downloads can be paused (by closing) and resumed later with zero data loss.
-
Native OS Integration & Authentication
- Added support for Taskbar Progress (Windows) and Dock Badging (macOS), plus a native "Show in Folder" button for completed files. We also added full support for Cookies (via file or browser extraction) to handle premium/age-restricted content.
- Benefit: A seamless desktop experience that handles authenticated downloads effortlessly.
-
Backend Overhaul: The Actor Model
- We migrated the download manager from a standard Mutex lock to an Actor Model. This includes smart event batching (throttling UI updates to 5fps).
- Benefit: Unshakeable performance. The UI remains buttery smooth even when processing 20+ simultaneous high-speed downloads.
📦 Installation Notes
- Zero Setup: Unlike previous versions, you do not need to pre-install anything. The app handles its own tools.
- Windows: Pre-compiled binary attached.
- Linux/macOS: Build from source.
Multiyt-dlp v2.0.0: The Reloaded Update
This is the most significant evolution of Multiyt-dlp to date, marking a total transformation of the application's core identity. Version 2.0.0 ("Reloaded") discards the legacy Python/PyQt framework entirely in favor of a cutting-edge Rust and React architecture. This shift delivers an app with a fraction of the file size with exponentially higher performance and true concurrency.
Key Changes:
-
Total Architectural Metamorphosis: Rust & Tauri
- The application has been migrated from a Python/PyQt environment to a compiled Rust backend using Tauri. This allows the application to run closer to the metal with significantly reduced overhead.
- Benefit: Drastic reduction in footprint and instant startup. The executable size has been slashed by 50% (from ~17.4MB down to ~8.7MB), and the application now launches instantly with zero lag.
-
True Asynchronous Concurrency
- I have replaced the legacy threading model with the Tokio asynchronous runtime. The backend now handles network I/O and process management in a non-blocking environment.
- Benefit: High-velocity parallel downloads. You can now download videos, expand playlists, and process metadata simultaneously without the user interface ever freezing or stuttering.
-
Next-Generation Visual Interface
- The UI has been completely redesigned using React and Tailwind CSS, featuring a "Neon Cyberpunk" aesthetic. I have introduced a Grid View for monitoring dozens of downloads at once, alongside the classic List View.
- Benefit: A frictionless, modern user experience. The new interface provides real-time feedback on download speeds, ETA, and specific processing phases (Merging, Extracting, Fixing) with a level of detail previously impossible.
-
New Feature: Visual Drag-and-Drop Template Editor
- Configuring filename output templates (e.g.,
%(title)s.%(ext)s) no longer requires memorizing variables. A new visual editor allows you to drag blocks to construct your desired naming convention. - Benefit: Complex configuration made simple. Customize how your files are named and organized without needing to consult the documentation.
- Configuring filename output templates (e.g.,
-
Robust State Management & Recovery
- The application now utilizes a React Context state manager backed by persistent local storage. Configuration and queue states are handled with strict typing.
- Benefit: Rock-solid stability. User preferences and download queues are managed more reliably, ensuring that your settings (and window position) are remembered perfectly between sessions.
⚠️ Installation Notes
Multiyt-dlp v1.3.0: The Foundation Update
This is the largest update to Multiyt-dlp yet, representing a fundamental leap forward in the application's design and capability. Version 1.3.0 has been re-architected from the ground up, moving from a single script to a modern, modular framework. This foundational change brings massive improvements in stability, maintainability, and user experience, while also introducing several powerful new features.
Key Changes:
-
Major Architectural Overhaul: The MVC Refactor
- The entire application has been broken down from a single monolithic file into a structured project with clear separation of concerns (Model-View-Controller). The user interface, download logic, dependency management, and configuration are now independent modules.
- Benefit: It's a complete rebuild for quality. The result is a more stable, reliable, and faster-to-update application. This new foundation will allow for more complex features to be added easily in the future.
-
New Feature: Built-in Application Update Checker
- The app now automatically checks for new versions on startup. If an update is found, a clean, non-intrusive dialog will appear, allowing you to go to the download page or skip the version.
- Benefit: Stay effortlessly up-to-date with the latest features and bug fixes. You'll get a simple notification without having to manually check the repository.
-
New Feature: Visual Queue Overview with the Segmented Progress Bar
- The old, single progress bar has been replaced with a dynamic, custom-built segmented bar. Each individual download in the queue is now represented by a colored segment.
- Benefit: Get an instant, at-a-glance overview of your entire download queue. Immediately see which jobs are completed (green), active (yellow), or failed (red), providing far more insight than a simple percentage.
-
Enhanced Job List: See Video Titles, Not Just URLs
- As downloads are processed, the list now populates with the actual video title instead of just the original URL.
- Benefit: Your download queue is now much easier to read and manage. Quickly identify specific videos by their title instead of having to decipher long URLs.
-
Rock-Solid Configuration with Pydantic
- The configuration system has been upgraded to use Pydantic, a powerful data validation library. All settings are now strongly typed and validated on load.
- Benefit: The application is now much more resilient to configuration errors. Malformed settings are automatically corrected or reverted to safe defaults, and corrupted config files are backed up, preventing crashes on startup.
-
Professional-Grade Logging
- A robust, file-based logging system has been implemented. All application events, from downloads to errors, are now saved in a rotating log file (
.multiyt-dlp/logs/latest.log). - Benefit: Troubleshooting is now easier than ever. Detailed logs are automatically saved, making it simpler to diagnose issues and get support if something goes wrong. The log level is also configurable in the settings.
- A robust, file-based logging system has been implemented. All application events, from downloads to errors, are now saved in a rotating log file (
-
Performance Boost: Parallel URL Processing
- When adding a large number of URLs (especially playlists), the app now processes them in parallel to determine the total number of videos to download.
- Benefit: The initial "processing" phase is now significantly faster, making the application feel more responsive when starting large batches of downloads.
Multiyt-dlp v1.2.6
This release turbocharges the initial setup and dependency management by replacing the core download engine. With a new multi-threaded downloader and enhanced user controls, v1.2.6 delivers a significantly faster, more responsive, and more robust experience, especially for first-time users or those updating FFmpeg.
Key Changes:
-
High-Performance Parallel Downloader: The entire networking backend for dependency downloads has been upgraded from Python's standard
urllibto the modernrequestslibrary. For large files (>20 MB), the application now uses a multi-threaded, chunked downloader.- Benefit: This dramatically reduces the time needed to download FFmpeg, splitting the file into multiple parallel streams. On a fast connection, what used to take minutes can now be completed in seconds, getting you up and running faster than ever.
-
Full User Control with Cancellable Downloads: The dependency download process is no longer a one-way street. A "Cancel" button has been added to the progress window, and the window's close button is now functional.
- Benefit: You can now safely and instantly cancel a dependency download at any time. If you start a large download by mistake or simply change your mind, you are in complete control, improving the application's responsiveness and user-friendliness.
-
Enhanced Real-time Download Feedback: The dependency progress window is now more informative, providing live statistics during the download.
- Benefit: You can now see the current download speed (in MB/s) alongside the progress bar. This provides a clearer picture of the download's performance and lets you know that the process is active and working efficiently.
-
Smarter, Safer Settings Window: The settings window is now aware of background tasks and protects against unsafe actions.
- Benefit: The application will now prevent you from closing the settings window while a dependency is being updated. This simple guardrail prevents potential conflicts and ensures a more stable user experience.
Multiyt-dlp v1.2.5
This is a major architectural release that elevates the application to a new level of professional-grade stability, performance, and intelligence. The entire configuration system has been rebuilt to solve core usability and permission issues, while the download workflow has been re-engineered to be dramatically faster and smarter for power users.
Key Changes:
-
Portable & Permission-Safe Configuration: The configuration file (
config.json) has been moved from the application's folder to a dedicated user directory (~/.multiyt-dlp).- Benefit: This is a critical fix that completely eliminates permission errors when the application is installed in protected locations like
C:\Program Files. Your settings are now safely stored and independent of the application's location, making the app truly portable.
- Benefit: This is a critical fix that completely eliminates permission errors when the application is installed in protected locations like
-
Instantaneous Queue Population with Parallel Processing: The URL processing engine has been re-architected to handle multiple playlist/channel URLs in parallel using a worker pool.
- Benefit: Pasting a long list of channels and large playlists is now orders of magnitude faster. The application will use multiple threads to find and queue up all videos simultaneously, providing immediate feedback and getting you to the download phase in a fraction of the time.
-
Intelligent Workflow Automation: The application is now smarter about handling missing dependencies.
- Benefit: If you start an audio download without FFmpeg installed, the app will prompt you to download it. After the installation is complete, it will automatically resume the original download task. No need to re-enter URLs or click "Download" again.
-
Bulletproof Reliability & Cleanup: The underlying mechanics for downloading dependencies and stopping jobs have been significantly hardened.
- Resilient Network Operations: Dependency downloads (yt-dlp, FFmpeg) will now automatically retry up to 3 times on failure, making the setup process far more robust on unstable internet connections.
- Effective Process Termination: The "Stop All" function now uses platform-specific commands (
taskkill/killpg) to ensure that all child processes (like FFmpeg) are reliably terminated, preventing "zombie" processes from being left behind.
-
Enhanced Configuration Integrity: The new
ConfigManagerautomatically validates settings on load. If it finds a corrupt or unsafe value (like a bad filename template), it will revert to a safe default to prevent crashes and ensure stability.