Small Python CLI for copying watched and in-progress state from one Plex user to another on the same Plex server. In-progress items are the same items Plex surfaces in Continue Playing.
- Copies watched state from a source user to a target user.
- Optionally copies resume progress for in-progress movies and episodes from Continue Playing.
- Supports a dry-run mode so you can inspect planned changes before applying them.
- It does not remove watch history from the target user.
- It does not recreate exact playback history entries, timestamps, or repeated play events.
- It does not sync music or photo libraries.
Plex exposes watched state and progress updates, but marking something watched does not recreate the original per-play history entries.
The tool reads values from .env in the current directory and lets command-line flags override them.
Supported .env variables:
PLEX_BASEURLPLEX_TOKENFROM_USERTO_USERDRYRUNDEBUG_LEVEL
Dry run using values from .env:
python watch_history_sync.pyApply changes:
python watch_history_sync.py --applyOverride users on the command line:
python watch_history_sync.py --from-user "Managed User" --to-user "Other User"Only sync specific sections:
python watch_history_sync.py --sections "Movies,TV Shows"Skip resume progress and only copy watched items:
python watch_history_sync.py --skip-partialIf you leave --skip-partial off, the tool will also sync the items that appear in Plex's Continue Playing area.
The tool reports:
- how many changes would be made
- which items are already synced
- which items are inaccessible to the target user
- the specific actions that would be applied
In dry-run mode nothing is changed on the server.
This script uses PlexAPI.
If you need to install dependencies manually:
pip install -r requirements.txt