Rippr.io is a media downloading and processing tool that enables users to offline media from YouTube and pretty much every other common video sharing service on the modern internet. This project is a massive overhaul and a fork of the JackTheVideoRipper project by DanTheMan213 that acts as a interface to the YouTubeDL command line tool.
Rippr.io features vast improvements over its predecessor such as:
Integrations for media processing tools, such as: media compression, re-encoding video/audio, repairing media via FFMPEG.
Multi-threaded support, allowing the splitting of resources for each media download, drastically improving overall performance and responsiveness of the application as well as download speed.
Process pooling and dispatching, allowing for the pausing, management and tracking of individual tasks. Previously, tasks were not logged and if a download process crashed, it would crash the application as well. This model allows verbose exceptions and logging to take place.
Storing of history, allowing for quicker lookup times for downloads, metadata, and information around media. This allows the program to query local data, rather than a remote server, when available.
Logging and integrated console interfaces/windows, allowing you to see the state of individual tasks or the overall program state.
Color coding of tasks to see the state of downloads (red for errored, green for completed, cyan for initializing, grey for paused, and tan for queued). You can now sit back and glance at the program and see the state of your tasks quickly as opposed to the black-and-white interface of the past.
Bulk operations: Clearing only succeeded tasks, clearing all rows, retrying all failed tasks, pausing all active tasks, or clearing failures.
Retrying tasks, previously this was only possible by creating a new row and starting the download completely again. This saves space on the screen and saves the user time and several clicks.
Splitting download tasks into concurrent data streams using Aria2C to allow for chunking of video and audio files, thus saving time in the scale of an order of magnitude. For example, a 10 second download in JackTheVideoRipper would take 1 second in Rippr.io on average.
Exception handling: I added a crash handler as well as a specific form window that is shown on an unhandled exception, this allows for bug reporting as well as recovering from otherwise fatal errors that occur in the previous application. This also assists with the logging previously mentioned.
A complete rework of the architecture of the codebase from the ground up, using only the conceptual models and reimplementing the rest to be extensible. For example, I abstracted the forms-based code from the core logic, thus allowing me to deploy to different platforms in the future and separate issues from intermingling the presentation, data, and service layers of the application.
I also made interfaces for the calls to the UI to allow for inversion of control and dependency injection. Using this, I was able to quickly extend the download tasks into different task implementations all connecting to the same row models you see in the form. They all have download speeds, metadata, and progresses to track (among others), but each task calls on different APIs and receives differently formatted responses. This was a perfect spot to use the IoC model.
Quick Actions: Copy-pasting downloads from user clipboard, dragging and dropping links to initiate downloads, and dragging/dropping video and audio files from the desktop to start compressing, repairing, or verifying their integrity.
More improvements to come such as:
Bandwidth limiting and CPU limiting via the Process Governor library. This will alleviate a roadblock in the application, which can be a resource hog when it comes to many (3+ downloads), since it spawns new Windows Processes to offload work. The vanilla C# process models do not have a cap to the CPU or memory they use.
WinUI 3 interface to improve the responsiveness of the UI and move towards a more sleek, modern look. This will also improve performance and stability as the WinUI library is a drastically newer and more stable model than the current WinForms platform, particularly on Windows 10/11.
AI Tool support: I am currently working on integrating a project called Multi-delogo in C++ using PInvoke and DLL embedding, this project uses a machine learning model to remove watermarks off of videos; I also plan to integrate with open-source suites for upscaling and cleaning/denoising of videos and images, as I use these tools widely and am familiar with the API calls.
Embedded media processing: a simple interface to allow for quick cropping or clipping of videos as well as simple filtering or operations such as resizing, altering time, etc. I have already implemented these from the ground up in C++ with my experience in media processing.
Stream downloads for grabbing livestreams on services such as Twitch, Kick, or Mixer. Again, there are open-source tools I can integrate with my application to work from.
I have been the sole-developer on this project and have been working on it since early last year. I began using its predecessor after seeing a post about it on Reddit, since I had previously just used the CLI calls to YouTubeDL to download videos. I noticed some major improvements that could be made such as those listed above and I realized I could just fork my own and implement those changes myself.