photoprism/internal/meta/testdata
Ö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
..
motion Index: Improve detection of embedded videos #439 #1739 #2788 2023-09-23 13:37:42 +02:00
xmp Index: Improve support for metadata in XMP sidecar files #2260 #2828 #5563 2026-06-17 01:53:28 +02:00
altitude.jpg Metadata: Ensure the altitude is not out of range and fix logs #3182 2023-02-09 11:51:26 +01:00
altitude.json Search: Include RAW files in results by default #2040 2023-10-06 02:22:48 +02:00
animated.gif File Types: Add experimental support for animated GIFs #590 #2207 2022-04-13 22:17:59 +02:00
apple-test-2.xmp Metadata: Add support for XMP sidecar CreateDate and Keywords (#1161) 2021-04-26 13:54:14 +02:00
aurora.jpg Metadata: Add test files aurora.jpg and aurora.jpg.json #2640 2022-08-24 21:16:16 +02:00
aurora.jpg.json Metadata: Add test files aurora.jpg and aurora.jpg.json #2640 2022-08-24 21:16:16 +02:00
avi-magicyuv.json Video: Improve codec detection and exclude-list alias matching #5617 2026-05-30 21:02:19 +00:00
berlin-landscape.json Backend: Swap width and height to fix rotation when reading from JSON 2020-05-14 14:28:23 +02:00
buggy_panorama.jpg Metadata: Ensure GPS lat/lng are within a valid range #2109 2022-12-28 20:14:35 +01:00
buggy_panorama.json Metadata: Ensure GPS lat/lng are within a valid range #2109 2022-12-28 20:14:35 +01:00
canon_eos_6d.json Exiftool: Fix CLI parameters and add tests #1388 #1401 2021-07-12 21:41:44 +02:00
canon_eos_6d.xmp Backend: Proof-of-concept for indexing XMP files #68 2020-01-13 23:14:10 +01:00
cr2_num_off.json Exiftool: Fix CLI parameters and add tests #1388 #1401 2021-07-12 21:41:44 +02:00
cr2_num_on.json Exiftool: Fix CLI parameters and add tests #1388 #1401 2021-07-12 21:41:44 +02:00
date-creation.mov.json Metadata: Add support for CreationDate in ExifTool JSON files #727 2020-12-22 07:47:16 +01:00
date-iphone8.mov.json Metadata: Add support for CreationDate in ExifTool JSON files #727 2020-12-22 07:47:16 +01:00
date-iphonex.mov.json Metadata: Add iPhone X mov example JSON file #727 2020-12-22 09:28:52 +01:00
date.heic.xmp Migrate: Default to UTC when reading time from XMP #636 2022-10-31 16:46:20 +01:00
date.mov.json Metadata: Support time zones in ExifTool JSON files #727 2020-12-22 01:52:36 +01:00
datetime-zero.json Metadata: Ignore unknown values when parsing timestamps #2510 2022-07-22 12:38:25 +02:00
digikam.jpg Metadata: Sanitize keywords, subject & artist #490 2020-10-19 11:50:54 +02:00
digikam.json Metadata: Sanitize keywords, subject & artist #490 2020-10-19 11:50:54 +02:00
earth.ogv.json Videos: Stream OGV, VP8, VP9, AV1, WebM, and HEVC if supported #2461 2022-06-24 06:59:22 +02:00
example.gif File Types: Add experimental support for animated GIFs #590 #2207 2022-04-13 22:17:59 +02:00
example.gif.json File Types: Add experimental support for animated GIFs #590 #2207 2022-04-13 22:17:59 +02:00
exif-example.tiff Metadata: Use mime type to determine file format and exif parser #391 2020-07-19 16:39:43 +02:00
fstop-favorite.xmp XMP: Add support for reading fstop:favorite flag (#1873) 2023-07-23 15:43:32 +02:00
gif.json File Types: Add experimental support for animated GIFs #590 #2207 2022-04-13 22:17:59 +02:00
gopher-original.json Backend: Swap width and height to fix rotation when reading from JSON 2020-05-14 14:28:23 +02:00
gopher-preview.jpg Indexing bug fixes and UX improvements 2020-06-04 14:56:27 +02:00
gopher-telegram.json Backend: Swap width and height to fix rotation when reading from JSON 2020-05-14 14:28:23 +02:00
GOPR0533.json Exiftool: Fix CLI parameters and add tests #1388 #1401 2021-07-12 21:41:44 +02:00
gopro_hd2.jpg Optimize images 2020-09-21 17:40:58 -04:00
gphotos-1.json Backend: Import JSON metadata from Google Photos 2020-07-11 16:46:29 +02:00
gphotos-2.json Backend: Import JSON metadata from Google Photos 2020-07-11 16:46:29 +02:00
gphotos-3.json Backend: Import JSON metadata from Google Photos 2020-07-11 16:46:29 +02:00
gphotos-4.json Backend: Import JSON metadata from Google Photos 2020-07-11 16:46:29 +02:00
gphotos-album.json Backend: Import JSON metadata from Google Photos 2020-07-11 16:46:29 +02:00
gps-2000.jpg Optimize images 2020-09-21 17:40:58 -04:00
gps-2000.json Support GPSVersionID 2.0.0.0 #295 2020-05-06 08:03:57 +02:00
huawei-gps-error.jpg Optimize images 2020-09-21 17:40:58 -04:00
Iceland-P3-n.json JPEG: Convert Apple "Display P3" colors to standard sRGB #1474 2021-12-09 07:00:39 +01:00
Iceland-P3.jpg JPEG: Convert Apple "Display P3" colors to standard sRGB #1474 2021-12-09 07:00:39 +01:00
Iceland-P3.json JPEG: Convert Apple "Display P3" colors to standard sRGB #1474 2021-12-09 07:00:39 +01:00
Iceland-sRGB.jpg JPEG: Convert Apple "Display P3" colors to standard sRGB #1474 2021-12-09 07:00:39 +01:00
Iceland-sRGB.json JPEG: Convert Apple "Display P3" colors to standard sRGB #1474 2021-12-09 07:00:39 +01:00
image-2011.jpg Backend: Add support for DateTime in Exif metadata #304 2020-05-15 11:15:15 +02:00
iphone-mov.json Videos: Support H.264/AVC .mov files 2020-05-15 09:39:32 +02:00
iPhone_6s.json Metadata: Add JSON tests for iPhone 6s and 14 Pro #2876 2022-11-15 17:11:32 +01:00
iphone_7.heic Improve test coverage (#206) 2020-01-19 13:27:15 +01:00
iphone_7.json Support GPSVersionID 2.0.0.0 #295 2020-05-06 08:03:57 +02:00
iphone_7.xmp Backend: Proof-of-concept for indexing XMP files #68 2020-01-13 23:14:10 +01:00
iPhone_14_Pro.json Metadata: Add JSON tests for iPhone 6s and 14 Pro #2876 2022-11-15 17:11:32 +01:00
iptc-2014.jpg Metadata: Add IPTC 2021.1 JSON/YAML Schemas incl. test files #1143 #2252 2022-04-14 12:18:05 +02:00
iptc-2016.jpg Metadata: Add IPTC 2021.1 JSON/YAML Schemas incl. test files #1143 #2252 2022-04-14 12:18:05 +02:00
iptc-2017.jpg Metadata: Add IPTC 2021.1 JSON/YAML Schemas incl. test files #1143 #2252 2022-04-14 12:18:05 +02:00
iptc-2019.jpg Metadata: Add IPTC 2021.1 JSON/YAML Schemas incl. test files #1143 #2252 2022-04-14 12:18:05 +02:00
iptc-2021.jpg Metadata: Add IPTC 2021.1 JSON/YAML Schemas incl. test files #1143 #2252 2022-04-14 12:18:05 +02:00
iptc-fields-500.jpg Tests: Add unit tests for new exiftool tags 2022-05-25 17:26:26 +02:00
iptc-fields-500.json Tests: Add unit tests for new exiftool tags 2022-05-25 17:26:26 +02:00
keywords.jpg Metadata: Add keywords tests #1153 2021-05-01 10:52:28 +02:00
keywords.json Exiftool: Fix CLI parameters and add tests #1388 #1401 2021-07-12 21:41:44 +02:00
kodak-slide-n-scan.json Scans: Add support for "KODAK Slide N Scan" digital film scanner #4581 2024-10-18 02:50:08 +02:00
ladybug.jpg Optimize images 2020-09-21 17:40:58 -04:00
ladybug.json Exiftool: Fix CLI parameters and add tests #1388 #1401 2021-07-12 21:41:44 +02:00
ladybug.xmp Metadata: Exclude null bytes from Exif #252 2020-02-21 02:15:07 +01:00
mkv-vfw.json Video: Recognize MagicYUV in the probe and exclude the VFW wrapper #5617 2026-05-30 21:29:12 +00:00
mov.json Metadata: Add test for mov video JSON files #3559 2023-08-15 14:19:08 +02:00
mp4.json Backend: Read from JSON sidecar files (created by exiftool) #4 #243 2020-05-13 20:53:15 +02:00
MVI_1724.MOV.json Videos: Extract local time from DateTimeOriginal if possible #2640 2022-08-24 17:50:22 +02:00
newline.json Metadata: Add workaround for exif strings containing \n or \r 2021-02-13 18:11:44 +01:00
no-exif-data.jpg Optimize images 2020-09-21 17:40:58 -04:00
notebook.jpg Metadata: Add test case for bad Exif rotation #637 2020-12-05 00:46:54 +01:00
NOTICE.md Backend: Change Markdown table alignment in internal/ and pkg/ 2026-02-21 05:13:57 +01:00
orientation.jpg Optimize images 2020-09-21 17:40:58 -04:00
orientation.json Indexing bug fixes and UX improvements 2020-06-04 14:56:27 +02:00
out-of-range-500.jpg Optimize images 2020-09-21 17:40:58 -04:00
P7250006.json Backend: Add testdata for json files belonging to videos with information about camera 2020-09-23 16:36:55 +02:00
P9150300.json Backend: Add testdata for json files belonging to videos with information about camera 2020-09-23 16:36:55 +02:00
panorama360.jpg Optimize images 2020-09-21 17:40:58 -04:00
panorama360.json Index image projection and add panorama filter 2020-07-16 13:02:48 +02:00
panorama360_video.json Lightbox: Add support for 360° photos and videos #352 #4718 #5623 2026-06-17 03:26:25 +02:00
panorama_cubemap.json Lightbox: Add support for 360° photos and videos #352 #4718 #5623 2026-06-17 03:26:25 +02:00
panorama_isphotosphere.json Lightbox: Add support for 360° photos and videos #352 #4718 #5623 2026-06-17 03:26:25 +02:00
panorama_usepanoramaviewer.json Lightbox: Add support for 360° photos and videos #352 #4718 #5623 2026-06-17 03:26:25 +02:00
photoshop.jpg Optimize images 2020-09-21 17:40:58 -04:00
photoshop.json Docs: Update URL 2021-12-12 20:48:05 +01:00
photoshop.xmp Docs: Update URL 2021-12-12 20:48:05 +01:00
pxl-mp4.json Metadata: Fix time zone for MP4 videos #1388 2021-07-13 17:56:26 +02:00
pythagoras.gif File Types: Add experimental support for animated GIFs #590 #2207 2022-04-13 22:17:59 +02:00
pythagoras.json File Types: Add experimental support for animated GIFs #590 #2207 2022-04-13 22:17:59 +02:00
quicktimeutc_off.json Exiftool: Fix CLI parameters and add tests #1388 #1401 2021-07-12 21:41:44 +02:00
quicktimeutc_on.json Exiftool: Fix CLI parameters and add tests #1388 #1401 2021-07-12 21:41:44 +02:00
README.md Cleanup: Fix formatting of Markdown files 2026-02-14 12:10:43 +01:00
screenshot.png Optimize images 2020-09-21 17:40:58 -04:00
ship.jpg Optimize images 2020-09-21 17:40:58 -04:00
smallFiji.JPG Backend: Add testdata 2020-10-27 09:30:20 +01:00
smallFiji.json Backend: Add testdata 2020-10-27 09:30:20 +01:00
snow.jpg Metadata: Ignore invalid Exif GPS coordinates #736 2020-12-23 18:43:52 +01:00
snow.json Exiftool: Fix CLI parameters and add tests #1388 #1401 2021-07-12 21:41:44 +02:00
sony_mp4_exiftool.json Metadata: Read Zulu formatted timestamps from Exiftool JSON #2082 2022-02-28 19:12:54 +01:00
stream.webm.json Videos: Stream OGV, VP8, VP9, AV1, WebM, and HEVC if supported #2461 2022-06-24 06:59:22 +02:00
subject-1.json Metadata: Store and compare data source for details #755 2020-12-31 13:51:31 +01:00
subject-2.json Metadata: Store and compare data source for details #755 2020-12-31 13:51:31 +01:00
timeoffset.json Metadata: Use UTC offset if actual time zone is unknown #3780 2023-10-21 00:11:11 +02:00
tweethog.png Optimize images 2020-09-21 17:40:58 -04:00
uuid-copy.json XMP: Group files based on DocumentID and Instance ID #335 2020-05-27 13:40:21 +02:00
uuid-imagemagick.json XMP: Group files based on DocumentID and Instance ID #335 2020-05-27 13:40:21 +02:00
uuid-original.json XMP: Group files based on DocumentID and Instance ID #335 2020-05-27 13:40:21 +02:00
video_num_on.json Exiftool: Fix CLI parameters and add tests #1388 #1401 2021-07-12 21:41:44 +02:00
webm-vp8.json Videos: Stream OGV, VP8, VP9, AV1, WebM, and HEVC if supported #2461 2022-06-24 06:59:22 +02:00
webm-vp9.json Videos: Stream OGV, VP8, VP9, AV1, WebM, and HEVC if supported #2461 2022-06-24 06:59:22 +02:00
yoga-av1.webm.json Videos: Stream OGV, VP8, VP9, AV1, WebM, and HEVC if supported #2461 2022-06-24 06:59:22 +02:00

Metadata Test Files

You may use ImageMagick to create smaller versions of images to be stored in this repository:

convert original.JPG -resize 500 small.JPG

JSON sidecar files for testing can be created with exiftool:

exiftool -j example.jpg > example.json