media-renamer
v1.0.0
Published
Multi-threaded media file renaming and organization tool
Maintainers
Readme
Media File Renamer
A command-line tool to rename and organize media files based on their creation date from EXIF data. Automatically categorizes photos and videos into separate directories.
Features
- 📸 Automatic detection of photo and video files
- ✨ Intelligent renaming based on creation date
- 📁 Automatic categorization into Pictures/Video directories
- ⚙️ Supports Chinese paths and Windows systems
- 🔍 Conflict detection and resolution
- 📊 Single-line real-time progress display
- 🐳 Docker container support
- 🚦
--dry-runpreview mode - 📝 Detailed statistics report after processing
Installation and Usage
Prerequisites
- Node.js (v14 or higher) or Docker
Method 1: As a Node.js application
Global installation
npm install -g media-renamerLocal use (without installation)
npx media-renamer <input_dir> <output_dir> [--dry-run]Method 2: As a Docker container
Build Docker image
docker build -t media-renamer .Run container
docker run -it --rm \
-v /path/to/input:/input \
-v /path/to/output:/output \
media-renamer /input /output [--dry-run]Using docker-compose
- Create directory structure:
project/ ├── input/ # Place unorganized media files here ├── output/ # Target output directory └── docker-compose.yml - Run:
docker-compose run --rm media-renamer
Usage
Basic command
media-renamer <input_dir> <output_dir> [--dry-run]<input_dir>: Directory containing media files (supports subdirectories)<output_dir>: Target directory for organized files--dry-run: Preview operations without modifying files
Examples
# Node.js basic usage
media-renamer "C:\\Users\\MyUser\\Pictures\\Unorganized" "D:\\Media\\Organized"
# Node.js dry-run mode
media-renamer "~/photos/unorganized" "~/media/organized" --dry-run
# Docker basic usage
docker run -it --rm \
-v C:\\Users\\MyUser\\Pictures\\Unorganized:/input \
-v D:\\Media\\Organized:/output \
media-renamer /input /output
# Docker dry-run mode
docker run -it --rm \
-v /home/user/photos/unorganized:/input \
-v /home/user/media/organized:/output \
media-renamer /input /output --dry-runSupported File Formats
Images
.jpg, .jpeg, .png, .gif, .bmp, .tiff, .heic, .webp
Videos
.mp4, .mov, .avi, .mkv, .flv, .wmv, .m4v, .3gp, .mts, .mpg
Renaming Rules
- Image files:
IMG_YYYYMMDD_hhmmss.ext(e.g.IMG_20230515_143045.jpg) - Video files:
VID_YYYYMMDD_hhmmss.ext(e.g.VID_20230515_143108.mp4)
How It Works
- Recursively scans all media files in the input directory
- For each file:
- Skips non-media files
- Copies without renaming if filename already matches pattern
- Otherwise reads creation date from EXIF/metadata
- Renames file based on creation date
- Handles filename conflicts:
- Overwrites if same file size
- Appends sequence number if different size (e.g.
IMG_20240101_120000_1.jpg)
- Copies images to
<output_dir>/Pictures - Copies videos to
<output_dir>/Video
Progress Display
Shows single-line progress during processing:
[ 45/120] Progress: 37.5% | Elapsed: 12.3s | File: DSC_1234.JPG[45/120]: Processed files / Total filesProgress: 37.5%: Completion percentageElapsed: 12.3s: Time elapsedFile: DSC_1234.JPG: Current file being processed
Final Report
Displays detailed statistics after completion:
Processing complete!
==================================================
Total files processed: 120
- Renamed and copied: 85
- Copied without rename: 25
- Skipped: 5
- Errors: 5
Total time: 24.7 seconds
==================================================Docker Notes
- Use
-vflags to mount host directories:- Mount input directory to
/input - Mount output directory to
/output
- Mount input directory to
- Windows path example:
docker run -it --rm ` -v "C:\Users\MyUser\Pictures\Unorganized:/input" ` -v "D:\Media\Organized:/output" ` media-renamer /input /output - Linux/macOS path example:
docker run -it --rm \ -v /home/user/photos/unorganized:/input \ -v /home/user/media/organized:/output \ media-renamer /input /output - For large numbers of files, increase shared memory:
docker run -it --rm --shm-size=1g \ -v /path/to/input:/input \ -v /path/to/output:/output \ media-renamer /input /output
General Notes
- Original files are never modified (only copied)
- Files without creation date retain original names
- Console encoding is automatically set for Chinese paths on Windows
- Use
--dry-runto safely preview operations
License
MIT
