Noureddine RAMDI / Unmanic: a plugin-driven media library optimizer with scheduler, watcher, and web UI

Created Sat, 23 May 2026 20:41:14 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

Unmanic/unmanic

Unmanic addresses a common pain point for media enthusiasts and homelab users: how to automate optimization of large media libraries without manually running complex scripts. It does this by combining a scheduler to scan entire libraries periodically, a file system watcher to catch new or modified files in real time, and a parallel task handler to process multiple files concurrently. The whole system is driven by a plugin architecture that lets you compose flexible pipelines of file operations — think transcoding with FFmpeg, renaming with FileBot, commercial detection, or any shell command triggered by file attributes. A web UI running on port 8888 ties it all together with configuration and progress monitoring.

what Unmanic does and how it is architected

At its core, Unmanic is a self-hosted Python 3 application aimed at optimizing media libraries by automating file conversion, movement, and command execution. It supports both video and audio files and operates on local file systems.

The architecture consists of several key components:

  • Library scheduler: Periodically scans configured media libraries to identify files that need processing. This ensures that even unchanged files are revisited, useful for applying new presets.

  • File system watcher: Monitors the file system in real time for new or modified files. This prevents delay in processing and complements the periodic scheduler.

  • Task handler: Manages a queue of files to process and runs multiple tasks in parallel, leveraging concurrency to speed up operations.

  • Plugin system: The heart of Unmanic’s flexibility. Plugins define how files are processed, whether transcoding via FFmpeg, detecting and removing commercials from DVR recordings, renaming files with FileBot, or running custom shell commands based on file extension or size. Plugins can be chained or configured to apply selectively.

  • Web UI: A built-in web interface running on port 8888 allows users to configure libraries, presets, and plugins, monitor job progress, and review logs without touching the command line.

The tech stack is primarily Python 3, with dependencies on external tools such as FFmpeg and FileBot for media processing. The plugin-driven architecture means that Unmanic can be extended or customized according to user needs.

plugin-driven architecture and concurrency model

What distinguishes Unmanic is its plugin-driven approach that treats media library optimization as a composable pipeline rather than a monolithic task. This modularity means users can pick and choose which transformations or checks to apply, and in what order.

This design trades off some simplicity for flexibility: configuring plugins and presets requires some upfront work and understanding of the media processing tools involved. But once set up, it can automate complex workflows that would otherwise need manual scripting.

The parallel task handler enables concurrent processing of multiple files, which is crucial given how time-consuming media transcoding can be. Under the hood, the task handler queues jobs and spawns worker threads or processes (the repo does not specify the exact concurrency model but Python’s concurrency options suggest threading or multiprocessing).

The combination of a scheduler and real-time watcher ensures that no files slip through unnoticed, whether they arrive in bulk during a library import or trickle in continuously.

The web UI adds a layer of usability that many CLI-only tools lack. It exposes configuration in a user-friendly way and visualizes progress, which is important for long-running media processing tasks.

quick start

To get started with Unmanic from source, the README provides these commands:

# Ensure the submodules are checked out
git submodule update --init --recursive

# Build and install the project into your home directory
python3 ./setup.py install --user

# Run Unmanic
unmanic

Once running, open your browser and go to http://localhost:8888/ to access the web UI.

Note that you need to have Python 3 and the required dependencies installed beforehand, as well as external tools like FFmpeg if you plan to use those plugins.

verdict

Unmanic is a pragmatic tool for anyone managing large media libraries who wants an automated, extensible way to keep files optimized and organized. Its plugin-driven architecture and combination of scheduler, watcher, and parallel task handler make it flexible and efficient.

It’s not a zero-config solution: you need some familiarity with media processing tools and the patience to configure plugins and presets properly. The reliance on external tools like FFmpeg and FileBot means you have to manage those dependencies separately.

That said, the built-in web UI and plugin system make Unmanic a solid choice for homelab enthusiasts, media server admins, or anyone looking to automate repetitive media file tasks with a maintainable system. Its codebase is Pythonic and modular enough to tweak or extend if your needs evolve.

If you want a hands-on, self-hosted media optimizer that fits into a composable workflow, Unmanic is worth a look.


→ GitHub Repo: Unmanic/unmanic ⭐ 2,291 · Python