Skip to main content

Sync Lightroom Classic catalogs to Immich

Project description

lrimmich

PyPI

Syncs your Lightroom Classic catalog to Immich. Collections become albums, picks become favorites, ratings carry over, and color labels and keywords are written as tags.

The same photo files Lightroom reads must be mounted into Immich as an external library. lrimmich doesn't upload anything. It matches files that are already on both sides and writes metadata through the Immich API.

Install

uv tool install lrimmich

or pipx install lrimmich.

Getting started

lrimmich config init

This writes a starter config to your platform's user config directory:

  • Linux: ~/.config/lrimmich/config.toml (XDG)
  • macOS: ~/Library/Application Support/lrimmich/config.toml
  • Windows: %APPDATA%\lrimmich\config.toml

Edit it with your catalog path, Immich URL, API key, and library path (the folder Immich mounts your photos from). See sample_config.toml for all options.

lrimmich doctor

Checks that the catalog opens, the Immich API responds, and at least some files resolve. If it passes, run a dry-run first:

lrimmich sync --dry-run

Commands

lrimmich sync              # sync everything
lrimmich sync --dry-run    # see what would happen
lrimmich status            # exit 1 if there's drift
lrimmich watch             # poll for catalog changes, sync when detected
lrimmich adopt             # claim existing Immich albums by name match
lrimmich log               # show recent sync activity
lrimmich collections       # list catalog collections with IDs
lrimmich reset             # delete state DB, next sync rebuilds from scratch
lrimmich install-service   # generate launchd/systemd unit for periodic sync
lrimmich uninstall-service # remove service files
lrimmich config show       # print resolved config (secrets redacted)
lrimmich config edit       # open config in your default editor
lrimmich --version         # print version

Watch

Watches the catalog file (including WAL) for filesystem events and syncs after a debounce window:

lrimmich watch --debounce 5000

To run it as a background service:

lrimmich install-service --interval 300

How it works

Reads the .lrcat SQLite database, maps LR file paths to Immich asset IDs by scanning the external library folder tree, then diffs against what was synced last time (stored alongside the config in your platform's user state directory). Repeat runs only touch what changed.

Alternatives

How it works Uploads photos?
lrimmich CLI tool. Reads the .lrcat database directly, matches files already mounted in Immich, writes metadata only. No
immich-go CLI tool. Bulk uploads from local folders, Google Photos takeouts, iCloud exports. Handles duplicates and stacking. Yes
lrc-immich-plugin LR Classic plugin. Export and publish service that uploads rendered photos via the Immich API. Can also import from Immich. Yes
mi.Immich.Publisher LR Classic plugin. Publishes collections as albums, deduplicates across collections. Beta, not actively maintained. Yes

Contributing

Bug reports and PRs welcome. For bugs, include the output of lrimmich doctor and the command you ran. Open an issue at github.com/haavardnk/lrimmich/issues.

License

MIT

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

lrimmich-0.1.1.tar.gz (65.3 kB view details)

Uploaded Source

Built Distribution

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

lrimmich-0.1.1-py3-none-any.whl (32.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: lrimmich-0.1.1.tar.gz
  • Upload date:
  • Size: 65.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for lrimmich-0.1.1.tar.gz
Algorithm Hash digest
SHA256 fea8c1b9e6e86bb6e915eed380374d40e357bceddd52f754c4ee2b4157bd8d0e
MD5 48814c886a3ef7e5b370ed32b7079fd3
BLAKE2b-256 45d8c9049e6857cda2197ea4407f8a2a917fa56afbc17fc4802e87b539a2994e

See more details on using hashes here.

Provenance

The following attestation bundles were made for lrimmich-0.1.1.tar.gz:

Publisher: ci.yml on haavardnk/lrimmich

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

File details

Details for the file lrimmich-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: lrimmich-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 32.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for lrimmich-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 61b45d0b7be083bcafda3e888b628e49d14b6ef0ce4c49a2720eb2ae548df725
MD5 527aaf21d5da0ad3516eb2e9e22c0903
BLAKE2b-256 7aabca76950d20ccf2da28070e2521fba84a9f5db7e3479b7c19e0930c3dcbd2

See more details on using hashes here.

Provenance

The following attestation bundles were made for lrimmich-0.1.1-py3-none-any.whl:

Publisher: ci.yml on haavardnk/lrimmich

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

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