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.
Metadata
Release files for jellyplex-gen 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| jellyplex_gen-0.1.1.tar.gz | 10.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jellyplex_gen-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.2 kB
Release files / jellyplex_gen-0.1.1.tar.gz
| Download URL | jellyplex_gen-0.1.1.tar.gz |
|---|---|
| Size | 10.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2701033cddfd3b5d7a11b3dd0eb83d7332477c8fe25377848a6ad224a94da75e
|
|
BLAKE2b-256 checksum How to use checksums |
9285a0e9fa3818d59b73c1338fdfdc46b77bbd97f44f2b0d65dbc65566d51cca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / jellyplex_gen-0.1.1-py3-none-any.whl
| Download URL | jellyplex_gen-0.1.1-py3-none-any.whl |
|---|---|
| Size | 15.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
250f9d176a0e34ecbd671804b8aac1c3c0ce8c170547c01676723a0d9a44d88c
|
|
BLAKE2b-256 checksum How to use checksums |
2b90ddf5ee4528991cb75999bed4f88a97fd789750d7c80c000c45928f484cac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Security for jellyplex-gen 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.