How it works

How the numbers are made.

Every video is cut into short segments, 10 seconds by default. Each segment gets a score, built from signals: separate clues about what viewers care about. Here's exactly how each one is measured and blended.

01Scores & signals

What a score is

A number from 0 to 1 for one segment, relative to the rest of the same video. 1.00 is the most engaging moment in this video and 0.00 is the least. It ranks segments within one video and isn't a grade, so 0.8 on one video doesn't mean the same as 0.8 on another.

What a signal is

One independent measurement taken for every segment, such as how often comments point to that moment or how loud it is. Each signal is also scaled 0 to 1 within the video, so signals can be compared and blended fairly.

02Two kinds of result

Official data

When YouTube shows a "Most replayed" graph for a video, the dashboard uses it directly. That's YouTube's real, relative replay intensity, so it's always high confidence and nothing is estimated.

Estimated

Most videos don't have that graph. Then four signals are measured and blended into an estimate. It's an informed guess from public clues, not real viewer data, and it's always labelled as estimated.

If neither is possible, you get a clear no_data_available error. The numbers are never made up.

03The four signals

Each signal looks at the video in a different way. Together they cover what people say about it, what's being said in it, how it sounds and how it looks.

Comments 35% Captions 25% Audio 25% Visuals 15%

Comments

35%

Finds timestamps people write in comments, like "10:24 got me". Each mention counts for about ±5 seconds around that time, and comments with more likes count a bit more (1 + log of likes). Up to 2,000 comments are read.

The strongest clue, because people only timestamp moments they care about.

Captions

25%

Reads the transcript for each segment and scores what's being said: hook phrases ("watch this", "here's why"), emphasis words ("insane", "biggest"), questions, numbers and claims, topic changes, and how much is being said.

Catches big reveals and key points in talking videos.

Audio

25%

Listens to the soundtrack. Loudness is 50% of it. How busy it is, meaning sound onsets per second, is 30%. Loud, noise-like bursts are 20%, a cheap detector for laughter, applause or cheering.

Silence and quiet stretches score low.

Visuals

15%

Looks at a small, low-res copy of the video, 2 frames a second at 64×36 pixels. It measures camera cuts, meaning sudden jumps far above the video's usual change (60%), and overall motion between frames (40%).

Fast edits and action score high, static shots low.

04How the score is calculated

  1. SplitThe video is cut into equal segments, 10 s by default (5 to 60 s).
  2. MeasureEach signal is measured for every segment.
  3. ScaleEach signal is rescaled 0 to 1 within the video.
  4. BlendThe signals are combined in a weighted sum, using the weights above.
  5. RescaleThe blend is scaled 0 to 1 again, so the top segment is always 1.00.
  6. ShapeA curve pulls ordinary segments down toward 0.12, like YouTube's own data, where most of a video sits near zero and only real moments spike. The order never changes, so peaks and drop-offs stay put.
score = shape( rescale( 0.35 × comments + 0.25 × captions + 0.25 × audio + 0.15 × visuals ) )
If a signal can't be measured (comments turned off, no captions, a download fails), it's dropped and the remaining weights are scaled up to add to 100%. The reason shows under Signal weights on the results.
Make estimates match your kind of videos: run calibrate on a list of videos that do have YouTube's graph. It compares both versions and tunes these weights and the shape to fit.

05Peaks & drop-offs

The highest-scoring segments become top moments and the lowest become drop-offs. Neighbouring segments within 0.05 of each other are merged into one range, and a peak never overlaps a drop-off. The chips on each moment show which signals drove it and how much of its score each one produced.

06Confidence

LevelWhen
HighOfficial data, or at least 50 timestamped comments plus 2 or more other signals.
MediumComments plus one other signal, or captions plus two others.
LowAnything thinner. Treat it as a rough first look.

07Reading the charts

Heat strip

The coloured bar under the timeline, like YouTube's own. Gold is hot and deep violet is cold.

What drove the score

Each signal's share of the total weighted score across the whole video.

Agreement

How closely a signal rises and falls with the final score. +1 is in step, 0 is unrelated.

Hot segments are those scoring 0.6 or more. By part of the video averages the score in each fifth of the runtime, so you can see whether the intro, the middle or the ending holds attention best.

08Your server & URL

The dashboard is just a page in your browser. The real work, from downloading the video to scoring the audio and frames, happens on your own computer, and Cloudflare makes it reachable from the internet. Cloud servers usually get blocked by YouTube, which is why it runs at home.

Quick tunnel

random-words.trycloudflare.com

The default. No account needed, but the URL changes on every restart.

Free permanent URL

yt-heatmap-api.you.workers.dev

Run setup-permanent-url once with your own free Cloudflare account. No domain needed, and it never changes.

Your own domain

api.yourdomain.com

Option 2 in the same setup. It uses a named Cloudflare Tunnel on a domain you own.

No window to keep open: install-background runs the server hidden, starts it at login, restarts it if it stops and reconnects the tunnel by itself. It still stops while the computer is off or asleep, and then a permanent URL answers server_offline.

09Your key & security

This dashboard has no backend. Your API key goes only to the API URL you enter, as a header and only over https. Nothing is sent to Heatmapify or anyone else.

Where it's kept

Only in this browser, and by default only until you close the tab. Tick Remember on this device to keep it, or press Forget key to wipe it. Browsers won't offer to save it as a password.

Shared links are safe

A link that points the dashboard at someone else's server never sends them your saved key. You'd have to type their key in yourself.

On your server

Keys are stored only as hashes, every key is rate-limited, and browsers can call your API only from this dashboard or pages on your own computer.

If your key leaks

Double-click rotate-key in the project folder, restart the server and paste the new key here. The old key stops working.

10Limitations

Estimates find moments that look and sound engaging and that commenters point to. They can't see real watch time, so treat them as a strong hint, not proof. Official data is relative replay intensity, not view counts.

Ready to find the good parts?

Paste any YouTube link and see its heatmap in a minute or two.

Free and open source. All releases