Skip to content

Releases: haavardnk/immich-edit

v0.7.2

Choose a tag to compare

@haavardnk haavardnk released this 02 Nov 14:47

Adds light, dark and system modes with a choice of theme and accent for each user.

Fixes

  • The app stays dark when the operating system switches to a light colour scheme.
  • The Keyboard shortcuts dialog scrolls in one region instead of two.

Improvements

  • Settings > Appearance has Mode (Dark, the default, Light or System), Light theme and Dark theme.
  • 12 built-in theme families: immich-edit, Immich, Catppuccin, Rosé Pine, Tokyo Night, Gruvbox, Solarized, Nord, Dracula, One, GitHub and Everforest.
  • Light accent and Dark accent pick each mode's highlight colour from the theme. The logo and browser tab icon follow it.
  • Appearance is stored per user on the server and follows the account to every device.
  • A sun and moon button in the top bar switches between light and dark on wider screens.
  • Photos, the editor canvas, scopes, curves and on-photo guides stay neutral in every theme.
  • Some palette colours are adjusted to keep text at WCAG AA contrast.
  • Adds a database migration for appearance settings, so v0.7.1 does not start on an upgraded database. Back up DATA_DIR first; see Upgrade to v0.7.2.

What's Changed

Full Changelog: v0.7.1...v0.7.2

v0.7.1

Choose a tag to compare

@haavardnk haavardnk released this 01 Nov 11:11

Renders photos and exports past the GPU's memory or texture limits in tiles that match a single-pass render.

Fixes

  • A GPU render that panics, such as on a photo past the texture limit, falls back to the CPU for that render only.

Improvements

  • Photos and exports up to 65535 px on the long edge, rendered on the GPU in tiles past its texture limit or memory budget, healing and clone strokes included, with identical output, histogram and scopes.
  • More photos render in one pass: the GPU renderer uses the device's full texture and buffer limits.
  • Server renders share a GPU memory budget measured from the device. GPU_MEMORY_BUDGET_MB overrides it, and GPU_TEXTURE_CACHE_MB defaults to an eighth of it (256 to 4096 MB).
  • CPU renders wait for room in a host memory budget: RAM or container limit minus RAW_FRAME_CACHE_MB and QUALITY_FRAME_CACHE_MB. Renders past it fail with This photo is too large for the server's memory.
  • Zoomed browser previews match the server's Dehaze, Texture, Clarity and Shadows, also for photos too large for the GPU.
  • Lower GPU memory use for edits without masks.
  • Settings > Diagnostics shows Render plans and the GPU memory budget.

What's Changed

Full Changelog: v0.7.0...v0.7.1

v0.7.0

Choose a tag to compare

@haavardnk haavardnk released this 28 Oct 10:49

Adds AI Denoise, Lens Blur, guided upright, Kelvin white balance, the Immich trash and Replace original, and applies the corrections stored in phone and drone DNGs.

Breaking changes

  • Migrations 0024 to 0027 rewrite white balance in edits and edits_history, add luts.shaper_size, remove mask layer color from edits, history and presets, and add export_jobs.original_trashed. v0.6.x will not start on the migrated database, so back up the data directory before upgrading. See Upgrade to v0.7.0.
  • Edits store basic.white_balance as {mode: relative, temp, tint} or {mode: absolute, kelvin, tint} instead of basic.wb_temp and basic.wb_tint. Positive tint is magenta, so stored tint values, mask tint included, are negated. Edit manifests below schema version 5, including v0.6.x preset files, are converted on read.
  • Saved edits render with the new noise reduction, hot pixel repair and DNG corrections. A LUT grades in sRGB for every output space, which can shift Display P3 renders.
  • The render revision includes the release version, so previews, source tiles, preset thumbnails and edited thumbnails re-render once after this and every later upgrade.
  • Shortcuts remapped: Develop, Geometry, Retouch and Masks are Shift+D, Shift+R, Shift+Q and Shift+M; radial and linear masks are R and L; fullscreen is F, so favorite is P only; the filmstrip is Shift+S and the tags panel Shift+T; thumbnail info is I; copy and paste edits are Ctrl+C and Ctrl+V; Export is Shift+E; the horizon line is A. Shift+P shows the presets strip instead of the corner handles. Geometry's Enter and Shift+X are gone.

Fixes

  • Export jobs finish in the UI when the live event stream drops.
  • A tooltip stays shut while its control's popover is open.
  • Pressing → several times at the end of the loaded photos in the loupe moves the full count once the next page loads.
  • Notices and warnings in Export, Retouch and the model settings use higher-contrast text.
  • ONNX Runtime logs only warnings and errors, under the onnxruntime log target.
  • Dependency update for the ctutils security advisory (RUSTSEC-2026-0385).

Improvements

  • Temperature in Kelvin and Tint for RAW files, starting at the camera's as-shot white. Other images keep relative sliders.
  • Pick white balance (W) samples a point or a dragged area and shows the resulting Temperature and Tint next to the pointer.
  • Auto white balance looks for neutral surfaces and stays near the camera's white when a scene has none.
  • Auto (Ctrl+U) meters the photo as rendered with profile, crop and lens corrections, weights detected faces, and sets white balance, tone, Clarity, Dehaze, Vibrance and Saturation.
  • Noise reduction measures each photo's noise, so the same settings suit ISO 100 and ISO 12800.
  • AI Denoise for RAW files, with Strength and Detail. It runs once per photo on the server, keeps the result for later edits and exports, and needs its model from App settings > Models. DENOISE_CACHE_MB caps its disk use (4096 MB by default).
  • Lens Blur from a generated depth map, with Focal Range, Amount, circle, hexagon or octagon Bokeh, and Boost. Uses the depth model.
  • Guided upright sets Angle, Vertical and Horizontal from two to four drawn lines.
  • Phone and drone DNGs apply their stored lens shading, vignette, distortion and bad-pixel corrections. Hot and dead pixels are repaired on every Bayer and X-Trans RAW.
  • More .cube LUTs import, including ones with a 1D curve before the 3D table and ones that declare their own input range.
  • Move to Immich trash from the selection bar, the loupe and editor menus, or Del / Backspace, plus Move rejected to trash, with Undo. API keys need asset.delete.
  • Replace original on upload to Immich moves albums, shared links, favorite and stack to the upload, then trashes the original. API keys need asset.copy and asset.delete.
  • Geometry edits apply live.
  • Presets in a grouped strip under the photo with live thumbnails (Shift+P).
  • Versions and view toggles in the editor toolbar.
  • Copy, paste and reset confirm with a message.
  • Every mask overlay shows in red.
  • Support bundles list each GPU texture pool and AI Denoise disk use.

What's Changed

Full Changelog: v0.6.8...v0.7.0

v0.6.8

Choose a tag to compare

@haavardnk haavardnk released this 20 Oct 21:16
f1fb85c

Picks the faster renderer for editor previews, reaches Immich behind Cloudflare Access and makes depth masks easier to aim.

Improvements

  • Settings > Preview rendering has a new default, Fastest. The editor times the browser and the server and draws previews with whichever is clearly quicker. Browser and Server force one side. Browsers set to Browser when available move to Fastest. Settings > Diagnostics shows both measured speeds and the browser's GPU limits.
  • Immich behind Cloudflare Access works without a private network: set CF_ACCESS_CLIENT_ID and CF_ACCESS_CLIENT_SECRET to a service token. See Cloudflare Access.
  • A depth mask has one Near → Far slider with two handles in place of separate Near and Far sliders. Positions are shares of the photo, so 40 on the right handle keeps the nearest 40%. The selection shows in the layer color while you drag.

Fixes

  • A GPU render that crashes no longer leaves the server stuck; that render and later ones fall back to the CPU.
  • The GPU renders photos wider or taller than 8192 pixels, such as from 100 MP sensors.
  • When Immich answers with a redirect, such as from an access proxy, the error says so instead of upstream status 302.
  • Sign-in and setup show the error Immich gave instead of "The immich-edit server is not responding".
  • Dependency updates for published security advisories in rustls, rustls-webpki, webpki-root-certs, ruzstd and zip.

What's Changed

Full Changelog: v0.6.7...v0.6.8

v0.6.7

Choose a tag to compare

@haavardnk haavardnk released this 13 Oct 19:37

Rebuilds clipped RAW highlights, fixes the edit history list and shows capture times as Immich does.

Fixes

  • Capture date and time in the info panel, loupe and grid match Immich; photos without an EXIF time zone no longer shift by the browser's offset.
  • Every History entry expands to show its changes and restores; some stayed on "Loading…".
  • Repeating an edit that changes nothing, such as pressing an auto button again, no longer adds a History entry.

Improvements

  • Clipped RAW highlights rebuild from the colors still recorded, keep the color of nearby surfaces and blend to white where every color clips. Existing edits of such photos render differently.
  • Highlights below 0 darkens bright areas without flattening them or shifting their color.

What's Changed

Full Changelog: v0.6.6...v0.6.7

v0.6.6

Choose a tag to compare

@haavardnk haavardnk released this 12 Oct 21:28

Adds a filter panel with camera, lens, place, album, people, tag, date-added and file size filters, and Immich's five search types.

Fixes

  • Editing the search query keeps the chosen search type and filters.
  • The Search header and Search by buttons stay put while results reload.
  • The search box clears when leaving search, including with the browser's Back.
  • Context search offers only exact star ratings instead of applying at-least or at-most ratings to the loaded photos.

Improvements

  • Filters, or Shift+F, opens a docked filter panel beside the grid, grouped into sections that each reset on their own; active filters show as removable chips.
  • Filters live in the page address, so reloads, Back and Forward, bookmarks and shared links keep them.
  • Make, Model, Lens, Country, State and City pickers narrow each other and offer Unknown; on Immich 3.2 each takes several values.
  • Albums, People and Tags match all, any or none of the picked values on Immich 3.2, all of them before that.
  • Not in any album, Untagged and, on Immich 3.2, No people sit beside their pickers.
  • Added after and Added before filter by upload date.
  • Min size (MB) and Max size (MB) filter by original file size; Immich 3.2 adds a file size sort, unsized photos last.
  • Search by picks Context, File name, Description, Full path or folder or OCR, as in Immich; Context and OCR show only when Immich has smart search and OCR turned on. Old mode=description links run a description search.

What's Changed

Full Changelog: v0.6.5...v0.6.6

v0.6.5

Choose a tag to compare

@haavardnk haavardnk released this 11 Oct 10:13

Adds rating sort and at-least, at-most or exact star filters on Immich 3.2, a date-added sort, and server-side reject and label filters, and logs every failed request.

Fixes

  • 100MP+ RAWs such as Fujifilm GFX100S II RAFs render on the GPU instead of failing.
  • Taken after and Taken before use Immich's date picker instead of the browser's date field.
  • Buttons that open popovers and panels show styled tooltips.
  • Failed background jobs, cleanups and model downloads reach the server log with their cause.

Improvements

  • Rating picks Any, Unrated or a star count; on Immich 3.2 and later, ≥, ≤ or = matches at least, at most or exactly, and ≤ keeps unrated photos.
  • Rejected replaces Exclude rejected and shows, hides or shows only rejects; Only lists everything to delete in Immich.
  • Immich applies Label and Rejected filters, so counts and every page match; Hide and No label need Immich 3.2.
  • The sort menu picks Date taken or Date added; Immich 3.2 adds Rating, highest or lowest first across the whole result, unrated last.
  • Every API response logs one line on the http target with request ID, path, user, status and latency; errors add the code and message. tower_http no longer carries request logs.
  • LOG_FORMAT=json writes one JSON object per line.
  • Browser errors from signed-in sessions reach the server log on the client target.
  • Diagnostics shows the Immich version, and Copy support bundle adds Immich and browser details as one block for issue reports.

What's Changed

New Contributors

Full Changelog: v0.6.4...v0.6.5

v0.6.4

Choose a tag to compare

@haavardnk haavardnk released this 07 Oct 22:10

Keeps EXIF in every export, copies Immich's date, location, description and rating to uploaded edits, and makes other users' photos read-only.

Fixes

  • Exports from RAF and every other source format keep their EXIF; uploads to Immich land at the original's capture time.
  • Lossy WebP keeps metadata; Lossless is no longer forced on.
  • Exports drop maker notes and the original's unique image ID, so Immich never mistakes the edit for the original.
  • PNGs of every color type open, including palette, low bit depth and grayscale with alpha.
  • Rating, favorite, reject, label and tag controls are disabled on photos another Immich user owns, as in Immich; hovering says why.
  • Stack with original is disabled for another user's photo; a mixed batch reports Stacking skipped for those.
  • Changes Immich refuses show Immich's reason instead of an Immich unreachable error.
  • The mask overlay button hides the overlay fully, and the overlay shows the selected mask in its layer color.

Improvements

  • Uploaded edits get the date, time zone, map location, description and star rating Immich shows for the original; All but location leaves out the map location.
  • Metadata not copied and Metadata copy failed list under the export result and per photo in Jobs.
  • The mask overlay steps aside while dragging an adjustment, and a brush stroke shows its paint while drawing.

Full Changelog: v0.6.3...v0.6.4

v0.6.3

Choose a tag to compare

@haavardnk haavardnk released this 02 Oct 18:01

v0.6.3

Fixes 16-bit GPU renders with masks and smooths range masks; Clarity and range masks may render differently.

Fixes

  • Photos with masks render again to 16-bit output on the GPU.
  • High Clarity no longer leaves bright or dark halos along strong edges.
  • Luminance range and Color range masks follow areas and edges instead of speckling on noise and grain.
  • A new range mask opens with the mask preview on, and a color range shows it again after sampling.

Improvements

  • Corner Boost under Capture Sharpening sharpens harder towards the corners for lenses that are softer there.

Full Changelog: v0.6.2...v0.6.3

v0.6.2

Choose a tag to compare

@haavardnk haavardnk released this 02 Oct 12:07

Reworks color and tone tools to keep hue and match between editor and export; existing edits may render differently.

Fixes

  • Editor preview no longer shows the previous photo after switching between same-sized RAWs.
  • Heal no longer brings the blemish back on large brushes.
  • Lensfun corrections fit the image corners on every sensor shape.
  • Linear gradient masks stay perpendicular on non-square photos; polygon feather is even on both axes.
  • Mask overlay shows the same falloff as the render.
  • Shadows in mask layers works on GPU renders.
  • Curves no longer clip highlights; curve points line up with the histogram.
  • Saturated blues no longer turn purple when mapped into sRGB or Display P3.
  • Display P3 output with a DCP profile no longer gets sRGB colors on GPU renders.
  • GPU lens correction is as sharp as CPU renders.
  • Sharpening, grain, Texture and Clarity look the same at every preview size and in export.

Improvements

  • HSL, Vibrance, saturation and color grading work in Oklab: hue holds and dark colors no longer crush.
  • Vibrance protects dark and light skin alike, independent of exposure.
  • HSL bands select bright highlights by their real hue.
  • Contrast, Highlights and Blacks keep hue; contrast -100 no longer blows up near black.
  • Whites targets highlights instead of acting as a second exposure slider.
  • Clarity targets displayed midtones; Clarity and Shadows strength no longer follow exposure.
  • Temperature and Tint re-derive the camera color at the new white, and the DCP profile follows the edit.
  • DCP profile color applies before user color edits, as in DNG.
  • Vignette darkens in stops with highlight priority; -100 no longer turns corners black.
  • Grain sits in the midtones and no longer lifts blacks.
  • Negative Dehaze adds haze by scene depth.
  • Originals over 8 MiB download from Immich in parallel byte ranges.

Full Changelog: v0.6.1...v0.6.2