13.5 Section 13: Celestial & Environmental Data

Viewfinder compass with true north and sun bearing

Live camera heading, true-north correction, sun bearing tick, full sun-path arc, next event countdown, and time-scrub slider — all on the viewfinder.

Where to find it

Viewfinder top-right corner (badge), Composition grid picker Compass overlay (under Bubble level)

Summary

A floating compass badge in the top-right of the viewfinder shows where the camera is pointing in degrees and cardinal direction. Optional true-north correction uses the active ephemeris location to apply local magnetic declination. A yellow tick marks the sun's compass bearing on the dial. An optional colour-segmented arc draws today's full sun trajectory around the rim so the photographer can see where the light has been and where it is going. An optional countdown badge under the dial shows the next celestial event. An optional time-scrub slider lets the photographer drag the sun position forward and backward through the day to preview future light direction. The bearing is stamped onto every logged shot when stamping is on.

Tap to zoom — actual screenshot from the app

More views

How it works

Most director's finders skip the compass and assume you know which way the sun moves. This one builds it into the viewfinder so you can frame a shot, see where the camera is pointing, where the sun is sitting on that arc, and how much room you have before the light direction changes. Useful for location scouting, golden hour planning, and recording shot direction in the shot log so months later you can reconstruct what you shot from where, facing which way.

Turning it on

Open the Composition grid picker from the viewfinder toolbar (the small grid icon). Right under the Bubble level toggle you will find Compass overlay. Flip its master switch to put a small dial in the top-right corner of the viewfinder, then dial in the sub-toggles for true north, sun tick, dial vs pill, and shot-log stamping. Tap the dial on the viewfinder to switch between the full circular face and a compact numeric pill. Long-press the badge to reopen the picker without going through the toolbar.

Reading the dial

The red arrow at the top of the dial is the direction you are aiming. When you hold the phone vertically to frame a shot, the arrow is the back camera direction. When the phone is flat on a surface, aimed at the ground, or aimed straight up at the sky, the dial automatically switches to the direction the top edge of the phone is pointing instead, because the camera direction has no horizontal bearing in those poses. The switch is seamless: as you raise the phone from flat to vertical, the dial transitions from phone-top bearing to camera bearing without a jump. The rotating ring carries the cardinal letters N / E / S / W and tick marks every 30 degrees. The numeric readout in the centre is the bearing in degrees plus the cardinal abbreviation. A small T or M after the cardinal tells you whether the reading is degrees true or degrees magnetic.

True north vs magnetic north

Magnetic north drifts up to 20 degrees away from true north depending on where on the planet you are. Leaving true-north correction on means the app uses your active Sun & Moon location to compute the local magnetic declination via the World Magnetic Model and adds it to the raw magnetometer reading. With no location set, the app silently falls back to magnetic so the badge still works.

The yellow sun tick

When the sun is above the horizon and a location is known, a small yellow dot is drawn on the dial at the sun's compass bearing. As you swing the camera, the dot rotates with the cardinal letters and the sun stays anchored to its true direction. Lining the camera up with the dot puts the sun in front of you, putting it on the opposite side of the dial puts the sun behind you. Toggle this off in Settings if you find it distracting.

Sun path arc (today's full trajectory)

Turn on Sun path arc to draw today's full sun trajectory around the outer rim of the dial as small colour-coded dots: cool blue for blue hour, warm orange for golden hour, pale yellow for mid-day. Past samples are dimmed; future samples are bright. The yellow live tick sits on the same path. Useful for scouting a location at noon and seeing exactly where the sun will be at 5 pm without leaving the viewfinder.

Next event countdown badge

Turn on Next event countdown to show a small pill under the dial that reads "Golden hour ends in 14:32" or "Sunset in 1:23:04" — the next significant celestial event from the active ephemeris location. The badge ticks the seconds in real time and rolls over to the next event automatically. When all of today's events have passed it falls through to tomorrow's dawn.

Time scrub slider (preview future sun)

Turn on Time scrub to add a thin horizontal slider under the dial. Drag the slider to move the yellow sun tick (and the position on the path arc, if shown) to where the sun will be at any moment from six hours in the past to six hours in the future. The wall-clock time of the scrubbed instant is displayed above the slider; a Now affordance resets it. Lets you preview a sunset shot at noon without doing arithmetic.

Pitch indicator

A thin horizontal line across the dial shows how tilted the camera is up or down. At horizon level the line sits across the middle; tilt up and the line drops below the centre, tilt down and it rises above. Plus or minus 45 degrees fills the dial vertically. Useful for low and high angle shots when you want the pitch to feel intentional, not accidental.

Accuracy ring and calibration

The outer ring around the dial is colour coded for sensor accuracy: green is high, yellow is medium, orange is low, red is unreliable. If it goes red the badge replaces its face with a 'Calibrate (figure-8)' prompt. Wave the phone in a slow figure-8 motion for a few seconds to re-prime the magnetometer. Driving past large pieces of iron, standing on a steel-framed bridge, or holding the phone near a speaker can all knock the magnetometer out of calibration.

Stamp on shot log

When on, every shot you log carries the camera heading and the applied declination as two extra columns in the shot log database (and the CSV export). Magnetic readings are recorded with declination = 0 so analytics can tell magnetic and true apart later. Off leaves the columns null. Useful for location scouting, multi-day projects, and reconstructing what you shot facing which way long after the trip is over.

Devices without a magnetometer

A small minority of budget Android phones ship without a magnetic field sensor at all. On those devices the system reports no compass capability, the Compass overlay row in the Composition grid picker is greyed out, and the subtitle explains why. The overlay never tries to wake up sensors that aren't there.

Battery cost

Sensors are only registered while the master toggle is on. When you turn the overlay off, the listener is unregistered and the battery cost drops to zero. The sun azimuth recomputation runs every 30 seconds and is cheap. Declination only recomputes when you change ephemeris location.

Implementation notes (for developers)
CompassSensor uses TYPE_ROTATION_VECTOR with an ACCELEROMETER + MAGNETIC_FIELD fusion fallback at SENSOR_DELAY_GAME. Bearing is hybrid: camera direction when |horiz_cam|^2 >= |horiz_top|^2, phone-top direction otherwise. Sidesteps the atan2(0,0) freeze when the camera points straight up or down (flat-on-table, overhead shot, app startup). Pitch is always camera-direction so the level bar still tracks tilt. Declination via android.hardware.GeomagneticField keyed to the active EphemerisLocation. Sun azimuth + sun-path samples + next celestial event come from SunMath.sunPosition / sunPathSamples / sunEvents (all added with this feature) and are recomputed on location change + every 30 s. Countdown badge ticks its own 1 s clock on the UI side. Hardware capability checked via PackageManager.FEATURE_SENSOR_COMPASS so devices without a magnetometer see a clear 'not supported' empty state. State lives in standalone StateFlows on the ViewModel (D8 ceiling on ViewfinderUiState). Persisted in Profile.compass* (DB v63 migration adds the path/countdown/scrub toggles on top of the v62 baseline).

Search documentation