Skip to content

Repository files navigation

exifer

Set the dates of photos and videos — file-system dates and EXIF / media metadata — from a fixed date, a sequence, the file name, or the file's own metadata. Preview every new date before anything is written.

exifer

What it does

  1. Drop photos, videos or folders on the window. Each file's current modification time and metadata date are shown.
  2. Choose where the new date comes from (Date tab) — the New date column updates live.
  3. Choose what to write (Write to tab) and press Write dates.
Date source Use it when
From the file's own EXIF / media date You copied photos from a phone, downloaded them from a cloud or restored a backup and every file now has today's date. Repairs the file-system dates from DateTimeOriginal / CreateDate / MediaCreateDate.
From the file name IMG_20240815_143012, PXL_20240815_143012123, VID20240815143012, 2024-08-15 14.30.12, Screenshot 2024-08-15 at 14.30.12, IMG-20240815-WA0001 (noon when there is no time). Files without a date are skipped, not guessed.
One date for all Scans, screenshots, documents.
Sequential Start date + interval per file, in name / modification-time / queue order — slideshows, scanned albums.
Shift by an offset The camera clock was an hour off or on the wrong time zone.

Write to: EXIF / media metadata (JPEG and TIFF are written natively and losslessly with piexif; PNG, WebP, HEIC, RAW and video formats go through ExifTool), file modification time, file creation time (Windows, macOS).

Install

Release binaries (no Python needed): download the archive for your OS from Releases, unpack, run exifer.

OS File
Windows x64 exifer-<version>-windows-x64.zip
Linux x64 exifer-<version>-linux-x64.tar.gz
macOS arm64 exifer-<version>-macos-arm64.tar.gz

ExifTool is optional — JPEG / TIFF never need it. For other formats: on Windows press Download ExifTool on the Tools tab (fetches the official 64-bit build from exiftool.org into an exiftool folder next to the app); Linux apt install libimage-exiftool-perl; macOS brew install exiftool.

From source: pip install -r requirements.txt then python main.py (or run.cmd / run.sh). Python 3.10+.

Settings

Tab Setting What it does
Date Source See the table above.
Date / Now The fixed or start date (calendar popup).
Interval, Order Sequential mode: seconds between files and how files are ordered (natural name sort, modification time, queue).
Days / Hours / Minutes Shift mode offset, negative allowed.
Write to EXIF / media metadata DateTimeOriginal, CreateDate, ModifyDate; for video also MediaCreateDate, TrackCreateDate, CreationDate.
Modification / creation time File-system dates. Linux cannot change the birth time; the option is ignored there.
Dry run Preview only.
Keep a copy of the original name_original next to the file before metadata is rewritten.
Tools ExifTool Status, version, custom path, re-check, download (Windows).

Presets menu: Repair file dates from EXIF, Date from file name, Stamp one date, Sequential, Shift -1 h; save / load / import / export your own; save current settings as defaults.

CLI

python dater.py [--source metadata|filename|fixed|sequential|shift] [--date "YYYY-MM-DD HH:MM:SS"] [--interval 60]
                [--shift-hours -1] [--no-metadata] [--no-fs] [-n] files-or-folders…

dater.py imports nothing from Qt; the default source is metadata (repair file dates).

Tips

Symptom Fix
Google Photos / Immich / Explorer still show the wrong day They sort by the EXIF date — tick EXIF / media metadata, not only the file dates.
"needs ExifTool" in the Metadata column The format is not JPEG/TIFF; install ExifTool (Tools tab). File dates are still written without it.
Dates are exactly N hours off Use Shift by an offset.
A file shows "no date" The name has no recognisable date — switch to One date or Sequential for those.

Build

pip install -r requirements.txt pyinstaller && python build.pydist/exifer-<version>-<os>-<arch>.zip|tar.gz. Tag v<APP_VERSION> (from config.py) and CI builds all three OSes, runs the unit tests and a headless run on the frozen Linux binary (date from file name → EXIF + mtime, independently verified with ExifTool), and attaches the archives to the release.

Changes in 2.0.2

  • The Windows taskbar shows the app's own icon. The taskbar button takes its icon from the process's Application User Model ID rather than from the window, and with none of its own the process was grouped under whatever launched it and wore that program's icon. One is now set before any window exists, and it carries no version number so a pinned button survives an upgrade.

Changes in 2.0.1

  • No orphaned helpers: every exiftool / SetFile process runs through utils/childproc.py and is killed when the app quits, stops or dies (Windows Job object, Linux PDEATHSIG).
  • Queue hygiene: adding files or folders never queues the same path twice ("n already in queue" in the status bar); folders and the "file name" sort order use natural ordering (img2 before img10, case-insensitive).
  • ExifTool download is written to a .part file and renamed only when complete.

Changes in 2.0

  • Rewritten (PyQt5 → PySide6) with the standard layout: queue with current / metadata / new date columns, live preview, per-file status, log, Stop.
  • New date sources: from the file's own metadata (repair file dates), from the file name, shift by an offset.
  • EXIF without ExifTool for JPEG / TIFF (piexif, lossless); ExifTool only for other formats, with an in-app download on Windows.
  • Fixed: ExifTool arguments were passed with literal quotes (-AllDates="…") so the values were wrong; Windows creation time was set through a PowerShell string built from the file path (now SetFileTime via ctypes); the queue was cleared after every run; no feedback per file.
  • Standalone releases for Windows, Linux and macOS; CI self-test on the frozen binary; unit tests.
  • Not compatible with 1.x: nothing to migrate — there were no settings.

About

a modern exiftools GUI alternative with a specific usecase

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages