We built 52,488 design variations and blind reviewers still said they all looked the same

Our presentation engine can draw the same deck 52,488 ways. Judges shown the rendered output, with no access to the source and no idea what had been changed, have never once returned different studios — at any axis count we have tried. This is what we measured, the two measurements we got wrong, and the question we still cannot answer.

What the engine is allowed to vary

The engine that produces decks on this site does not have templates. It has eleven independent design decisions — we call them axes — and it chooses a value on each one per deck. The choice is a hash: FNV-1a over the brand name, the deck title and the axis name. That makes it fixed per deck and reproducible, so a client who re-renders gets the same file back and a measurement taken twice returns the same number twice.

Here are the eleven, with the values each one can take. They are declared in one place, DIALECT_AXES in src/studio/ooxml.js, and every number on this page is derived from that declaration rather than restated beside it.

AxisValuesWhat changes
photo3How a bled picture meets the page: diagonal cut, hard vertical seam, or inset plate
figure3Statistics as a disc row, as rule-topped figures, or on a rail
card3Rounded with a stroke, square and tinted with an accent top rule, or open rows with hairline dividers
connector3Chevron, plain stem, or numbered dots between process steps
chrome3The mark under a heading: short underline, full-measure hairline, or stacked double hairline
chart3Columns, horizontal bars, or gridded with a ticked value axis
journey2The timeline arc crests and settles, or climbs to its last node
master3Page furniture: name and folio left, a split foot, or the mark in the foot with the heading taking the full measure
type2Serif display over a humanist sans, or all-sans with emphasis carried by weight
grid3Margins and heading height: 1.0in / 0.6in, 1.35in / 0.9in, or 0.75in / 0.5in
list2Agenda as a two-column grid with a hairline close, or as ledger rows with chip ordinals

The eleven axes as built. 3·3·3·3·3·3·2·3·2·3·2 = 52,488.

Six visual worlds sit above the axes and constrain them. A world is an opinion about geometry: a Swiss page does not cut a photograph on a diagonal, so swiss pins that axis. An axis a world leaves unstated is an axis it has no opinion about, and the hash gets the full range.

WorldCombinationsOf the spaceAxes pinned
corporate52,488100.0%0
expressive2,3044.4%9
editorial1,1522.2%8
brutalist2880.5%9
documentary1920.4%9
swiss960.2%9

Combinations reachable inside each world, computed by walking WORLDS[id].dialect against DIALECT_AXES.

No panel has ever returned different studios

The method. Take one deck's exact content. Render it three times under three forced axis vectors, deliberately distinct on every axis. Give three judges nothing but the rendered pages — no source, no rationale, no statement of what changed, not even the fact that anything was supposed to have changed. Ask one question: is this one studio's work or three? Take a confidence with the answer.

The judges are language models, not people. Each is a subagent shown only PNGs of the rendered pages. That is the single largest limitation on this page and we would rather state it in the method than bury it in a caveat: none of what follows is evidence about human readers. It is evidence that a reader with no access to the source cannot tell these decks apart, where that reader is a model.

Panel runVerdict per judgeConfidence
five axes variedone studio · one studio · related family0.93 · 0.85 · 0.90
eight axes variedone studio · one studio · one studio0.85 · 0.88 · 0.80
plus type and skeletonone studio · one studio0.80 · 0.84
eleven axes, 52,488not yet run

Every panel run we have on record. The verdict never changed. The eleven-axis build has not been through the panel — the last two axes landed after the most recent run.

That is eight judge verdicts across three runs. Seven said one studio; the eighth said related family, which is the same answer in a softer voice. Not one said three.

Between the first row and the third, the number of reachable combinations went from 243 to 17,496 — a seventy-two-fold increase. The highest confidence any judge placed on one studio fell from 0.93 to 0.88 to 0.84. The verdict did not move at all. Whatever the extra axes bought, it was not the thing the axes were added to buy.

The first panel's summary, verbatim: One studio, one template, three trim levels… the variation is confined to page furniture on roughly 4 of 13 pages. One judge went further and pixel-diffed the three renders: the journey page, the dark divider and the closing page came back RMS 0.00 across all three voices — not similar, identical. Those pages were bespoke constructions that no axis touched, and no axis count could have revealed that.

Ten decks, measured against each other

Every score above compares our output to external anchors. None of them compares our decks to each other, which is the actual complaint. So we built ten decks across ten trades — a design studio, a restaurant, a law firm, a charity, a startup, an architecture practice, a clinic, a school, a manufacturer, a gallery — each with its own brand palette, its own title, its own page count and its own layout order, and read every number out of the built .pptx rather than out of the plan that produced it. These are fixtures rendered locally in seconds; a real deck goes through a writer and an image pipeline first, and that takes a measured 4m40s at the median over 58 of them.

One control matters: each deck was re-rendered a second time with its measured axis vector forced through the renderer's test override, and the two files compared byte for byte. 10 of 10 were byte-identical, which proves the vectors reported below are the renderer's own choices and not a plausible re-derivation of them.

Compared across the ten decksRun ARun B
Whole eleven-axis vector10/1010/10
Palette — every colour in the slides10/1010/10
Type-size sets10/1010/10
Layout sequence — shape names per page, in order10/1010/10
Heading widths10/107/10
Heading origin sets9/106/10
Worlds drawn5/101/10
Type pairings — every typeface named in the file4/102/10
Preset-geometry sets3/103/10
Page-one shape signature2/102/10
Picture treatments2/102/10

Ten decks, ten trades, built 22 August 2026. Run A gives each brief the world a competent writer would pick. Run B is the same ten with the style field absent, which is what happens whenever the model fails to answer that question — every one of those lands in corporate.

Read the table from the top and it is a triumph; read it from the bottom and it is the complaint. The eleven-axis vector is different on ten decks out of ten. The page-one shape signature is one of two things across all ten, and page one is the page every reader sees. Eighteen shape names out of a union of 122 appear on all ten decks. One preset geometry — rect — appears on all ten. Three exact x,y coordinates appear on all ten.

The palette row deserves its own sentence, because it is the row most likely to be quoted out of context. Ten distinct palettes is not the engine producing variety; it is the engine passing through the brand colours it was handed. On the one dimension where the output is unmistakably different deck to deck, the engine contributed nothing.

A contact sheet of ten title slides from ten different decks. Every one has the title and a short rule on the left two-thirds and a full-height picture band on the right third. Two of the ten cut that picture on a diagonal; the other eight cut it straight.
The title page of all ten decks, each with a different eleven-axis vector. Two of the ten cut the picture on a diagonal; the other eight cut it straight. Everything else about the construction holds. Three caveats, because the picture overstates the sameness in one direction and understates it in another: the same photograph is on all ten on purpose, so any difference in the picture region is treatment and nothing else; the brand colours are fixture values rather than real clients' sites; and the machine that rendered this does not have several of the typefaces the files name, so the type variety here is a lower bound on the .pptx — which applications honour an embedded typeface and which quietly substitute is its own piece of work.

One axis has three values and two drawings

The picture axis is the one the engine treats as most significant — it is axis A, it was the first built, and its diagonal cut is the deck's signature. It has three values. Look at the contact sheet above and count: two decks cut on the diagonal, eight cut straight. Nothing shows the third value at all.

The reason is in the source, and it is not a bug. The function that cuts a picture panel takes a plateable flag, because a floating colour plate reads as a misprint rather than a design; only a real photograph can be inset. There are eight call sites, and two of them pass that flag. On the other six, value 2 falls straight through to value 1's branch and draws the identical rectangle.

So the axis contributes a factor of three to 52,488, and a factor of two to what most pages actually draw. That is one axis. We have not audited the other ten the same way, and the honest reading of this finding is that it is an example of the general problem rather than a measurement of it: a combination count is arithmetic over declared values, and a declared value is not a drawing.

Update, 23 August: the axis that drew two now draws three

The finding above was actionable and it has been acted on. The picture axis now has a third drawing: where a panel is a colour band rather than a photograph — the six call sites that cannot inset — value 2 draws a stepped edge, a rectangle with one corner notched. It reaches the page edge, so nothing shows behind it, and it is neither the diagonal nor the plain rectangle it used to be indistinguishable from.

Measured the same way the original finding was, by forcing each value and reading the geometry back out of the file rather than trusting the code: value 0 draws seven diagonal paths of three line segments each; value 1 draws no custom geometry at all; value 2 now draws stepped paths of five. Before the change, value 2 produced nothing — byte-identical to value 1. That is the gap this page measured, closed.

And the first attempt at it was wrong, which is the more useful half

The same change was first made in a second place as well. Dark pages carry a set of layered planes that were restricted to the diagonal voice, because under the other voices the cut was vertical and a bled plane cut straight reads as an empty picture slot — four reviewers had said so independently. With the edge no longer vertical that objection looked answered, so the planes were extended to the plate voice too.

It destroyed every illustrated page in the deck. Those planes are opaque and painted across the page; where the ground is a generated photograph they went straight over it. A hand-drawn studio interior became a flat red panel with a brown block on it. The build reported its pictures present and correct throughout, because they were — embedded, linked, and underneath.

The check that passed it was the wrong check. Contrast was sampled behind the heading at both voices and came back identical — on a deck built with no images. A picture cannot be covered when there is no picture. The verification proved something true and irrelevant, and was reported as confidence.

The plane change was reverted within the hour and the stepped edge kept. We are publishing the failed half because a page arguing that combination counts hide what a reader actually sees would be a poor place to quietly report only the half that worked.

We measured this wrong twice, in opposite directions

This section exists because a research page that reports only the runs that worked is a brochure. Both errors below were confident, both produced a clean number, and both were wrong about what the number counted.

Error one: the answer was the script's seed value

We set out to explain why every deck looked alike and concluded that the default world, corporate, had exactly one variation — that every business brief produced a design-identical deck by construction. It is a satisfying diagnosis. It is also the precise inverse of the truth.

corporate.dialect is an empty object. The script multiplied over the axes a world names, and corporate names none, so [].reduce((a,b) => a*b, 1) returned its initial value. The 1 was the script's seed, not a property of the system. An axis a world does not name falls through to the full range, which makes corporate the most varied world, not the least. A comment sitting directly above the function says so in as many words.

The wrong measurement 545

combinations across all six worlds, with corporate reported as 1. Conclusion: widen corporate, it is the least varied world.

The corrected measurement 56,520

combinations across all six worlds, with corporate at 52,488. Conclusion: widening corporate is a no-op. It is already the whole space.

The wrong script, re-run today so the error is reproducible
  384 expressive    axes named: 9
   64 editorial     axes named: 8
   48 brutalist     axes named: 9
   32 documentary   axes named: 9
   16 swiss         axes named: 9
    1 corporate     axes named: 0
sum: 545
The corrected script, same worlds, same axis table
  52488 corporate     axes named:  0
   2304 expressive    axes named:  9
   1152 editorial     axes named:  8
    288 brutalist     axes named:  9
    192 documentary   axes named:  9
     96 swiss         axes named:  9
sum of all worlds: 56520

Error two: the instrument built to fix error one had the same fault

The ten-deck instrument in the section above reports one line we have removed from its table: first-text-frame origins per page — 1/10 distinct. Ten decks, and every one puts its text in the same place. It matched what the judges had said about a pixel-identical grid, and it was the most quotable number the run produced.

It is an artefact. The instrument takes the first <a:off> element in each slide's XML, and the first one is not a text frame — it is the shape tree's own group transform, x="0" y="0" with a zero extent, which is present in every PowerPoint file that has ever been written. The instrument was measuring a constant of the file format and reporting it as a property of our design.

Reading the shape actually named Heading gives the opposite answer: 9 of 10 decks have a distinct set of heading origins, and 10 of 10 have distinct heading widths. Both numbers are correct arithmetic. Only one of them is arithmetic about the question.

The pattern is the same in both errors, and it is written into this repository's own instrument notes as the fault that recurs most: a correct calculation of the wrong quantity, reported with the confidence of a right one. It is worth saying that error two undercuts a claim that would have supported our own conclusion. The grid is not pixel-identical across ten decks. That makes the sameness harder to explain, not easier.

The hypothesis, and why we are not claiming it

Our current explanation is one sentence: combinatorial variety is not perceptual variety. Eleven axes at two or three values each multiply into a large number out of small decisions — which connector shape, which card treatment, which hairline under a heading. A reader does not see 52,488. A reader sees colour, type, density and imagery, and if those four hold still then every deck looks the same however many connector variants exist beneath.

If that hypothesis is right, then the arithmetic that matters is not eleven axes but the handful a reader registers — type at two values, grid at three, picture at two on most pages. Twelve, not 52,488. And colour, the one dimension that is unmistakably different on all ten decks, is supplied by the client rather than generated.

We are not claiming that. Twelve is arithmetic downstream of an untested premise. Nobody has shown a reader two decks that differ only on the connector axis and asked whether they are different. Until somebody does, the list of load-bearing axes is a guess with a plausible shape, and the number twelve is that guess with a decimal point on it.

What we do not know

  • Whether any of this holds for human readers. Every judge here is a language model shown rendered images. We have not run a human panel.
  • Which axes are load-bearing. The obvious experiment — render one brief across many vectors and sort the axes by how much a reader notices — has not been run. Without it, the effective-variety number is unknown, not twelve.
  • Whether the eleven-axis build scores differently. The last two axes landed after the most recent panel. It is possible, though we doubt it, that they are the two that matter.
  • What the live model actually picks. Run B shows that when the style field is missing, all ten briefs land in one world. What the model chooses when the field is present, across many real briefs, we have not measured.
  • How much of the sameness is invariant construction rather than narrow axes. Eighteen shape names on all ten decks and three pages at RMS 0.00 both point at furniture no axis touches. That list is the real answer and no axis count can produce it.

How to check this

The engine is not open source, so we cannot hand you a repository. What we can do is name the exact file and function behind every claim above, so that a disagreement is about a specific line rather than a paragraph. If you are building something similar, the instruments are more useful than our numbers — the ten-deck comparison took an afternoon, and it answers a question no amount of scoring against external references can reach.

ClaimSource
Eleven axes, 52,488 combinationsDIALECT_AXES · src/studio/ooxml.js
Per-deck choice is a hash, not a random drawdialectPick, axisPick · src/studio/ooxml.js
Per-world combination countsWORLDS[id].dialect · src/studio/worlds.js
Three picture values, two drawingscutPanel and its 8 call sites · src/studio/ooxml.js
The ten-deck comparisonscripts/gauntlet/sameness/diagnose.mjs
The ten fixture briefsscripts/gauntlet/sameness/briefs.mjs
The blind-judge methodscripts/gauntlet/README.md

Where each claim on this page comes from.

Two things we would tell anyone repeating this. First, score your output against itself, not only against external references. Every quality loop we have run compares one deck to a professional anchor, and none of that work could have detected that our decks resemble each other — which is the failure a customer sees first. Second, check what your instrument is actually reading before you act on what it says. Both errors on this page passed review because the number was clean.

The rest of this work

Why we published a negative result

Every generative design tool sells a combination count. Thousands of layouts, millions of variations, infinite designs. We have one of those numbers and it is genuinely computed — and we can now show that it did not buy the thing customers were asking for. A combination count is a claim about a file. Nobody buys files.

We would rather be the tool that published its own null result than the one that kept quoting 52,488. The number is real. So is the panel that shrugged at it. What we do with that is the next piece of work, and when it produces an answer — including if the answer is that we were wrong about this too — it will be published here.

Three real decks, three businesses, one pipeline. Judge the sameness yourself — it is the honest test and it is the one on the product page.