Equirectangular (2:1) frames are the primary case. Partial/cropped equirectangular strips and fisheye frames are supported if you declare their geometry below.
Detected from GPano XMP and aspect ratio where possible. Override if your frames are cropped or non-standard.
Mapillary stores the heading, position and capture time it computed for every uploaded image. If your local copies have lost their metadata — cropped exports, screenshots, re-saved PNGs — pull the originals back instead of guessing.
You need a free access token from mapillary.com → Dashboard → Developers → register an application. The token stays in this page and is sent only to Mapillary's own API.
Mapillary's computed_compass_angle comes from its own structure-from-motion pass. It is usually good but it is not ground truth — SunSync will still solve from the sun where it can and will report both, so you can see whether they agree.
The sun's computed position is only as good as the clock and the timezone. Neither is recorded reliably by most 360 cameras.
Yaw offset is the angle you must add to a frame's horizontal position to get a true compass bearing.
Once the heading is known, every pixel has an angular distance from the sun. That is the quantity scattering theory makes predictions about, and unlike a frame position it is comparable across dates, sites and cameras.
Two captures are only physically comparable if the sun was in a similar place. This finds the frames and the datasets where that is true.
One row per frame, joinable on filename stem — the key the Batch Image Analyzer already uses for its compare tool. Nothing is resampled and the imagery is untouched.
Writes new files with the frame rolled so that column 0 is true north.
The Analyzer needs three small additions to consume this file. They are described in the design memo; in short:
runCompare() already reports onlyA/onlyB.Until those land, the CSV is still directly useful: it tells you which frames share a heading, which are gated, and which datasets are solar-comparable.
An equirectangular 360° frame has a horizontal axis that looks like a compass but usually isn't one: almost no consumer 360 camera writes its heading into the file. SunSync 360 recovers that heading by finding the sun in the frame and comparing it with where the sun astronomically had to be, given the GPS position and timestamp already in the EXIF.
The check that makes it trustworthy: solar elevation does not depend on heading at all. So the gap between the sun's measured elevation in the frame and its computed elevation is a free, independent confidence score for every frame. Small residual → the detection found the sun. Large residual → it found a bright cloud, and the frame is gated out rather than silently mis-registered.
Second opinion: where the sun can't be trusted or isn't visible, the tool cross-correlates the static terrain band below the horizon between frames. That gives a relative heading, which one sun-anchored frame converts to absolute.
Nothing leaves your machine. Files are read in the browser; no upload, no server.