# Plexer
<!-- reenable once issue #27 is complete -->
<!-- ![GitHub Release](https://img.shields.io/github/v/release/magneticstain/plexer?include_prereleases) -->
[![PyPI - Version](https://img.shields.io/pypi/v/plexer_cli)](https://pypi.org/project/plexer-cli/)
![GitHub License](https://img.shields.io/github/license/magneticstain/plexer)
![Supported Python Versions](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Fmagneticstain%2Fplexer%2Frefs%2Fheads%2Fmain%2Fpyproject.toml)
![GitHub Issues or Pull Requests](https://img.shields.io/github/issues/magneticstain/plexer)
![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/magneticstain/plexer/total)
[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/magneticstain/plexer/badge)](https://scorecard.dev/viewer/?uri=github.com/magneticstain/plexer)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/38b2a65ed9ac4c85afc98e259d73474f)](https://app.codacy.com/gh/magneticstain/plexer/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
[![Run Full Suite of Checks and Tests](https://github.com/magneticstain/plexer/actions/workflows/run_full_test_suite.yml/badge.svg)](https://github.com/magneticstain/plexer/actions/workflows/run_full_test_suite.yml)
[![Release](https://github.com/magneticstain/plexer/actions/workflows/release.yml/badge.svg)](https://github.com/magneticstain/plexer/actions/workflows/release.yml)
## Summary
A CLI tool made to make organizing your media for [Plex Media Server](https://www.plex.tv/) easy. Normalize names of media files and directories to match [the hierarchial requirements that Plex requires](https://support.plex.tv/articles/naming-and-organizing-your-movie-media-files/).
## Features
### Support
Currently, Plexer only supports organizing movies and other individual video files.
### Roadmap
- [ ] Support for TV Shows ([#28](https://github.com/magneticstain/plexer/issues/28))
- [ ] Docker implementations ([#29](https://github.com/magneticstain/plexer/issues/29))
- [ ] MacOS support ([#30](https://github.com/magneticstain/plexer/issues/30))
- [ ] Windows support ([#31](https://github.com/magneticstain/plexer/issues/31))
- [ ] Metadata inference using file/directory info (i.e. analyze the video files to "guess" what the name, year, etc is) ([#32](https://github.com/magneticstain/plexer/issues/32))
## Install
To install Plexer, there are a few options available.
### Docker
The most portable way to install and run Plexer is by using Docker.
#### Via Container Registry
The easiest way to run Plexer in Docker is by using the public containers hosted on container registries. Plexer images are available on both Docker Hub and GitHub Container Registry. See the commands below for how to run Plexer using each registry.
##### Docker Hub
```bash
docker run --rm -it magneticstain/plexer-cli
```
##### Github Container Registry
```bash
docker run --rm -it ghcr.io/magneticstain/plexer-cli
```
#### Via Local Build
In the case that container registries are unavailable, there's also the option to build the image locally. To do that, check out the `main` branch of this repo, build the Plexer image, and run it.
```bash
git clone https://github.com/magneticstain/plexer-cli.git
docker build -t plexer_cli .
docker run --rm -it plexer_cli
```
## Requirements
### Media Metadata
The most important requirement before running plexer is to ensure that you've created a `.plexer` file in each of your target directories.
This is a JSON-formatted file that includes the movie metadata required by Plexer to perform its jobs.
#### Plexer File Generator
To easily create the `.plexer` file, you can use the one-liner below while in the movie's directory:
```bash
echo -n "Media Name: ";read MEDIA_NAME;echo -n "Release Year (YYYY): ";read RELEASE_YEAR;echo "{\"name\": \"${MEDIA_NAME}\", \"release_year\": \"${RELEASE_YEAR}\"}" > .plexer
```
It can be modified to support different types of media as well.
## Usage
The source directory is the directory containing the raw media. The destination is where you'd like to save the processed media to.
```text
usage: plexer.py [-h] [-v] [--version] -s SOURCE_DIR -d DESTINATION_DIR
options:
-h, --help show this help message and exit
-v, --verbose Verbosity (-v, -vv, etc)
--version show program's version number and exit
-s SOURCE_DIR, --source-dir SOURCE_DIR
-d DESTINATION_DIR, --destination-dir DESTINATION_DIR
```
## Support & Feedback
If you run into issues while using Plexer, think you know a way to make it better, or just need help using it, create a new issue within this project and they will triaged when possible.
## Development
### Software Stack
[![Hatch project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg)](https://github.com/pypa/hatch)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
For developing with Plexer, there are several tools that are in use:
1. Build Backend, Packaging, and Dependency Management:
1. [Hatch](https://hatch.pypa.io/1.12/)
1. Analysis Tools:
1. [Ruff](https://docs.astral.sh/ruff/)
1. [Codacy](https://app.codacy.com/gh/magneticstain/plexer/dashboard)
1. Testing:
1. [Pytest](https://docs.pytest.org/en/latest/)
1. [Tox](https://tox.wiki/en/stable/)
Raw data
{
"_id": null,
"home_page": null,
"name": "plexer-cli",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "catagorization, formatting, media, organization, plex",
"author": null,
"author_email": "Josh Carlson <837837+magneticstain@users.noreply.github.com>",
"download_url": "https://files.pythonhosted.org/packages/ea/80/a3f4c6666a648e500dbabb5d11d4d7a179f4d829bafb8b2f1728b549912a/plexer_cli-0.0.3.post5.tar.gz",
"platform": null,
"description": "# Plexer\n\n<!-- reenable once issue #27 is complete -->\n<!-- ![GitHub Release](https://img.shields.io/github/v/release/magneticstain/plexer?include_prereleases) -->\n[![PyPI - Version](https://img.shields.io/pypi/v/plexer_cli)](https://pypi.org/project/plexer-cli/)\n\n![GitHub License](https://img.shields.io/github/license/magneticstain/plexer)\n![Supported Python Versions](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fraw.githubusercontent.com%2Fmagneticstain%2Fplexer%2Frefs%2Fheads%2Fmain%2Fpyproject.toml)\n\n![GitHub Issues or Pull Requests](https://img.shields.io/github/issues/magneticstain/plexer)\n![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/magneticstain/plexer/total)\n\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/magneticstain/plexer/badge)](https://scorecard.dev/viewer/?uri=github.com/magneticstain/plexer)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/38b2a65ed9ac4c85afc98e259d73474f)](https://app.codacy.com/gh/magneticstain/plexer/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)\n\n[![Run Full Suite of Checks and Tests](https://github.com/magneticstain/plexer/actions/workflows/run_full_test_suite.yml/badge.svg)](https://github.com/magneticstain/plexer/actions/workflows/run_full_test_suite.yml)\n[![Release](https://github.com/magneticstain/plexer/actions/workflows/release.yml/badge.svg)](https://github.com/magneticstain/plexer/actions/workflows/release.yml)\n\n## Summary\n\nA CLI tool made to make organizing your media for [Plex Media Server](https://www.plex.tv/) easy. Normalize names of media files and directories to match [the hierarchial requirements that Plex requires](https://support.plex.tv/articles/naming-and-organizing-your-movie-media-files/).\n\n## Features\n\n### Support\n\nCurrently, Plexer only supports organizing movies and other individual video files.\n\n### Roadmap\n\n- [ ] Support for TV Shows ([#28](https://github.com/magneticstain/plexer/issues/28))\n- [ ] Docker implementations ([#29](https://github.com/magneticstain/plexer/issues/29))\n- [ ] MacOS support ([#30](https://github.com/magneticstain/plexer/issues/30))\n- [ ] Windows support ([#31](https://github.com/magneticstain/plexer/issues/31))\n- [ ] Metadata inference using file/directory info (i.e. analyze the video files to \"guess\" what the name, year, etc is) ([#32](https://github.com/magneticstain/plexer/issues/32))\n\n## Install\n\nTo install Plexer, there are a few options available.\n\n### Docker\n\nThe most portable way to install and run Plexer is by using Docker.\n\n#### Via Container Registry\n\nThe easiest way to run Plexer in Docker is by using the public containers hosted on container registries. Plexer images are available on both Docker Hub and GitHub Container Registry. See the commands below for how to run Plexer using each registry.\n\n##### Docker Hub\n\n```bash\ndocker run --rm -it magneticstain/plexer-cli\n```\n\n##### Github Container Registry\n\n```bash\ndocker run --rm -it ghcr.io/magneticstain/plexer-cli\n```\n\n#### Via Local Build\n\nIn the case that container registries are unavailable, there's also the option to build the image locally. To do that, check out the `main` branch of this repo, build the Plexer image, and run it.\n\n```bash\ngit clone https://github.com/magneticstain/plexer-cli.git\ndocker build -t plexer_cli .\ndocker run --rm -it plexer_cli\n```\n\n## Requirements\n\n### Media Metadata\n\nThe most important requirement before running plexer is to ensure that you've created a `.plexer` file in each of your target directories.\n\nThis is a JSON-formatted file that includes the movie metadata required by Plexer to perform its jobs.\n\n#### Plexer File Generator\n\nTo easily create the `.plexer` file, you can use the one-liner below while in the movie's directory:\n\n```bash\necho -n \"Media Name: \";read MEDIA_NAME;echo -n \"Release Year (YYYY): \";read RELEASE_YEAR;echo \"{\\\"name\\\": \\\"${MEDIA_NAME}\\\", \\\"release_year\\\": \\\"${RELEASE_YEAR}\\\"}\" > .plexer\n```\n\nIt can be modified to support different types of media as well.\n\n## Usage\n\nThe source directory is the directory containing the raw media. The destination is where you'd like to save the processed media to.\n\n```text\nusage: plexer.py [-h] [-v] [--version] -s SOURCE_DIR -d DESTINATION_DIR\n\noptions:\n -h, --help show this help message and exit\n -v, --verbose Verbosity (-v, -vv, etc)\n --version show program's version number and exit\n -s SOURCE_DIR, --source-dir SOURCE_DIR\n -d DESTINATION_DIR, --destination-dir DESTINATION_DIR\n```\n\n## Support & Feedback\n\nIf you run into issues while using Plexer, think you know a way to make it better, or just need help using it, create a new issue within this project and they will triaged when possible.\n\n## Development\n\n### Software Stack\n\n[![Hatch project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg)](https://github.com/pypa/hatch)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\nFor developing with Plexer, there are several tools that are in use:\n\n1. Build Backend, Packaging, and Dependency Management:\n 1. [Hatch](https://hatch.pypa.io/1.12/)\n1. Analysis Tools:\n 1. [Ruff](https://docs.astral.sh/ruff/)\n 1. [Codacy](https://app.codacy.com/gh/magneticstain/plexer/dashboard)\n1. Testing:\n 1. [Pytest](https://docs.pytest.org/en/latest/)\n 1. [Tox](https://tox.wiki/en/stable/)\n",
"bugtrack_url": null,
"license": null,
"summary": "Normalize media files for use with Plex Media Server",
"version": "0.0.3.post5",
"project_urls": {
"Documentation": "https://github.com/magneticstain/plexer#readme",
"Issues": "https://github.com/magneticstain/plexer/issues",
"Repository": "https://github.com/magneticstain/plexer.git",
"Source": "https://github.com/magneticstain/plexer"
},
"split_keywords": [
"catagorization",
" formatting",
" media",
" organization",
" plex"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "83f0c9075ecde09551e62e8c96a376faf2402f98afe59f48149215c343cfee37",
"md5": "1cf89bee92fda9a55cad3161ad514836",
"sha256": "3b79f82c1ea63924c6ae22b577da3c7f80d918ce9ef410d62d225e759018fbac"
},
"downloads": -1,
"filename": "plexer_cli-0.0.3.post5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1cf89bee92fda9a55cad3161ad514836",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 8481,
"upload_time": "2024-10-19T23:57:02",
"upload_time_iso_8601": "2024-10-19T23:57:02.419782Z",
"url": "https://files.pythonhosted.org/packages/83/f0/c9075ecde09551e62e8c96a376faf2402f98afe59f48149215c343cfee37/plexer_cli-0.0.3.post5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ea80a3f4c6666a648e500dbabb5d11d4d7a179f4d829bafb8b2f1728b549912a",
"md5": "4d058122c23d5ed5bd6c8f8a327282e9",
"sha256": "a121e64bf355abc32d50415fc8b52d9613c3044313daf47573f20c6b709f7521"
},
"downloads": -1,
"filename": "plexer_cli-0.0.3.post5.tar.gz",
"has_sig": false,
"md5_digest": "4d058122c23d5ed5bd6c8f8a327282e9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 15841,
"upload_time": "2024-10-19T23:57:04",
"upload_time_iso_8601": "2024-10-19T23:57:04.390397Z",
"url": "https://files.pythonhosted.org/packages/ea/80/a3f4c6666a648e500dbabb5d11d4d7a179f4d829bafb8b2f1728b549912a/plexer_cli-0.0.3.post5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-19 23:57:04",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "magneticstain",
"github_project": "plexer#readme",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "plexer-cli"
}