Export Plex watch history to Letterboxd-compatible CSV format
Project description
Plex to Letterboxd Exporter
Exports Plex watch history and ratings to a Letterboxd‑compatible CSV file using TMDB IDs for reliable matching.
Install
From PyPI:
pip install plex-letterboxd
Or with uv:
uv pip install plex-letterboxd
From source:
git clone https://github.com/brege/plex-letterboxd.git
cd plex-letterboxd
pip install .
Or with uv:
git clone https://github.com/brege/plex-letterboxd.git
cd plex-letterboxd
uv pip install .
Configure
There are two ways to include your Plex token.
Option 1: Set your Plex token in config.yaml:
plex:
url: http://your-plex-server:32400
token: PLEX_TOKEN
timeout: 60
Option 2: Kometa users may source Kometa's config in this project's config.yaml:
kometa:
config_path: ./path/to/Kometa/config.yml
Exporter options are in config.yaml.
- export: output, after, before, user, library
- csv: rating, review, max_rows, genres, tags, rewatch, mark_rewatch
See config.example.yaml for available options.
Usage
- List users
plex-letterboxd --list-users
- Export for a specific user
plex-letterboxd --user USERNAME --output plex-export.csv
- Export a date range
plex-letterboxd \
--user USERNAME \
--after 2024-01-01 \
--before 2024-12-31 \
--output plex-export-2024.csv
Import at https://letterboxd.com/import/
See plex-letterboxd --help for CLI options.
Output CSV Columns
| Field | Description |
|---|---|
tmdbID |
TMDB ID for precise matching |
Title |
Movie title |
Year |
Release year |
Directors |
Director names |
WatchedDate |
When you watched it (YYYY‑MM‑DD) |
Rating |
Your rating (0.5–5.0), if enabled |
Tags |
Genres and/or custom tags, if enabled |
Rewatch |
Whether it's a rewatch |
Automated Exports
Set up a systemd timer for automated monthly exports with CSV checkpointing.
Setup Timer
Monthly
bash <(curl -s https://raw.githubusercontent.com/brege/plex-letterboxd/refs/heads/main/systemd/install.sh)
Or weekly
bash <(curl -s https://raw.githubusercontent.com/brege/plex-letterboxd/refs/heads/main/systemd/install.sh) weekly
The timer will run the exporter on your chosen schedule, producing CSV files in ~/.config/plex-letterboxd/data/. Configure the output data directory via config.yaml to change.
I suggest running this on the same machine Plex runs on, since it's typically always online.
License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plex_letterboxd-0.7.tar.gz.
File metadata
- Download URL: plex_letterboxd-0.7.tar.gz
- Upload date:
- Size: 23.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
695f6cc71e3aadf1ce7624bd9dbeae6f41655b31c14530f2d81f54339fd94786
|
|
| MD5 |
6eb2b46ecdc4d220b394a8ca5fb40c50
|
|
| BLAKE2b-256 |
3196cbc4df68ceec81d7ca85f2ecf7876921f815c007b139783f0a627e57044b
|
Provenance
The following attestation bundles were made for plex_letterboxd-0.7.tar.gz:
Publisher:
publish.yml on brege/plex-letterboxd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plex_letterboxd-0.7.tar.gz -
Subject digest:
695f6cc71e3aadf1ce7624bd9dbeae6f41655b31c14530f2d81f54339fd94786 - Sigstore transparency entry: 1059440290
- Sigstore integration time:
-
Permalink:
brege/plex-letterboxd@759fadcdc85daf74f95fb14dec67513b99b5c2d2 -
Branch / Tag:
refs/tags/v0.7 - Owner: https://github.com/brege
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@759fadcdc85daf74f95fb14dec67513b99b5c2d2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file plex_letterboxd-0.7-py3-none-any.whl.
File metadata
- Download URL: plex_letterboxd-0.7-py3-none-any.whl
- Upload date:
- Size: 23.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12a18156e8a31409b3e8085ace4256b1e48b8f5eafa17ac582edf199aaf3030f
|
|
| MD5 |
e03432ef3c2668ace2d0b9f93dd13de6
|
|
| BLAKE2b-256 |
7a59f1d9a8c9fbbcd057c0d6dffb0218192b33ee66e01b74ca36210ff91ee5fe
|
Provenance
The following attestation bundles were made for plex_letterboxd-0.7-py3-none-any.whl:
Publisher:
publish.yml on brege/plex-letterboxd
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plex_letterboxd-0.7-py3-none-any.whl -
Subject digest:
12a18156e8a31409b3e8085ace4256b1e48b8f5eafa17ac582edf199aaf3030f - Sigstore transparency entry: 1059440301
- Sigstore integration time:
-
Permalink:
brege/plex-letterboxd@759fadcdc85daf74f95fb14dec67513b99b5c2d2 -
Branch / Tag:
refs/tags/v0.7 - Owner: https://github.com/brege
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@759fadcdc85daf74f95fb14dec67513b99b5c2d2 -
Trigger Event:
release
-
Statement type: