Skip to content

Releases: Ivamic/immich-steward

0.4.0

0.4.0 Pre-release
Pre-release

Choose a tag to compare

@Ivamic Ivamic released this 24 Oct 10:17

A new look: the app is now called Steward for Immich, has a new logo, light and dark themes,
and every screen is redesigned. What the app does and how it works stays the same.

Added

  • Themes: light, dark, or as in the system, switched in the header and remembered in the
    browser. In the dark theme the map is shown dimmed.
  • Keyboard shortcuts window: press ? in the photo card (or the keyboard button).
  • Shift+1…9 in the photo card shows a suggestion on the map without picking it.
  • A legend of the modules on the map, and loading placeholders and empty states in the
    gallery and the suggestions.
  • STEWARD_MAP_STYLE_URL_DARK: an own map style for the dark theme (by default the map is
    dimmed instead).

Changed

  • New name and logo shown in the app and in the README: "Steward for Immich". The
    repository, images, compose project and the STEWARD_* settings keep their names.
  • New design of every screen: the gallery filters are a row of chips (the period and the
    processing errors open a small panel), the photo card has a toolbar with labelled previous /
    next buttons, the save, skip and not applicable buttons with their keys, and the suggestions
    show a confidence meter. The markers of the modules have their own shape and color; the
    similar photos module is now purple (green marks a confirmed location).
  • Fonts (IBM Plex) and icons (Lucide) come with the app; nothing is loaded from other sites
    except the map tiles.
  • After rotating a photo, a block under it saves the rotation in Immich or undoes it; for a
    video it explains that the rotation works in the card only.
  • Camera names no longer repeat the make ("Canon EOS 550D", not "Canon Canon EOS 550D").

Fixed

  • Year labels of the timeline mark where the year begins; when there is no room, the label is
    left out instead of moving to a later month.
  • Month titles in Russian ("Август 2019 г.", not "Август 2019 Г.").

Upgrading

No database changes. Workers of 0.3.x work with this version; there is nothing new for them, so
updating them is optional.

0.3.2

0.3.2 Pre-release
Pre-release

Choose a tag to compare

@Ivamic Ivamic released this 23 Oct 21:59

Smaller improvements: the modules in the photo card can be ordered and hidden, the failures of
every module can be found in the gallery, and the Library page is now two pages, Processing and
Settings.

Added

  • Order of the modules in the photo card, per account: on the new Settings page, drag a
    module by its handle (or use the arrows) and choose which modules the card shows. By default:
    time neighbors, similar photos, GeoCLIP. The suggestions are numbered in this order. A hidden
    module keeps running (pausing is separate); the card leaves it out of the list and the map and
    names it in one short line below the suggestions, where a click shows it in the card until the
    page is reloaded.
  • Next sync: the Processing page shows when the next automatic sync and the next full one
    are due.
  • Processing errors of every module in the gallery filter (it used to list GeoCLIP only):
    choose a module, or any module, then a reason. The reasons are grouped by whose trouble they
    are: the photo and Immich, the worker, the module itself. The failure counts of a module on the
    Processing page name the same group.

Changed

  • The Library page is split in two: Processing (the library and its sync, workers, modules,
    status) and Settings (the modules in the photo card for now). Old links to /library open
    Processing.
  • The gallery filter "Not processed" is now called "Processing errors".

Fixed

  • The thumbnails of the neighbor photos in the suggestions and on the map follow the photo when
    it is rotated or edited in Immich (they could show the old thumbnail for a long time).
  • The pause menu closes on a click outside it and on Esc.
  • A worker started with the address of Immich instead of the app (port 2283 instead of 8780) says
    so in its log, instead of a bare "HTTP 404".

Upgrading

The database gets a new table on start (migration 0019). Workers of 0.3.1 work with this
version; updating them is only needed for the clearer message about a wrong address.

0.3.1

0.3.1 Pre-release
Pre-release

Choose a tag to compare

@Ivamic Ivamic released this 22 Oct 21:22

Improvements from using similar photos on a full library: background runs can be paused, the
Library page shows what each worker is doing, new photos are run first, and the photo card is
quicker to work with.

Added

  • Pause: the background runs of every worker module, or of one, can be paused on the Library
    page, for the whole installation. Runs started from a photo still go, and runs in progress are
    finished. While anything is paused, a thin bar above the gallery and the photo card says so,
    with a button to resume.
  • What a worker is doing: the Library page shows whether each worker is downloading a model
    (only the first time), loading it into memory and for how long, working or waiting for jobs.
    The photo card says when the worker is loading the model of a module, so that a slow first
    photo does not look like nothing works. A worker of this version still works with an older
    app, and an older worker with this one.
  • New photos first: photos that a sync finds new in the library are run before the rest of it,
    whatever the size of the queue (runs started from a photo still go first, and a pause holds
    them too). The photos of the first sync of an account are not "new".
  • Workers that are gone can be removed from the Library page; those not seen for 30 days are
    removed by themselves. A removed worker that connects again shows up again.
  • Pause for a while: besides "until resumed", a module or all of them can be paused for
    30 minutes, 1 hour, 12 hours or a day; the runs then resume by themselves.

Fixed

  • A restarted worker no longer waits up to 3 minutes with "another running worker is called
    …": on a stop it says goodbye at once (before the photo it works on is done, so Docker's 10 s
    are enough), and it keeps its id across restarts (in the models volume for Docker), so even a
    killed worker is let in again at once. The job a killed worker left goes back to the queue
    when it starts again, instead of after its lease (up to 5 minutes).
  • Photos in the trash of Immich are no longer counted in the progress, the failures and the
    search index of the modules.
  • Enter in the photo card saves the location even when a button pressed with the mouse keeps the
    focus (it used to press "Choose" of the suggestion again).

Changed

  • Suggestions are numbered through all the modules (1, 2, 3… in the list and on the map), the
    same as their keyboard keys; each module used to start from 1.
  • The Library page has a block per module: its pause, the workers running it and what they are
    doing, the counts of its runs with a progress bar, its search index and failures. "Pause all"
    is above the modules.
  • The top menu stays in view when scrolling.
  • Each worker is a block on the Library page, with its state shown once; the module blocks say
    which workers run them.
  • The worker no longer logs a deprecation warning of PyTorch about GeoCLIP's own code.
  • Save notices are in the bottom left corner; when saving fast, only the newest one and failures
    are shown, the rest behind "N more notices".
  • The Save / Skip / Not applicable buttons and the picked point stay in view in the photo card;
    only the search and the suggestions below them scroll.

v0.3.0

v0.3.0 Pre-release
Pre-release

Choose a tag to compare

@Ivamic Ivamic released this 22 Oct 04:36

A second module in the worker finds photos of the same place in your own library; photos can be
rotated in the app and the rotation saved to Immich.

Added

  • Similar photos: the worker computes a vector of every photo with
    MegaLoc, a model made for recognizing places, and the
    app suggests where the most similar photos with a location were taken, grouped by place, with
    their thumbnails (green diamonds on the map). It runs automatically: first on the photos with a
    location, which are what it searches among, then on the photos without one. The search runs
    when a photo is opened, so it always includes the locations set since; it only looks in the
    library of the person who looks at the photo. The Library page shows how much of the index is
    built. It also works on a part of the photo. Settings: STEWARD_SIMILAR_MIN_CONFIDENCE,
    STEWARD_SIMILAR_WEAK_BELOW, STEWARD_SIMILAR_CONFIDENT_FROM, and
    STEWARD_SIMILAR_INCLUDE_ESTIMATED (whether locations set in the app count, on by default).
  • Rotate a photo in the card with the buttons under it or the keys [ and ]: the photo, the
    full-size view and the part picker show it rotated, and modules started then get it rotated.
    Save rotation in Immich turns it there too, as an Immich edit (the original file is not
    changed, other edits stay); this needs the asset.edit.get, asset.edit.create and
    asset.edit.delete permissions, which keys created from now on have.
  • When a photo is rotated or edited in Immich, the next sync notices its new previews, and the
    worker modules (GeoCLIP too) look at it again.

Changed

  • The worker runs similar photos and GeoCLIP (STEWARD_WORKER_MODULES, default
    similar,geoclip); both run automatically (STEWARD_AUTO_MODULES, default geoclip,similar).
    The order of STEWARD_WORKER_MODULES is the priority of their background photos: the index
    of similar photos first by default. Photos started from a card still go first.
  • STEWARD_WORKER_ONE_MODEL=true keeps one model in memory at a time, for machines short of
    memory. Otherwise both may be loaded at once, so the memory limit of the worker container is
    now 6 GB instead of 4 GB (STEWARD_WORKER_MEMORY_LIMIT).
  • Each worker module has its own display thresholds; before, GeoCLIP's applied to all.
  • Thumbnail addresses change with the previews, so the browser never shows old ones after a
    photo was rotated or edited.

Fixed

  • Photos edited in Immich (rotated, cropped) are shown and given to the modules as Immich shows
    them. Before, the app got their images from before the edits.

Upgrade notes

  • git pull is needed for the new compose.yaml (new settings, worker modules and memory
    limit). On the first start, the database migrations add the vectors table; on its first use,
    the worker downloads the MegaLoc model (0.9 GB).
  • The first pass of similar photos over the library takes a while: about 0.3 to 0.6 seconds per
    photo on a server CPU (a day or two for 100,000 photos), about 0.1 seconds on an NVIDIA GPU.
    Until the photos with a location are in the index, similar photos has little to suggest.
  • The vectors take about 17 KB per photo in the database (some 2 GB for 130,000 photos).
  • To save rotations in Immich with a key created before this version, add the asset.edit.*
    permissions to it in Immich (Account Settings → API Keys).

Upgrading: git pull, then docker compose --profile worker pull and docker compose --profile worker up -d (without --profile worker if you run no worker). Workers on other computers need 0.3.0 too, to run similar photos: see docs/install.md.

Full changelog: v0.2.5...v0.3.0

v0.2.5

v0.2.5 Pre-release
Pre-release

Choose a tag to compare

@Ivamic Ivamic released this 20 Oct 23:16

Fixed

  • "Recognize a part of the photo" is offered for videos too: the part is cut from the frame of
    the preview, the one GeoCLIP looks at for the whole video. Before, the button was missing.

Upgrading: git pull, then docker compose pull and docker compose up -d (with --profile worker if you run the GeoCLIP worker). Only the core changed; workers can stay on 0.2.3 or 0.2.4.

Full changelog: v0.2.4...v0.2.5

v0.2.4

v0.2.4 Pre-release
Pre-release

Choose a tag to compare

@Ivamic Ivamic released this 20 Oct 22:46

GeoCLIP can look at a part of the photo only; the gallery returns to the photo you came from,
and its timeline is labeled as in Immich.

Added

  • Recognize a part of the photo: next to GeoCLIP's Run again, a window shows the photo in
    full size (zoom with the wheel, move it with the right or middle button or with Space held)
    to draw a frame around the part to look at, e.g. a building behind a crowd. The result is
    shown as its own block, "GeoCLIP — part of the photo", next to the one for the whole photo,
    with dashed markers on the map; hovering it outlines the part on the photo. The key R opens
    the window. Runs on a part do not count in the Library page, the filters or the automatic
    runs. Any worker can do them: the app cuts the part from the full-size photo itself.
  • Time neighbors: "Only this camera" keeps the photos of the photo's own camera only, on the
    next photos as well.

Changed

  • Back from a photo, the gallery opens where that photo is (the last one viewed, after
    stepping through others), like Immich's ?at=; the browser's back button returns there too.
  • The timeline scrubber labels a year at January, as Immich does, instead of at December, and
    shows a dot per month.
  • Keyboard shortcuts work whatever the keyboard layout: on a Cyrillic one, for instance, the
    key of R is R.

Upgrading: git pull, then docker compose pull and docker compose up -d (with --profile worker if you run the GeoCLIP worker). Database migrations run automatically. Workers on other computers can stay on 0.2.3 or be updated later.

Full changelog: v0.2.3...v0.2.4

v0.2.3

v0.2.3 Pre-release
Pre-release

Choose a tag to compare

@Ivamic Ivamic released this 20 Oct 20:46

The reason why GeoCLIP failed on a photo is kept and shown, with a way to find those photos
and run them again; workers on other computers, with Docker or an NVIDIA GPU, are documented.

Added

  • Installation guide: workers on other computers in the home network, with Docker (Linux,
    Windows) or on an NVIDIA GPU (Windows, Linux), how to check, stop and update them
    (docs/install.md).
  • The Library page lists photos a module failed on by reason, with links to show them and to
    run them again.
  • Gallery filter "Not processed": photos whose latest run of GeoCLIP failed, for any or one
    reason; the photo card then steps through them.
  • "Open in Immich" link in the photo card. STEWARD_IMMICH_PUBLIC_URL sets the address used
    in the browser when STEWARD_IMMICH_URL is not reachable from it (e.g. a container name).

Fixed

  • When the app could not get a photo from Immich (a broken file, for instance), its GeoCLIP run
    waited for three time-outs of 5 minutes and failed as "lease_expired", without the reason.
    Now it fails at once with the reason; when Immich does not answer at all, the photo waits in
    the queue without using up its attempts.
  • A worker reports a request the app refused instead of dropping the job silently.
  • Two workers with the same name on different computers shared one entry, and stopping one
    showed the other as gone. Now the second one is refused while the first runs, with a clear
    message in its log.
  • On Windows, a worker stopped with Ctrl+C now writes "stopped" to its log, as on Linux.

Upgrading: git pull, then docker compose pull and docker compose up -d (with --profile worker if you run the GeoCLIP worker). Database migrations run automatically.

Full changelog: v0.2.2...v0.2.3

v0.2.2

v0.2.2 Pre-release
Pre-release

Choose a tag to compare

@Ivamic Ivamic released this 18 Oct 21:44

Ready-made Docker images: docker compose up -d now downloads them instead of building on the server.

Added

  • Ready-made Docker images on GitHub Container Registry, published for every release:
    ghcr.io/ivamic/immich-steward-core (amd64, arm64) and
    ghcr.io/ivamic/immich-steward-worker (amd64). docker compose up -d downloads them, so
    the images no longer have to be built on the server; --build still builds them from source.
  • STEWARD_VERSION in .env to stay on a particular release.
  • THIRD_PARTY_NOTICES.md: licenses of the software inside the images (also in /app of the
    images).

Changed

  • Updating is now git pull, docker compose pull and docker compose up -d
    (docs/install.md).

Full changelog: v0.2.1...v0.2.2

v0.2.1

v0.2.1 Pre-release
Pre-release

Choose a tag to compare

@Ivamic Ivamic released this 18 Oct 10:41

The app has its own icon, and the README got screenshots and a guide on how to give feedback.

Changed

  • The app has its own icon (a map pin with a picture) instead of the default Svelte logo.
  • README: screenshots, how to give feedback and contribute, how to support the project.

Added

  • Security policy (SECURITY.md) with private vulnerability reporting.

Full changelog: v0.2.0...v0.2.1

immich-steward 0.2.0

immich-steward 0.2.0 Pre-release
Pre-release

Choose a tag to compare

@Ivamic Ivamic released this 17 Oct 23:31

GeoCLIP suggests locations by the look of a photo, in a worker on the server or on another
computer; a photo card where the map always stays in view.

Added

  • Workers: separate processes that run heavy location modules for the core, on the same server
    or on another computer (they only connect to the core, which gives them the photos). Shared
    token STEWARD_WORKER_TOKEN, job queue with priorities, retries and leases.
  • GeoCLIP location module: suggests up to five areas by the look of a photo. Runs
    automatically on photos without a location while a worker is connected
    (STEWARD_AUTO_MODULES; accounts take turns, newest photos first), or on request with Run
    in the photo card.
  • Optional worker service in Docker Compose (CPU), with a model cache, a memory limit and an
    option to wait while the machine is busy (STEWARD_WORKER_MAX_LOAD).
  • GeoCLIP suggestions are shown by confidence: below 25 % they are hidden as noise, 25–50 % are
    folded as weak ("probably only the region is right"), from 75 % they are marked as confident
    (STEWARD_GEOCLIP_*). The thresholds come from a check on photos with known locations.
  • Confidence of every suggestion as a percentage next to its bar.
  • Gallery filter "Confident GeoCLIP guess": photos without a location that GeoCLIP places
    confidently, ready to be checked and saved one after another.
  • Gallery markers: a pin on a white disc for photos with a location (instead of a hard to see
    green dot), an orange crosshair for confident GeoCLIP guesses.
  • Workers and the progress of module runs on the Library page.

Changed

  • Photo card in three columns that fill the window: the map always stays in view, the panel to
    pick the location and the suggestions scroll on their own, the photo and its details are on
    the right. On medium screens the two side columns become tabs; on small screens everything is
    stacked. Compact suggestion rows; hovering a row highlights its marker and the other way round.
    A click on a suggestion row shows it on the map without picking it; hovering a neighbor's
    thumbnail shows it enlarged.
  • The main actions (Save, Skip, Not applicable) are at the top of the panel and bigger; Save turns
    green as soon as a point is picked, so that it is not forgotten.

Upgrading from 0.1.0: git pull and docker compose up -d --build. To use GeoCLIP, set STEWARD_WORKER_TOKEN in .env and start with docker compose --profile worker up -d --build — see docs/install.md. The project is under active development.