Skip to main content

ยท 5 min read
Niaz Faridani-Rad

This is a big one! A lot has changed since the last release. Here is an overview of all the new features, improvements and bug fixes.

Upstream:

๐Ÿš€ LibrePhotos: Photo Stacks & File Variants

Inspired by PhotoPrism, RAW+JPEG pairs and Live Photos are now treated as a single photo entity with multiple file variants, instead of creating separate entries. The scanner now uses a two-phase architecture: first grouping files by directory and basename, then processing each group together. A new repair job automatically merges any previously ungrouped file variants after each scan. This comes with a completely new UI for viewing and managing stacks, file variants in the lightbox sidebar, RAW badge overlays, and a unified organizing page for stacks and duplicates.

๐Ÿš€ LibrePhotos: Duplicate Detection

A brand-new duplicate detection system using perceptual hashing! It detects exact copies via hash comparison and visual duplicates using a memory-efficient two-pass algorithm that works well even with very large collections. The API supports a batch_size parameter to fine-tune performance for your hardware.

๐Ÿš€ LibrePhotos: Photo UUID Primary Key & Structured Metadata

The Photo model's primary key has been changed from image_hash to UUID, which is a massive internal refactor touching models, APIs, serializers, background tasks, and tests. Alongside this, a new structured PhotoMetadata model with edit history has been added, enabling richer metadata management.

๐Ÿš€ Frontend: Public Album Sharing Options

Public album sharing now supports fine-grained per-album settings. You can control the visibility of location, camera info, timestamps, captions, and faces for each shared album. Default sharing preferences can be configured in user settings, and individual albums can override them.

๐Ÿš€ Frontend: Slideshow Mode

A new slideshow mode has been added to the lightbox with a configurable slide interval. Sit back and enjoy your photos!

๐Ÿš€ Frontend: Explore Page

The navigation dropdown has been replaced with a dedicated explore page, giving you a much better overview of your albums, people, places, things and events at a glance.

๐Ÿš€ Frontend: Redesigned Album & Statistics Pages

The album page and all statistics/data visualization pages (face clusters, social graph, word clouds, timeline, place tree) have been completely redesigned with a fresh new look.

๐Ÿš€ Frontend: Spotlight Search

A new spotlight search powered by Mantine replaces the old search bar, providing a faster and more intuitive search experience with keyboard navigation.

๐Ÿš€ Frontend: Select All

You can now select all photos in a view for bulk operations like deleting, sharing, or adding to albums.

  • โœจ LibrePhotos: Switch from Photon to Nominatim as default reverse geocoding provider
  • โœจ LibrePhotos: New endpoint for getting all albums for a photo
  • โœจ LibrePhotos: Improved scan error handling and stack detection
  • โœจ LibrePhotos: Split directory_watcher into a well-structured package with two-phase scan
  • โœจ LibrePhotos: Social graph error logging improvements
  • โœจ LibrePhotos: ARM CPU instruction set detection refactored and fixed
  • โœจ LibrePhotos: Add SQLite support for UUID primary key migration
  • โœจ Frontend: Fullscreen mode in lightbox
  • โœจ Frontend: Switched to MapLibre GL with PhotoPrism tile server for all map views
  • โœจ Frontend: Improved UX for setting photo location with geocode search
  • โœจ Frontend: Improved UX for albums with cover picker and better album list view
  • โœจ Frontend: New languages added to the UI
  • โœจ Frontend: Improved first time setup experience and default empty state messages
  • โœจ Frontend: File variants UI in photo details sidebar
  • โœจ Frontend: Metadata section component in lightbox
  • โœจ Frontend: Download options now include stacked/variant photos
  • โœจ Frontend: Improved scrolling behavior
  • โœจ Frontend: Extract inline styles into CSS modules (Implemented by sickelap)
  • โœจ Frontend: Replaced airbnb ESLint config with eslint:recommended + prettier; removed unused dependencies (react-spring, react-vis, react-d3-graph)
  • โœจ Frontend: Major dependency updates (jwt-decode v4, i18next v25, react-i18next v15, @tabler/icons-react v3, react-cookie v7, and more)
  • โœจ Frontend: Replaced ReactPlayer with native video element for better video playback
  • โœจ Docker: Remove SQLite data dir creation from entrypoint
  • ๐Ÿ”จ LibrePhotos: Fix scan progress stuck below 100% when files are skipped or invalid (Implemented by Nikoh77)
  • ๐Ÿ”จ LibrePhotos: Fix scan job not being marked as finished when no files need processing (Implemented by Nikoh77)
  • ๐Ÿ”จ LibrePhotos: Fix bugs when not having any data
  • ๐Ÿ”จ LibrePhotos: Fix big thumbnail content type for proxied responses (#1271)
  • ๐Ÿ”จ LibrePhotos: Fix social graph SQL query to work with UUID primary key
  • ๐Ÿ”จ LibrePhotos: Fix UnboundLocalError in face extraction from dlib
  • ๐Ÿ”จ LibrePhotos: Fix pagination crash with negative page_size
  • ๐Ÿ”จ Frontend: Fix video playback issues in lightbox
  • ๐Ÿ”จ Frontend: Fix photo list flickering
  • ๐Ÿ”จ Frontend: Fix server stats parsing for CPU info fields
  • ๐Ÿ”จ Frontend: Fix upload issues with sequential file uploads and query invalidation
  • ๐Ÿ”จ Frontend: Fix number of deleted images when selecting all
  • ๐Ÿ”จ Frontend: Fix face dashboard issues and face mutation hooks
  • ๐Ÿ”จ Frontend: Fix issues with shared by me albums view
  • ๐Ÿ”จ Frontend: Fix memory hog issue
  • ๐Ÿ”จ Frontend: Fix login popup messages
  • โœจ Frontend: Fix ESLint errors (Implemented by sickelap)
  • โœจ LibrePhotos: Updated dependencies and updated language strings from the community

If you are interested on how I develop this application, you can watch me develop features live on my channel


Sponsoring development:

My work is sponsored by 3 awesome people!

If you like the work I do, then you can support me via GitHub sponsors or via PayPal

ยท 2 min read
Niaz Faridani-Rad

This release introduces a multi-model tagging system, giving you the choice of two different AI models for auto-tagging your photos.

Upstream:

  • ๐Ÿš€ LibrePhotos/Frontend: Multi-Model Tagging System
    • You can now choose between two tagging models in Site Settings โ†’ Tagging Model:
      • Places365 โ€” The classic scene recognition model (default)
      • SigLIP 2 โ€” Google's latest vision-language model, running as ONNX. Uses zero-shot classification against a curated vocabulary of 900+ real-world photo tags (people, animals, nature, activities, scenes, weather, and more). Returns the top 10 most relevant tags.
    • Tags are stored per model โ€” switching between models does not delete previously generated tags, and does not require rescanning your library.
    • The lightbox sidebar now shows tags with color-coded badges for each model (green for SigLIP 2, blue for Places365).
    • Things Albums are dynamically filtered to only show tags from the currently active tagging model.
    • Search results use tags from the selected model.

If you are interested on how I develop this application, you can watch me develop features live on my channel


Sponsoring development:

My work is sponsored by 3 awesome people!

If you like the work I do, then you can support me via GitHub sponsors or via PayPal

ยท 2 min read
Niaz Faridani-Rad

Breaking change: Postgres v18+: change your volume mount path!

With Postgres v18+, mounting a volume to /var/lib/postgresql/data can fail in Docker/Kubernetes due to an upstream change that enforces a new data directory (/var/lib/postgresql/MAJOR/docker) and adds a symlink from /var/lib/postgresql/data to /var/lib/postgresql (details).

Action required: Mount your volume to /var/lib/postgresql instead. pgautoupgrade will detect any existing data there and migrate it to the new structure (discussion: pgautoupgrade#164).

Upstream:

  • ๐Ÿš€ LibrePhotos/Frontend: You can now edit GPS locations
  • โœจ Frontend: Upgraded to Mantine 8.3 and fixed linting errors (Implemented by sickelap)
  • โœจ LibrePhotos: Using Argon2PasswordHasher for new and updated accounts for faster authentication
  • ๐Ÿ”จ LibrePhotos: Handle empty recently added photo queries
  • ๐Ÿ”จ LibrePhotos: Fix BLIP on newer versions of librephotos
  • ๐Ÿ”จ LibrePhotos: Fix proxy redirects for non-ASCII original photo paths
  • ๐Ÿ”จ LibrePhotos: Fix LLM models downloading even when none was selected
  • ๐Ÿ”จ Frontend: Fix a bug when uploading images
  • โœจ LibrePhotos: Updated dependencies and updated language strings from the community

If you are interested on how I develop this application, you can watch me develop features live on my channel


Sponsoring development:

My work is sponsored by 2 awesome people!

If you like the work I do, then you can support me via GitHub sponsors or via PayPal

ยท One min read
Niaz Faridani-Rad

Upstream:

  • ๐Ÿš€ Docker: You can now launch LibrePhotos as a single container with docker with the "librephotos-unified:latest" image
  • ๐Ÿš€ LibrePhotos: Public sharing via link for albums
  • ๐Ÿš€ LibrePhotos: Folder navigation view + pagination & aggregated photo counts for subfolders
  • โœจ Docker: use native runners instead of emulation
  • โœจ Frontend: Breadcrumb Path in detail views, and infinite scroll for subfolders
  • โœจ LibrePhotos: fewer queries in several views (perf pass)
  • โœจ LibrePhotos: Multiple fixes in order to make sqllite work
  • โœจ Frontend: Improved deletion dialog; centered login title;
  • ๐Ÿ”จ LibrePhotos: fix n+1 on delete; fix trash view; migration stability for missing image paths
  • ๐Ÿ”จ Frontend: fix GIFs in viewer; fix no-timestamp errors
  • โœจ LibrePhotos: Updated dependencies and updated language strings from the community

If you are interested on how I develop this application, you can watch me develop features live on my channel


Sponsoring development:

My work is sponsored by 2 awesome people!

If you like the work I do, then you can support me via GitHub sponsors or via PayPal

ยท One min read
Niaz Faridani-Rad

Upstream:

  • โœจ Docs: Update upload documentation to clarify scan directory requirements and remove heavyweight process setting
  • ๐Ÿ”จ LibrePhotos: Fixed scanning of videos by fixing an issue with calculating aspect ratios (#1587)
  • ๐Ÿ”จ LibrePhotos: Fixed scanning media from nextcloud (Implemented by varet80)
  • ๐Ÿ”จ Frontend: Fix cache invalidation issues in FaceDashboard (#1586)
  • โœจ LibrePhotos: Updated dependencies and updated language strings from the community

If you are interested on how I develop this application, you can watch me develop features live on my channel


Sponsoring development:

My work is sponsored by 2 awesome people!

If you like the work I do, then you can support me via GitHub sponsors or via PayPal

ยท 2 min read
Niaz Faridani-Rad

Upstream:

๐Ÿš€ Backend: Added Moondream 2 for caption generation

The backend integrated the Moondream 2 model (via llama-cpp-python) for image+text analysis, marking images as multi-modal inputs. This lays groundwork for more advanced AI features like richer automatic captions or visual queries by allowing the AI to handle both image and text together.

โœจ Frontend: Keyboard shortcuts in Lightbox

You can now use keyboard shortcuts in the lightbox to navigate photos, toggle the info sidebar, and even delete images โ€“ all without touching the mouse! Helpful tooltips have been added to the UI to remind you of these new shortcuts

Smaller things:

  • โœจ Backend: Refactored photo captioning and search
  • โœจ Backend: Resolved some noisy logger warnings (Implemented by emmanuel-ferdman)
  • ๐Ÿ”จ Backend: Normal users can now create albums again
  • โœจ Frontend: It is now possible to delete images from the lightbox
  • ๐Ÿ”จ Frontend: Fixed the download photos action
  • ๐Ÿ”จ Frontend: Fixed the places tree page
  • ๐Ÿ”จ Frontend: Fixed mobile view of photos

If you are interested on how I develop this application, you can watch me develop features live on my channel


Sponsoring development:

My work is sponsored by 2 awesome people!

If you like the work I do, then you can support me via GitHub sponsors or via PayPal

ยท 2 min read
Niaz Faridani-Rad

Upstream:

  • ๐Ÿš€ Frontend: Switched from RTK Query and Redux to Tanstack Query

The syntax of RTK Query was difficult to work with, and Redux introduced unnecessary complexity for our needs. With TanStack Query, data fetching feels much more natural and removes the need for boilerplate like slices or global state management for async data.

  • ๐Ÿš€ Frontend: Switched from React Router to Tanstack Router

Switching to TanStack Router improves consistency with TanStack Query, enables typesafe URL-based state management, and supports powerful features like intent-based fetching โ€” all with deeper integration options out of the box.

  • โœจ Frontend: Overhauled Face Dashboard controls
  • โœจ Frontend: Add keyboard navigation to the lightbox
  • โœจ LibrePhotos: Disable password change on demo site (Implemented by sickelap)
  • โœจ LibrePhotos: Extracted a thumbnail model from the photo model
  • โœจ LibrePhotos: Updated dependencies and updated language strings from the community
  • ๐Ÿ”จ Frontend: Fixed a lot of small issues

If you are interested on how I develop this application, you can watch me develop features live on my channel


Sponsoring development:

My work is sponsored by 2 awesome people!

If you like the work I do, then you can support me via GitHub sponsors or via PayPal

ยท 2 min read
Niaz Faridani-Rad

Upstream:

  • ๐Ÿš€ LibrePhotos: You can now download the logs from the admin dashboard
  • ๐Ÿš€ Frontend: You can now drag images around in the light box
  • ๐Ÿš€ Frontend: Similar images can now be clicked and viewed on a new single photo page
  • โœจ LibrePhotos: Faster import of photos (Implemented by Ava)
  • โœจ Frontend: Use Mantine tree and removed a dependency
  • โœจ Frontend: You can now set any value for the size of the images
  • โœจ Frontend: Light / Dark mode got moved to the header instead
  • ๐Ÿ”จ LibrePhotos: Uploaded files now get checked, if they are supported, before saving them
  • ๐Ÿ”จ Docker: httpPort should now work, when set in .env
  • ๐Ÿ”จ Frontend: Auto albums should be visible now, even when the title is missing
  • ๐Ÿ”จ Frontend: Fixed rendering of the captions box in the light box
  • ๐Ÿ”จ Frontend: Fixed an issue where the notification would appear below the viewport
  • โœจ LibrePhotos: Updated dependencies and updated language strings from the community

If you are interested on how I develop this application, you can watch me develop features live on my channel


Sponsoring development:

My work is sponsored by 2 awesome people!

If you like the work I do, then you can support me via GitHub sponsors or via PayPal

ยท One min read
Niaz Faridani-Rad

Upstream:

  • ๐Ÿš€ LibrePhotos: Upgrade to Mantine 7 (Implemented by sickelap)
  • โœจ Frontend: Improved search functionality (Implemented by sickelap)
  • โœจ Docker: GPU image is now 35% smaller (8,72GB โ†’ 5,5GB)
  • ๐Ÿ”จ Frontend: Motion photos should be visible now
  • ๐Ÿ”จ Frontend: Fixed selection of mistral model in admin dashboard
  • โœจ LibrePhotos: Updated dependencies and updated language strings from the community

If you are interested on how I develop this application, you can watch me develop features live on my channel


Sponsoring development:

My work is sponsored by 5 awesome people!

If you like the work I do, then you can support me via GitHub sponsors or via PayPal