Picronize Renamer is a CLI tool for renaming, copying, or moving photos and videos using the date they were taken. The date is extracted from EXIF metadata or file-level technical data. It supports a wide range of file types, including JPEG, RAW, HEIC, and video files.
- 📸 Rename photos (JPEG, PNG, HEIC, RAW: DNG, CR2, NEF, etc.)
- 🎞 Rename videos (MP4, MOV, AVI)
- 🕒 Extract creation date from EXIF, metadata, or with
exiftoolfallback - ➡️ Process a single folder, or a list of specific media files.
- 📁 Recursive directory processing
- 📝 Customizable filename format (via
strftime) - 🛡️ Handles filename collisions by appending a unique suffix (e.g.,
_1,_2) - ⚙️ Multiple operation modes:
- Overwrite: Rename files in place.
- Copy: Copy renamed files to a new destination, preserving originals.
- Move: Move and rename files to a new destination.
- 🧰 Optional support for
exiftoolfor advanced formats - 🧪 Dry-run mode for previewing changes
- Clone the repository:
git clone https://github.com/MarcinSachs/picronize-renamer.git
cd picronize-renamer- Install dependencies (and the tool):
pip install .- (Optional) Install ExifTool:
For the best support across all file types (especially RAW and HEIC), it's recommended to install ExifTool and ensure it's in your system's PATH, or place
exiftool.exein theexiftooldirectory within the project.
Rename files in a folder (overwrite by default):
picronize-renamer /path/to/media_folder --format "%Y-%m-%d_%H-%M-%S"Copy specific files to a new folder with new names:
picronize-renamer /path/to/photo1.jpg /path/to/videoA.mp4 --copy-to /path/to/new_organized_mediaMove all files from a folder (non-recursively) to a new location:
picronize-renamer /path/to/source_folder --move-to /path/to/destination_folder --no-recursive| Argument/Option | Description | Default |
|---|---|---|
paths |
One or more paths to media files or a single path to a folder containing media files. | Required |
--format FORMAT |
Datetime format string for new filenames (e.g., "%Y%m%d_%H%M%S"). |
"%Y-%m-%d-%H-%M-%S" |
--dry-run |
Show what would be done, without making any changes to files. | N/A (flag) |
--no-recursive |
Do not scan subfolders. Only applies if a folder is provided as input. | N/A (flag, recursive by default) |
--overwrite |
Rename files in place. This is the default mode if no other operation mode is specified. | N/A (flag, default mode) |
--copy-to DEST_FOLDER |
Copy renamed files to DEST_FOLDER. Original files are preserved. |
N/A |
--move-to DEST_FOLDER |
Move and rename files to DEST_FOLDER. |
pytest tests
This project is licensed under the MIT License.