Skip to content

a benchmark film where the picture is the measurement - #2970

Open
Flotapponnier wants to merge 1 commit into
devfrom
feat/brand-film
Open

Flotapponnier wants to merge 1 commit into
devfrom
feat/brand-film

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

What

film/ renders a brand film from the live API. 43 seconds, 1920x1080. Every figure on screen is a number the site publishes, fetched by a script and committed, so a render is reproducible and every claim carries its date.

cd film && npm install && npm run data && npm run render

Why it is a project and not an export

The first cut ran the same bar chart for every benchmark and became a list: by the third table the eye has learned the shape and stops reading. Each act is now drawn from what its bench actually measures, and the shape is declared in the data so the cut never has to know what a bench is about.

Act Shape Why
Aggregators arrivals on one clock A provider's marker lands at the moment its measured lag says it should, so the film's own timing is the measurement
Trading accumulation into columns Throughput is mass, not speed, so it piles up instead of racing
Bridges subtraction from $10,000 Best to worst is about eighteen dollars: legible in dollars, invisible as a percentage bar
Blockchains 1:1 playback, one tick per block Robinhood Chain fires forty ticks in four seconds, Blast fires two. Cannot be sped up without lying, so it is the longest act
RPCs a grid of every chain probed The claim there is breadth, not speed

Each act carries the category's own description, read from src/lib/categories.ts rather than written again, so the film cannot describe a category differently from its category page.

Data handling

scripts/fetch-data.ts reads /api/citable and /api/stat/<slug>. Three things it gets right that are easy to get wrong, each commented where it happens:

  • Latency benches that declare s store milliseconds. The same conversion the site has in format.ts. Skipping it prints a 0.26 s head lag as "260 s".
  • The full ranked field comes from /api/stat, not the two leaders in /api/citable. A film that never shows the losers never shows that several products were tested on the same thing.
  • Only referenced logos are copied into film/public, so the directory stays reviewable.

Site bug fixed in passing

Bench launchpad-wars publishes its leader as pumpfun while the logo file, the product page and every other reference spell it pump-fun. The winning row of a live bench was rendering initials instead of the brand mark. One alias in logo-manifest.ts.

Honest gaps, written into the README

No audio (needs a licensed track, not an improvised one). 16:9 only, because the type sizes are tuned for it and a 9:16 cut needs its own layout pass rather than a second <Composition> that would look broken. And Mobula appears in two acts as a genuine leader, which is worth a conscious decision rather than a default, since OpenChainBench is a Mobula project.

Weight

node_modules and out/ ignored. Committed: source, data.ts, three fonts and the 33 referenced logos, about 540 KB, so a clean clone renders without the network.

…t of it

film/ renders a brand film from the live API. Every figure on screen is a
number the site publishes, fetched by a script and committed, so a render is
reproducible months later and every claim carries the date it was taken.

The reason this is a project and not a one-off export is the thing that was
wrong with the first version: it ran the same bar chart for every benchmark,
and a film like that becomes a list. By the third table the eye has learned
the shape and stops reading. So each act is now drawn from what its bench
actually measures, and the shape is declared in the data:

  lag     aggregator head lag, as arrivals on one shared clock. A provider's
          marker lands at the moment its measured lag says it should, so the
          film's own timing carries the measurement rather than describing it.

  volume  swaps routed, as accumulation into columns. Throughput is mass, not
          speed, so it piles up instead of racing.

  fee     bridge fees, as subtraction from a $10,000 transfer. The spread
          between best and worst is about eighteen dollars, which is legible
          in dollars and invisible as a percentage bar. The red tip is drawn
          larger than life and the caption says so.

  tempo   block time, played at 1:1 for four seconds, one tick per block.
          Robinhood Chain fires forty ticks, Blast fires two. This act cannot
          be sped up without lying, which is why it is the longest.

RPCs get a grid of every chain we probe rather than a race, because the claim
there is breadth.

Each act also carries the category's own description, read from
src/lib/categories.ts rather than written again, so the film cannot describe a
category differently from its category page.

Three things scripts/fetch-data.ts handles that are easy to get wrong, each
noted where it happens: latency benches that declare "s" store milliseconds
(the same conversion the site has in format.ts, and skipping it prints a
0.26 s head lag as "260 s"); the full ranked field comes from /api/stat rather
than the two leaders in /api/citable, because a film that never shows the
losers never shows that several products were tested; and only the logos the
film references are copied into public/, so the directory stays reviewable.

Also fixes a real site bug found while picking those logos: bench
launchpad-wars publishes its leader as `pumpfun` while the logo file, the
product page and every other reference spell it `pump-fun`, so the winning row
of a live bench renders initials instead of the brand mark.

node_modules and out/ are ignored; data.ts, the fonts and the 33 referenced
logos are committed so a clean clone can render without the network.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant