Commit graph

14 commits

Author SHA1 Message Date
Cathie Integra
3f096a592b Links: Use canonical trailing-slash form for website URLs 2026-06-24 17:20:30 +02:00
Ömer Duran
3ea547a564
Lightbox: Add support for 360° photos and videos #352 #4718 #5623
* Lightbox: Add 360° photo and video sphere viewer support

Wires Photo Sphere Viewer v5 into the lightbox for equirectangular
media. Backend detects UsePanoramaViewer and IsPhotosphere markers
alongside ProjectionType, and exposes Panorama + Projection in the
viewer / search result DTOs so the frontend can dispatch on the
projection type. The renderer (ThreeJS + PSV core + video plugin +
equirectangular video adapter) is lazy-loaded into a dedicated
webpack chunk so the base bundle is unchanged for users with no
360° media. PhotoPrism's existing lightbox controls drive the
underlying HTMLVideoElement that the PSV adapter creates for 360°
videos. Includes Vitest coverage for the sphere helper and the
lightbox dispatch, plus a TestCafe smoke spec and three new
ExifTool metadata fixtures.

* Lightbox: Fix 360° controls leak, hide zoom button, add sidebar icon

* Lightbox: Fix 360° touch panning and navigation arrows

* Lightbox: Fix fast swipe switching photos on 360° slides

Suppress PhotoSwipe swipe/drag navigation at its source via the dispatched pointer hook while a sphere slide is active, since the per-element gesture trap is outrun by a fast swipe whose pointer leaves the sphere container (touch-capable Windows). UI controls stay excluded so buttons and arrows still navigate.

* Lightbox: Route only equirectangular media to the 360° viewer

Routing was based on the loose photo_panorama flag for videos, which is also
true for cubemap and merely-wide (aspect > 1.9) videos, so non-equirectangular
media wrongly opened, distorted, in the sphere viewer. Route strictly on the
equirectangular projection for both photos and videos. Surface the video file's
projection in the viewer DTO via Photo.MediaProjection() (the primary search row
is a poster JPEG with no projection). Add an MP4 metadata-detection test.

* Lightbox: Open tagless 2:1 360° videos in the sphere viewer

Many 360° videos carry no projection tag PhotoPrism can read, so strict
equirectangular-projection routing left them in the flat player. Fall back to
equirectangular's defining 2:1 frame for panorama-flagged videos without a
projection, via is360Equirectangular() in common/sphere.js, while cubemap and
ultrawide (~2.35:1) clips stay flat.

* Tests: Make the 360° sphere video test assert instead of skipping
2026-06-17 03:26:25 +02:00
Michael Mayer
570a563748 Docs: Bump copyright year to 2026 in Go package headers 2026-05-25 14:39:38 +00:00
Michael Mayer
61ced7119c Auth: Refactor cluster configuration and provisioning API endpoints #98
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-09-24 08:28:38 +02:00
Michael Mayer
9c79f54994 Viewer: Add TimeZone to thumbnail model data #4812 #4905
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-03-31 20:51:26 +02:00
Michael Mayer
78f5104020 Thumbs: Add "fit_5120" size suitable for Retina 5K displays #4810
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-02-25 11:21:38 +01:00
Michael Mayer
420fa9946c Viewer: Set native video stream src based on mimetype #1307 #3168 #4698
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-01-27 13:21:05 +01:00
Michael Mayer
ebeaaf568b Metadata: Set labels based on matching keywords in the caption #4603
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-01-17 06:24:29 +01:00
Michael Mayer
8f593593b2 Viewer: Refactor thumb URL generation in the backend API #4704 #4722
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-01-15 19:13:13 +01:00
Michael Mayer
1a938a387f Viewer: Add media codec to API response data #1307 #4698 #4708
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-01-10 15:20:43 +01:00
Michael Mayer
cedb306929 Viewer: Add Type, Lat, Lng, and Duration to model data #1307 #4698 #4708
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-01-10 13:31:08 +01:00
Michael Mayer
01f15fa406 Backend: Update copyright notices
Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-01-09 10:28:17 +01:00
Michael Mayer
c97f7cc3c8 UX: Proof-of-concept for hybrid photo/video viewer #1307
This new viewer is based on PhotoSwipe v5 instead of v4, which provides
the customization options needed for a hybrid viewer. However, some of
the features available in the old viewer are still missing.
See the "Todo: ..." code comments for details.

Signed-off-by: Michael Mayer <michael@photoprism.app>
2025-01-03 14:34:45 +01:00
Michael Mayer
f47b1ef81a Backend: Move viewer package to /internal/entity/search/viewer
Signed-off-by: Michael Mayer <michael@photoprism.app>
2024-07-02 08:06:02 +02:00