Why log · How it works · In Resolve · Measurements · Build
Development prototype. Built for and tested on the Xiaomi 15 Ultra.
Screenshot from the Xiaomi 15 Ultra. Settings, sound level and locks on the left; lenses, record button and clips on the right.
A phone’s camera app finishes the picture before it saves it: it adds contrast and sharpening and lets bright skies clip.
That can’t be undone in the grade. Latitude records a flat Apple Log image, so the highlights are still in the file.
The curves illustrate the idea. They aren’t measured from a particular phone.
Resolve already has Apple Log (Rec.2020 primaries) as an input color space.
A metadata key in the file makes Resolve select it on import, without a LUT or manual tagging.
Lens, ISO, shutter angle, white balance and a time-of-day timecode show up in the metadata panel.
Checked with DaVinci Resolve Studio 21.1 on Linux. Sound is 24-bit PCM, because Resolve on Linux can’t decode AAC.
If a phone ignores the custom tone curve in 10-bit, Latitude records locked HLG instead. It doesn’t convert HLG to log, which would add no information.
Measured on the Xiaomi 15 Ultra: startup time from the app’s log, frame timing with ffprobe,
lip sync with a clap test, and levels from the decoded code values.
| Stage | What | Status |
|---|---|---|
| 0 | Probe what the camera, image processor and encoder support | Done |
| 1 | HLG 10-bit with exposure, white balance and focus locked | Done |
| 2 | Apple Log through the image processor’s tone curve, set by Resolve on import | Done |
| 3 | RAW to Apple Log on the GPU | Parked |
Working today: volume-button recording, AE · AWB · AF lock, open gate 4096×3072 HEVC 10-bit at 150 Mbit/s,
Apple Log · HLG · Rec.709, matched colors on every lens, 24-bit PCM sound, crash-safe files, zebras,
thermal warning, standby after 90 seconds, timecode and lens metadata.
Android 14 or later. Kotlin, Jetpack Compose and Camera2.
Needs JDK 21 and the Android SDK; the scripts expect them in ~/Android.
scripts/setup-usb.sh # once: allow adb to reach the phone over USB (asks for sudo)
scripts/phone.sh # build the optimized app, install it and show the startup time
scripts/phone.sh pull # copy probe results and test clips into testclips/
python3 scripts/readme-art.py # redraw the illustrations in assets/
