Generate plausible test media libraries in Plex or Jellyfin format
Project description
jellyplex-gen
Generate plausible test media libraries in Plex or Jellyfin format.
A sibling project to jellyplex-sync:
where jellyplex-sync converts between media library formats, jellyplex-gen
produces realistic-looking source material to test it (or anything else that
operates on Plex/Jellyfin libraries) against.
Generated libraries consist of placeholder files (0-byte by default, or pseudorandom bytes up to a configurable per-file maximum) arranged according to the chosen format's naming conventions. A format-neutral JSON manifest is written alongside, describing the logical content of the library.
Status
Early. Plex format only, flat hierarchy, single resolution variant per movie. Designed so other formats and structures can be added without touching the existing code paths.
Quick start
uv run jellyplex-gen plex --seed=hello --movies=50 --out=./testlib
The same --seed always produces the same library. Seeds are arbitrary
alphanumeric strings — they get hashed to an integer internally, so
reproducibility doesn't depend on Python's PYTHONHASHSEED.
To get just the manifest (no files written):
uv run jellyplex-gen manifest --seed=hello --movies=50
For copy-semantics or content-aware testing, fill files with up to N bytes of pseudorandom content (default is 0, i.e. empty files):
uv run jellyplex-gen plex --seed=hello --movies=20 --max-content-size=4096 --out=./testlib
File contents are seeded per-file from the manifest seed and the file's
relative path, so the same --seed + same --max-content-size always
yield byte-identical libraries.
Architecture
The generator is built around three swappable abstractions:
TitleSource— supplies movie titles. The defaultCuratedTitleSourcemixes word pools and hand-crafted titles. The protocol leaves room for other sources without touching anything else.NamingConvention— format-specific: turns a logical movie into directory and file names. Currently onlyPlexNamingConvention.LibraryStructure— orthogonal to format: decides the parent path of each movie directory. Currently onlyFlatLibraryStructure.
Generation is two-phase: build_manifest() produces a format-neutral
description, materialize() writes the actual filesystem layout. The
manifest can be saved, loaded, and diffed independently of any concrete
layout.
License
BSD-3-Clause. See LICENSE.
Project details
Release history Release notifications | RSS feed
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 jellyplex_gen-0.1.1.tar.gz.
File metadata
- Download URL: jellyplex_gen-0.1.1.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2701033cddfd3b5d7a11b3dd0eb83d7332477c8fe25377848a6ad224a94da75e
|
|
| MD5 |
b7e4a721a9d1f9fda989372ff464653c
|
|
| BLAKE2b-256 |
9285a0e9fa3818d59b73c1338fdfdc46b77bbd97f44f2b0d65dbc65566d51cca
|
File details
Details for the file jellyplex_gen-0.1.1-py3-none-any.whl.
File metadata
- Download URL: jellyplex_gen-0.1.1-py3-none-any.whl
- Upload date:
- Size: 15.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
250f9d176a0e34ecbd671804b8aac1c3c0ce8c170547c01676723a0d9a44d88c
|
|
| MD5 |
b0c34236eaef15f186440a65e7ed9d9b
|
|
| BLAKE2b-256 |
2b90ddf5ee4528991cb75999bed4f88a97fd789750d7c80c000c45928f484cac
|