02 / 10
LogGrade
- Swift
- ffmpeg
- Bash
- Colour science
Source repository https://github.com/moritzsalla/LogGrade-macOS

A Mac app that grades iPhone Apple Log footage to Rec.709 in one ffmpeg pass: footage in, a look, a file out.
iPhones from the 15 Pro on shoot Apple Log, with real highlight headroom, 10-bit colour and no baked-in tone mapping or sharpening. The files look flat and grey until they are converted and graded, and the tools that do that well are full editors. It started as a command line tool for my own footage. The app came after, because a terminal is a poor place to judge a picture.
The preview is the render
Most grading tools approximate while you drag and render properly on release. LogGrade grades every preview with the full chain, so there is no slower render waiting behind it.
The plan had two tiers. Before building the fast one I measured how far an approximation drifts from ffmpeg’s output: furthest on saturated colour, and in a way none of seven candidate causes explained. Numbers that are wrong in a way I can measure but not explain were the worse option, and the exact render turned out fast enough to be the only one. The preview sits about 1.3 code values from the final render on average. The worst pixels are on hard edges, because the preview resamples before grading and the render after.

A reference
The render chain is a fork of the command line tool, frozen at one commit. At default settings it has to produce byte-identical output to its precursor, and a test asserts it, so the engine can be rewritten without taking on faith that the image survived.
Halation
Halation is the warm glow bright things spill into the dark around them. It is spatial, so no lookup table can produce it, and where it sits in the chain decides whether it works. After the conversion every highlight has hit the same display ceiling, and a sky glows like a white car. So it is computed before, in linear Apple Log, which still holds about twelve stops of difference.
It adds only the difference between the blurred highlights and the highlights themselves, clamped at zero. A bright field is left alone and the glow lands on the dark side of an edge, which is where halation appears.
The window

The interface is a measuring instrument that makes pictures, closer to an enlarger and a light meter than a dashboard. The surround is neutral grey, because any tint biases the judgement made in it. Readouts are set in a mono face with tabular figures. There is no green: ready is the absence of a warning. The one accent is RAL 1021, the plate yellow the pipeline calibrates against.
How it was built
The engine is bash and ffmpeg and predates the app. The Swift is heavily AI-assisted, because the platform was new to me. The decisions above are mine: freezing the precursor as a reference, refusing the approximate preview, halation before the conversion, and the interface.