{"id":29687269,"url":"https://github.com/thepalaceproject/palace-tools","last_synced_at":"2026-05-28T18:00:20.036Z","repository":{"id":224149075,"uuid":"762535847","full_name":"ThePalaceProject/palace-tools","owner":"ThePalaceProject","description":"Some utilities for interacting with The Palace Project.","archived":false,"fork":false,"pushed_at":"2026-05-19T06:42:53.000Z","size":1056,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-19T09:09:30.916Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ThePalaceProject.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-02-24T01:47:27.000Z","updated_at":"2026-05-19T06:42:56.000Z","dependencies_parsed_at":"2024-07-12T19:18:43.143Z","dependency_job_id":"3aa6345c-dc0d-48df-9862-32eb2fcb1827","html_url":"https://github.com/ThePalaceProject/palace-tools","commit_stats":null,"previous_names":["tdilauro/palace-client-utils"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ThePalaceProject/palace-tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePalaceProject%2Fpalace-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePalaceProject%2Fpalace-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePalaceProject%2Fpalace-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePalaceProject%2Fpalace-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThePalaceProject","download_url":"https://codeload.github.com/ThePalaceProject/palace-tools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThePalaceProject%2Fpalace-tools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33619972,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-23T04:36:32.261Z","updated_at":"2026-05-28T18:00:19.992Z","avatar_url":"https://github.com/ThePalaceProject.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Palace Tools 🛠️\n\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat\u0026labelColor=ef8336)](https://pycqa.github.io/isort/)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\u0026logoColor=white)](https://github.com/pre-commit/pre-commit)\n\n## What's included\n\n### CLI Tools\n\n- `audiobook-manifest-summary` (`summarize_rwpm_audio_manifest.py`)\n    - Produce a summary description from a [Readium Web Publication Manifest (RWPM)](https://github.com/readium/webpub-manifest)\nmanifest conforming to the [Audiobook Profile](https://github.com/readium/webpub-manifest/blob/master/profiles/audiobook.md).\n- `fetch-lcp`\n    - `audiobook-manifest`\n        - Given an LCP audiobook fulfillment URL, retrieve it and store/print its manifest.\n    - `files`\n        - Given an LCP audiobook fulfillment URL, retrieve and store the lcp and lcpl files.\n- `patron-bookshelf`\n    - Print a patron's bookshelf as either a summary or in full as JSON.\n- `validate-audiobook-manifests`\n    - Validate a directory of RWPM audiobook manifests printing any errors found.\n- `palace-terminal`\n    - A toy terminal based media player that can be used to play audiobooks from\n      a local directory containing audiobook manifests and their associated media files.\n    - Note: This application uses `python-vlc` which requires VLC to be installed on\n      the system. The VLC installation can be found [here](https://www.videolan.org/vlc/).\n- `download-feed` - Download various feeds for local inspection.\n    - `opds2`\n        - Download an OPDS2 / OPDS2 + ODL feed.\n    - `overdrive`\n        - Download Overdrive feeds.\n    - `axis`\n        - Download B\u0026T Axis 360 availability feed.\n- `validate-feed` - Validate feeds.\n    - `opds2`\n        - Validate an OPDS2 feed\n    - `opds2-odl`\n        - Validate an OPDS2 + ODL feed\n- `import-libraries-from-csv`\n    - Import libraries from a csv to ease the burden of setting up CMs with many libraries.\n    - Note: there is a sample CSV file in the ./samples/ directory that shows the expected format of the CSV file.\n\n### Library Support\n\n- Models for parsing and processing manifests in the\n[Audiobook Profile](https://github.com/readium/webpub-manifest/blob/master/profiles/audiobook.md) of the\n[Readium Web Publication Manifest (RWPM)](https://github.com/readium/webpub-manifest) specification.\n\n## Working as a developer on this project\n\n### uv\n\nThis project uses [uv](https://docs.astral.sh/uv/) for Python and dependency management.\nIf you plan to work on this project, you will need `uv`.\n\nuv can be installed with `curl -LsSf https://astral.sh/uv/install.sh | sh`. See the\n[uv documentation](https://docs.astral.sh/uv/getting-started/installation/) for other\ninstallation options.\n\nOnce uv is installed, you can install the required Python version with:\n\n```sh\nuv python install 3.12\n```\n\n## Installation\n\nThis package is [published to PyPI](https://pypi.org/project/palace-tools/), and can also be\ninstalled and run locally from a clone of the repository.\n\n### Installing the CLI Tools globally with `pipx`\n\nInstalling with `pipx` will be most conducive to running the CLI Tools from any directory.\n\nIf you don't already have `pipx` installed, you can get installation instructions\n[here](https://github.com/pypa/pipx?tab=readme-ov-file#install-pipx).\n\n```shell\npipx install palace-tools\n```\n\nAlternatively, you can install directly from the git repository, for example to try a\nparticular branch or commit (more details about\n[installing from VCS here](https://github.com/pypa/pipx?tab=readme-ov-file#installing-from-source-control)):\n\n```shell\npipx install git+https://github.com/ThePalaceProject/palace-tools.git@branch-or-commit\n```\n\nIf installation is successful, `pipx` will list the apps that are installed with the package.\n\n### Running CLI Tools from a cloned project\n\n- Clone the repository.\n- Change into the cloned directory.\n- Run `uv sync --all-groups` to install the project dependencies and the CLI tools into a\n  `.venv` virtual environment.\n\nAt this point, you should be able to run the CLI tools using `uv run \u003ccli-command-and-args\u003e`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthepalaceproject%2Fpalace-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthepalaceproject%2Fpalace-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthepalaceproject%2Fpalace-tools/lists"}