Close

02 / 10

LogGrade

Self-initiated · 2026 · Concept and development

The LogGrade window: a clip list and delivery settings on the left, a graded street frame of an ivy-covered brick building in the middle with levels, parade, vectorscope and curve readouts beneath it, and Convert, Correct, Halation and Film look slider groups with mono readouts on the right
The LogGrade window.

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 tone ladder: the same frame of the ivy-covered building side by side four times, each step a different tone setting, from flat and pale to denser contrast
A tone ladder: one frame at four tone settings.

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 grade bench: a frame of the building on a near-black surround, beside reference samplers for plate yellow, traffic red, traffic blue, neutral and mid level with mono readings, and tone sliders for midtone level, contrast, pivot and shoulder, their values set in yellow
The grade bench, with reference samplers and tone sliders.

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.