What a monitoring camera writes down is not what the light did
Two cameras, same room, 30 paired hours — one locked, one on auto. The auto camera removes 83% of the diurnal luminance range and 86% of the colour temperature, and its response is inverted.
Joe Cox, Resoa

Why measure this
An earlier capture of 220 hours produced a 24-hour luminance curve that was flat, at a 1.1x range. The conclusion was that auto-exposure had compensated the daylight cycle away and destroyed the most valuable signal in the dataset, and the advice was to lock the exposure.
That advice was incomplete. Real deployed monitoring cameras all have auto-exposure and auto low-light. What such a camera shows is genuinely useful, and it is simply not what the eye or a photometer sees. Synthetic footage meant to resemble real camera output should reproduce the sensor's response rather than eliminate it. Auto-exposure is a property to be modelled, not purely a defect to be removed.
Modelling it requires measuring it, and measuring it requires ground truth alongside. So the rig now runs both: one camera with exposure and white balance locked, one on auto, same room, same light.
The transfer function
| quantity | locked (true light) | auto (what the camera wrote) |
|---|---|---|
| luminance dynamic range | 1.89x | 1.11x |
| warmth (R/B) dynamic range | 1.64x | 1.07x |
| gamma, A proportional to L^gamma | 1.0 by definition | -0.045 |
| fraction of log luminance range removed | — | 82.9% |
| fraction of log warmth range removed | — | about 86% |
Gamma is approximately zero. The auto camera's output is essentially independent of scene illuminance. This is near-total compensation, not partial.
The hourly curve, and an inversion
| hour | locked luma | auto luma | locked warmth | auto warmth |
|---|---|---|---|---|
| 12 midday | 135.6 | 115.4 | 1.068 | 1.075 |
| 19 dusk | 112.5 | 124.5 | 1.103 | 1.030 |
| 20 | 82.2 | 125.8 | 1.557 | 1.008 |
| 21 to 05 night | 73.7 | 124.6 | 1.735 | 1.008 |
| 07 dawn | 106.0 | 125.1 | 1.377 | 1.018 |
| 11 | 139.2 | 114.7 | 1.060 | 1.065 |
The auto camera's response is inverted, not merely flattened. It writes 124.6 at night and 115.4 at midday — brighter when it is darker. A model that assumed auto-exposure simply compresses the range would get the sign wrong.
Auto white balance destroys colour temperature even more thoroughly than auto exposure destroys luminance. The true warmth signal is large and clean: 1.068 in daylight rising to 1.735 under artificial light at night, a 1.64x swing that unambiguously marks the lighting changeover. The auto camera renders 1.008 to 1.075, which is essentially nothing. Anything that depends on inferring time of day or lighting state from colour is looking at evidence the camera already discarded.
Confirming an earlier finding against ground truth
The auto camera's measured luminance range here is 1.11x. The original 220-hour auto-exposure capture measured 1.1x. Two independent captures, months apart, the same number — and the locked camera now shows the underlying light actually varied by 1.89x. The original diagnosis was correct, and this is the first time it has been checked against ground truth rather than inferred.
Instrument confidence
The locked camera reads 73.65 to 73.70 across eight consecutive night hours. That stability is the evidence the lock is genuinely held rather than silently reverting, which matters because opening a V4L2 device resets its controls. The capture code re-applies the lock after opening the device and reads the controls back to verify.
Limitations
Thirty hours, one room, one camera pair, one sensor model. The transfer function is specific to this hardware; the method generalises, the constants do not.
The locked range of 1.89x is modest because the room has artificial lighting at night. A dark room would show a far larger true range and likely a different compensation fraction. This is a floor on the effect, not a ceiling.
The two cameras do not share an identical viewpoint, so absolute luminance is not directly comparable between them. The comparison is of dynamic range and shape over time, which is viewpoint-robust. Absolute offsets are not claimed.
What it is for
The fitted response is a rendering layer. Synthetic footage generated with physically correct illumination can be passed through it to produce what a deployed camera would actually have recorded: flattened luminance, inverted day-night brightness, and colour temperature almost entirely removed. Without that layer, synthetic monitoring footage is photometrically correct and unlike any real camera's output.
Code and data
Full write-up, code and raw numbers: huggingface.co/resoajoe/loglens-longvideo-drift
Reproduce: code/exposure_tf.py in that repo