Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.gumnut.ai/llms.txt

Use this file to discover all available pages before exploring further.

This page lists notable user- and developer-facing changes to Gumnut, grouped by month and category. For a high-level overview, see Monthly progress.
May 2026

Apps

  • Launched the new Gumnut web app at app.gumnut.ai, a Vite + React single-page app that replaces the previous web client.
  • Added a virtualized photo timeline with justified rows, per-month data loading, date grouping, and a jump scrubber on both web and mobile.
  • Added an asset viewer with EXIF metadata and prev/next navigation scoped to albums and people.
  • Added albums, people, search, uploads (with per-image upload progress thumbnails), and API key management.
  • Extended the virtualized timeline to the album and person views and migrated search to a justified, virtualized grid — all with infinite scroll, replacing the previous “Load more” buttons.
  • Added a dedicated sign-in page for signed-out visitors, an Immich settings page linking to the Immich web and mobile apps, and an MCP setup page on the Chat tab for connecting Gumnut to Claude or ChatGPT.
  • Retired the legacy Next.js web client, completing the move to the new app.
  • Fixed the home page loading slowly on large libraries by paginating the timeline instead of fetching the entire asset list.
  • Fixed asset search on Android.

Video

  • Added basic video support: thumbnail generation, width/height and duration extraction at ingest, and a database schema for video metadata.
  • Added streaming video playback through the CDN, including HTTP range request support for seeking.
  • Surfaced video thumbnails and duration through the Immich adapter, and backfilled thumbnails, dimensions, and duration for existing videos.

Faces

  • Switched face clustering to a graph-based approach (HNSW + Chinese Whispers).
  • Added crowd-face filtering to keep large background crowds from polluting clusters.
  • Shipped a self-service face cleanup dashboard for reviewing and triaging clusters, including an unassigned-faces tab.
  • Began migrating face embeddings from FaceNet512 to ArcFace, with dual-write ingestion and new embedding/centroid storage.

Immich compatibility

  • Added map markers and enabled the map feature flag.
  • Added a read-only “On this day” memories endpoint.
  • Added user edits to asset metadata (description, date/time and timezone, and GPS), wired through to single- and bulk-asset edit endpoints.
  • Added Immich-compatible trash (soft-delete) with retention, honored across REST, sync stream, timeline, statistics, and WebSocket events.
  • Served a sharper thumbnail size (small/720) for wide and panoramic photos in Immich clients.

Library management

  • Added library trash/restore with an async purge window and SDK support.

API & SDK

  • Added a POST /api/assets/bulk-update endpoint.
  • Added a single-asset PATCH /api/assets/{asset_id} endpoint.
  • Added image variant sizing improvements (a new small=720 rung and larger thumbnails) and ThumbHash placeholders for faster perceived loading.
  • Moved the /api-keys router under the /api prefix and tracked API key usage via last_used_at.
  • Fixed semantic search returning the same asset multiple times by de-duplicating stored embeddings, adding a uniqueness constraint, and making embedding writes idempotent.
April 2026

Location

  • Added reverse geocoding: selected a provider and added a backfill task that populates human-readable place names and location metadata.
  • Added display_label and place_name to the asset metadata response.
  • Introduced layered asset metadata (file, reverse-geo, and user layers) with rename cascade support.

Faces

  • Added density-aware gates that reject loose clusters at creation and during per-asset assignment.
  • Added density-aware auto-merge and auto-dissolve of unnamed people on reuse.
  • Added clustering debounce and re-clustering of unnamed people, plus face quality filtering.

Immich compatibility

  • Added a People merge endpoint and a PUT /api/people/{id}/reassign endpoint.
  • Implemented GET /api/faces in the Immich adapter.
  • Added the trash (soft-delete) backend, schema, and filtering.
  • Updated for compatibility with Immich 2.6.x and 2.7.5, and made the server features endpoint return accurate feature flags.
  • Added an Immich compatibility documentation section.

CDN

  • Completed the CDN migration end-to-end, including Immich adapter asset fetching and migration cleanup.

Image descriptions

  • Added a backfill mechanism to generate descriptions for existing assets.
  • Added Google Gemini video descriptions, alongside the image description providers.

MCP & ChatGPT app

  • Improved MCP app single-entity and zoom views, added a “Load more” button to album and person detail views, and adjusted thumbnail sizing.
  • Audited and rewrote MCP tool descriptions for LLM consumption and added MCP tool annotations (readOnlyHint, destructiveHint, and others).
  • Began the ChatGPT app submission: published the privacy policy, exposed merge_people as an MCP tool, and set up a demo account with sample data.

API & SDK

  • Added an include_unverified parameter to the list people endpoint.
  • Added pagination parameters and response fields to album asset endpoints.

Documentation

  • Documented the authentication architecture.
March 2026

Image descriptions

  • Added AI-generated descriptions for uploaded assets, with a provider-agnostic inference service and OpenRouter (Qwen) integration.
  • Added the asset description data model and API response, and triggered description generation on upload.

CDN

  • Rolled out Cloudflare-based CDN asset delivery: photos-api infrastructure with additive asset_urls API changes, and migrated the web app, MCP app, and SDKs to consume them.

MCP app

  • Added dark/light theme support and configurable CSP via a FastMCP 3.x upgrade.
  • Fixed iframe sizing, duplicated headings, and hardened error handling and sizing edge cases.

Faces

  • Tightened the face assignment threshold, added post-clustering merge detection, improved centroid calculation, and added face quality filtering for clustering.

Search & people

  • Added the ability to search and filter people by name.
  • Added an endpoint to merge people.

Immich compatibility

  • Updated to Immich v2.5.0 and added WebP image support.
  • Made OAuth the default login method for the Immich web and mobile apps.

Performance & reliability

  • Cut photos-api deploy time from ~30 minutes to ~5 minutes.
  • Added per-user rate limiting with weighted costs and granular limits for MCP tool endpoints.
  • Streamed uploads (single-pass checksum and S3 upload) and added a maximum upload file size.
  • Added an /api/assets/counts endpoint and date-range filtering to speed up timeline thumbnail loading.

Documentation

  • Restructured the public documentation site and refreshed architecture docs.
February 2026

Albums

  • Added album cover images (album_cover_url) and album thumbnails.

API

  • Added batch ID filtering (ids) to list endpoints for bulk viewing.
  • Added album_assets list and get endpoints with ID filtering.
  • Added date-range filtering to the assets list endpoint.
  • Returned full URLs directly in API responses instead of requiring client-side construction.

MCP

  • Completed the next-generation MCP rollout: client migration, legacy MCP deprecation, and Playwright tests for the MCP app.
  • Enabled stateless MCP HTTP mode for multi-instance scaling.

Sync & events

  • Designed and implemented first-class modeling of events and replaced the v1 events API with a v2 implementation.

Faces

  • Sped up face detection by downscaling images before detection and running detection and embedding as a local task.

Performance, reliability & security

  • Added composite-key cursor pagination to prevent duplicate or skipped rows.
  • Scoped cursor subqueries by library to prevent cross-library information leaks.
  • Added a ping endpoint for uptime monitoring.
  • Fixed scroll position reset when navigating back from the photo detail view in the web app.
January 2026

MCP

  • Shipped the next-generation Gumnut Photos MCP: the MCP foundation (Phase 1), the full Tier 1 toolset (Phase 2), and complete MCP authentication.
  • Added MCP tool enhancements: outputSchema, structuredContent, and tool titles.
  • Fixed dynamic client registration and the search_assets MCP tool.

HEIC support

  • Fixed HEIC metadata extraction (OffsetTime / SubsecTime read from the wrong EXIF IFD).
  • Fixed ML services failing to process HEIC images.
  • Pre-generated full-size WebP for HEIC files so they display in the browser, and served WebP instead of original HEIC for full-size thumbnails.

Immich compatibility

  • Implemented the .well-known/immich endpoint.
  • Added WebSocket infrastructure with authentication and Phase 1 events (upload, delete, session).
  • Added sync streaming with cursor-based pagination.
  • Formatted error responses in the Immich-compatible format.
  • Updated to Immich v2.4.1.

Sync & events

  • Added a starting_after_id parameter to the events endpoint for pagination.
December 2025

Immich compatibility

  • Deployed the Immich adapter to production.
  • Added Immich sessions, checkpoints, and the /session endpoints.
  • Added SHA-1 checksum support in both the Gumnut API and the Immich adapter.
  • Added the ability to constrain queries by device_id and device_asset_ids.

Sync & events

  • Implemented an events endpoint for client sync.

Albums

  • Added startDate and endDate fields to album responses.