Post 125

A Look That Loads

Drop a .cube LUT onto your footage to grade it and the whole app used to fall over. A colorist's entire look library, every one a trap door to the desktop. Now the look loads and the grade lands.

A blue-to-orange gradient graded through the AgX film LUT into a fiery falloff

A LUT is how a look travels. A colorist grades a scene, bakes the transform into a .cube file, and hands you a single small file that carries their entire palette. Drop it on your footage and the shadows roll off the way theirs did, the highlights bloom the way theirs did. It is the most direct way to put a finished look on a live signal, and it is exactly what the ColorGrade3DLUT node is for.

So it was awkward that loading one killed the app.

A trap door in the look library

Every valid .cube you loaded took the whole thing down to the desktop, exit code 101, no chance to save. Not a bad file, not an exotic format. The engine’s own AgX film LUT, shipped in the box, did it too. A colorist’s look library is dozens of these files, and every single one was a trap door.

The cause was a quiet mismatch under the hood. A LUT grade needs two textures on the GPU at once, the frame and the cube, and the shader and the engine disagreed by one slot about how they were arranged. The engine lays them out as image, then image’s sampler, then cube, then cube’s sampler. The shader expected image, cube, sampler, and reached for the cube where a sampler sat. The graphics driver checks that arrangement the instant the grade first runs, found the slots crossed, and refused, and refusing a pipeline mid-frame is a crash, not a warning chip. Nothing about it was recoverable at load time. You dropped a look and the instrument went dark.

The look, applied

The fix aligns the shader to the layout the engine has always used, the same one every other two-texture node in the library already follows. One node was the odd one out, and now it isn’t.

Source going in, AgX coming out:

The plain blue-to-orange source gradient

The same gradient after the AgX LUT, blues crushed toward black and oranges pushed to a fiery red

The grade is doing real work. AgX pulls the cool end down into near-black and rolls the warm end into a saturated falloff, the filmic shoulder that keeps highlights from clipping to a flat white. That is the look the colorist baked, now living on your signal, tetrahedrally interpolated so the color walks smoothly between the cube’s sample points instead of stair-stepping.

A net under the whole class

A crossed binding is the kind of mistake that hides until the exact frame it runs, which for a node parameter is the worst possible moment: live, in front of an audience. So the fix ships with a net. Every node that binds more than one texture, the LUT grade, the blend, the composite, now builds its GPU pipeline once in a headless test. A crossed binding fails there, by name, on a build machine, instead of in a set. The thing that used to be a crash to the desktop is now a red line in a test log, which is where surprises like this are supposed to live.

Drop a look on your footage. It loads, it grades, and the app is still standing.

← All posts