Skip to main content

Rename photos using local Ollama vision models with SQLite audit and undo.

Project description

renaim

Rename photos with a local Ollama vision model, while keeping a SQLite audit trail that can undo rename batches later.

The default filename format keeps the camera filename:

family-at-table_P1120366.RW2

The tool never rewrites image contents. RAW files and large images are converted to small temporary JPEG previews for the model, then the original file is renamed. Filesystem access and modification times are restored after each rename. EXIF data inside the original file is not changed.

Requirements

  • macOS sips for RAW/HEIC/large image preview conversion, or ImageMagick magick as a fallback.
  • Ollama running locally.
  • A multimodal Ollama model, for example:
ollama pull gemma4:e4b

If you prefer another model, pass --model.

Typical workflow

Index files without touching the model:

uvx renaim scan ~/Pictures/Photos

scan streams progress while walking directories, which is useful on NAS folders where the first traversal can take a while.

Files whose names already look descriptive, such as paddling-pool-1.jpg, are skipped by default. Pass --include-descriptive if you want to index them too.

Generate suggestions:

uvx renaim suggest ~/Pictures/Photos --model gemma4:e4b

Add extra guidance for the captioning model when needed:

uvx renaim suggest ~/Pictures/Photos --prompt-guidance "use UK English"

If the audit DB already exists, suggest reuses the existing index. Pass --rescan to walk the folder again before suggesting:

uvx renaim suggest ~/Pictures/Photos --rescan

Review and optionally edit suggestions:

uvx renaim review ~/Pictures/Photos

Harmonize near-duplicate labels across the folder:

uvx renaim harmonize ~/Pictures/Photos

Apply approved or pending suggestions:

uvx renaim apply ~/Pictures/Photos

Undo the latest apply batch:

uvx renaim undo ~/Pictures/Photos

Show previous batches:

uvx renaim batches ~/Pictures/Photos

All-night NAS run

For unattended operation, keep the audit DB somewhere local and explicitly opt in to harmonizing and renaming:

uvx renaim run /Volumes/photos/archive \
  --db ~/.local/state/renaim/archive.sqlite3 \
  --model gemma4:e4b \
  --harmonize \
  --apply \
  --yes

Without --apply, run only scans and stores suggestions.

The shortcut form is:

uvx renaim run /Volumes/photos/archive \
  --db ~/.local/state/renaim/archive.sqlite3 \
  --model gemma4:e4b \
  --yolo

--yolo means --harmonize --apply --yes.

Because run is the default command, this is equivalent:

uvx renaim /Volumes/photos/archive --yolo

Audit database

By default the database is created as .renaim.sqlite3 inside the target directory. Existing .photo-renamer.sqlite3 databases are still used when found. Use --db PATH to put it elsewhere.

The database records:

  • original and current paths
  • file size and filesystem mtime
  • model name, prompt version, raw model response, slug, and proposed path
  • apply batches and each old path/new path pair
  • undo batches

Undo only reverses rename batches made by this tool. It does not try to infer or repair manual moves made afterward.

Weaknesses and limits

This is still a pragmatic local tool, not a full DAM/photo-library system.

  • Ollama-only backend. Model calls currently go through Ollama's /api/generate API. Other local runtimes or hosted APIs would need a backend abstraction.
  • Preview conversion depends on local tools. On macOS it uses sips; if available, ImageMagick magick is used as a fallback. RAW support on Linux or NAS hosts will depend on installing a converter that can read your camera files.
  • Model output is approximate. Vision models can be vague, wrong, or inconsistent across similar images. renaim harmonize helps normalize labels within a folder, but it does not understand your whole photo library.
  • No embedded metadata writes. The tool does not write the original filename into EXIF/XMP metadata. The SQLite audit DB is the source of truth for undo and history.
  • No full-file hashing by default. To keep NAS scans fast, file identity is tracked mainly by path, size, and mtime. This is weaker than content hashes if files are moved or modified outside the tool.
  • Undo is scoped to tool-managed renames. If files are manually moved, deleted, or renamed after an apply batch, undo may skip them or warn rather than reconstructing intent.
  • Sidecars are not renamed yet. RAW sidecar formats such as .xmp, .dop, .pp3, or catalog files are not currently moved with the image.
  • No concurrent-run locking yet. Running multiple renaim processes against the same directory/database is not supported.
  • The audit DB is local state. If the DB is deleted, rename history and undo information are lost. For NAS use, keep the DB somewhere backed up.

Config

Runtime settings use this precedence:

CLI flags > environment variables > ~/.config/renaim/config.toml > defaults

Show the effective config:

uvx renaim config show

Set your usual model:

uvx renaim config set model gemma4:e4b
uvx renaim config set ollama_url http://localhost:11434
uvx renaim config set prompt_guidance "use UK English"
uvx renaim config set timeout 180
uvx renaim config set preview_size 1024

Unset a value:

uvx renaim config unset model

Supported environment variables:

RENAIM_MODEL=gemma4:e4b
RENAIM_OLLAMA_URL=http://localhost:11434
RENAIM_PROMPT_GUIDANCE="use UK English"
RENAIM_TIMEOUT=180
RENAIM_PREVIEW_SIZE=1024

Useful commands

Limit a trial run:

uvx renaim suggest ~/Pictures/Photos --limit 20

Use another Ollama server or model:

uvx renaim suggest ~/Pictures/Photos \
  --ollama-url http://nas.local:11434 \
  --model llava:13b

Apply only suggestions explicitly approved in review:

uvx renaim apply ~/Pictures/Photos --approved-only

Preview label harmonization without changing suggestions:

uvx renaim harmonize ~/Pictures/Photos --dry-run

For unattended runs, accept the default canonical label for each near-duplicate group:

uvx renaim harmonize ~/Pictures/Photos --yes

Development

For local development:

uv sync --extra dev
uv run renaim --help
uv run pytest

Project details


Download files

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

Source Distribution

renaim-0.1.3.tar.gz (34.0 kB view details)

Uploaded Source

Built Distribution

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

renaim-0.1.3-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

File details

Details for the file renaim-0.1.3.tar.gz.

File metadata

  • Download URL: renaim-0.1.3.tar.gz
  • Upload date:
  • Size: 34.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for renaim-0.1.3.tar.gz
Algorithm Hash digest
SHA256 ade1a941a280c41554982c9229b6b90637d8e71114f588b9edc195bb050f249d
MD5 1ce279209bc4ef3c19f5424df7a6228a
BLAKE2b-256 9ab09e5b4527d14dda3c58bfaf35822f9095526586bf3c853e951c48c7ab0dcc

See more details on using hashes here.

File details

Details for the file renaim-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: renaim-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 21.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for renaim-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 59891c695af16d9edffbd77d30ef61c38eedd0a6778b943366ef2d02726299b7
MD5 4abe4a7e8d0690e7fcf80b94968333d0
BLAKE2b-256 78db31fea4f442fd15a6b44bc5ddb8be2305402b0972d0afb2e786350b67b451

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page