Skip to content

Preflight

Ron Yitzhaki edited this page Oct 21, 2026 · 3 revisions

Preflight

Before you deliver, ask the AI to preflight the comp: "Preflight the Main comp against delivery-spec.json, and the render in /Renders/main.mov too."

ae_preflight checks the project, and optionally the rendered file, against your delivery spec: a small JSON file with the numbers from your client's, broadcaster's or platform's delivery document.

Nothing is built in. There are no house specs and no defaults standing in for your requirements. Every section of the spec is optional, and a check only runs when its section is there. The AI can help you write the spec from your delivery document (action: "schema" gives it the fields), but the values must come from you. The spec reference lists every field.

Preflight changes nothing in the project and leaves no undo step. It runs in Read-only mode too, and doesn't wait for approval in Ask mode (except the one-time FFmpeg download).

What it checks

In the project

For the delivered comp: comp in the spec (or in the call), otherwise the active comp.

  • Video: comp size, frame rate, pixel aspect ratio and duration (exact with a tolerance in frames, or a range).
  • Project: bit depth, working color space; missing footage, fonts and effects; expression errors; disabled layers that still carry effects. These use the same collector as Project X-ray, limited to the delivered comp and its precomps.
  • Safe areas over time: every visible text layer, and any layer you name (with * wildcards, like Logo*), on every frame (or every Nth frame) where it is visible. Its box is measured after position, scale, rotation, anchor point and parents, and through the precomps it sits in, against title-safe, action-safe or the frame. Problems come back as time ranges, for example: "Title: outside title-safe 00:00:02:03–00:00:03:10 (2.12s–3.40s), 46 px past it on the right at most".
  • Text: smallest cap height, reading speed (characters per second while visible, spaces included, line breaks not), shortest time on screen, paragraph text that overflows its box (After Effects 24.6 or later), and characters the font has no glyph for (After Effects 25.1 or later).

In the rendered file

With target: "file" (only the file) or "both" (project and file), and file set to the render's path:

  • codec, container, frame size, pixel aspect, frame rate, duration, bit depth, chroma subsampling, alpha, field order, and the signalled color primaries, transfer, matrix and range;
  • legal range, pixel by pixel;
  • black and frozen frames;
  • audio: sample rate, channels, loudness (integrated, loudness range, true peak, highest short-term);
  • a flash pre-check.

Details of each measurement are in the spec reference.

The report

The first line is the verdict:

Verdict When
FAIL (n) Something failed.
INCOMPLETE (n checks not run) Nothing failed, but a check the spec asks for couldn't run or ran on incomplete data: no ffmpeg, an RGB file for legal range, a check that needs a newer After Effects, a file that couldn't be read to the end. A check that didn't run is never a pass.
WARNINGS (n) Nothing failed or was missed, but something deserves a look.
PASS Everything the spec asks for was checked and passed.

Then:

  1. the checks that were requested but not run, and why;
  2. the findings grouped by check (failures first, then warnings, in time order), each with timecode in the comp's frame rate and seconds, where it is (comp › layer) and a short fix;
  3. what this run doesn't cover (a section not in the spec, a file check on a project-only run);
  4. for files: what ffprobe found, and up to four frames at the worst problems.

At most 60 findings are listed (maxFindings, up to 500); the counts stay complete.

In the panel's feed: Preflight passed, Preflight: n problems, Preflight: n warnings, Preflight incomplete or Preflight did not finish.

Honest limits

  • The flash check is a pre-check, to catch obvious problems early. It is not a certified PSE / Harding test and doesn't replace one where a broadcaster requires it.
  • Cap height is estimated as 0.7 × font size × the layer's scale. Real fonts vary from about 0.65 to 0.75. With mixed sizes in one layer, the first character's size is used.
  • 3D layers are not checked for safe areas: the report lists them as not checked. Use ae_get_layer_bounds, which projects through the camera.
  • Bounds may be off for layers with auto-orient, or with effects that move or scale the pixels outside the transform (Transform, Offset, layer styles, text animators). These are flagged as warnings.
  • Layers that are off, at opacity 0, or outside their in and out points are not visible and are not checked.
  • A layersMustBeIn name that matches no layer is a warning, not a pass.
  • Long comps are checked within a time budget (timeBudgetSeconds, default 120 s, up to 1800). A partial check says so.

ffmpeg

File checks need ffmpeg and ffprobe. Surehand looks, in this order, for:

  1. "ffmpegPath" / "ffprobePath" in ~/.surehand/ae/config.json;
  2. a private copy in ~/.surehand/ffmpeg;
  3. the PATH (plus /opt/homebrew/bin and /usr/local/bin on a Mac).

If there is none, the AI asks you whether to download FFmpeg 9.0.2 once into ~/.surehand/ffmpeg. It only does so after you agree. In Ask mode you also approve the download in After Effects. In Read-only mode it never downloads.

The download is a pinned build checked against a SHA-256 written in Surehand's source, and it must start and report the expected version before it is used; anything else is refused and nothing is installed.

System Build Size Licence
macOS (Apple silicon and Intel) Martin Riedl's static release builds (ffmpeg.martin-riedl.de), ffmpeg.zip + ffprobe.zip about 60 MB GPL v3
Windows x64 (and Windows on Arm) BtbN/FFmpeg-Builds, win64 LGPL shared build from a month-end release about 77 MB LGPL v2.1+

Surehand doesn't ship or redistribute FFmpeg: it downloads the publisher's own file on your machine and runs it as a separate program. FFmpeg's licence applies to that copy. ~/.surehand/ffmpeg/SOURCE.json records what was installed and from where. To use your own FFmpeg instead, install it (brew install ffmpeg, winget install ffmpeg) or set "ffmpegPath".

Thumbnails of problem frames (JPEG, at most 960 px wide) are written to ~/.surehand/ae/tmp, shown in the report and deleted right after.

Speed

A one-minute 1080p ProRes 422 HQ file with every file check takes about 4 seconds on an Apple silicon Mac. Project checks depend on the comp's length and layer count.

In the chat

In AI apps that show views (for example Claude Desktop, ChatGPT, VS Code and Cursor), the result also comes as a view in the chat. See In-chat views.

Clone this wiki locally