Skip to main content

RetroLibX — Universal Retro Game Library Converter

CI Publish PyPI version Python versions License


RetroLibX

Universal Retro Game Library Converter

RetroLibX migrates ROM references, metadata, artwork, videos, collections, and launch settings between RetroArch, generic EmulationStation, ROCKNIX, ES-DE, and Pegasus. All conversions pass through a typed, platform-neutral intermediate representation rather than point-to-point converters.

Install and run

Python 3.12+ and uv are required.

uv sync
uv run retrolibx detect /path/to/library
uv run retrolibx scan /path/to/library
uv run retrolibx convert /path/to/source --to rocknix --output /path/to/target --dry-run
uv run retrolibx convert /path/to/source --to rocknix --output /path/to/target

For a non-standard RetroArch playlist whose title is stored in another field, select it explicitly. The original label is still used to match thumbnails:

uv run retrolibx scan /path/to/library --game-name-field core_name
uv run retrolibx convert /path/to/library --to rocknix --output /path/to/target \
  --game-name-field core_name

The source is read-only by default. ROM modes are copy, move, symlink (link alias), hardlink, and none; media modes are copy, symlink, and hardlink. Conflict policies are skip, overwrite, rename, error, and newer.

Commands

  • detect: rank supported source formats.
  • scan: import and summarize a library; --json outputs RLX IR and --hash calculates ROM hashes.
  • convert: plan and execute a conversion; --dry-run never writes.
  • inspect: show systems, games, ROMs, and media.
  • validate: report broken paths, unknown systems, duplicates, and malformed metadata.

Aliases: raretroarch, esemulationstation, esdees-de.

Repository discovery

RetroLibX does not require one fixed repository layout. It recursively discovers .lpl, gamelist.xml, and metadata.pegasus.txt below the supplied source root (excluding tool and VCS directories). Referenced ROM and media paths are resolved in this order:

  1. an existing absolute path;
  2. a path relative to the metadata file or detected frontend root;
  3. a path relative to the supplied repository root;
  4. a unique trailing-path match, which handles stale device roots such as /storage/roms;
  5. a unique filename match, with semantic directory hints for ROMs, covers, screenshots, videos, and manuals.

Ambiguous filename matches are intentionally left unresolved and reported by validation instead of silently selecting the wrong game or artwork.

Development

uv run pytest --cov
uv run ruff check .
uv run ruff format --check .
uv run mypy src

Architecture and acceptance criteria are documented in specs/v1. Adapters implement detection/import/render only. Rendering returns an ExportIntent; the planner resolves all conflicts and paths; the executor is the sole filesystem writer.

License

RetroLibX is released under the MIT License.

Download files

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

Source Distribution

retrolibx-0.1.0.tar.gz (1.5 MB view details)

Uploaded Source

Built Distribution

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

retrolibx-0.1.0-py3-none-any.whl (36.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: retrolibx-0.1.0.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for retrolibx-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3b0152e4cca4b14d2a1422d6ed89701877d83baa0283439f3fe82149d304f93f
MD5 cd70073a0e13b360a08ab2c7adde2367
BLAKE2b-256 923dbe11bbebe90388759b5a39b37bed29ba86188b46cf2d449fcb02d5f7c316

See more details on using hashes here.

Provenance

The following attestation bundles were made for retrolibx-0.1.0.tar.gz:

Publisher: publish.yml on tiancheng91/retrolibx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: retrolibx-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 36.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for retrolibx-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 83a8b6ffd8ad05053363e35054938bdba5e89f9c5d31e93d035e4131766c5d11
MD5 9fba9e8efe1120566d2b7b65ffa7d808
BLAKE2b-256 ad8333f25bd8f33bb07beb9267c467cde204d793ba04bcf7ccbd57a7e76be135

See more details on using hashes here.

Provenance

The following attestation bundles were made for retrolibx-0.1.0-py3-none-any.whl:

Publisher: publish.yml on tiancheng91/retrolibx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page