Skip to content

bwittgen/plex_generate_vid_previews

 
 

Repository files navigation

Contributors Forks Stargazers Issues MIT License Docker Pulls codecov

Logo

Plex Generate Previews

⚠️ NOTICE — Recent Breaking Changes

  • Docker + Web UI are now the recommended way to run Plex Generate Previews. The CLI still works (e.g. plex-generate-previews --help), but we recommend using the Docker image and Web UI for setup, scheduling, and job management.
  • PyPI: The package is no longer published on PyPI. Use Docker (or install from source) instead.

GPU-accelerated video preview thumbnail generation for Plex Media Server
Explore the docs »

Quick Start · Report Bug · Request Feature

📑 Table of Contents
  1. About
  2. Features
  3. Screenshots
  4. Quick Start
  5. Installation
  6. GPU Support
  7. Documentation
  8. Built With
  9. Contributing
  10. License
  11. Acknowledgments

🎯 About

Generates video preview thumbnails (BIF files) for Plex Media Server. These are the small images you see when scrubbing through videos in Plex.

The Problem: Plex's built-in preview generation is painfully slow.

The Solution: This tool uses GPU acceleration and parallel processing to generate previews 5-10x faster.

How It Works

flowchart LR
    subgraph Input
        A[Plex Server] --> B[Library Query]
    end

    subgraph Processing
        B --> C{GPU Available?}
        C -->|Yes| D[GPU Workers]
        C -->|No| E[CPU Workers]
        D --> F[FFmpeg Extract]
        E --> F
    end

    subgraph Output
        F --> G[JPEG Frames]
        G --> H[Pack BIF]
        H --> I[index-sd.bif]
    end
Loading

(back to top)


✨ Features

Feature Description
🚀 Multi-GPU NVIDIA, AMD, Intel, and Windows GPUs
Parallel Processing Configurable GPU and CPU worker threads
🔁 GPU→CPU Fallback Optional fallback-only CPU workers for GPU decode failures
🎮 Hardware Acceleration CUDA, VAAPI, D3D11VA, VideoToolbox
📚 Library Filtering Process specific Plex libraries
🎨 Quality Control Adjustable thumbnail quality (1-10)
🐳 Docker Ready Pre-built images with GPU support
🌐 Web Dashboard Manage jobs, schedules, and status
⏱️ Scheduling Cron and interval-based automation
📡 Radarr/Sonarr Webhook integration for auto-processing on import

(back to top)


📸 Screenshots

Home Settings Webhooks
Home Settings Webhooks

Web UI: dashboard and job management, configuration and GPU detection, Radarr/Sonarr webhook setup.

(back to top)


⚡ Quick Start

Docker (Recommended)

docker run -d \
  --name plex-generate-previews \
  --restart unless-stopped \
  -p 8080:8080 \
  --device /dev/dri:/dev/dri \
  -e PUID=1000 \
  -e PGID=1000 \
  -v /path/to/media:/media:ro \
  -v /path/to/plex/config:/plex:rw \
  -v /path/to/app/config:/config:rw \
  stevezzau/plex_generate_vid_previews:latest

Then open http://YOUR_IP:8080, retrieve the authentication token from container logs, and complete the setup wizard.

For Docker Compose, Unraid, and GPU-specific setup:

(back to top)


📦 Installation

Method Best For Guide
Docker Most users, easy GPU setup Getting Started
Docker Compose Managed deployments docker-compose.example.yml
Unraid Unraid servers Getting Started — Unraid
  • CLI: The command-line interface still works when run inside the container or from source; we recommend using the Docker image and Web UI for normal use.
  • PyPI: The package is no longer published on PyPI; use Docker or install from source.

Important

Note the extra "z" in Docker Hub: stevezzau/plex_generate_vid_previews (stevezau was taken)

(back to top)


🎮 GPU Support

GPU Type Platform Acceleration Docker
NVIDIA Linux CUDA/NVENC --gpus all
AMD Linux VAAPI --device /dev/dri
Intel Linux QuickSync/VAAPI --device /dev/dri
All Windows D3D11VA Native only
Apple Silicon macOS VideoToolbox Native only

For complete GPU setup, tuning, and troubleshooting:

Check detected GPUs: Open the web UI (http://YOUR_IP:8080) and go to Settings or Setup — detected GPUs are shown there.

GPU + CPU Fallback Mode

If you want GPU-only main processing but still want CPU recovery for unsupported files:

  • Set CPU Workers to 0
  • Set CPU Fallback Workers to 1 (or higher)

This keeps normal jobs on GPU workers and only uses CPU when a GPU worker reports an unsupported codec/runtime decode failure.

Note

CPU Fallback Workers is only used when CPU Workers=0. If CPU Workers>0, regular CPU workers already handle fallback work.

(back to top)


📚 Documentation

Document Description
📖 Documentation Hub Start here — architecture diagrams
⚡ Getting Started Docker, GPU, Unraid, devcontainer
⚙️ Reference Configuration options & REST API
📘 Guides Web interface, webhooks, FAQ, troubleshooting

(back to top)


🛠️ Built With

Python Docker FFmpeg Flask Gunicorn

(back to top)


🤝 Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push to branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

(back to top)


📄 License

Distributed under the MIT License. See LICENSE for details.

(back to top)


🙏 Acknowledgments

  • Plex for the amazing media server
  • FFmpeg for video processing
  • LinuxServer.io for the Docker base image
  • Rich for beautiful terminal output
  • All contributors and users

(back to top)


Made with ❤️ by stevezau

⭐ Star this repo if you find it useful!

About

Speed up the process of generating preview thumbnails for your Plex media library.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Python 82.8%
  • HTML 10.2%
  • JavaScript 5.8%
  • Other 1.2%