What's new¶
What changed in iopix, one entry per day, newest first; each entry carries the day's last version. Update from Maintenance › iopix › Update now, or see Updating.
1.88.0 · October 27, 2026¶
- The MCP server can be switched off, and is off by default. Settings › MCP server turns the endpoint at /mcp on or off (MCP=1 in the environment forces it on); while off, /mcp answers 404 and the MCP update token dialog says so.
- Damaged files. Maintenance › Library › Damaged files checks every photo's file on request (later runs only new and changed files).
- Damaged photos can be cropped to their intact part. Damaged files offers Keep the intact part for a JPEG whose bottom is missing (shown grey): it is cropped to the part above the damage, without re-encoding, after a copy of the file is kept, and the crop can be undone from the edit log.
- Clear digiKam's pick labels from the whole library. Maintenance › Library › Pick labels shows how many photos carry Rejected, Pending and Accepted (iopix never sets them) and Clear… takes the chosen ones off every photo: digiKam's database is backed up first, sidecars that carry the label are cleaned too, and every photo's change is in the edit log with undo.
Fixes and improvements
- The MCP switch is off only on a fresh install.
- JPEGs that end early get real thumbnails.
- Damaged files tells damaged picture data from a file cut off.
- Nothing in iopix sets the Rejected label any more.
1.84.2 · October 26, 2026¶
- iopix without digiKam. DIGIKAM_DB_TYPE=none (or Settings › digiKam database › None) starts a fresh library on the photo folder, laid out as digiKam lays out a new database (album root, People with its Unknown/Unconfirmed/Ignored face tags, the internal label tags), with the file scanner on by default and run right after each start.
- Approximate dates. The date editor asks how much of the date is known: exact, month and year, year only, or unknown.
- Photo quality.
- Date suggestions. For photos marked Date unknown, Explore › Date suggestions (editors) proposes a year from how old the named people in them look.
- Florence-2 descriptions. A third model for Photo descriptions (Maintenance › AI analysis and models): Microsoft's Florence-2 base, run with onnxruntime on the CPU from onnx-community's ONNX export, so it needs no PyTorch.
- A better closed-eyes check. The eye model is now a ViT-base eye-state classifier (dima806/closed_eyes_image_detection, Apache-2.0, 343 MB), run in numpy straight from its safetensors weights (no PyTorch, no ONNX export; checked against PyTorch to 4e-6).
Fixes and improvements
- Maintenance lists each job's own models on its row: MiVOLO v2 on Ages for date suggestions, the aesthetic and eye models on Photo quality, instead of 'built in' there and separate rows for the models.
- Date suggestions respect birth years.
- Used date suggestions feed back.
1.78.3 · October 25, 2026¶
- An edit shows in the photo's details at once (rating, labels, title, caption, date, location, tags), before the library index takes it a moment later.
- Rediscover's photos carry their badges: /api/random (and the random part of /api/explore) gives video, geo and faces as /api/photos does, so the apps show the face.
- The filter panel's quick-filter counts (blurry, sharpest, has text, bursts, dark, bright) come from the same pass as the date range and sizes instead of six more reads of the selection.
1.78.0 · October 24, 2026¶
- The fixes of a review of the whole code base. The file scanner no longer marks present photos as gone (files of kinds the viewer does not read, symlinked folders, folders it could not list, accented names in another Unicode form, and a photo moved during a long scan).
- A sidebar in place of the icon rail. The name iopix sits at the top of a wider sidebar with the destinations labelled in groups and Settings and Maintenance at its foot; the search floats at the top of the page.
- Distances in miles or kilometres. Settings › Display has a Units choice: Automatic (the default) follows the browser's language and region, so a US browser sees miles and feet and most others kilometres and metres; Miles or Kilometres fixes it, saved with the account like the other display choices.
- The favorite, face and location badges of the Photos grid now mark every thumbnail of photos and videos: Rediscover and On this day on Explore, bursts, duplicate files and similar photos, from the same component and look. The face badge also shows for a photo or video with people tagged but no face boxes (a video, for instance).
- Badges change at once. Marking a favorite, naming a face or adding a person (a video or a photo without a face box too), taking one off, and setting or removing a location show on that photo's thumbnails right away, on the Photos grid, Explore, bursts and duplicates alike, instead of after the library catches up.
- An app mode and a tag tool for the admin. Opened with ?app=1 (the iPhone, iPad and Mac apps), the web app hides its sidebar, menu button and bottom bar, lets the page reach the bottom edge, keeps the mode for the tab, and posts every change of page to the app.
- Server additions for the iPhone, iPad and Mac apps. One-request upload (POST /api/import with the files and the import choices).
Fixes and improvements
- Settings › AI and search says what went wrong when the server cannot answer, instead of staying empty.
- The model descriptions say what holds for any library (no counts or results from one library's test, no timings from one machine).
- The floating notes fit phones: the "new version is ready" note and the messages take the width their words need (they were sized to half the screen and wrapped into a tall column).
- The Settings and Maintenance tabs are words on a line with the open one underlined, no longer pills that look like the page's buttons.
- Faces an iPhone wrote into a photo stored upright land on the face.
- Closing the viewer keeps your place on the Photos page.
- Adding a person to a video, or to a photo without a face box, says "Added
." and the change log says " added to the photo (no face box)"; both said "put back". - Shorter AI descriptions.
- A library change no longer redraws the page you are looking at.
1.70.0 · October 23, 2026¶
- The name iopix is written in two colours, as on the app icons: "io" in the sun's gold and "pix" in white on dark, deep indigo on light (tokens --name-io/--name-pix), bold and tight, in the top bar and on the sign-in screen (another name from Settings › Name stays one colour); the home-screen icons carry the wordmark like the iPhone and Apple TV icons.
- Moving photos to the trash is instant on every page: the photos leave the grid at once (the others close up, the scroll stays) and the server takes them out of the index before it answers; the files and digiKam's rows follow in the background (POST {background: true}, result at /api/photos/trash/{job}), a rebuild in between leaves them out, Undo waits for the move then restores, a photo that could not be moved comes back with a message, and the library's catching up no longer redraws the page.
- The installers ask where iopix keeps its own database: a SQLite file (the default) or MySQL/MariaDB (setup.sh --iopix-db / IOPIX_VIEWER_DB, the Proxmox script's new question with the digiKam answers as defaults, install.sh passes it on); setup tests the connection, creates the database when the user may and writes viewer-db.json; a fresh, empty MySQL database now gets its tables at the first start (a column check on a missing table made the viewer fall back to SQLite).
Fixes and improvements
- A lost connection (Wi-Fi to cellular on leaving the house) no longer leaves "Load failed" on screen: reads try again by themselves.
1.67.0 · October 22, 2026¶
- Imports take a folder pattern of the app's own ({yyyy}/{yyyy}{mm}, Uploads, Phone/{yyyy}-{mm}) instead of a layout key, on stage, plan and run; /api/import/layouts says so with patterns: true.
- Moving photos to the trash asks first (the app's own dialog), the tiles go at once with a message while the server works, and the answer no longer waits for the index rebuild (seconds on a large library), which runs in the background.
Fixes and improvements
- The folder-pattern import test leaves the scratch library as it found it (no extra photo, no Uploads folder for later tests to trip on).
1.65.2 · October 21, 2026¶
- The No location report keeps its place: rows fold away after a location is saved instead of the page being drawn again.
1.65.1 · October 20, 2026¶
- Code review fixes: a failed metadata read never rewrites digiKam's rows, internal tags survive a reread, duplicate files keep their identity, file moves and lossless edits roll back when the database refuses; cross-site requests refused, sessions end with a password change, the sign-in throttle keyed on the real peer, downloads need an account, MCP writes respect read-only, Cloudflare mode never trusts a bare header; thumbnails and analysis retry transient read errors, job flags reset on failure, container CPU budget; front-end races and dialogs; setup.sh imports, CI runs the library-free tests.
- Everything open from the code review: digiKam's compatible sidecar naming, uploads streamed to disk, stronger scrypt upgraded at sign-in, sign out everywhere, a second Google key for the server, people without a face box sync like tags, model revisions in every vector with pinned checksummed downloads, blocked face grouping, RAW previews, vendored Leaflet with a content security policy, one poll timer per view, update progress in the banner, installer ownership and sudoers for in-app updates, update.sh installs packages before swapping code, a second scratch library for the browser tests, strict test mode, Docker non-root user, pinned dependency bounds.
- Settings › Users gets a Sign-in list tick per account (unticked accounts sign in through Other); the lightbox Actions menu removes every unnamed face region in one go, with Undo.
- Metadata quality is an overview plus one report per check, each with its own link; the No location report lets you tick several photos and set their location together.
Fixes and improvements
- New viewer-database columns reach MySQL too (v1.63.0's session_gen broke every signed-in request there); the search-model switch no longer recurses when fastembed is absent.
- The ticked photos of the No location report act from a bar fixed at the bottom of the page (as on the consistency page); the retired name Viewer is gone from the UI (iopix version, iopix tab.
1.53.5 · October 19, 2026¶
- Long file names wrap inside their cards (Metadata quality, edit log).
- The selection bar's actions as icons, like the viewer's toolbar (names on hover).
- Edit messages say the change goes into digiKam's database by itself when it does (Sync with digiKam on), instead of asking for a reread.
1.53.2 · October 18, 2026¶
- People groups on the People page; Not a person for a keyword tag digiKam marked as one; no confirmation for a person's badge picture.
- Sign-in at a reverse proxy (Cloudflare Access, HAProxy, nginx, Caddy, Traefik).
- Metadata write-path audit (faces, location, captions, date/time, tags).
- Implausible date check (before 1901, in the future, a clock's starting point; a folder named for the year counts as meant); two edits within one second both show at once.
- Only the town is known: an approximate location (town centre, no altitude, accuracy in metres in digiKam's ImagePositions.accuracy and EXIF/XMP GPSHPositioningError), shown as approximate with its area in the info panel.
- People on videos (and on photos without a face box) from the Actions menu; one person per name (a person typed in another letter case, or a tag under People not yet marked, is used instead of a second tag); the tag manager marks a tag as a person or not.
Fixes and improvements
- No "rejected" in the app: the Hide rejected filter and its hidden uses (On this day, Rediscover, event covers, MCP) are gone; digiKam's pick labels are still read and kept as they are.
- A person tagged on a photo without a face box has a menu (take them off the photo, with undo; mark their face).
- Explore shows up to 8 photos in On this day and 36 in Rediscover, with an S/M/L photo size that is remembered.
- Merge into... for a person entered twice: photos, face boxes and suggestions move to the person kept, the other tag goes (database backed up first); People groups and face references follow.
- People can be sorted by group, by name or by photo count, with an S/M/L badge size; both remembered.
- People by family name (the tag above each person under People), an order within each section (as arranged, by name, most photos), and the app's section headings for the groups.
- Day's trail and Photos nearby move into the info panel's Actions menu, the date's change link goes (the menu has it); MCP rewrite_sidecars rewrites photos' sidecars from digiKam's database.
- A face change rewrites the sidecar's tag list along with its face regions (a named face is a People/... tag too, as digiKam writes it); the consistency check no longer finds the names missing.
- MCP consistency_scan starts the metadata consistency check (admin token).
- MCP edit_photos sets date, caption, title or rating as the web app does (admin token).
- Unused imports (CI pyflakes).
- Map › Place photos: Only the town is known, so photos placed on the map are saved as approximate.
- A place search on the Map page (Enter jumps to the best match); CI parses the JS modules as modules.
- MCP inspect_file looks inside a file that does not show (container, streams, decode check, top-level boxes).
- Repair a video whose wrapper is damaged (streams rewrapped without re-encoding, checked to play, original kept); MCP repair_video.
1.47.0 · October 17, 2026¶
- Explore gets Rediscover (a dozen random photos, Shuffle) and loses its settings; the person picker shows only the name; Maintenance explains each model choice and compares the alternatives.
- Explore › Then and now: a person's earliest and latest named face, years apart.
- Trash (digiKam's .dtrash, shared with digiKam's Trash view) with a Trash page, restore and delete for good; Delete sends photos to the trash without a question (Undo offered); move photos to a folder, rename photos, rename and move folders, ids kept and every move undoable.
- Import page: photos and videos dropped, chosen or taken go into folders by the date taken (layout of choice, digiKam's YYYY/YYYYMM by default), duplicates (same size and contents) left out with a link to the original, a sidecar with the file's own metadata for every new file; the installed app is an Android share target; uploads get sidecars too.
- Lossless rotate, flip and crop: JPEG pixels through jpegtran with the orientation reset (first to upright), other files by their orientation flag; face regions turn, flip or shift with the picture in digiKam's database and the sidecar; digiKam's rows get the new size and a full rescan; a copy before each edit, Undo from the toast and the change log; rotate button and [ ] keys in the viewer, Rotate in the selection bar, a crop tool with corner handles; a file rewritten in place keeps its viewer id; jpegtran added to setup, Docker, Proxmox and the updater.
- HEIC/HEIF crop by re-encoding (quality 92, as Apple Photos does on export; labelled re-encoded in the toast and the change log, original kept, Undo); rotate and flip of HEIC stay by the orientation flag.
- Restructure the front end: app.js is the entry, the code lives in static/js as one ES module per area (core, state, search, grid, actions, editing, download, pages, admin, map, filters, lightbox, main) with the shared mutable state in one object; service worker caches the modules; no feature changes (the server split into app/routes and app/core landed in the previous commit).
- Viewer database cleanup: one ai_scans table records which version of each photo every job looked at (replacing a stamp column in four result tables and two marker tables); ai_text_and_faces split into ai_text and ai_face_count; metadata_check keeps the full comparison only where copies disagree; image_data_checksums keyed by photo, not path. Migrated in place at first start, every row carried over, a copy of the database written to db-backups first (SQLite file, or mysqldump on MariaDB).
- File scanner (Maintenance, off by default) recording new, changed and vanished files and folders as digiKam's collection scanner does, with digiKam's own V3 unique hash and an unmounted-disk guard; uploads and imports read in full at once; folder properties (caption, date, category, cover) in digiKam's Albums row; placing photos on the map from a tray of photos without a location, draggable markers; export with resize, JPEG conversion, location removal, date names and a flat folder; rename by date for a selection with undo.
- All metadata (every EXIF, GPS, IPTC and XMP field of file and sidecar, edited in place, the database read again afterwards, Reread from file); Copy metadata from one photo to the others of a selection; Adjust as a new version (exposure, contrast, saturation, warmth, straighten, auto levels) saved beside an untouched original and linked as digiKam links versions.
- The server's modules live in folders by area: app/digikam (database, guarded writes, library copy, merge), app/data (viewer database, index, query, state), app/photos (edits, metadata, organize, folders, import, scanner, lossless, versions, export, deletion, edit log, pixel guard, tags, consistency), app/faces, app/ai, app/geo; every import absolute; no behaviour change. New checks: every import resolves (nested ones too, and module paths named in scripts and docs), and every GET route answers without a server error
- Date doesn't match the folder check; one Actions menu in the info panel; film strip clear of video controls.
Fixes and improvements
- Maintenance feature descriptions are no longer truncated; face grouping text no longer mentions digiKam; Restart row says when it is needed; the person Options menu opens in front of the map.
- Maintenance says whether jpegtran is installed and how to add it (JPEG crop and pixel rotation need it; the updater cannot install packages when the service is not root).
- The update banner names the installed version and commit (it rendered before the version was known) and says 'newer build' with the latest change when the new commit is not a release.
- Metadata_check rows from before 1.43 drop their stored comparison for photos whose copies agree (nothing reads it; tens of MB on a large library).
- Metadata quality (was Face quality) lists photos and videos without a location, with Set location, Accept as it is (remembered), Accept all shown and Show the accepted ones again.
- Map › Place photos: a place, landmark or address search that zooms the map there, and a thumbnail size slider for the tray (remembered).
- The change log is the Edit log, opened from Maintenance next to the Server log.
- Edit log search (words in the change or file name, a person, who made it, a date range) and List / Large / Larger pictures.
- Map › Place photos: a found place zooms to street level and gets a pin with its name; clicking the pin or 'Put the selected photos here' places them exactly there.
- Satellite view on every map (Google imagery with labels when Google Maps is configured, else Esri), remembered; Street View in Set location.
- No more interruptions: the map refreshes its markers in place when the library changes (tray, pin, zoom kept), only list pages redraw, pages with work in progress are left alone.
- The search box works again (its suggestion list referred to a variable the front-end restructuring had moved, so typing threw an error and Enter did nothing); a browser test covers typing and Enter.
- A face added or named stays on screen: copies of the photo fetched before the index has caught up get the last minute's face changes applied again (an index rebuild that started before the change….
- Set location: Street View sits with Copy from previous photo and the search row wraps (it ran off the dialog); Who is this? lists the people of the nearby photos in the same folder first.
- The Map page's Map / Satellite switch sits at the bottom left, clear of the placing tray.
- Describe iopix as a web front end for a digiKam library in the README, package metadata and code comments.
1.35.0 · October 16, 2026¶
- Delete photos (confirmation; files, sidecars and database backed up first; rows, files and sidecars removed; the viewer forgets them); the grid header with Select all stays at the top while scrolling, and the selection bar has Select all / Deselect all.
- Image-data checksums guard every in-file metadata write (a write that changed the picture is undone); a permanent change log per photo with undo and restore (sidecar copies, original files, deleted photos); changes made with Sync with digiKam off merge back into digiKam (three-way merge, ids remapped, backup first).
- Phones as installed apps: safe areas, five-item bottom bar with More sheet, 16px inputs, bottom-sheet dialogs, icon-only selection bar.
- A choice of models per feature in Maintenance: SCRFD and RetinaFace face detectors, YOLOX M/L/X, BLIP large, Jina CLIP search, ArcFace face grouping with landmark alignment.
- Shared and private albums (shared ones changed by editors and admins only); only admins link accounts to people; the installed iPhone app uses the whole screen (iOS ended the layout one status bar short of the bottom).
- Changes show up in seconds: no full digiKam database backup on ordinary changes (only before deleting photos or a tag, or a merge); the index is rebuilt straight from digiKam with the library copy following in the background; no wait after the viewer's own SQLite writes.
- Dates from digiKam's MariaDB are no longer shifted by the server's UTC offset (the convention is measured from file times; the library holds local time); after rewriting a sidecar or file with what digiKam's database holds, Images.modificationDate and fileSize follow the file, as digiKam does, so digiKam does not rescan and re-import its face regions.
- Maintenance › Face quality: finds a person's face stored twice a few pixels apart (and lists separate same-person regions and broken rectangles); one-click clean-up keeps one region, rewrites the sidecars from the database and records the file dates; the viewer refuses to create such duplicates; MCP face_quality and face_cleanup.
- Face changes show at once: the viewer and the Faces page update before the server answers (a failure puts the server's version back); the server answers right after the database write and rewrites sidecars in the background.
- Undo for every face change in the change log (older entries from their details); restore the backed-up image file from any change; change-log entries record their backup paths (file_copy); move/resize a face box in the viewer; Face quality is its own page with Check again and trimming of boxes outside the photo; no stray 'null' in the info panel's change log.
- Explore is the home page and the first menu item; menu icons in their own colours, no grey box on hover.
- Face quality lists photos with faces but no names; name them, ignore their faces, or accept them as they are.
- Face quality lists load the next 120 entries in place; the all-shown buttons include them.
Fixes and improvements
- Review fixes: consistency scans are admin-only, landmark recognition and GPX preview need an editor, one query for the tags of photos being deleted, index module docs.
- The change log table could not be created on MariaDB/MySQL (undo is a reserved word), which made the viewer fall back to its SQLite file: column renamed to undo_values, SQLite files migrated.
- Code review fixes: the server log, merge plan, change log and elevation lookup are no longer readable by everyone; paths and database details only for admins; no file paths in the open status.
- Calmer look (indigo icon, plain app name, indigo heading markers and scrubber); iPhone app: re-measure a viewport iOS left short instead of moving the bottom bar out of the drawn area.
- The index build logs how long each phase takes.
- Index builds about 6x faster on MySQL/MariaDB: the photo identity bookkeeping wrote one statement per photo on every build; now only what changed.
- The library copy follows digiKam row by row: only rows that differ are deleted or written (nothing when nothing changed); the merge base is saved once, before the first change made without digiKam.
- Face quality can fix the image files too (only those still carrying the duplicates; originals backed up, pixels checked); file dates are recorded only for sidecar-only writes.
- The info panel's change log comes last, folded until opened.
- Face quality also lists photos where people are detected but nobody is marked or tagged; find their faces or accept them as they are.
- Face quality shows its photos large (List / Large / Larger), and a list opens in the viewer as a set with faces shown.
- Removing a face asks nothing; the message offers Undo.
- Face quality: Accept as it is, Ignore, Fit inside and Find faces on one entry fold it away in place instead of reloading the page.
- Add a face and Add to album have their own icons (person with plus, album with plus).
1.22.1 · October 15, 2026¶
- One viewer database (data/viewer.db, WAL) for state, users, queues and the analysis results; installs with state.db + analysis.db are migrated once at start with every row kept and the old files parked in db-backups; the backup zip carries viewer.db and the embeddings.
- The viewer's own database can be MySQL/MariaDB (Settings › Viewer database): test, copy every row across (optionally dropping and recreating the tables first), restart on the new database; one dialect bridge for every module; favorites and albums inlined into index queries instead of an attached file; the backup zip always holds a SQLite copy.
- Smart albums (saved searches under Albums), month marks on the year rail and a jump-to-date box, T and P hotkeys in the viewer, Similar photos on the Duplicate files page from the content embeddings, and look-alike face groups on the Faces page (SFace model; grouping only, never a name proposal).
- Maintenance in four sections: Library (rescan, metadata consistency summary, edits waiting for digiKam, tag covers), AI analysis and models, Storage and backups (each item's size with its action, free space, downloads), Viewer (version, restart).
- The timeline rail gets a density ribbon (photos per month), a month marker in the app's gradient that grows while dragging, and a hover preview with the month, its count and four thumbnails; light is the default theme, dark or system only when chosen.
- A daily check for a newer version (Settings › Check for updates daily, on by default, UPDATE_CHECK=0 locks it off) and a banner for admins with a link to the update, dismissed per version.
- Info panel reordered (own words first, camera small and low, everything the models produced last under AI analysis) with a per-account choice of sections (Settings › Display › Info panel, or the gear in the panel); the logo lines up with the side menu icons.
- Take the library copy at the first start after the update; settings wording.
- Settings › Name lets the admin brand the viewer (top bar, tab title, installed app's name and manifest); default DKViewer.
- Renamed iopix (repository, image, /opt/iopix, iopix service, iopix.env, IOPIX_ variables, default display name); installs under the old names keep updating, and migrate-to-iopix.sh moves them to the new ones.*
- Self-explanatory table names in the viewer's database (app_settings, user_accounts, favorite_photos, viewer_albums, pending_edits, ai_, metadata_check, digikam_copy_, photo_identity); older databases are renamed in place on first open, rows untouched; README lists every table.
- No 'is digiKam closed?' confirmations where it cannot be seen (DIGIKAM_CHECK=none, 'ask' now means the same); metadata consistency redesigned (summary tiles as the filter, photos without a sidecar listed with one-click sidecar creation, edited photos re-checked automatically, sidecar changes count as changes); location dialog finds named places through Google Places or OpenStreetMap when Google's geocoder finds nothing or refuses, and fills in the altitude from Google Elevation or Open-Meteo.
- Library tables named for what they hold (photos, folders, tags, photo_tags, face_regions…; digikam_copy_ renamed in place); face detection on a photo, a folder or the library (YuNet), honouring every existing face region even when the rectangles differ, new faces written as digiKam's unnamed faces; the filter pane steps aside on pages it does not apply to.*
- Suggest location in the location dialog: the places of the photos taken nearest in time, and Google Cloud Vision landmark recognition on request.
- Everything works with Sync with digiKam off: the library tables now carry digiKam's own columns and, with sync off, every writer (tags, folders, uploads, faces, face detection, place tags, badge pictures) works on them through digiKam's table names; turning sync back on keeps changes made meanwhile until the owner chooses to replace them with digiKam's library.
Fixes and improvements
- Code and documentation review.
- The face queue suggests who an unnamed face or group looks like (prototypes from each named person's recent confirmed faces) with a one-click name; nothing is written until accepted.
- Metadata consistency shows a progress bar while it checks, says when it is done or that nothing needed checking, counts and logs batches that fail, and keeps refreshing even when results are listed.
- The consistency page was blank because stored results counted digiKam's pick label, which the page no longer has a label for, and the stats line threw; pick and colour are no longer compared.
- A colourful app icon (indigo-to-rose sky, golden sun, teal and green hills) in every size, the brand name in the same gradient, the PWA theme colour to match.
- The consistency page's bulk action is a bar at the bottom that wraps (the old top bar pushed Sync off narrower screens): tick photos or Select all (every disagreeing photo, not just those shown).
- Maintenance shows one table for AI analysis and models: a row per feature with its model (size, state, download or update) and its background job (progress, run again).
- The models table offers Download when a model is missing and Update when the check finds a newer one; no Re-download button for an installed, current model.
- MCP tools consistency_report and consistency_sync (admin token); Maintenance storage sizes as an aligned table and setting rows that no longer squeeze their buttons.
- Run again is a small link under each job's progress bar.
- Settings and Maintenance share one content width: rows, the AI table and the storage table line up on both edges.
- Settings and Maintenance section headings stand out: larger and bolder, a gradient marker in the app's colours, a line underneath.
- The gradient section marker on the content pages too (Explore, Detected content, Events and trips, Albums, Similar photos), with bolder titles.
- The section marker only where a heading has no coloured icon, and on the photo grid's day and month headings; month marks on the timeline rail no longer overlap a year.
- The main pages' titles carry their navigation icon in the page colour (Explore, People, Places, Folders, Albums, Tags); the Places page no longer shows a breadcrumb that repeats its title.
- The breadcrumb above a photo grid sits exactly where it does on every other page, so it no longer jumps when a place, folder or tag opens its photos.
- Breadcrumbs live in one fixed strip right under the top bar, in the same place on every page and still there while the page scrolls; a top-level folder now names itself in the trail.
- Face grouping and near-duplicates import without numpy (it comes with the optional extras), so the GitHub check and the Docker build pass again.
- A slimmer top bar (52 px; smaller search box, chips, Filters button and icons); on a phone the grid bar keeps only the essentials so nothing runs off the edge.
- The Explore summary icons are white on their coloured tiles again (a label rule had turned them grey).
- The name shown in the UI is DKViewer (title, brand, PWA name, settings header); nothing else renamed.
- Applied edits stop showing as waiting (MySQL change detection now sees edited captions, ratings, dates, positions, copyright and swapped tags.
- Copying the library into a MySQL viewer database keeps digiKam's root tag (id 0).
1.7.3 · October 14, 2026¶
- App version and commit shown in Settings/Maintenance and the status API; Proxmox update fetches update.sh when missing and shows its output; installs record the commit.
- MCP diagnostics tools (diagnostics, server_log, job_queue, photo_file) and a rotating viewer.log in the data folder.
- MCP tools check_for_update and update_viewer (token-protected; token under Maintenance › Viewer version or MCP_ADMIN_TOKEN).
- Appearance setting (light, dark, system); colour throughout the UI (navigation, search chips, section headings, quick-filter groups); the Explore summary as tinted cards with icons that open their views.
- Lightbox bar in the PhotoStructure style (X at the left returns to the list, title centred, auto-hides) with a Share menu: copy link, the device share sheet with the picture, download original or a smaller preview JPEG, open original, email a link; the film strip scrolls its own reel instead of the stage.
- Require sign-in (Settings › Users): visitors get the sign-in dialog and nothing else; no library data, thumbnail or API answer without an account; MCP then takes the admin token as a bearer header.
- Folders (digiKam's, on disk) and Albums (the viewer's own) are separate pages; editors can create digiKam folders and upload photos into them (directory + Albums row as digiKam's New Album; uploads registered with a null modificationDate so digiKam scans them fully next time); a write made here is indexed within seconds; the index watcher survives a bad database setting.
Fixes and improvements
- Jobs submitted together run in queue order (thumbnails before embeddings), with a settle period before the worker picks; startup submits thumbnails first.
- Setup.sh and the Proxmox install put the MariaDB client in place (mysqldump for backups before database writes).
- Update.sh fetches with the app's own Python (no curl inside containers); error text without colour codes; Proxmox install adds curl.
- Maintenance says that sharpness/exposure and object detection are computed in one pass.
- On MySQL the change fingerprint covers tag and face edits in place (badge picture, rename, move, face properties), so the viewer re-indexes after its own writes.
- Backup mode 'daily' for MySQL (one dump a day for ordinary edits; always a fresh one before bulk or destructive operations).
- The Users list in Settings is a table (account, person, role, password, actions).
- The MCP diagnostics tools take the admin token too (they reveal paths, logs and settings); library tools stay open.
- Update_viewer takes the commit to install (ref); update.sh skips a no-op reinstall and records its outcome, shown as lastUpdate after the restart.
- The search-model switch no longer waits for photos that cannot be embedded; a batch with one unreadable image is retried one by one; without a CLIP index the new index answers while it is built.
- Film strip along the bottom of the lightbox (auto-hides like a taskbar, slides up at the bottom edge, click to jump); the info panel reopens the way it was last left.
- Select all becomes Deselect all once everything is selected; the chronological grid can be grouped by month (By day / By month, remembered); the years-covered card leaves Explore.
- Hovering a film-strip thumbnail previews that photo over the stage; leaving the strip restores the current one.
- The share button opens the device's own share sheet with the picture attached (AirDrop, Messages, Mail…); the menu stays as the fallback for browsers without one.
- On this day on Explore is a justified gallery that wraps like the photo grid, instead of a strip with scrollbars.
- A denser info panel (smaller type, tighter rows and chips, smaller map, recognised text on one line) so most photos need no scrolling.
- A plain search also finds the photos the content model labels with a matching detected concept (audience, beach…), and the search box suggests detected concepts.
- Accounts carry an optional email address (validated, unique; set when adding a user or from the Users table), for a proxy to identify users by later.
- With sign-in required, the face badges of linked accounts are still served so the sign-in screen shows its avatars.
- The info panel's editing controls no longer carry an Edit heading.
- Set location in the selection bar geotags every selected photo at once.
- Multi-edit sets title and caption for the selection; Select all and Deselect all links; consistency report fixes one photo from the database.
- The Folders page is a hierarchical tree (expanders, covers, counts, upload/new-folder/download on each row).
- Version bump for the zip backup.