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.1.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.1-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: lupaxa_photo_renamer-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 5e10fc6bf56301f27367ea280d4fbd8f83d962c3886cc0991dd04e86535daf3c
MD5 ae7f50a906b7c34bb09ee8b7fb4884b8
BLAKE2b-256 de193d7ec7643bebae561fc47b05ba47c40efb66cc55cb7aecdf56c08b056a3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for lupaxa_photo_renamer-0.1.1.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.1-py3-none-any.whl.

File metadata

File hashes

Hashes for lupaxa_photo_renamer-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1a7df6c098403f2048d07772f0051be15cd0a576bd4a7205bf39029fb61bafb6
MD5 a28624c75c0b22395215f48afd2d9cf9
BLAKE2b-256 14c622a98ecc3ae2fa1f7a858c08aa245a4f620781967b6977c882c6345d7f6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for lupaxa_photo_renamer-0.1.1-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

This release

0.1.1 This release

2 files

0.1.0

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