The JPS eye-order study (2026-10-03) found the wild split 4/4 between right-on-left and left-on-left across 8 independent pairs. The .JPS extension promises a side-by-side pair; it cannot promise eye order. So the viewer needs both a default and an override.
What we already know:
- VRex 1997 spec default: right field first. Bill Costa's test repo documents its JPS files as right/left, consistent with the spec.
- Honor the
_JPSJPS_ APP3 descriptor when present: Pillow exposes it via Image.open(...).applist as ('APP3', payload) tuples — parsed during normal JPEG open, zero extra I/O, no exiftool (latency-safe). Bit 0x040000 = left-first. Almost nobody writes it, but readers should still check.
- Default: right-eye-on-left. Swap-eyes control always available, and the active assumption is shown in the UI ("Stereo: Right eye left (JPS default)" style).
- This is first-ship scope (v1.3.3): without it, half the real-world files render inside-out and the user has no recourse.
Test files: Bill Costa ti1 (right-on-left) and depth-black-white (left-on-left, labeled) — see the test-matrix roadmap issue.
The JPS eye-order study (2026-10-03) found the wild split 4/4 between right-on-left and left-on-left across 8 independent pairs. The
.JPSextension promises a side-by-side pair; it cannot promise eye order. So the viewer needs both a default and an override.What we already know:
_JPSJPS_APP3 descriptor when present: Pillow exposes it viaImage.open(...).applistas('APP3', payload)tuples — parsed during normal JPEG open, zero extra I/O, no exiftool (latency-safe). Bit0x040000= left-first. Almost nobody writes it, but readers should still check.Test files: Bill Costa
ti1(right-on-left) anddepth-black-white(left-on-left, labeled) — see the test-matrix roadmap issue.