
I had a folder in Google Drive with the English subtitles for the IMDb Top 250 and no plan for it. The idea I kept coming back to is from granular synthesis. You take a sound, cut it into tiny overlapping grains, and the one continuous thing becomes a pile of small things you can measure and rearrange. Do that to a film and you get a few dozen five-minute windows of dialogue, each small enough to ask a simple question about. How tense is this? How funny? Is anybody grieving?
So I did it. 195 films, 10,129 windows, 3.8 million words of dialogue, eight emotion scores per window plus a dominant emotion, all placed on a shared clock that runs from 0% to 100% of the film so a 90-minute comedy and a three-hour epic can be laid on top of each other. The ten things I found come first. The method, the caveats, and the stuff that did not work are after that, for the people who want to argue.
Ten things the charts say
1. Great films front-load the jokes
Humor peaks about a quarter of the way in and sinks below the film's own average by the end. This is dialogue humor only, so a sight gag or a Buster Keaton fall is invisible here. The words still tell one consistent story: you get the laughs early and you pay for them later.

2. Tension climbs the whole film and then falls off a cliff
On average, tension rises for 88% of the runtime and then drops harder than anything else in the data. That drop is the resolution. Arousal does the same thing a beat behind. It is the most consistent shape in the whole set.

3. The ending is the one place these films agree
For most of the runtime the films disagree about where their beats go, which is why the average curves are so flat in the middle. Then the last tenth arrives and they line up. Warmth peaks there in 31% of films and valence in 30%. Humor peaks there in 2%.

4. Warmth, grief and moral weight all get heavier as the film goes
On the raw 0 to 4 scale, the average film gains about half a point of warmth, grief and moral weight between its first tenth and its last tenth. Humor loses more than half a point. Valence and conflict barely move on average, which hides a lot of individual movement. That is the next chart.

5. Fewer than half of them end happier than they start
93 of the 195 end with higher valence than they opened with. 102 end lower. The happy ending is not the default in this canon, and a lot of the films you would call uplifting get there through an ending that is quieter and sadder than their opening.

6. There is no secret set of story shapes
I clustered the curves looking for the six or seven shapes everyone hopes to find. The best split on all eight axes has a silhouette score of 0.04. On valence alone it is 0.08. A score of 1 would mean clean separation, and 0 means the clusters are no tighter than a random cut. The honest reading is that these films sit on a continuum. It could be that my axes are the wrong ones, and I say more about that below, but on this data there are tendencies, not types.

7. The one split that does show up is "ends up" versus "ends down"
When you force the valence curves into two groups, the only thing the groups disagree about is the last few minutes. 90 films rise at the close. 105 fall. Everything before that looks the same.

8. The peak-end rule does not predict which films rank highest
Kahneman's rule says we remember an experience by its most intense moment and its ending. I tested it. Correlate each film's valence peak, its ending, and the average of the two against its place on the list. All three land near zero. The one valence number that moves with rank is the opening, and it moves the wrong way for a feel-good theory: films that open darker rank higher.

9. Tension and moral stakes go with a higher rank. Jokes go the other way.
Average tension across the whole film correlates with rank at +0.22, moral weight at +0.17. Humor is negative and not significant. These are modest numbers inside an already elite list, so read them as which way the wind blows, not as a formula. The wind blows toward stakes.

10. The rater passed the sniff test
Before you trust any of the above you want to know the model reads dialogue the way a person would. The most positive film on the list is Singin' in the Rain. The funniest is Monty Python and the Holy Grail. The most tense is Dr. Strangelove. Downfall, Full Metal Jacket and Oldboy sit at the bottom of valence, and the loudest film in the set is The Wolf of Wall Street, which anyone who has seen it will accept without a chart.

How I did it
The subtitles came from a folder of 200 SRT files, one per film, ranked at the time they were collected. Five came out before any analysis: four silent films that only have intertitles (Modern Times, City Lights, Metropolis, The Kid) and Kill Bill: The Whole Bloody Affair, whose subtitle file has 230 cues for a 232-minute cut and is clearly incomplete. Kill Bill Vol. 1 stayed. That leaves 195.
Each file was parsed, stripped of formatting tags and the ads subtitle sites inject, and cut into windows.

Every window's dialogue went to Jev, TypeSafe AI's evaluation model, through the Vercel AI Gateway, where it is free. Jev is not a chat model. You give it a piece of text and a set of typed questions, and it returns a calibrated answer for each without generating any prose. For a score question you supply the rungs of a rubric in order, and it returns a probability for each rung plus an interpolated score. That is a better fit for this job than asking a chat model to emit JSON and hoping the numbers mean the same thing on window 9,000 as they did on window 1. The model saw only the dialogue. No title, no year. If it knew it was reading The Godfather it would rate from memory of the film instead of from the text, and the measurement would be gone.
The eight axes, each a five-rung rubric scored 0 to 4, and the theory each one is anchored to:
Axis Anchored to valence Russell's circumplex model of affect arousal Russell, and Zillmann's excitation transfer tension Brewer and Lichtenstein's structural affect; Huron's theory of expectation conflict Zillmann's affective disposition theory warmth kama muta, the "being moved" research from Fiske and Menninghaus grief Bonanno's grief trajectories; Herman's stages of recovery moral weight Haidt's moral foundations; Shay's moral injury humor its own axis, because humor is not the opposite of sadness
Plus a ninth question that picks one dominant emotion from Plutchik's eight, or neutral. The pipeline is Bun and TypeScript, eight calls in parallel, and it finished 10,129 windows in about twenty minutes with 1,690 retries and no failures. The gateway was having a day. I had Claude Code write most of it.
Then the normalization. Every film's windows were placed on its own runtime, resampled to 100 points from 0% to 100%, and z-scored per film per axis. The z-score is the choice that makes the curves comparable. It throws away how tense a film is on average and keeps only where in the film the tension goes. The raw 0 to 4 levels are kept separately for the questions that need them.

Clustering was k-means on the resampled z-curves, downsampled to 25 points per axis, with k chosen by mean silhouette from 2 to 6. The peak-end test used Spearman correlation against each film's rank. I do not have IMDb's ratings in the dataset, but the Top 250 is ordered by weighted rating, so rank is a monotone transform of rating and a rank correlation on one is identical to a rank correlation on the other.
What this cannot tell you
Dialogue measures what the characters say, not what the audience feels. The scariest stretches of a horror film have no dialogue at all, and a score cue can flip a scene the words did not. Silence is recorded in this data as an empty window and interpolated across, which is the right call for shape and the wrong call if you care about the silence itself.
The rank correlations are small and the range is restricted. Every film here is already in the top 250 of a database of millions. Finding a +0.22 inside that group is interesting. It is not a recipe.
The scores are a model's judgments. I have not hand-coded a validation set against them, and the sniff test in Chart 10 is not a validation set. It is a smell. The axes are also my choice, anchored to theories I find useful, and a different codebook could find shapes that this one cannot see. The clustering result in Chart 6 should be read with that in mind: no types on these axes.
And five-minute windows hide anything shorter than five minutes. A single devastating line inside an otherwise calm window gets averaged into the calm.
What I would do next is add a second rater and see where they disagree, and then go looking for the films that break the average curves on purpose, because the interesting ones always are. The practical version of all this, for people who make videos rather than films, is in the follow-up.
Dr. J

