Brutalist Command: art final
Liam, in for Bear, walks through art final: one dispatcher branch and one Python script that gate the paperwork, render, verify the output, and swap it in atomically. The receipt it writes is a machine claim, not human approval.
The video starts from a demanding request: compile a reel to a verified 4K master, refuse if the paperwork is thin or a beat is still a slate, keep the last good file if the new export fails any check, and never report ready unless the file on disk really is. Liam, in for Bear, shows how the art final command meets that request. It does not render once and stop. It gates the paperwork, renders, and then re-verifies the output it just wrote.
One dispatcher branch, one script
The dispatcher is a single case in the art file. It matches the exact string final, checks whether you already passed a height, and forwards everything to compile.py. If you did not name a height, it hard-codes 2160, the native 4K master. There are no aliases, and every rule the command enforces lives inside compile.py.
The script takes a small set of options: the reel folder, an optional review mode, FPS, height, audio, force, allow-slates, and an output destination. Allow-slates is for review only, and a final refuses slates unconditionally. The output option can point at a local folder or a mounted drive. The review path is why art run and art final share the same script.
Preflight before any frame renders
When review is off, final preflight runs before a single frame is rendered. It requires the paperwork: a fact check, a shot list, and a prompts file, each non-empty. Then it runs the beat lint and the gate-shape check as executable Python, and if either exits non-zero, final refuses. The lint runs on the beat sheet, not the MP4, so you fail fast before spending the render.
What a successful run produces
On a tiny reel with one still, three seconds of narration, and the three paperwork files, art final prints one line per beat, a motion histogram, a build stamp, and the MP4 path. Next to the MP4 sits a verified JSON file written by the compiler itself. It holds the SHA256 of the export and the SHA256 of every input that fed it, so downstream tools can match the file to its recipe.
The atomic swap
compile.py encodes into a candidate MP4 inside an attempt folder next to your output location. Only after the visual check passes and the approvals check succeeds is the candidate moved onto the final path. If anything fails, such as the visual check, an approval going stale mid-render, or a source file changing hash, the temp folder is thrown away. The previous verified export stays in place and the build state records the failure. At no point is the file on disk between two versions.
The receipt records the status as ready, the absolute output path, the SHA256 of the MP4, the SHA256 of every media file and narration MP3 by name, the duration from the timeline the audio built, and a timestamp. Ready is a machine claim about the checks that just passed. It is not human approval, and it is not a promise of YouTube 4K processing. Publication is a separate human step.
A failure worth seeing
To show a refusal, the video truncates the fact check file to zero bytes, mimicking an accidental commit that empties a paperwork file. art final refuses immediately, reporting the fact check as missing or empty. The MP4 in the exports folder is unchanged, and its SHA256 matches the earlier one. Recovery is one line: put a real sentence back in the file, and the next run exits zero.
Key takeaways
art finalgates the paperwork, renders into a temporary candidate, re-verifies the output, and only then swaps it in.- A final refuses slates and pending signatures unconditionally, and defaults to 2160 for the native 4K master.
- Preflight requires a non-empty fact check, shot list, and prompts file before rendering begins.
- Lint runs on the beat sheet rather than the MP4, so failures come before the render cost.
- A failed export leaves the last good file in place.
- The receipt records the SHA256 of the export and of each input.
- Ready is a machine claim, not human approval or a promise about YouTube processing.
Try it yourself
In a real folder you finished this week, run art final with the output flag pointed at a fresh directory. Copy the SHA256 it prints, then hash the exported file yourself with shasum -a 256. If the two strings match, the receipt describes the file. If they do not, something wrote to your export after the compile, so investigate before sharing the video. The film-as-code project is the brutalist.art repository.
Full transcript(auto-generated, with timestamps)
[0:00]Hi, this is Liam in for Bear. The ask compile this reel to a verified 4K master. Refuse if the paperwork is thin or a beat is still a slate. If the new export fails any check, keep the last good file in place. Do not print ready unless the file on disk really is. Watch the writer walk this back. Art final does not render once. It gates the paperwork, renders, and then re-verifies the output it just wrote. Two lines of defense, one written next to the other on the receipt. The dispatcher is one case in the art file. It matches the exact string final, checks whether you
[0:31]Already passed a height, and forwards everything to compile. pi If you did not name a height, it hard codes 2160, the native 4K master. There are no aliases. Every rule the command enforces lives inside compile. pi Compile.pi's art per surface is small on purpose. A reel folder. Optional review, which is the reason art run and art final are the same script. The review path draws beat labels and stays beside the reel. Then FPS, height, audio, force, allow slates, and out. Allow slates is review only. A final refuses slates unconditionally. Out picks the destination, a local folder, a mounted drive, anywhere. When review is off, final preflight runs
[1:09]Before a single frame renders. It calls required paperwork, a fact check, a shot list, and a prompts file each non-empty. Then it runs beat lint and gate shape as executable Python. If either gate exits non-zero, final refuses. The lint runs on the sheet, not the MP4. You fail fast before you spend the render. Here's a tiny reel with one still, 3 seconds of narration, and the three paperwork files. Art final prints a single line per beat, a motion histogram, a build stamp, then the MP4 path. Next to the MP4 is a verified JSON file the compiler wrote itself, the SHA256 of the export, and the SHA256
[1:45]Of every input that fed it. This receipt is what downstream tools use to match the file to its recipe. The atomic bit compile.pi encodes into a candidate MP4 inside attempt folder next to your out. Only after gate V passes and the approvals were check succeeds does the candidate get OS replaced onto the final path. If any check fails, gate V and approval turning stale mid-render, a source file changing hash, the temp folder is thrown away. The previous verified export stays in place and build state records the failure. There is never a moment when the file on disk is between two versions. The receipt is five keys, status equals ready, output
[2:22]The absolute path, SHA256 of the MP4, input SHA256 every media file and every narration MP3 hashed by name, duration S from the timeline the audio built in a timestamp. Ready is a machine claim about the checks that just passed. It is not human approval and it is not a promise of YouTube 4K processing. Publication is a separate human step. One failure worth showing, same reel, truncate fact check, MD to zero bytes mimicking the accidental commit that empties a paperwork file. Rerun, art final refuses immediately gate F missing or empty. The MP4 in exports is unchanged. The SHA256 you had before is the SHA256 you have now. The recovery is
[3:02]One line, put a real sentence back in fact check. MD. And the next art final exits zero. So, art final, one dispatcher branch, one Python script, two verbs. It gates the paperwork and codes into a temp, gates the pixels, rechecks approvals, and only then swaps the file in. It writes a receipt beside the MP4. Slates and pending signatures block the master unconditionally. Every guarantee last good file preserved, receipt matches file, sheet did not drift mid-render, falls out of that same atomic pattern. Your turn, paste this into clawed code pointed at a real folder you finished this week. Run art final with out flag pointed at a fresh directory. Copy the
[3:39]Printed SHA256 out of exports and hash the file yourself with shasum minus a 256. If those two strings match, the receipt describes the file. If they do not, something wrote to your export after the compile. Investigate before you share the video. Brutalisk command art final. Lay them in for bear for a humanitarian's eye.





