Skip to main content

Development: 2025 - November to February

ยท 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