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.1.tar.gz (10.9 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.1-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

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

Hashes for jellyplex_gen-0.1.1.tar.gz
Algorithm Hash digest
SHA256 2701033cddfd3b5d7a11b3dd0eb83d7332477c8fe25377848a6ad224a94da75e
MD5 b7e4a721a9d1f9fda989372ff464653c
BLAKE2b-256 9285a0e9fa3818d59b73c1338fdfdc46b77bbd97f44f2b0d65dbc65566d51cca

See more details on using hashes here.

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

Hashes for jellyplex_gen-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 250f9d176a0e34ecbd671804b8aac1c3c0ce8c170547c01676723a0d9a44d88c
MD5 b0c34236eaef15f186440a65e7ed9d9b
BLAKE2b-256 2b90ddf5ee4528991cb75999bed4f88a97fd789750d7c80c000c45928f484cac

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