Cutline/Evals

Quality methodology

How we know the output is good.

AI output is statistical. Anyone shipping an AI product who can’t tell you their pass rates and how they measure them is shipping in the dark. Here is exactly what we measure, how, and where we currently sit.

On this page

  • Approach
  • Quality rubric
  • Automated checks
  • Human spot-checks
  • Regression suite
  • Current pass rates
  • What we don’t measure
  • Report a failure

Approach

Cutline runs a 12-stage pipeline. We evaluate quality stage-by-stage rather than only at the final-MP4 level - a single end-to-end pass/fail tells you nothing about where the failure was. Our eval harness scores each stage independently against a held-out set of prompts and a blend of automated checks and human spot-review.

We deliberately don’t run evals against the same model we use in production. Stage-level checks use cheaper deterministic validators where possible (length, structure, schema conformance), and human review where structure isn’t enough to judge quality (script tone, voice naturalness, image relevance).

Quality rubric

Each pipeline stage has a fixed pass/fail rubric defined in code. We don’t grade on a curve; the bar is binary per attempt.

IN

Intent

Audience inferred, goal classified into one of {explain, persuade, tease, demo, narrate}, tone classified, durationSeconds within bounds.

NA

Narrative

3-5 beats, each beat has a purpose, no two beats with identical purpose, total estimated duration within ±10% of target.

SH

Shots

8-12 shots produced, every shot has a purpose / duration / text-density / motion-hint, durations sum within ±5% of target.

SC

Script

Per-shot text exists or is explicitly null (silence). No empty strings. Words-per-second estimate within natural-speech range (2.0-3.5).

SU

Subtitles (draft)

Every spoken segment chunked into ≤7-word lines. Estimated timing per chunk monotonic.

TT

TTS

Audio file written for every non-silent segment. Duration within ±15% of script-estimated duration. Word timings present where supported.

SU

Subtitle refine

≥95% of subtitle chunks aligned to actual word timings (post-TTS). No chunk overlaps the next chunk's start.

MO

Motion

MotionSpec exists per shot. Scale, pan, zoom values within physical bounds (no NaN, no >5x scale, no overflow).

AS

Asset analysis

Skipped if no assets uploaded. Otherwise: dominant colors extracted (≥3), per-asset role classified, no unhandled vision errors.

VI

Visuals

VisualSpec validated against Zod schema. Required fields present.

IM

Image sourcing

Every shot has a non-placeholder image URL after fallback chain (Unsplash → DALL·E → Pexels → simplified query). Placeholder is logged but not allowed in production paths.

RE

Render

MP4 produced. File size within plausible bounds (≥100KB, ≤MAX_VIDEO_OUTPUT_MB). Duration ±2% of target. ffprobe shows valid H.264 codec.

Automated checks

Run on every job in production and on every CI build against the regression suite:

  • Schema validation - every stage’s output is parsed by a Zod schema before the next stage runs. A malformed payload is treated as a failure of the producing stage, not a downstream silent corruption.
  • Quality gates - explicit checks in src/lib/pipeline/qualityGate.ts for shot count, duration totals, words-per-second, and subtitle alignment ratio.
  • Strict script mapping - strictScriptMap.ts verifies that every shot in the shot list has corresponding script text (or explicit silence).
  • Render validation - post-render ffprobe checks codec, duration, file size. A render that produces a 0-byte or wrong-codec file fails the job, not the user.
  • Model fallback telemetry - when the primary OpenRouter model fails, we record the fallback hit. Stages with elevated fallback rates trigger investigation.

Human spot-checks

Automated checks catch structural failures. They do not catch a script that’s grammatical but boring, a voice that’s correctly synced but unpleasant, or an image that’s technically relevant but tone-deaf. We run a weekly human spot-check on a 50-job sample stratified across personas (creators, marketers, educators, e-commerce, social, agencies). Each job is reviewed against:

  • Script naturalness - does it sound like a human wrote it for a 30-second video?
  • Voice clarity - pacing, pronunciation, emotional fit.
  • Image relevance - does each shot’s image match what the script is saying at that moment?
  • Caption legibility on mobile - burned-in subtitle styling on real phone screens.
  • Edit pacing - too slow, too fast, or right.

Findings get filed as issues. Repeat patterns become regression-suite entries.

Regression suite

We maintain a fixed corpus of ~120 prompts spanning short (10s) and long (60s), all six personas, with and without uploaded assets. The suite runs against every release candidate before deploy. Any prompt that previously passed and now fails blocks the release until it passes again or the rubric is consciously updated.

Current pass rates

Stage-level pass rates over the last 30 days of production traffic. Refreshed manually per release.

Intent classification

98.4%

audience / tone / goal correctly extracted

n = 612 jobs · last 30 days

Narrative arc validity

94.8%

3-5 beats, no orphan beats

n = 612 jobs · last 30 days

Shot list well-formed

96.2%

8-12 shots, durations sum within ±5% of target

n = 612 jobs · last 30 days

Script length match

91.6%

spoken text fits estimated TTS duration ±10%

n = 612 jobs · last 30 days

Subtitle word alignment

89.1%

post-TTS refinement aligns ≥95% of words

n = 612 jobs · last 30 days

Image source per shot

99.7%

every shot has a non-placeholder image (Unsplash → DALL·E → Pexels)

n = 612 jobs · last 30 days

End-to-end render success

97.9%

MP4 produced without unhandled error

n = 612 jobs · last 30 days

Sample size n = 612 reflects production jobs over the trailing 30 days excluding cancelled jobs. Pass rates are stage-level - a job can fail one stage and still recover via fallback before the final MP4. End-to-end render success (97.9%) is the user-visible metric.

What we don’t measure

Honest disclosure of the gaps:

  • Factual accuracy of the script. If your prompt says “explain why coffee makes you feel awake”, we don’t currently fact-check the script’s claims about adenosine receptors. The LLM is responsible. Review your script.
  • Image rights / model release. Stock photos come with their own license; AI-generated frames inherit the provider’s policy. We pass through; we don’t audit.
  • Subjective taste. Two viewers can disagree about whether a video is “good.” Our human reviewers grade the rubric, not personal preference.
  • Cross-job consistency. Two similar prompts from different users may receive different videos. We don’t promise idempotency on creative output.

Report a failure

Hit something the rubric should have caught? Email parbhat@parbhat.work with the job ID. We add it to the regression suite if it reproduces.