Skip to main content

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 default CuratedTitleSource mixes 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 only PlexNamingConvention.
  • LibraryStructure — orthogonal to format: decides the parent path of each movie directory. Currently only FlatLibraryStructure.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jellyplex_gen-0.1.0.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jellyplex_gen-0.1.0-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file jellyplex_gen-0.1.0.tar.gz.

File metadata

  • Download URL: jellyplex_gen-0.1.0.tar.gz
  • Upload date:
  • Size: 7.6 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

Hashes for jellyplex_gen-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1ec7b6d38bf44a594f96b772543b252cadc5ef60b552719964e5b9527ee1129a
MD5 938fdec73ac11da85992443c142d5be8
BLAKE2b-256 c46be0b2bfebd45ae6624ff8b76305197be084b15fe19eafc7359c4868db62e1

See more details on using hashes here.

File details

Details for the file jellyplex_gen-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: jellyplex_gen-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.0 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

Hashes for jellyplex_gen-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dd3b47761a3b898bd47aa2b53407d2cc99211073ae76b0ccb03315447c978391
MD5 ddeaeff97a90e77e905226e4caaa2ff1
BLAKE2b-256 cbfa58cae5ddc2bd57753af50fa47997d6834024e15b668dc9eab6880f0f4bd0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page