| ▲ | Show HN: VODForge – a free local desktop UI for YouTube video/playlist downloads(getvodforge.com) |
| 37 points by coopernusbaum 18 hours ago | 12 comments |
| I built VODForge because I work with a CTV company that needed to pull YouTube videos from our channel partners into our media workflow. Converter sites are always an option but the bitrate wasn't optimal for a CTV network that needs to make multiple streaming version off of a single source file. So I build vodforge to use yt-dlp and ffmpeg under the hood with preconfigured settings for the highest quality end result, automatically adjusting the output settings based on source quality, frame rate, and things like that. It became a game changer internally for us because we were able to avoid sketchy converter sites and avoid paid converter software. Eventually I decided to release it for free and others loved it as well. We started to add support for many of the features that other software charges for, supporting 4K, playlist support, customizing application theme, persistent searchable library, auto organizing downloads by channel and playlist, MP3 support up to 320 kbps, and much more. Looking for feedback on the user experience and additional features that you might find useful. My goal is to grow VODForge into a widely adopted free tool for people who do not want to deal with sketchy websites, CLI mess, or pay for things that you could ultimately do for free given time and effort. VODForge wants to make it EASY and maintained for you. We know anyone can make a GUI wrapper, but that is a trivial way to describe what VODForge aims to offer, user-friendliness, "it just works", libraries and packages maintained for you. All you should think about is what to download next. VODForge awaits... |
|
| ▲ | threecheese 16 hours ago | parent | next [-] |
| Tell us about your process and discipline; I see `engineering-quality` in the repo, which seems to be some sort of QA harness. Makes this a bit more interesting than just-another-yt-dlp-ui. Do you follow some similar design process, like speckit? |
| |
| ▲ | coopernusbaum 9 hours ago | parent [-] | | I'm not using Spec Kit specifically, my approach is pretty simple. Everything should have separation of concerns and clear ownership to help prevent nasty subtle bugs and can help point to a single entity when things go wrong. Also, it is specifically designed to avoid only following happy paths, it exercises the actual download pipeline with yt-dlp, ffmpeg, and real output files. It will introduce things like interrupted connections, failed requests, cancellation of downloads, and unwritable destinations. It also checks for processes that were left running when a download completes as to not waste resources. I also wanted to distinguish between headless pipeline tests and testing the actual packaged app. Passing the headless pipeline doesnt prove the UI, queue, or restart UX works. This same idea influences the design. The library should reflect the actual saved state for example. Completed should mean a valid file was produced and so the engineering quality harness is there to test assumptions and pressure test the application in ways unit tests can easily miss. It is still evolving but that is where im putting effort right now so that we dont conclude "it just works" and walk away because it needs to work well and shouldnt rob your computers memory cause it feels like holding on to it and it has helped find many issues that unit tests have missed, which is great. One example of something the harness helped find before was regarding the processes being left over and it was found a subtle memory leak in vodforge where yt-dlp’s terminal-capability/progress machinery was retaining the per-download logger, which in turn kept the entire YoutubeDL + DownloadJob graph alive after the job finished. I believe this was in part to the fact that python methods are bounded when you access them through object instances and so yt-dlp simply needed to have its native progress path disabled since vodforge already owned progress presentation. Engineer-quality harness was able to make this subtle memory leak a massive red flag when simulating 100 downloads and then showing 100 dead job graphs still sitting in memory. |
|
|
| ▲ | ghostly_s 15 hours ago | parent | prev | next [-] |
| What is CTV? We don't know your industry's jargon. |
| |
| ▲ | coopernusbaum 9 hours ago | parent [-] | | Apologies. It means Connected Television. The streaming apps on your TV like on Roku such as, Netflix, Prime, etc. |
|
|
| ▲ | crtasm 13 hours ago | parent | prev | next [-] |
| For cases where audio quality is important it's best not to add another round of lossy compression by reencoding Youtube's opus/AAC track to MP3. |
| |
| ▲ | coopernusbaum 9 hours ago | parent [-] | | That’s fair. MP3 is there for compatibility but preserving the original opus/aac stream avoids another lossy conversion. We should offer both rather than present mp3 as the highest quality option. |
|
|
| ▲ | Neywiny 16 hours ago | parent | prev | next [-] |
| So it's a yt-dlp gui where you can also re-encode to something else? |
| |
| ▲ | coopernusbaum 9 hours ago | parent [-] | | Yeah simply put. The main thing I've focused on are precisely selecting output settings based on source quality, organizing downloads by channel and playlist automatically, keeping a searchable library, in-app player, and maintaining dependencies so others don't have to. The tools under the hood are great. I wanted to make the workflow easier to use and just get the best option without thinking about it. |
|
|
| ▲ | abcthingx 16 hours ago | parent | prev | next [-] |
| does it use yt-dlp under the hood. also is there an option to add random delays between downloads? |
| |
| ▲ | coopernusbaum 9 hours ago | parent [-] | | yes it uses yt-dlp and that is a good idea. Currently, vodforge does not add random delays between downloads, it will start the next in queue immediately when the former finishes but I can add that as an option in a future update if desirable as well as scheduling. |
|
|
| ▲ | DylanMerigaud 17 hours ago | parent | prev [-] |
| Good luck with the launch! |
| |