Rename movie folders and files with TMDB-sourced IMDB-style formatting
Project description
Media Renamer
A Python tool for renaming movie folders and files with proper IMDB-style formatting using The Movie Database (TMDB) API.
What it does
Media Renamer takes movie folders with inconsistent naming and renames them (and all files within) to a standardised format that includes IMDB identifiers. This is particularly useful for media server applications like Plex that benefit from consistent, metadata-rich file naming.
Example transformation
Before:
Beverly Hills Cop Axel F (2024)/
├── Beverly Hills Cop Axel F (2024).mkv
├── Beverly Hills Cop Axel F (2024).1208527.srt
├── Beverly Hills Cop Axel F (2024).1208528.srt
└── Beverly Hills Cop Axel F (2024).1208529.srt
After:
Beverly Hills Cop -- Axel F (2024) {imdb-tt3083016}/
├── Beverly Hills Cop -- Axel F (2024) {imdb-tt3083016}.mkv
├── Beverly Hills Cop -- Axel F (2024) {imdb-tt3083016}.1208527.srt
├── Beverly Hills Cop -- Axel F (2024) {imdb-tt3083016}.1208528.srt
└── Beverly Hills Cop -- Axel F (2024) {imdb-tt3083016}.1208529.srt
Features
- Interactive search: Presents multiple options from TMDB with cast information
- Fuzzy folder name parsing: Handles torrent-style names with quality/codec tags and group identifiers (e.g.
Aniara (2019) (1080p BluRay x265 HEVC 10bit DTS 5.1 Qman) [UTR]) - Tolerant year matching: Year is used as a soft ranking signal rather than a hard filter — results for the right film ranked by year proximity, so an off-by-one label won't discard correct matches
- Intelligent filename sanitisation: Replaces problematic characters (
:becomes--,/becomesor, etc.) - Comprehensive renaming: Renames both folders and all files within them
- Flexible input: Accepts custom rename strings or skips items entirely
- Safe operation: Checks for existing target folders to prevent conflicts
- Comprehensive test suite: Includes pytest-based tests with mocked API calls
Installation
Via pipx (recommended)
pipx install media-renamer
Then set your TMDB API key in your shell profile (e.g. ~/.zshrc or ~/.bash_profile):
export TMDB_API_KEY=your_api_key_here
From source
-
Clone the repository:
git clone <repository-url> cd media-renamer
-
Create a virtual environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies:
pip install -r requirements.txt
-
Make scripts executable:
chmod +x media-renamer chmod +x replace-structure
Setup
Get a TMDB API Key
- Create a free account at The Movie Database
- Go to API Settings and request an API key
- Create a
.envfile in the project directory:TMDB_API_KEY=your_api_key_here
The .gitignore file is already configured to keep your API key secure.
Usage
Basic usage
./media-renamer <folder_pattern>
Examples
Rename all movie folders in current directory:
./media-renamer "*"
Rename specific folders:
./media-renamer "Beverly Hills Cop*" "Bridget Jones*"
Supported folder name formats
The tool handles a range of naming conventions:
| Format | Example |
|---|---|
| Clean with year | Beverly Hills Cop Axel F (2024) |
| Torrent with quality/group tags | Aniara (2019) (1080p BluRay x265 HEVC 10bit DTS 5.1 Qman) [UTR] |
| Underscore separators | The_Dark_Knight_(2008) |
| No year | Some Movie [YTS] |
Year mismatches of one or two years are tolerated — the correct film will still appear in the results, ranked by proximity to the folder's year.
Interactive process
When you run the tool, it will:
-
Parse each folder name to extract title and year (stripping torrent noise)
-
Search TMDB for matching movies, ranked by year proximity
-
Present up to 3 options with cast information:
Looking up Beverly Hills Cop Axel F (2024)... 1) Beverly Hills Cop -- Axel F (2024) {imdb-tt3083016} (Beverly Hills Cop: Axel F; 2024; Eddie Murphy, Joseph Gordon-Levitt, Taylour Paige) 2) Beverly Hills Cop -- Axel F (2024) {imdb-tt8874500} (Beverly Hills Cop: Axel F; 2024; Behind the Scenes) 3) Beverly Hills Cop -- Axel F (2024) {imdb-tt9876543} (Beverly Hills Cop: Axel F; 2024; Documentary) Choose 1-3, or enter a new rename string, or nothing to skip: > -
You can:
- Enter a number (1-3) to select one of the options
- Type a custom rename string
- Press Enter to skip this folder
Filename formatting rules
The tool follows these character replacement rules for safe filenames:
| Character | Replacement | Reason |
|---|---|---|
: |
-- |
Subtitle separator |
/ |
or |
Alternative indicator |
\ |
or |
Alternative indicator |
<> |
() |
Bracket substitution |
" |
' |
Quote substitution |
| |
, |
List separator |
? |
! |
Question to exclamation |
* |
x |
Wildcard to letter |
Testing
The project includes a comprehensive test suite using pytest.
Run tests
python test_media_renamer.py
Create test data
Use the included replace-structure script to create a test directory structure:
./replace-structure /path/to/your/movies ./test-data
This creates a copy of your directory structure with empty files, perfect for testing without risking your actual media files.
Test coverage
The test suite covers:
- Folder name parsing
- Filename sanitisation
- Movie name formatting
- TMDB API integration (mocked)
- Complete renaming workflows
- Edge cases and error handling
File structure
media-renamer/
├── media-renamer # Main script
├── replace-structure # Test data generator
├── test_media_renamer.py # Test suite
├── requirements.txt # Python dependencies
├── .env # API key (create this)
├── .gitignore # Git ignore file
└── README.md # This file
Requirements
- Python 3.7+
requests- For TMDB API callspython-dotenv- For environment variable managementpytest- For running testspytest-mock- For test mocking
Compatibility
This tool is designed to work with:
- Plex Media Server - The naming format is optimised for Plex's metadata agents
- Other media servers - The standardised format should work with most media management tools
- General file organisation - Useful for anyone wanting consistent movie file naming
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run the test suite
- Submit a pull request
Acknowledgements
- The Movie Database (TMDB) for providing the comprehensive movie API
- Plex for inspiring the naming format standards
- Originally designed to complement a browser extension for enhanced IMDB search results https://github.com/lorenzowood/plex_name_formatter_extension
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file media_renamer-1.0.0.tar.gz.
File metadata
- Download URL: media_renamer-1.0.0.tar.gz
- Upload date:
- Size: 7.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6d4e7aed4023284ca7676f12ca3071702842b9176e0449857e155eefb086445
|
|
| MD5 |
163cf8b308896e9838e6022d335a969f
|
|
| BLAKE2b-256 |
46066b3ff2ebe52fc8466329e3c19692f3c7795dfdd30d66510ca5c0942030af
|
File details
Details for the file media_renamer-1.0.0-py3-none-any.whl.
File metadata
- Download URL: media_renamer-1.0.0-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09c5add19645b061880e7300b0e97e0b523fa89beb6a01753373a3a49467b4aa
|
|
| MD5 |
7bba252fc5a5bc8ddb9f038bde1c39ce
|
|
| BLAKE2b-256 |
4ded4fd4103912600be546dc37315fac57812400e53c27c032f5c43944d22866
|