This plugin lets you remove items from the "Continue Watching" list in Jellyfin without resetting the watch progress. The plugin can also automatically hide items after a configurable period of inactivity.
It implements this feature request
This plugin works by injecting custom JavaScript into Jellyfin's web interface. It is compatible with:
- ✅ Jellyfin Web
- ✅ Jellyfin Android App
- ✅ Jellyfin iOS App
- ✅ Jellyfin Desktop Apps
- ❌ Other 3rd party apps
This plugin requires the following plugins to be installed:
- Jellyfin-JavaScript-Injector
- jellyfin-plugin-file-transformation (optional, but recommended)
- Open your Jellyfin server's admin dashboard
- Navigate to Plugins → Catalog
- Click the Add Repository button
- Add this repository URL:
https://raw.githubusercontent.com/jon4hz/jellyfin-plugin-discontinue-watching/main/manifest.json - Find Discontinue Watching in the plugin catalog and install it
- Restart your Jellyfin server
- Enable the plugin in Plugins → My Plugins
This plugin has a custom route that simulate the "Resume" endpoints but filters out unwanted items. Configure your reverse proxy accordingly to make every client support this plugin.
---
http:
middlewares:
discontinue-watching:
replacePathRegex:
regex: '^/UserItems/Resume'
replacement: '/DiscontinueWatching/Override/UserItems/Resume'
---
http:
middlewares:
discontinue-watching-old:
replacePathRegex:
regex: '^/Users/([^/]+)/Items/Resume'
replacement: '/DiscontinueWatching/Override/Users/$1/Items/Resume'location ~ ^/UserItems/Resume {
rewrite ^/UserItems/Resume /DiscontinueWatching/Override/UserItems/Resume break;
proxy_pass http://jellyfin_backend;
}
location ~ ^/Users/([^/]+)/Items/Resume {
rewrite ^/Users/([^/]+)/Items/Resume /DiscontinueWatching/Override/Users/$1/Items/Resume break;
proxy_pass http://jellyfin_backend;
}This plugin can be easily integrated in other 3rd party clients.
GET /DiscontinueWatching
# returns an array of item ID which should be hidden from Continue Watching for the current user
POST /DiscontinueWatching/{itemId}
# adds the specified item ID to the denylist for the current user
With these routes, other clients can remove items from Continue Watching by calling the POST route. The items returned by the GET route should be hidden from Continue Watching list.
make build
All kind of contributions are welcome! Feel free to open issues or submit pull requests. If you want to contribute code, please make sure to install the pre-commit hooks:
pre-commit install
- KefinTweaks - for giving me the idea to write a dedicated plugin for this feature. (and also for helping with some javascript struggles)
- jellyfin-plugin-streamyfin - from whom I've borrowed some code snippets for the configuration page.
GPLv3