vfrey reviews every video twice: on the script and scene before the render, and on the finished file after it. Each check has an id, a plain message, and a Fix: line when it fails.

What is checked

If a check cannot run, for example because ffprobe and ffmpeg are not installed, it is skipped. A skipped check never fails a job. A dry run does not render, so it skips the after-render checks.

Rejected and blocked

A failed check has a severity. When only quality checks on the finished file fail, vfrey renders the video once more and checks it again, because a second render can change the result. If the second take also fails, the job is rejected. Quality checks made before the render are not retried: the script or scene has to change first. A compliance failure is never retried, because the content has to change.

Where the results show

  • The run page in the dashboard has a Checks list, with each check’s status, message, and Fix: line.
  • The tick summary prints Checks: N passed for a finished video. For a failed one it prints Check failed: ID (severity): message, then the Fix: line.
  • npx vfrey tick --json has checks on each job, with id, phase, severity, status, message, fix, and attempt. attempt is 2 for a check made after the automatic re-render.

For agents

  • Read the Fix: line of a failed check and do it. Do not work around a check.
  • For a rejected job, fix the named problem (the script, the scene, or the layout) and run again.
  • For a blocked job, change the content. Do not try to push it through.