Benchmarks / Agents

The Equalizer Bench: a 3B that can't write ffmpeg, the same 3B shipping video edits, and the bug our own benchmark caught

We benchmarked our own thesis: tiny model + deterministic guardrail layer vs raw capability. The curve is textbook, the trim trap is real, and the bench indicted our own product before anyone else could.

By Simon Gonzalez de Cruz (follow the build in public on X @KyaniteLabs_). 2026-09-25. Numbers measured 2026-09-24; every artifact on disk.

Our working thesis, stated publicly enough times that it deserved measurement: a small local model plus a deterministic tool layer should match a frontier model working alone. For video editing we now have the numbers, and they are cleaner than the thesis predicted.

The short version

A 3-billion-parameter local model, asked to write raw ffmpeg commands, produced zero working commands out of twelve attempts. The same model, driving Kinocut’s typed surface instead, shipped 4 of 12 — at lower latency than a 35B MoE writing raw commands. At 2B the lift is +80%. At 27B it is +10%. At 35B, parity. The guardrail compensates exactly where the model cannot, and stops mattering where the model is already competent. That curve is the whole product argument, now with cells instead of adjectives.

The rig

Twelve representative edit tasks (trim, resize, audio extract to mp3 and wav, 2× speed, rotate, thumbnail, WebM, center crop, 1fps frame export, animated GIF, self-concat) on one deterministic fixture: testsrc2 + sine, 10 seconds, 1280×720, H.264 + AAC. Two arms per seat. Alone: the model writes a raw ffmpeg command — what an unguarded agent does. + Kinocut: the model drives the kino CLI with its real help text in context, exactly as an MCP client sees the tool schema, and the deterministic engine builds and runs the actual ffmpeg. One verifier, blind to arm: the artifact must exist and pass every ffprobe check (duration, dimensions, codecs, streams, frame count). Commands execute argv-only — no shell — sandboxed, 240-second cap, temperature 0, fixed seed.

local modelalone (raw ffmpeg)+ Kinocutlatency, median
3B VL0 / 124 / 12540 ms → 337 ms
2B5 / 129 / 12 (+80% rel.)5.6 s → 2.2 s
27B10 / 1211 / 122.2 s → 2.6 s
35B MoE11 / 1211 / 12 (parity)18.3 s → 9.6 s

Full tables, method, and the per-cell caveats live at kinocut.dev/bench.

The trim trap

Every seat’s raw-arm “canonical” trim was the command an experienced human writes:

ffmpeg -i input.mp4 -ss 2 -to 5 -c copy out.mp4

It exits zero. It reports the right duration. It silently drops the video stream — the stream-copy and output-seek interaction. A 27B model still writes it. This is the failure class that makes operators distrust agent-driven editing, and it is invisible unless you probe the output file. Our verifier probes the output file; that is the entire point of the blind-verification design.

The bug our own bench caught

The bench also indicted Kinocut itself. The documented absolute-end trim form (kino trim -s 2 -e 5) produced a 5.00-second clip instead of a 2→5 cut: validation treated the end time as absolute while execution — input-seek rebasing timestamps to zero — treated it as relative. Two different seats used the documented form correctly and were scored FAIL by the rubric; the layer’s own bug cost it the task. Fixed in 1.15.2: the engine now converts the absolute end explicitly when input-seeking. With the fix, the capable seats read 10–12/12 on the Kinocut arm. A benchmark that cannot fail your product is marketing; this one filed the defect before any user could.

Why this matters beyond kinocut

The same harness shape — deterministic layer as the independent variable, blind verifier as the judge — now runs across our portfolio (tastecheck’s rubric unlock, checkyourself’s guaranteed floor). The pattern generalizes: stop asking whether models are smart, start measuring what your tool surface does to the competence floor. The frontier row in our tables is empty by policy until a sanctioned credential exists; we do not fabricate reference rows.

Reproducibility

  • Fixture: ffmpeg -f lavfi -i testsrc2... -f lavfi -i sine... 10s 1280×720 h264+aac, built by script, checksummed.
  • Seats: four local models on the lab floor (3B VL, 2B, 27B, 35B MoE), on-disk weights, zero paid APIs, zero spend.
  • Scoring: ffprobe-based blind verifier; argv-only execution; 240s cap; temperature 0, seed 42; single-shot (no repair rounds in either arm).
  • Artifacts: runner scripts, fixture builder, and per-cell result JSON preserved in the bench directory; the public distillation is kinocut.dev/bench.

Caveats we mean

n=12 tasks, one run per cell; per-cell differences of ±1 are noise. Frontier hosted models were not run (no sanctioned credential; the row stays empty rather than invented). ASR/transcription and GPU-heavy renders were out of scope for the headless loop. The latency column is median single-shot latency under the bench harness, not a serving benchmark. And the K-1 bug means the published table understates the Kinocut arm on capable seats — we are leaving the measured numbers, not the flattering ones, in the table.

Build on it, break it, or show us your hardware’s curve — that’s the conversation. Find us through the lab.

Work with Kyanite

Want this working in your environment?

If this post describes a Kyanite tool or result you need, implementation help can cover setup, advising, docs, examples, checks, and a usable handoff.

Fit boundary

Kyanite offers help grounded in its tools, products, and build practice. Broader consulting routes through PuenteWorks.

Keep following the system.

The One-Line Bug That Crashed Our Fast Lane: finding, fixing, and measuring a speculative-decoding crash on a $1,400 mini-PC

Spec decoding crashed our fastest lane on day one. The bug was one missing line in our fork; the fix bought +17.7% and a surprise about draft quantization.

Two models, one $1,400 mini-PC: the paired numbers, failures included

A 35B reasoning model now runs shoulder to shoulder with our daily 27B on one $1,400 box, at the same time. Every number paired, same problems, same machine. The failures are in here too.

How I became a forward deployed engineer without a software engineer title

The title is new; the work is old. Twelve years of enterprise deployments plus public, measured AI work. The honest path, artifacts included.

Evals are the FDE skill nobody lists: my 495-trial public benchmark

The market says it cannot find people who can build AI evals. The skill is learnable and I published mine: 495 trials, certified floors, sabotage cell, open source.

Forward deployed vs solutions engineer vs implementation vs customer engineer: the title decoder

Four titles, one job family, different coding bars. A decoder that reads any posting and tells you what you are actually signing up for.

What does a forward deployed engineer actually do? A demo on a $1,400 mini-PC

The straight answer, then the receipts: the whole FDE job run end to end on a $1,400 mini-PC, with public evals.

The Delegation Card: we asked a $1,400 mini-PC to take our jobs

Not is-it-smart but can-you-hand-it-work-and-walk-away. 495 certified trials, then re-validated at deeper n after the product changed: 965 total, floors to 92.8%.

Qwen 3.8 27B on Strix Halo: the complete measured story

Every dial measured, every number public: the frozen optimal config for a 27B on a $1,400 mini-PC.

Lab Notes: the measured-knees method for reasoning effort

A methods note on reasoning-effort calibration. Thinking rescued 15/40 hards vs 4/40 off. On easy tasks it bought nothing. Publish the knee.

Lab Notes: 67% LiveCodeBench-30 on a $1,400 rig

20/30 = 67% LiveCodeBench-30 on a $1,400 mini-PC. Wilson 95% CI 49-81%. Easy 10/10, medium 8/10, hard 2/10. n=30 public subset. Not the card.

Lab Notes: we reverted a llama.cpp regression

We found a llama.cpp regression and reverted it. n=6 battery on a $1,400 rig: 0/6 slashes before, 5/6 after. Same Q4_K_XL. Not a quant story.

Lab Notes: 93% HumanEval on a $1,400 rig

28/30 = 93% HumanEval on a $1,400 mini-PC. Qwen3.8-27B Q4_K_XL. Temp 0, thinking off. Failures: 50 and 145. Raw log linked.

Lab Notes: the model that can't forget but can't remember

The number first: this model is 75% not a transformer. 48 of 64 layers keep a running state. On a $1,400 rig, load 198k once (1818s), then query in 9-27s.

Lab Notes: the basin was a bug

We published a basin. The serving binary was the hole. After the c7d8722 revert: 6/6 HIT at 198k. n=1 map of the fixed build.

Lab Notes: the KV verdict

The q8-to-q4 KV question from night 1 got its paired answer: same accuracy, zero tripwires, half the cache. Plus the label we had to correct in public when the server's counter beat our estimate.

Lab Notes: verdict night

A $1,400 mini-PC serving a 27B at 262k context asks one question: does capping thinking cost accuracy? The paired answer, the invalid first attempt it survived, and the doctrine that followed.

One mini-PC, one night, and the numbers that argued with themselves: tuning Qwen3.8-27B on Strix Halo

A fully measured night-and-evening of tuning a 27B dense model on a Strix Halo mini-PC: the honest bands, the reversal, the crash doctrine, and the EC detective story.

GPT-5.6 Sol vs. Terra vs. Luna: an evidence-based routing policy for coding agents

The practical GPT-5.6 split is Sol for discovery, Terra for bounded execution, and Luna for repeatable processing - with a different verification contract for each.

Agents need verifiable tools, not better prompt theater

The useful agent pattern is not a prettier prompt. It is a tool surface the agent can call, inspect, verify, and revise.

Repo history is a product signal

A repo is not just storage. It is evidence of decisions, repairs, release behavior, naming drift, test gaps, and what the builder actually knows how to finish.

Implementation help is part of the product surface

A useful open-source tool still needs a path from public repo to working environment. That path is product work, not an afterthought.

Why Kinocut matters

Kinocut gives AI agents callable handles on timelines, effects, Hyperframes, and finished media at kinocut.dev.

Infinite monkeys, LLMs, and the room around the machine

The argument behind the video: output quality is not just probability. It is architecture, filters, and human taste.

What a working AI tool needs before people can use it

A practical checklist for turning a working tool, workflow, or rough app into something other people can understand, install, and use.

MCP server implementation checklist

The checklist Kyanite uses to decide whether an MCP server is a toy, a usable tool, or something worth implementing.

Repo archaeology turns history into proof

Why commit history is one of the strongest proof sources for learning diagnostics, implementation help, and engineering trust.

AI discovery needs more than a sitemap

What Kyanite adds so search engines and AI assistants can understand the tools, products, proof, and support path.