Sneak Peek: 8-Stage Plex Automation Pipeline (2 Years in the Making)
Hey everyone! After two years of development, I’m excited to share a sneak peek of my 8-stage automation pipeline for Plex that I’ll be fully revealing this Friday–Saturday (Oct 31 “yours truly birthday” – Nov 1, ET). This end-to-end pipeline ties into your existing setup (Radarr/Sonarr + Prowlarr) and adds a ton of smart processing to get media fully Plex-ready with minimal effort. It’s a labor of love (and a big project) that will be released as a paid tool (need to pay for my schooling) – I’m aiming to have an easy one-click .exe ready by Dec/Jan/Feb (currently it’s all Python, being packaged via PyInstaller). The goal is to bring value to the Plex community by saving time and ensuring top-notch quality, and I’m looking forward to collaborating with fellow devs on future enhancements. 😊
Below is a quick rundown of each stage in the pipeline, highlighting what they do:
Intake & NZB Search (currently 7,246 lines) – Integrates with Radarr/Sonarr (via Prowlarr) to grab new content intelligently. This stage handles incoming movie/show requests by searching indexers for the best NZB, pulling metadata (titles, year, etc.) and handing off to Radarr/Sonarr for downloading. It’s essentially the “brain” that kicks off the process with smart decisions on what to download and how to tag it.
Organize (currently 5,381 lines)– Once downloads finish, the pipeline organizes the files into a clean, consistent directory structure. No more messy or random folder names – it renames and sorts the video files into a standardized format (e.g. Movie Title (Year)/Movie Title (Year).mkv and similar). This consistent structure makes it easy for the next stages to detect the content and proceed, and it aligns with Plex’s expectations so everything can be found and processed smoothly.
MKV Processor (currently 2,763 lines)– This stage processes the raw MKV files to prepare them for encoding and subtitle work. It extracts all audio and subtitle streams from the original file and picks the optimal tracks (e.g. the best quality audio, the primary language, etc.). It then creates a clean MKV that contains only the video and the chosen audio track(s), stripping out extras. All subtitle tracks (both text and image-based) are saved externally at this point. If any subtitles are image-based (like PGS from Blu-ray), the pipeline flags those for OCR in a later stage. The result here is a lean video file and separated subs ready for further processing.
Video Encoder (currently 5,142 lines)– Here’s where any necessary re-encoding happens. The pipeline can encode the video using either NVENC (GPU) or (CPU) x265/x264 – totally up to you, so you can balance speed vs compression. If you’re dealing with lower-res content and want to spruce it up, there’s an AI upscaler built-in (Realesrgan or RTX VSR) that can optionally upscale the video before encoding. This is great for older content: it can automatically upscale and then encode the video to your desired format/size. Of course, if the source is already perfect or you don’t want to re-encode, you can also skip or just copy the video stream as needed. This stage is all about giving you control over “video quality” and “size” with minimal hassle.
Subtitle Handler (currently 2,276 lines) – Subtitle time! This stage takes those extracted subtitle files and makes sure we have the best of both worlds for Plex. It performs OCR on image-based subtitles (such as .sup/PGS files) to convert them into text-based .srt files. In the end, for each language we’ll have both a text-based SRT subtitle and the original image-based SUB/SUP. Why both? Having an SRT ensures maximum compatibility (fast loading, customizable text) on all clients, and keeping the original image subtitles ensures things like exact styling/positioning or rare characters are preserved. The pipeline will pick the best subtitle track (usually the default or forced subs for foreign parts) and prepare it in both formats. After this stage, the media is almost ready – we have clean video, audio, and subs all set.
Final Mux (currently 1,654 lines) – This is where everything comes together. The final muxer intelligently combines the video, audio, and subtitles into a single MKV file, perfectly ready for Plex. It applies proper track names (e.g. labeling audio streams like “5.1 Dolby Digital” or subs like “English – SDH”), sets language and default flags correctly, and orders the tracks neatly (video, then primary audio, then subs, etc.). Essentially, it packages the output so that Plex will recognize all the parts without any confusion. It also cleans up any intermediate files (no clutter left behind – things like temp audio tracks or OCR files are handled). By the end of this stage, we have a polished MKV with everything in place – exactly how you’d want it in your library.
Poster Handler (currently 5,445 lines) – Now for some eye candy: the pipeline will automatically fetch high-quality poster artwork for your media. It pulls data from TMDB, Fanart.tv, and ThePosterDB (to be removed as site has anti scraping measures) to gather a selection of posters. Then (this is the cool part) it uses paddleocr via docker through Nvidia NIM to analyze the quality of these images – it can detect things like resolution, clarity, and even some aesthetic factors to filter out low-quality posters. The best few options are picked and the chosen poster gets saved as the movie’s poster.jpg. As a bonus, exclusive custom posters will be included and to those who support the project – these are personal poster designs I made, and I’ll showcase some of them in the full reveal post!
Quality Check & Deploy (currently 3,040 lines) – The final stage is a combined quality control and deployment process. Before a file officially joins your Plex library, the pipeline gives you a chance to do a quick review. It opens up a simple visual check – e.g. showing the final poster so you can confirm it looks good. With a quick YES/NO you approve the item, and then it goes into the deployment queue. Deployment means moving the finalized MKV and poster into your actual Plex media folders. This is done in the background, so you can keep reviewing new items while others are copying. The idea is you don’t have to sit and wait – the pipeline will quietly put the new media into your Plex library, trigger any library updates, and even handle any cleanup, all while you carry on with the next item. In short, your content goes from “just processed” to “available in Plex” smoothly and efficiently.
What’s next? I’m planning to post a full reveal with more details and examples this weekend (including showing off those custom posters and a deeper dive into how everything works). There’s no public demo or download yet – I want to polish things a bit more – but the hype is real and I can’t wait to share the results with you all! 😄 This project is built to complement the amazing tools we all use (I deliberately integrated with Radarr/Sonarr/Prowlarr instead of reinventing that wheel) and to add extra value on top. I truly believe it can save a lot of time and enable some cool new possibilities for Plex enthusiasts.
Community & Collaboration: My hope is that this pipeline sparks some great discussions and maybe even collaborations with other developers in the Plex community. I’ve learned a ton building it, and I know there’s always room for new ideas or improvements. I’ll be around to chat, get feedback, and maybe work with others on integrating new features or supporting more use-cases. Also, for those interested in supporting the project, I’m working on setting up an official site and Patreon – nothing to share just yet, but it’s in the works for the near future.
Thanks for reading this lengthy teaser. 🙏 I’m super excited to show you the full thing in a few days and hear what you think. Stay tuned.
Posted Oct 28, 2025, 4:47 PM UTC