v0.12.0 (2026-04-05)
NOTE
These notes were compiled automatically from the commit history. Release notes were not kept for this release, so wording is terse and some changes may be missing.
Added#
- Libraries: Add Edit Library modal.
- Libraries: Add retrying API client for TMDB.
- Music: Add Release page for music.
- Music: Display which track is playing.
- Photos: Add extra security checks for album share links.
- Search: Add link to advanced search.
- Admin: Add audio only mode to transcoder.
- Authentication: Add handler to get all active sessions.
- Authentication: Add role duplicate checks.
- Authentication: Track active sessions in the database.
- Configuration: Basic Music Metadata scraper.
- Apps: Add delete button.
- Apps: Add shuffle button.
- Apps: Basic shuffle works.
- General: Add file upload and download limits.
- General: Add file upload/download size and timeout limits.
- General: Add rate limiting by IP and User. Add user lockout support to simple login.
- General: Add some basic AI agent rules.
- General: Add special read only group attribute.
- General: Add tempfile cleanup.
- General: Allow list of CIDR ranges to exempt from IP rate limiting.
- General: Implement CSRF protections.
Changed#
- Libraries: Cinema uses cinema items and not gallery items.
- Libraries: Cinema uses its own schema and has it’s own navigation.
- Libraries: GalleryCinemaMovieItem not CinemaMovieItem.
- Libraries: GalleryCinemaSeriesItem not CinemaSeriesItem.
- Libraries: Instantly close media player and send stop request async but do not wait.
- Libraries: More filepath sanitization.
- Libraries: Stop transcoder when skipping to next and prev item in transcoder.
- Libraries: Switch all clients to use our retrying API client.
- Libraries: TMDB database functions no longer error out on duplicates.
- Music: Better styling for music album page.
- Music: DB design for music.
- Music: Dialog box fixes, creation fixes, and scanning fixes.
- Music: Improvements to music scanning.
- Music: Initial Music Library implementation.
- Music: More Music changes.
- Music: Permission and matching fixes.
- Photos: Better Album Owner description as Album Manager.
- Photos: Better quality video thumbnails, video thumbnail queue generation, frontend retries thumbnails that haven’t been generated yet.
- Photos: Can download and private flags are now tracked in album struct. Not album permissions.
- Photos: Frontend clears passwords on unmount.
- Photos: Have frontend give the album types the user is allowed to create.
- Photos: Last of the filepath join verification.
- Photos: Safety measures for thumbnail generation.
- Photos: Use shared DB value.
- Admin: Admins can now end transcoders and view them.
- Admin: More dash audio changes.
- Authentication: Api tokens now use jwt library.
- Authentication: Both OIDC and simple login now uses a unified session cookie that is a jwt.
- Authentication: Can delete an active session.
- Authentication: Check session status in DB before allowing user to auth.
- Authentication: Cleanup service for the active sessions.
- Authentication: Comment.
- Authentication: Final massive rbac change.
- Authentication: If session is revoked, we invalidate the session.
- Authentication: Initial RBAC support.
- Authentication: MaxAge JWT spec.
- Authentication: More RBAC plumbing.
- Authentication: More opaque error messages for auth related things.
- Authentication: More permission types as well as well as better default role management.
- Authentication: Move all oidc related middleware files to gallery/oidc package Add helper functions to not expose sensitive OIDC config to other packages Move all JWT validation into auth/jwt.go.
- Authentication: Move helper functions around.
- Authentication: Move jwt validation functions to jwt library.
- Authentication: No more api token session tracking.
- Authentication: No more magic album link cookie.
- Authentication: Oidc security fixes.
- Authentication: Only owners can add users to the owner/admin group and users cannot self manage their groups.
- Authentication: Rename APIToken auth path.
- Authentication: Session Management Refactor.
- Authentication: Session validation happens in jwt.go.
- Authentication: Specific permission for viewing directories.
- Authentication: Tie some system groups to admin privileges.
- Authentication: Transcoder JWTs use jwt library.
- Authentication: Update permissions.
- Authentication: Use typed permission instead of string.
- Authentication: User preference update permission.
- Configuration: Validate jwt secret is good enough.
- Apps: Audio playback actually works.
- Apps: Audio player improvements.
- Apps: Better directory setting UI.
- Apps: Better player start.
- Apps: Cinema item improvmenets.
- Apps: Don’t show HDR video in minimized video player since it’ll be washed out.
- Apps: End old transcoder when we play next.
- Apps: Frontend can actually play music.
- Apps: HeroUI V3 Upgrade.
- Apps: Logout works.
- Apps: Make transcoder item type agnostic.
- Apps: Minimize photos in lightbox.
- Apps: Move simple search.
- Apps: Music player works for individual tracks.
- Apps: Pass more accurate fallbacks to capabilities.
- Apps: Pass transcoder jwt.
- Apps: Rename suffle.
- Apps: Rename video player to media player.
- Apps: Restarting playback works.
- Apps: Single track looping is more reliable now.
- Apps: Transcoder and Gallery-UI video player are Type Agnostic.
- Apps: Transcoder restarts work on ios on seek stall.
- Apps: UI actually tries to play music now.
- Apps: UI improvements.
- Apps: Unified video player refactor to make easier to read.
- Apps: Unify audio and video player.
- Apps: Use shared minimized video player.
- Apps: User can see active sessions.
- Apps: We auto play after seeking and restarting. We also debounce correctly.
- General: Album ID’s are always unique and start above 10,000. refactor a shared function.
- General: Better admin permissions.
- General: Better login experience for gallery-app.
- General: CORS.
- General: Complex endpoints get rate limits.
- General: Every http error message uses standardized messaging.
- General: Item Can Download attribute stored on item.
- General: Logging parameter names is bad.
- General: Lots of bug fixes AND broken initial watch together stuff.
- General: Magic share uuids work for videos more securely now.
- General: More csp.
- General: More file upload security.
- General: More security fixes.
- General: Permission middleware now gives no information in return codes.
- General: Simple RBAC plumbing.
- General: Some filepath cleaning.
- General: Standardized API return errors.
- General: Unique users and tags above 10000.
- General: Use JWT for all transcoder operations instead of a cookie.
- General: Watch together fixes.
Removed#
- Admin: Remove shared types.
- Authentication: Remove uneeded comment.
- General: Remove backward compatibility.
Fixed#
- Libraries: Fix music brainz sync as well as audio only player.
- Libraries: Fix no user fallback.
- Music: Fix verbose logging.
- Photos: Fix adding user permissions.
- Photos: Fix album edit modal not working.
- Photos: Fix custom album thumbnails not working.
- Photos: Fix frontend build.
- Photos: Fix item upload and video thumbnail generation.
- Photos: Fix video player not restarting on seek.
- Admin: Fix file validation.
- Authentication: Fix album JWT management.
- Authentication: Fix bug where RBACs don’t check album level permissions for an item.
- Authentication: Fix bug where if you owned an album you were granted permission to create additional albums.
- Authentication: Fix cookie vulnerability.
- Authentication: Fix the session id and claim JTI never matching.
- Authentication: Fixed a bug where removing a user from a group didn’t remove their priveleges.
- Apps: Fix CSP.
- Apps: Fix colors.
- Apps: Fix gallery-app errors.
- Apps: Fix minimize button placement on cinema video.
- Apps: Fix mobile seek.
- Apps: Fix react hook error when clicking settings button on album page.
- Apps: Fix the drop downs for options.
- Apps: Fix videos not playing on gallery app.
- General: Fix frontend UI.
- General: Fix gallery-ui map.
- General: Fix video playback on safari.