Skip to main content

Project Logo

The Lupaxa Miscellaneous Toolbox
Part of The Lupaxa Project


lupaxa-photo-renamer

Safely copy or move photographs and videos into consistent date-based filenames. Reads image EXIF or video metadata when available, falls back to filesystem modification time, detects common source apps, and reports progress with Rich.

Built for media libraries used by The Lupaxa Project.

Features

  • Date-based filenames from EXIF, video metadata, or filesystem mtime
  • Copy by default; --move only when you intend to remove sources
  • --dry-run plans and reports without writing files or logs
  • Never overwrites: collisions get _001, _002, and so on
  • Optional source labels in names (datetime, source, source-first)
  • Optional organise / flatten layout for detected sources
  • Concurrent copy/move workers and a tab-separated audit log
  • Fully typed, linted, formatted, and tested
  • MkDocs documentation included

Installation

From PyPI

pip install lupaxa-photo-renamer

From source (development mode)

pip install -e ".[dev]"

The console command is photo-renamer.

Video timestamp extraction uses MediaInfo. If it is unavailable on your system, install the MediaInfo package with your operating system's package manager (brew install mediainfo on macOS or apt install mediainfo on Debian/Ubuntu). auto still falls back to filesystem mtime.

CLI quick start

photo-renamer --help
photo-renamer --dry-run --recursive ~/Pictures
photo-renamer --recursive ~/Pictures
photo-renamer --recursive --format source ~/Pictures
photo-renamer --recursive --organise ~/Pictures
photo-renamer --recursive --output /Volumes/Archive --move ~/Pictures

By default, files are copied and results are written below PATH/renamed/. Existing relative directories are preserved:

Pictures/holiday/day-1/IMG-20260801-WA0001.JPG
→ Pictures/renamed/holiday/day-1/2026-08-01_14-55-22.jpg

Requirements

  • Python 3.13+
  • Runtime dependencies: rich, Pillow, pillow-heif, platformdirs, pymediainfo
  • System MediaInfo for video timestamps (optional; mtime fallback remains)

Documentation

Online documentation:

Documentation

Source repository:

GitHub

Serve docs locally

From a clone of the repository:

make mkdocs-serve

Then open the local URL printed by MkDocs in your browser.

Development

Clone the repository and install with Make:

make init                # first-time makefile-skills checkout
make python-install-dev  # editable install with [dev]
make python-check        # lint, type-check, and test
The Lupaxa Project Footer

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lupaxa_photo_renamer-0.1.0.tar.gz (18.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lupaxa_photo_renamer-0.1.0-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

Details for the file lupaxa_photo_renamer-0.1.0.tar.gz.

File metadata

  • Download URL: lupaxa_photo_renamer-0.1.0.tar.gz
  • Upload date:
  • Size: 18.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for lupaxa_photo_renamer-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0530d7a35e401facd7210adfc629e8176e9613e5894dff603a7b87e6f8031aba
MD5 1cb907edfaae42cdc2510f882a44e155
BLAKE2b-256 86168b2129babcac55060780551a080eb0a63cc5fef1c309547cc6957e751682

See more details on using hashes here.

Provenance

The following attestation bundles were made for lupaxa_photo_renamer-0.1.0.tar.gz:

Publisher: generate-release.yml on lupaxa-miscellaneous-toolbox/photo-renamer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lupaxa_photo_renamer-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for lupaxa_photo_renamer-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4436c8f90fd18ae3055bed4e133510e0058a3e9874ed246d7b83b5a9a2923515
MD5 01fe45442899a50c9831b8de932c7492
BLAKE2b-256 6b3eafe5c1a6d538e2bc1d73b7068ac29f37abd5320472072f07556ac532542f

See more details on using hashes here.

Provenance

The following attestation bundles were made for lupaxa_photo_renamer-0.1.0-py3-none-any.whl:

Publisher: generate-release.yml on lupaxa-miscellaneous-toolbox/photo-renamer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.1.2

2 files

0.1.1

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page