develop
Links: Use canonical trailing-slash form for website URLs
Index: Widen instance_id and clip XMP identifiers to fit columns
Tests: Fix the Go unit test suite on MariaDB #5753
Cleanup: Fix formatting of Markdown files
Media: Refine 360° projection reporting and docs #5711 #5716
Auth: Add CLI command to create access tokens for apps #782 #808 #3943
Develop: Use the mariadb client in Makefile database recipes #5753
Events: Refactor entity change notifications for sharing features #1307
Docs: Improve code comments in internal/entity/album*.go
Test: Use PascalCase names for all Go subtests in /internal
Tests: Adapt fixtures to have valid slugs
Logs: Add package pkg/log/status to provide generic outcome constants
Entity: Clip album, photo, and folder paths via shared ClipPath #5615
Cluster: Add a per-instance node DisplayName field
OAuth2: Remove client soft delete and fix client add command #213 #3943
Auth: Refactor cluster configuration and provisioning API endpoints #98
Cluster: Declare per-node group config via instance env/flags
Backend: Move unix package to /pkg/time/unix
Downloads: Add signed tokens and file-level album selection #5733 #5743
Account: Generate app password from the UI #808 #4114
Cluster: Collect OIDC groups at login for group-based admission
Cluster: Improve usage of canonical terms in code/docs based on glossary
Lint: Resolve gosec findings and add embedding dist benchmark
Auth: Refactor user management API and CLI commands #98
Tests: Add unit tests
OIDC: Improve CLI commands and add AuthIssuer to users and sessions #782
Auth: Revoke derived sessions & gate app passwords by login state #5647
Go: Apply go fix modernizations across backend packages
Tests: Add unit tests #4973
Auth: Improve legacy user search command and add tests #98
Users: Set the user UID when creating user settings
Tests: Add test for UpdateSubjectCounts, and test for CreateUserSettings where a user settings record doesn't exist
Search: Change time_format to RFC3339 and add "edited" filter #4300
Tests: Use valid fixture IDs so entity tests pass on MariaDB
Events: UID-only camera/lens/country payloads & people refetch #5663 #1307
Metadata: Add Camera Make and Model updates via CLI & API #5663 #5656
Scans: Add scan detection for epson scanner #5703
Docs: Update code comments in internal/entity/category.go and details.go
Backend: Update label photo count and refactor entity fixtures
Code clean-up (make fmt)
Entity: Fix cell lookups
Tests: Refactor unit tests after uid change #4560
Entity: Rename Sanitize* to Clip* and string.go to clip.go
Index: Improve save / update functions, remove orphans
Backend: Refactor test fixtures
Entity: Store created and updated timestamps with second precision
Config: Centralize SQL driver identifiers in pkg/dsn #5588
Auth: Open album share links in the regular user interface #98 #782
Routing: Prefix frontend UI routes with /library #840 #2466
UX: Add batch edit dialog and API endpoints #271 #5324
Auth: Session and ACL enhancements #98 #1746
Assets: Rename example fixtures directory to "samples"
Download: Add Disabled, Originals, MediaRaw & MediaSidecar Flags #2234
Entity: Ensure that UpdateSubjectCounts returns an error if encounted in 2nd SQLite update
API: Ensure slugs are not empty before saving/creating labels #4761
API: Rename /batch/photos endpoint to /batch/photos/edit #271
Tests: Give each package its own MariaDB test database #5753
Tests: Improve isolation and add fixes #5263
Auth: Store session login_at as NULL when no client IP is set #5707
CLI: Add "photoprism vision reset" command to reset metadata #5233
Backend: Call clip.Bytes directly and drop the txt.ClipBytes facade #5638
AI: Rename SampleRadius to ClusterRadius and increase cap to 0.42 #5167
Backend: Rename /internal/tensorflow to /internal/ai
Security: Use individual preview tokens for each user account #98
Files: Redact InstanceID for shared sessions and drop unused search field
Services: Hold back DNG on WebDAV upload when raw sync is off #5744
People: Add SubjectNames() to file entity #22
Videos: Refactor File.UpdateVideoInfos() method #926 #3588 #3559
Folders: Fix slug collision on long ASCII paths #5614 #5615
People: Improve face clustering and indexing #22
Folders: Improve slug collision handling for Unicode paths #5366
Tests: Add fixtures
Entity: Fix label homophone lookups and photo-label caching #5227 #5238
Labels: Reuse renamed label when re-added by previous name #5531
Backend: Compact verbose comments in entity and photoprism workers
Metadata: Add Lens Make and Model updates via CLI & API #5644 #5656
Cards View: Improve camera and lens information #2040 #3077 #3816
Logs: Improve log messages in API and share audit paths
Sharing: Fix single-item access for shared smart albums #5727
Faces: Import XMP regions from HEIC and RAW sources #5712 #5751
Backend: Move crop package to /internal/thumb/crop
People: Add face dist to marker API JSON #22
People: Add skipped test for face reassignment merging people #5764
XMP: Read face markers and names sidecar files #554 #1570 #747 #5712 #5713
AI: Improve the generation, sorting, and filtering of labels #5232
Auth: Refine passcode recovery code comparison
Security: Add gosec fixes with shared URL and fs validation helpers
Tests: Add unit tests #808 #3943
Entities: Improve Stringer interface implementations for logging #4490
Sharing: Align photo search results and details on metadata fields
Docs: Improve code comments in internal/entity/photo*.go
Tests: Fix typo in test fixtures
Albums: Remove photo from review when adding it to an album #4229
Correct KeywordID's with extra Zero
Entity: Fix photo-label caching #5227 #5238
Index: Resolve S2 cell in XMP branch, downgrade geocoding warn
Places: Update entity/photo_location_test.go #5445
Media: Improve layered TIFF & PSD preview support #5383
AI: Add IndexedAt time to indicate when a photo was fully indexed #5167
Tests: Add unit tests #4294
API: Add /batch/photos endpoint to get metadata of selected photos #271
Backend: Rename /internal/remote package to /internal/service
Auth: Rename database tables and delete temporary tables #98 #782
Backend: Clip VARBINARY text columns by bytes to avoid write errors #5638
Tests: Add release-review regression tests #5647 #5638 #5666 #5699 #5733
Faces: Change search to return all face markers, regardless of src #5167
People: Show real name instead of uid in logs #1438 #2182
Auth: Release preview and download tokens from cache when sessions end #5733
API: Update Thumb/ThumbSrc for subjects and labels #4151
People: Improve face thumbnails on overview page #22
Revert "People: Add subject cache and show real name in logs #1438 #2182"
Tests: Isolate the XMP face test databases from the MariaDB run #5753