From d5e3661860ea9235c1d48839adc03c5c1dfe680c Mon Sep 17 00:00:00 2001 From: sHa Date: Fri, 26 Dec 2025 23:46:46 +0000 Subject: [PATCH] feat: Update version to 0.2.2, enhance installation guide, and improve help screen with dynamic versioning --- .gitignore | 3 - INSTALL.md | 171 ++++++++++++++++++ dist/renamer-0.2.2-py3-none-any.whl | Bin 0 -> 30018 bytes pyproject.toml | 4 +- renamer/app.py | 3 - renamer/formatters/proposed_name_formatter.py | 1 - renamer/screens.py | 9 +- 7 files changed, 180 insertions(+), 11 deletions(-) create mode 100644 INSTALL.md create mode 100644 dist/renamer-0.2.2-py3-none-any.whl diff --git a/.gitignore b/.gitignore index 50bbbbf..90aa8dc 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,6 @@ __pycache__/ *.py[oc] build/ -!dist/*.whl -!dist/.gitignore -dist/ wheels/ *.egg-info diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 0000000..edc95ca --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,171 @@ +# Installation Guide for Renamer + +Renamer is a terminal-based media file renamer and metadata viewer built with Python and Textual. + +## Prerequisites + +- Python 3.11 or higher +- UV package manager (recommended) or pip + +## Installation Methods + +### Method 1: UV Tool Install (Recommended) + +This is the easiest way to install and use Renamer globally on your system. + +#### Install UV (if not already installed) +```bash +# On Linux/macOS +curl -LsSf https://astral.sh/uv/install.sh | sh + +# On Windows +powershell -c "irm https://astral.sh/uv/install.sh | iex" +``` + +#### Install Renamer +```bash +# From the built wheel (if available) +uv tool install dist/renamer-0.2.0-py3-none-any.whl + +# Or from PyPI (when published) +uv tool install renamer +``` + +#### Usage +```bash +renamer # Scan current directory +renamer /path/to/directory # Scan specific directory +``` + +### Method 2: pip Install from Wheel + +If you have the wheel file, you can install it with pip. + +```bash +# Install the wheel +pip install dist/renamer-0.2.0-py3-none-any.whl + +# Or install globally (may require sudo) +sudo pip install dist/renamer-0.2.0-py3-none-any.whl +``` + +### Method 3: Development Installation + +For development or if you want to run from source: + +#### Clone and Setup +```bash +git clone +cd renamer + +# Install dependencies +uv sync + +# Run directly +uv run python main.py +uv run python main.py /path/to/directory +``` + +#### Install in Development Mode +```bash +uv sync +uv tool install --editable . +``` + +### Method 4: Direct Python Execution + +If you prefer not to install globally: + +```bash +# Ensure you have Python 3.11+ +python3 --version + +# Install dependencies +pip install textual mutagen pymediainfo python-magic langcodes + +# Run the application +python3 main.py +python3 main.py /path/to/directory +``` + +## System Requirements + +### Linux +- Python 3.11+ +- MediaInfo library (for detailed media analysis) + ```bash + # Ubuntu/Debian + sudo apt install libmediainfo-dev + + # Fedora/CentOS + sudo dnf install libmediainfo-devel + + # Arch Linux + sudo pacman -S libmediainfo + ``` + +### macOS +- Python 3.11+ (via Homebrew or official installer) +- MediaInfo (automatically handled by pymediainfo) + +### Windows +- Python 3.11+ (official installer) +- MediaInfo (automatically handled by pymediainfo) + +## Verification + +After installation, verify it works: + +```bash +renamer --help +# or +python3 main.py --help +``` + +You should see the help text for the Renamer application. + +## Troubleshooting + +### Common Issues + +1. **"Command not found"** + - Ensure UV bin directory is in your PATH + - Try `uv tool install` again + +2. **Import errors** + - Ensure all dependencies are installed + - Try `uv sync` or `pip install -r requirements.txt` + +3. **Permission errors** + - Use `sudo` for system-wide pip installs + - Or use UV tool install which handles permissions + +4. **MediaInfo not found** + - Install system MediaInfo library + - Or use basic mode (limited functionality) + +### Getting Help + +If you encounter issues: +1. Check the [README.md](README.md) for usage instructions +2. Verify your Python version: `python3 --version` +3. Check UV installation: `uv --version` + +## Uninstallation + +### UV Tool Uninstall +```bash +uv tool uninstall renamer +``` + +### pip Uninstall +```bash +pip uninstall renamer +``` + +### Development Uninstall +```bash +uv tool uninstall renamer +# Remove the cloned directory if desired +``` +/home/sha/bin/renamer/INSTALL.md \ No newline at end of file diff --git a/dist/renamer-0.2.2-py3-none-any.whl b/dist/renamer-0.2.2-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..94e1ed1b65a636279e9c7e18a4bd4ea75bde0efb GIT binary patch literal 30018 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 lxF_UqWR364|3Lo7FCr%e3-X~rK#+qzmmuE^yV