Hold your Plex libraries hostage until users watch a specific movie. Inflict petty, meaningless cruelty on certain users to ensure they remember who’s the boss.
Someone on your server keeps ignoring your movie recommendations? Plextortion lets you lock their access to specific libraries until they watch a percentage of a movie you choose. They'll see a ransom message every time they try to watch something from the locked library.
- Soft Lock - Library stays visible, but playback is blocked with a custom message
- Custom Messages - Personalized lock and unlock messages with placeholders
- Progress Tracking - Automatically unlocks when they hit the watch threshold
- Multiple Thresholds - 10% quick taste to 100% full commitment
- Live Preview - See exactly what your victim will see before creating the ransom
- Ransom History - Track your extortion empire
- Most Ransomed Movies - Leaderboard of your go-to punishment films
- Download
Plextortion.exefrom Releases - Double-click to run (Windows SmartScreen may warn - click "More info" → "Run anyway")
- Browser opens automatically to setup wizard
- Enter your Plex server URL and token
- Configure webhooks in Plex (see below)
- Start extorting!
# Clone the repo
git clone https://github.com/honkbadonk/plextortion.git
cd plextortion
# Install dependencies
pip3 install -r requirements.txt
# Run
python3 plextortion_app.pyOpen http://localhost:5555 in your browser.
Plextortion needs Plex webhooks to track viewing progress. Webhooks require Plex Pass.
- Open Plex Web → Settings (wrench icon)
- Click Webhooks in the left sidebar
- Click Add Webhook
- Enter:
http://YOUR_IP:5555/webhook - Click Save Changes
Replace YOUR_IP with your computer's local IP address (shown in the Plextortion console on startup).
- Create a Ransom - Pick a victim, a movie they must watch, and a library to lock
- They Try to Watch - When they play something from the locked library, playback stops and your message appears
- They Watch the Prerequisite - Progress is tracked via webhooks (updates on pause/stop)
- Threshold Met - Library automatically unlocks, optional freedom message appears
Use placeholders to personalize your messages:
Lock Message (when they try to watch locked content):
{movie}- The prerequisite movie title{threshold}- The percentage required{library}- The locked library name
Example: "No {library} until you watch {threshold}% of {movie}. You know what you did."
Unlock Message (when they complete the prerequisite):
{movie}- The prerequisite movie title{progress}- The percentage they watched{library}- The unlocked library name
Example: "Fine. You suffered through {movie}. {library} is yours again."
| Device | Lock Message | Unlock Message |
|---|---|---|
| Apple TV | ✅ | ✅ |
| Fire Stick | ✅ | ❌ |
| Chrome Browser | ✅ | ❌ |
| Samsung TV | Testing | Testing |
| Google TV | Testing | Testing |
Lock messages work on all devices. Unlock messages depend on how the device handles session termination.
Why does progress only update when they pause or stop? Plex webhooks only fire on play, pause, stop, and resume events - not during continuous playback. This is a Plex limitation, not Plextortion.
Can I lock specific movies instead of whole libraries? Not yet. V1 locks entire libraries. Granular locking is planned for V2.
Can the same user have multiple ransoms? Currently one active ransom per user. When it's completed, you can create another.
What if the prerequisite movie is in the locked library? Plextortion prevents this - you can't lock the library that contains the prerequisite movie.
Do I need Plex Pass? Yes, webhooks require Plex Pass.
- Python 3
- Flask
- PlexAPI
- SQLite
plextortion/
├── plextortion_app.py # Main application
├── database.py # SQLite database functions
├── requirements.txt # Python dependencies
└── plextortion.db # Database (created on first run)
- ✅ Soft lock with ransom messages
- ✅ Custom lock/unlock messages
- ✅ Progress tracking
- ✅ Auto-unlock at threshold
- ✅ Web dashboard
- TV episode prerequisites
- Lock specific movies (not just libraries)
- Beer fund / payment bypass
- Docker support
- Multiple simultaneous ransoms per user
Found a bug? Have a feature idea? Open an issue or submit a PR!
MIT License - do whatever you want with it.
If Plextortion made you laugh or improved your friendships through coercion, consider starring the repo! https://github.com/sponsors/honkbadonk Built with ❤️ and spite.

