Rename photos and videos deterministically using the best available capture timestamp with full transparency about where the timestamp came from.
Core principle: predictable results, safe renames, and a preview that always explains the chosen timestamp source.
Most media folders contain a mix of:
- proper EXIF/QuickTime metadata
- stripped messenger exports
- Google Takeout exports with sidecars
- files named by camera apps (DJI, IMG/VID, WhatsApp)
- videos where only MediaInfo knows the truth
Date Renamer resolves timestamps using a strict precedence order and shows the decision directly in the UI tooltip. That makes the rename output auditable and repeatable.
- Open Releases and download the latest build.
- Start the app:
- Windows:
.exe - macOS:
.app
- Windows:
- Done release builds are standalone.
- Consistent precedence order, mirrors the actual code path.
- Tooltip shows the exact timestamp source (e.g.
exiftool:QuickTime:CreateDate).
- See old/new names instantly.
- Built-in filter for large folders.
- Auto-conflict handling: produces unique names when collisions occur.
- Skips files without usable timestamp (unless you choose a fallback mode).
- Undo for the last rename run (current session).
- Parallel scan mode for large directories.
- ExifTool batch calls (many files per call) for speed.
- Parse known filename patterns (DJI, IMG/VID, WhatsApp, generic stamps).
- Read
.xmpsidecars. - Read Google Takeout
.jsonsidecars.
For every file, Date Renamer selects the first usable timestamp in this order:
- ExifTool tags (QuickTime / EXIF / XMP / Composite / PNG)
- Google Takeout JSON sidecar
- XMP sidecar
- Classic EXIF parsing via
exifread(images) - HEIC embedded XMP (Pillow + pillow-heif)
- MediaInfo (videos)
- Filename parsing (Deep mode)
- Filesystem fallback (Created/Modified) — only if selected
- Otherwise: skip the file
✅ The selected source is visible in the preview tooltip.
ExifTool tags checked
- EXIF:DateTimeOriginal
- EXIF:CreateDate
- XMP:CreateDate
- XMP:DateCreated
- QuickTime:CreateDate
- QuickTime:MediaCreateDate
- QuickTime:TrackCreateDate
- QuickTime:ModifyDate
- QuickTime:ContentCreateDate
- Composite:SubSecDateTimeOriginal
- Composite:DateTimeCreated
- PNG:CreationTime
- DateTimeOriginal (fallback)
- CreateDate (fallback)
- MediaCreateDate (fallback)
Deep mode extends timestamp detection beyond embedded metadata.
file.ext.xmporfile.xmpfile.ext.json(Google Takeout)
Examples (conceptual):
DJI_FLY_YYYYMMDD_HHMMSS_*DJI_YYYYMMDD_HHMMSS_*IMG_YYYYMMDD_HHMMSS*/VID_YYYYMMDD_HHMMSS*YYYYMMDD_HHMMSS*YYYY-MM-DD_HH-MM-SS*IMG-YYYYMMDD-WA####*/VID-YYYYMMDD-WA####*
Date-only patterns resolve to midnight when no time part exists.
You control naming via:
- Format (e.g.
%Y-%m-%d_%H-%M-%S) - Prefix / Suffix
- Pattern:
Date onlyDate + OriginalOriginal onlyOriginal + Date
If a file has no timestamp:
- default: skipped
- optional: filesystem fallback (created/modified)
Some exports remove capture metadata entirely. In those cases, recovery is only possible with:
- sidecars (XMP/Takeout JSON), or
- filename patterns, or
- filesystem fallback (usually import/download time, not capture time)
UUID names often indicate “exported” or “processed” media. Without metadata/sidecars:
- only filesystem fallback remains
- accuracy depends on your file history
python -m venv .venv# Windows
.venv\Scripts\activate# macOS/Linux
source .venv/bin/activatepip install -r requirements.txtpython date-renamer.py- Open Logs from the app menu.
- Copy the log output.
- Attach it to a GitHub issue.
Common cases:
- ExifTool not found or wrong mode selection.
- No timestamp available (use fallback or Deep mode).
- Permission or rename failure (Windows file locks).
The preview tooltip always shows the selected timestamp source.
Prerequisites:
- Python 3.10+
- PyInstaller (
pip install pyinstaller)
Build commands:
# Windows
py -m PyInstaller date-renamer.spec# macOS
python3 -m PyInstaller date-renamer.specOutput is written to dist/DateRenamer.
Bundled assets are taken from assets/ and tools/ (if present).
ExifTool resolution order is bundled first, then system PATH.
- Built with PyQt6 and community-maintained Python packages.
Open an issue at https://github.com/Ch4r0ne/date-renamer/issues with logs and a sample file list if you need help reproducing a timestamp issue.
