Inspiration

Every attention-analytics pitch promises the same thing: tell us which parts of your video lose people, and why. We built that, then checked whether the premise was even true.

It was not. Attention climbs toward the end of a video — on Tears of Steel it looked 4.4 times higher in the second half. Then we looked at what was in those segments. A fifth of the upload is end credits, and the most replayed moment in the file is a post-credits scene. On the film itself the number is 1.28.

So we did not build the predictor. We built the thing that catches the predictor lying, and pointed it at our own idea first.

What it does

It puts two things side by side and lets you ask about them in plain English: how much each part of a film was actually rewatched, and what was on screen there. A Google ADK agent answers, and every number comes out of ClickHouse through the official mcp-clickhouse MCP server, on the spot.

The difference is how it handles a weak result. Four checks a normal dashboard skips:

  • Anything that only looks strong because of where it sits in the runtime is flagged as a position artifact — as a column, not as a hedge in a sentence.
  • Six things are tested at once, so the bar for "real" is raised to match. Judging six tests by a one-test bar is how nothing becomes a finding.
  • There is a control you can flip on. Pair every feature against the wrong segment's data and watch it all collapse. If it did not collapse, the method would be inventing things.
  • It checks whether a result shows up on the other films. Ours does not.

Across three films and eighteen tests, one result clears the bar — and the tool's own verdict calls it too small to believe from a single film.

How we built it

yt-dlp pulls the rewatch data. We find where the credits start by sampling frames, cut the curve there, and only then remove the trend. Each segment goes to Gemini with sound, under a prompt that never shows it the attention data. Everything lands in ClickHouse Cloud, and a Google ADK agent answers through mcp-clickhouse on Cloud Run.

The model never writes SQL. It picks one of seven prepared questions and fills in the blanks, each checked against a list read from the database. So MCP is genuinely doing the work and the queries stay predictable — which is why the demo is one unedited take.

Verdicts are columns, not sentences. Asked in the prompt to call a borderline number borderline, the model called it a finding instead. A column cannot be talked around.

Challenges we ran into

The result we wanted did not exist. We could stop, or make the disproof the product.

A fifth of the data was not film. Dropping the credits from the calculation is not enough — the smoothing reaches into them, so the end of the film gets contaminated too. The curve has to be cut before the smoothing, not after.

Two bugs that never threw an error. ClickHouse's rank correlation handles ties differently than we assumed, which moved results across the line. And the loader re-added every film on every run, which would have silently doubled the data. Nothing crashes. The numbers are just quietly wrong.

Accomplishments that we are proud of

It has caught us three times. The third film killed the only pattern the first two had. Fixing the ties bug moved the headline across the line. And a fifth of the data turned out to be end credits — which is where the 4.4 came from, and where the only result that ever cleared the bar came from.

What we learned

If you want an agent to be honest about a weak result, the honesty has to live in the data, not the prompt. Every time we asked the model to be careful in words, it was careful right up until the number got interesting.

What is next

This is not really about film. Anything measured over a sequence has the same trap — retention curves, signup funnels, onboarding, any test read over time. The reusable part is the four checks, not the film data.

Two gaps before any positive claim: we never checked whether Gemini scores the same clip the same way twice, and YouTube's public data records rewatching, not people leaving.

Built With

Share this project:

Updates

Submission history