Wilkin Hanaway · The Sandbox · Visual Grammar
Visual Grammar · the instrument Live

Read a shot list against the measured grammar of cinema — or build one from it.

Style is measurable on four axes: which sizes you frame, what the camera does inside them, where it sits while it does, and how long you hold them. Compare takes a shot list you already have and reads the two a written list can carry — your size mix against one cited corpus, your cutting pace against another, each answer naming the research behind it. Generate takes an idea you haven’t shot yet and lays out a scaffold from those same distributions, with all four axes on separate dials: where the sizes come from, where the movement comes from, where the angle comes from, then the rhythm they hold to. Every mix is measured; the per-beat bias that leans it is craft convention, and is labelled as one. Both modes read the whole distribution, not just the average, and both say plainly what the numbers can’t know.

One shot per line — a size (“CU”), a duration in seconds (“3.2”), or both. Sizes feed the scale comparison, durations feed the pace one; a list with both gets read on both.
Which measured corpus your size mix is read against.Which measured corpus your cutting rhythm is read against.

Two axes, two bases, one pass. Which sizes you use and how long you hold them are separate measurements taken from separate research, so each result names the base that produced it. Every base is measured and cited — sources are listed below the tool.

Paste a shot list (or load the example scene), choose a base for each axis, and press Compare. You get both answers together — how your size mix sits against one corpus, and how your cutting pace sits against another. Everything runs here in your browser — nothing is uploaded, nothing is stored.

How it measures

Four axes. Measured separately, read together.

Shot scale is which sizes a film uses — the share of wides, mediums, close-ups. Shot length is how long each one holds — the cutting pace. Camera movement is what happens inside the frame while it holds, and camera angle is where the camera sits while it happens — eye level, low, high, overhead. All four are genuinely independent: two films can share an identical size mix and cut at half each other’s speed, and the research measures them separately, in different corpora, by different people. Salt and Redfern counted sizes. Bordwell, Cutting and the Cinemetrics submitters timed shots. The movement and angle figures come from the annotations released with the AVE project — the same 196,176 shots, labelled once for what the camera was doing and again for where it stood, and counted here as two separate distributions because that is what they are.

So the tool keeps them apart and names each one. A comparison asks for a size base and a pace base, then returns two results side by side, each headed with the corpus that produced it and each carrying its own citation — no figure is ever left orphaned from its source. If your list has sizes but no timings, you still get the full scale reading and a plain sentence saying pace wasn’t assessed. Compare stops at those two because a written shot list carries sizes and timings, not movement or angle annotations — and it refuses those two bases by name rather than quietly scoring your sizes against them. In Generate the same split becomes four dials: the size base decides which sizes get drawn, the movement base which moves, the angle base where the camera sits, the pace base and its anchor only how long they hold.

One line in the movement data is worth reading twice, and the tool repeats it in every result: the largest class, “handheld,” is a support category rather than a move — it absorbs operator instability, which is why it outranks locked-off. Read handheld and locked together, about 95% of shots, as “the camera isn’t repositioning.” That is what makes these figures agree with Buckland’s and Salt’s static counts rather than contradict them.

The angle figures carry a finding of the same kind, and it is a flat one: eye level accounts for 84% of the shots in that annotation set. Angle is a marked choice in contemporary narrative coverage — something a director spends rather than sets — so a generated list that comes back nearly all eye level is reproducing the measurement, not failing to vary. The tool prints that percentage beside the angle mix so the flatness reads as the result it is.

The generate stance

It writes the grammar. It will not write your images.

Generate takes a log-line or a script, hangs a story framework over it, and lays out a shot list from the measured distributions: how many shots each beat gets, how tight it frames, how long each shot holds, what the camera is doing there and where it is standing. Every size traces back to the size base you chose, every movement to the movement base, every angle to the angle base, every duration to the pace base — the beat dials tilt those distributions, they don’t replace them. That tilt is the one thing here that isn’t measured: a locked-off establishing beat, a handheld crisis, a high angle over a character at their lowest are craft convention, and they are labelled as convention wherever they appear. Change the pace and the size column stays put; that is the axes behaving, not the tool ignoring you.

What it deliberately stops short of is the image. There are no shot descriptions here, no invented content of any kind — no “the drone pushes through the trees.” Deciding what a frame contains is the director’s work, and a scaffold that pretended otherwise would be worse than no scaffold at all. Take the rhythm, argue with it, and put your own pictures in it.

There is no model behind this and no request going out. The whole thing is arithmetic over the baselines listed below, run in your browser — which is also why the same brief always returns the same list until you re-roll it. Anything it produces can be sent straight into Compare, where it is read on both axes at once against bases it wasn’t built from.

Where the numbers come from

Every base is measured, cited, and checkable.

Nothing here is invented. Each baseline was taken from published film-style research — Bordwell and Cutting on editing pace, Salt and Redfern on shot scale, Savardi et al.’s CineScale on director profiles, Argaw et al.’s AVE on camera movement and camera angle — and every figure traces back to its source.

One provenance note, because it matters: the movement and angle shares were recomputed here from the label file AVE released, not quoted from the paper, which prints that distribution only as a bar chart. The counts reconcile exactly to its published totals — 196,176 shots across 5,591 scenes — and the caveats that travel with them, including the multi-label overlap and what each taxonomy folds together, are printed in full inside every result the tool produces. Where a published set could not be read honestly it was left out and said so: CineScale2’s angle counts were declined, because its classes were sourced differently from one another and land at shares no body of narrative film exhibits.

Editing pace

  • Hollywood editing pace by era

    Mainstream Hollywood features — era ASL bands (runtime ÷ shot count)

    Bordwell, The Way Hollywood Tells It (2006) pp.121–123; anchored by Cutting, DeLong & Nothelfer (2010) / Cutting (2011): ~10s in the 1930s–40s falling below 4s after 2000. Source ↗

  • Reference films — real published ASLs

    24 individual films with published mean ASLs, 1927–2003, mixed era and genre

    Per-film ASLs from Redfern, “Shot Length Distributions in the Films of Alfred Hitchcock 1927–1931” (mean column) and Bordwell (2006) named-film values, plus Salt/Cutting spot values. Source ↗

  • Best Picture winners — editing pace by era

    61 Academy Best Picture winners with published shot data, 1927–2024

    Cinemetrics database (Tsivian & Civjans), per-film submissions harvested 2026-08-19 and cross-referenced against the Academy Best Picture winner list. Per film: submissions deduplicated by submitter, implausible entries removed (ASL outside 1.5–60s, median <0.4s, or ASL/median >6), then the median taken across independent submitters. Source ↗

  • Best Picture winners — per-film ASLs

    61 individual Best Picture winners, 1927–2024

    Cinemetrics database (Tsivian & Civjans), per-film submissions harvested 2026-08-19 and cross-referenced against the Academy Best Picture winner list. Per film: submissions deduplicated by submitter, implausible entries removed (ASL outside 1.5–60s, median <0.4s, or ASL/median >6), then the median taken across independent submitters. Source ↗

Shot scale

  • Hitchcock’s Hollywood films — shot-scale medians

    19 Hitchcock Hollywood features, 1940–1963 (per-500-shot medians, Barry Salt’s database)

    Redfern (2010), “Statistical analysis of shot types in the films of Alfred Hitchcock”, Table 3 (Hollywood column), from Barry Salt’s shot-scale database. Salt’s BCU maps to ECU here. Source ↗

  • North by Northwest (1959) — shot scale

    Single film; per-500-shot counts corrected by Barry Salt himself

    Barry Salt, author’s correction (2010): “BCU 12, CU 87, MCU 96, MS 96, MLS 77, LS 99, VLS 33” per 500 shots. Source ↗

  • Scorsese — shot-scale frame distribution

    Complete Scorsese filmography, frame-level (1 fps), CineScale

    Savardi, Kovács, Signoroni & Benini (2021), “CineScale”, Data in Brief 36:107002, Table 1. Source ↗

  • Bergman — shot-scale frame distribution

    Complete Bergman filmography, frame-level (1 fps), CineScale

    Savardi et al. (2021), “CineScale”, Data in Brief 36:107002, Table 1. Source ↗

  • Godard — shot-scale frame distribution

    Complete Godard filmography, frame-level (1 fps), CineScale

    Savardi et al. (2021), “CineScale”, Data in Brief 36:107002, Table 1. Source ↗

  • Fellini — shot-scale frame distribution

    Complete Fellini filmography, frame-level (1 fps), CineScale

    Savardi et al. (2021), “CineScale”, Data in Brief 36:107002, Table 1. Source ↗

  • Antonioni — shot-scale frame distribution

    Complete Antonioni filmography, frame-level (1 fps), CineScale

    Savardi et al. (2021), “CineScale”, Data in Brief 36:107002, Table 1. Source ↗

  • Béla Tarr — shot-scale frame distribution

    Complete Béla Tarr filmography, frame-level (1 fps), CineScale

    Savardi et al. (2021), “CineScale”, Data in Brief 36:107002, Table 1. Source ↗

Camera movement

  • Camera movement — narrative features (AVE)

    196,176 shots across 5,591 scenes — MovieClips excerpts of contemporary, largely English-language narrative features

    Argaw, Heilbron, Lee, Woodson & Kweon, “The Anatomy of Video Editing: A Dataset and Benchmark Suite for AI-Assisted Video Editing” (AVE), ECCV 2022, arXiv:2207.09812. The paper prints this distribution only as a bar chart, so these percentages are derived from the released annotation file (github.com/dawitmureja/AVE) — recomputed locally, reconciling exactly to the paper’s published totals of 196,176 shots and 5,591 scenes. Cite as “derived from the released annotations”, never as a quoted paper statistic. Source ↗

Camera angle

  • Camera angle — narrative features (AVE)

    196,176 shots across 5,591 scenes — MovieClips excerpts of contemporary, largely English-language narrative features

    Argaw, Heilbron, Lee, Woodson & Kweon, “The Anatomy of Video Editing: A Dataset and Benchmark Suite for AI-Assisted Video Editing” (AVE), ECCV 2022, arXiv:2207.09812. These percentages are derived from the RELEASED ANNOTATIONS (github.com/dawitmureja/AVE) over the same 196,176 shots and 5,591 scenes as the movement base — cite as “derived from the released annotations”, never as a quoted paper statistic. Source ↗

Support the instrument

It’s free, and it stays free.

Compare, Generate and the export cost nothing, and there is no tier above this one — supporting buys you exactly what you already have. What it goes toward is the upkeep: reading the film-style research, checking every figure back to its source, and adding baselines as new measured corpora are published.

Your shot list still never leaves the browser. This button is the one thing on the page that talks to a server, and all it sends is the amount — nothing about your list, your brief or your results goes with it. The card details are handled by Stripe, on Stripe’s own page.

One time. Switch on Monthly first if you’d rather it repeat.

To be plain about what this is: it does not buy access. Compare, Generate and the CSV export are free and stay free, there is nothing held back behind it, and the tool works exactly the same whether you press it or not. It pays for the reading behind the baselines — and the shot list you paste still never leaves your browser either way.