Twenty-nine cut points decide the words in a prompt
A generated prompt is a chain of comparisons, and there are 33 of them. Thirty-two are written as separate expressions in the source; one of those expressions compares two numbers at once, which is where the extra comparison comes from. They resolve to 29 distinct cut points, and the table below turns those into 32 rows because three cuts decide two different phrases each. Set against 40 real photographs, 10 of those rows have a file within 1% of the cut, 3 have one within 0.5%, and the closest file in the whole set sits 0.053 from a cut — 0.06% — which is the 95 cut inside the mood ladder.
What these numbers are. Forty real files — 39 photographs at 640 × 360 and one code screenshot at 800 × 450 — decoded on this machine, box-downsampled to the 192 × 192 grid the live tool measures on (36,864 cells whatever the file size), and read by the same describe function the site runs. The cut values are constants in that source, quoted as written, including which of them accept equality. The flip tests in the third section are pixel edits on those same grids, re-measured by the same code. No model was called and no image was generated.
Thirty-three comparisons, twenty-nine cut points
Nine slots of a prompt are filled by nine ladders of if and else if. A ladder has one rung per band, and each rung is a comparison against a fixed number. Read the table down the left column and you have the vocabulary the tool can produce; read the middle columns and you have the exact value at which one phrase becomes another.
Three of the rows deserve a note before you read them. The monoRatio cut at 0.85 appears twice, because it decides the saturation phrase and the subject phrase separately — one comparison, two words in the output. The stdL cut at 68 and the temperature cut at −5 also appear twice each, once in their own slot and once inside the mood ladder. And the mood ladder is the only place where two numbers are needed at once: bright and uplifting requires meanL > 150 and dt > 5, which is the expression that carries two comparisons.
| Slot | Comparison | Below the cut | Above the cut | Files below / above | Nearest file (gap) |
|---|---|---|---|---|---|
| framing | ar ≥ 2.2 | widescreen 16:9 | ultra-wide panoramic | 40 / 0 | p101 · 1.778 (0.422) |
| framing | ar ≥ 1.7 | landscape 3:2 | widescreen 16:9 | 0 / 40 | p101 · 1.778 (0.078) |
| framing | ar ≥ 1.4 | near-square 4:3 | landscape 3:2 | 0 / 40 | p101 · 1.778 (0.378) |
| framing | ar ≥ 1.15 | square 1:1 | near-square 4:3 | 0 / 40 | p101 · 1.778 (0.628) |
| framing | ar ≥ 0.9 | portrait 3:4 | square 1:1 | 0 / 40 | p101 · 1.778 (0.878) |
| framing | ar ≥ 0.7 | portrait 2:3 | portrait 3:4 | 0 / 40 | p101 · 1.778 (1.078) |
| framing | ar ≥ 0.55 | tall vertical 9:16 | portrait 2:3 | 0 / 40 | p101 · 1.778 (1.228) |
| exposure | meanL > 175 | well-lit, balanced exposure | bright, high-key lighting | 34 / 6 | p268 · 179.949 (4.949) |
| exposure | meanL > 130 | moderate, slightly dim lighting | well-lit, balanced exposure | 25 / 15 | p448 · 131.168 (1.168) |
| exposure | meanL > 80 | dark, low-key lighting | moderate, slightly dim lighting | 9 / 31 | q845 · 76.921 (3.079) |
| contrast | stdL > 68 | medium contrast | high contrast | 33 / 7 | q670 · 68.351 (0.351) |
| contrast | stdL > 38 | soft, low contrast | medium contrast | 5 / 35 | p501 · 38.418 (0.418) |
| sat | mono > 0.85 | meanSat branch | monochrome, black and white | 36 / 4 | p326 · 0.778 (0.072) |
| sat | sat > 0.45 | moderately saturated colour | vivid, saturated colour | 35 / 5 | q793 · 0.404 (0.046) |
| sat | sat > 0.22 | muted, desaturated tones | moderately saturated colour | 18 / 22 | q634 · 0.215 (0.005) |
| temp | dt > 14 | slightly warm tone | warm golden colour temperature | 28 / 12 | p448 · 13.898 (0.102) |
| temp | dt > 5 | neutral colour temperature | slightly warm tone | 21 / 19 | p187 · 6.336 (1.336) |
| temp | dt < −14 | cool blue colour temperature | slightly cool tone | 7 / 33 | p15 · −13.747 (0.253) |
| temp | dt < −5 | slightly cool tone | neutral colour temperature | 11 / 29 | q634 · −1.934 (3.066) |
| detail | edge > 15 | moderate detail and texture | highly detailed with intricate texture | 18 / 22 | p357 · 14.958 (0.042) |
| detail | edge > 7 | clean and minimal, smooth surfaces | moderate detail and texture | 4 / 36 | q845 · 6.949 (0.051) |
| dist | cb > 1.18 | evenly lit | light falling on the centre with darker edges | 25 / 15 | q916 · 1.187 (0.007) |
| dist | bc > 1.18 | evenly lit | brighter edges with a darker centre | 36 / 4 | q1004 · 1.174 (0.006) |
| vert | tb > 1.2 | none | brighter upper half | 18 / 22 | q952 · 1.194 (0.006) |
| vert | bt > 1.2 | none | brighter lower half | 34 / 6 | p535 · 1.337 (0.137) |
| subject | mono > 0.85 | null | black and white photograph | 36 / 4 | p326 · 0.778 (0.072) |
| hint | green > 0.45 | other hint branches | green-dominant (inferred) | 38 / 2 | p15 · 0.475 (0.025) |
| hint | blue > 0.45 | other hint branches | blue-dominant (inferred) | 33 / 7 | q1004 · 0.444 (0.006) |
| mood | meanL > 150 | later mood branches | bright and uplifting (with dt > 5) | 28 / 12 | q634 · 151.955 (1.955) |
| mood | meanL < 95 | later mood branches | moody and dramatic (or stdL > 68) | 12 / 28 | p15 · 95.053 (0.053) |
| mood | stdL > 68 | later mood branches | moody and dramatic (or meanL < 95) | 33 / 7 | q670 · 68.351 (0.351) |
| mood | dt < −5 | balanced, natural atmosphere | calm and cool atmosphere | 11 / 29 | q634 · −1.934 (3.066) |
25 of the 32 rows have files on both sides. The other 7 are all in the framing ladder, and they are not an accident of sampling: every one of the 40 files is 640 × 360, so every one of them lands in the same band. That is the fourth section.
Two slots have more bands than the rest. Exposure has 4 bands over 3 cuts, temperature has 5 bands over 4 cuts, and framing has 8 bands over 7 cuts. Everything else — contrast, saturation, detail, light distribution, vertical lighting, subject — has three bands or fewer, which is why the prompt repeats the same handful of adjectives across very different photographs.
The palette is the one part of the line that is not in this count. It is not a ladder of cuts but a clustering step: buckets of 12-bit colour are merged while the distance between them is under 52, then the five largest clusters are named, then the first four distinct names are written into the line. Those are three constants, not comparisons, so they stay out of the 29 — and the palette is the only slot whose words come from a list of colour names rather than from a band of a measured value.
Seven comparisons accept the boundary value, twenty-six do not
The framing ladder is written with >=. Every other ladder is written with a strict > or <. That single character decides what happens to a file that lands exactly on a cut, and files do land there: 640 × 360 is 1.7778, and the cut above it is 1.7.
To test it without arguing, the same photograph was given two file sizes straddling each framing cut by one thousandth, and the framing phrase was read back at both. At 2.199 the phrase is widescreen 16:9; at 2.200 it is ultra-wide panoramic. The boundary value belongs to the upper band on all seven cuts.
| Cut | Just below | Phrase | At the cut | Phrase |
|---|---|---|---|---|
| 2.2 | 2199/1000 = 2.199 | widescreen 16:9 | 2200/1000 = 2.2 | ultra-wide panoramic |
| 1.7 | 1699/1000 = 1.699 | landscape 3:2 | 1700/1000 = 1.7 | widescreen 16:9 |
| 1.4 | 1399/1000 = 1.399 | near-square 4:3 | 1400/1000 = 1.4 | landscape 3:2 |
| 1.15 | 1149/1000 = 1.149 | square 1:1 | 1150/1000 = 1.15 | near-square 4:3 |
| 0.9 | 899/1000 = 0.899 | portrait 3:4 | 900/1000 = 0.9 | square 1:1 |
| 0.7 | 699/1000 = 0.699 | portrait 2:3 | 700/1000 = 0.7 | portrait 3:4 |
| 0.55 | 549/1000 = 0.549 | tall vertical 9:16 | 550/1000 = 0.55 | portrait 2:3 |
The other ladders do the opposite. A file measuring exactly 80.000 for meanL is still dark, low-key lighting, because the test is > 80 and not >= 80; the measured flip below sits at 79.988 on one side and 80.005 on the other. The same holds at 130, at 175, at both contrast cuts, at both detail cuts, and at every ratio cut: the band you are in is the band whose comparison is strictly true.
One consequence is arithmetic rather than editorial. The pixels are 8-bit, so the smallest possible change to the temperature metric is one code value on red and one on blue, which is 2.0 in dt — larger than several of the gaps in the next table. A file 13.898 from the cut at 14 cannot be nudged by half a code value; the first step that exists takes it to 14.318.
Ten of the thirty-two rows sit within one per cent of a real photo
For each cut, the closest of the 40 files was taken and edited until its phrase changed, then the value at the moment of the change was measured. Eighteen cuts were tested this way, using one transform per metric: brightness, contrast around the mean, HSV saturation, a mix toward grey, a red-blue offset, unsharp masking, a gain on the centre square, and a gain on the top 45% of rows. 14 of the eighteen flipped within 0.005 of the cut, which is the check that the table and the code agree; the four temperature rows land between 0.019 and 0.318 past the cut, because dt moves in whole code values.
| Slot | File | Value at the flip | Transform | Phrase before → after |
|---|---|---|---|---|
| exposure | p268 | 179.949 → 174.997 | bright 0.973 | bright, high-key lighting → well-lit, balanced exposure |
| exposure | p448 | 131.168 → 129.995 | bright 0.991 | well-lit, balanced exposure → moderate, slightly dim lighting |
| exposure | q845 | 76.921 → 80.005 | bright 1.045 | dark, low-key lighting → moderate, slightly dim lighting |
| contrast | q670 | 68.351 → 67.998 | contrast 0.995 | high contrast → medium contrast |
| contrast | p501 | 38.418 → 37.999 | contrast 0.989 | medium contrast → soft, low contrast |
| sat | p326 | 0.778 → 0.85 | mono 0.535 | muted, desaturated tones → monochrome, black and white |
| sat | q793 | 0.404 → 0.45 | sat 1.151 | moderately saturated colour → vivid, saturated colour |
| sat | q634 | 0.215 → 0.22 | sat 1.022 | muted, desaturated tones → moderately saturated colour |
| temp | p448 | 13.898 → 14.318 | temp 0.5 | slightly warm tone → warm golden colour temperature |
| temp | p187 | 6.336 → 4.864 | temp −0.5 | slightly warm tone → neutral colour temperature |
| temp | q634 | −1.934 → −5.019 | temp −1.5 | neutral colour temperature → slightly cool tone |
| temp | p15 | −13.747 → −14.192 | temp −0.5 | slightly cool tone → cool blue colour temperature |
| detail | p357 | 14.958 → 15 | sharp 0.011 | moderate detail and texture → highly detailed with intricate texture |
| detail | q845 | 6.949 → 7 | sharp 0.054 | clean and minimal, smooth surfaces → moderate detail and texture |
| dist | q916 | 1.187 → 1.18 | centre 0.993 | light falling on the centre with darker edges → evenly lit |
| dist | q1004 | 1.174 → 1.18 | centre 0.989 | evenly lit → brighter edges with a darker centre |
| vert | q952 | 1.194 → 1.2 | top 1.007 | nothing → brighter upper half |
| vert | p535 | 1.337 → 1.2 | top 1.116 | brighter lower half → nothing |
The sizes of those edits are the useful part. To move a dark photograph into the next exposure band takes a brightness gain of 1.045 — under five per cent. To move a borderline detail phrase takes unsharp masking at 0.011, about one per cent. To move the light distribution phrase takes a centre gain of 0.993, under one per cent. Across all 32 rows the median gap between the nearest file and its cut is 3.85%, and the ten tightest are these:
| Slot | Comparison | Nearest file | Gap | Gap as % of the cut |
|---|---|---|---|---|
| exposure | meanL > 130 | p448 · 131.168 | 1.168 | 0.9% |
| contrast | stdL > 68 | q670 · 68.351 | 0.351 | 0.52% |
| temp | dt > 14 | p448 · 13.898 | 0.102 | 0.73% |
| detail | edge > 15 | p357 · 14.958 | 0.042 | 0.28% |
| detail | edge > 7 | q845 · 6.949 | 0.051 | 0.73% |
| dist | cb > 1.18 | q916 · 1.187 | 0.007 | 0.62% |
| dist | bc > 1.18 | q1004 · 1.174 | 0.006 | 0.54% |
| vert | tb > 1.2 | q952 · 1.194 | 0.006 | 0.46% |
| mood | meanL < 95 | p15 · 95.053 | 0.053 | 0.06% |
| mood | stdL > 68 | q670 · 68.351 | 0.351 | 0.52% |
That is the honest version of “the tool reads your photo”. It does not read it; it compares it to 29 numbers, and on this corpus ten of those comparisons are decided by less than one per cent of the measured value. Two photographs that look the same to you can sit on opposite sides of a cut, and the prompt will say medium contrast for one and high contrast for the other.
The corpus fills one framing band out of eight
Here is what the 40 files actually produce, band by band, in order from the lowest band to the highest. A zero is not a bug: it is a band the vocabulary can say and this corpus never reaches.
| Slot | Bands filled | Files per band |
|---|---|---|
| framing | 1 / 8 | tall vertical 9:16 0 · portrait 2:3 0 · portrait 3:4 0 · square 1:1 0 · near-square 4:3 0 · landscape 3:2 0 · widescreen 16:9 40 · ultra-wide panoramic 0 |
| exposure | 4 / 4 | dark, low-key lighting 9 · moderate, slightly dim lighting 16 · well-lit, balanced exposure 9 · bright, high-key lighting 6 |
| contrast | 3 / 3 | soft, low contrast 5 · medium contrast 28 · high contrast 7 |
| sat | 4 / 4 | monochrome, black and white 4 · muted, desaturated tones 14 · moderately saturated colour 17 · vivid, saturated colour 5 |
| temp | 5 / 5 | cool blue colour temperature 7 · slightly cool tone 4 · neutral colour temperature 10 · slightly warm tone 7 · warm golden colour temperature 12 |
| detail | 3 / 3 | clean and minimal, smooth surfaces 4 · moderate detail and texture 14 · highly detailed with intricate texture 22 |
| dist | 3 / 3 | brighter edges with a darker centre 4 · evenly lit 21 · light falling on the centre with darker edges 15 |
| vert | 3 / 3 | brighter lower half 6 · none 12 · brighter upper half 22 |
| mood | 4 / 4 | calm and cool atmosphere 5 · moody and dramatic atmosphere 16 · balanced, natural atmosphere 14 · bright and uplifting atmosphere 5 |
Framing is the extreme case: 40 files in widescreen 16:9 and 7 bands empty. That is not because the tool cannot say square 1:1; it is because no file in the set is square. The phrase is chosen from the file's width and height before a single pixel is read, which makes it the one slot you can change without touching the image at all — and the one slot you cannot change by editing the image.
The other ladders are lopsided in a quieter way. Exposure puts 16 of 40 files in the middle band and only 6 at the top; saturation puts 17 in the middle and 4 in monochrome; detail puts 22 at the top and 4 at the bottom. Light distribution is lopsided the other way, 21 evenly lit against 4 with brighter edges, and vertical lighting is the only ladder with a band that writes nothing at all — none, 12 files — which still outnumbers its brighter lower half band at 6.
Three edits that move a phrase, and one that cannot
Brightness moves exposure. File q845 measures 76.921 and reads dark, low-key lighting. A gain of 1.045 takes it to 80.005 and the phrase becomes moderate, slightly dim lighting. Nothing else in the line changes, because exposure is the only slot reading meanL at that band.
Sharpening moves detail. File p357 measures 14.958, four hundredths under the cut, and reads moderate detail and texture. Unsharp masking at 0.011 carries it to 15 and the phrase becomes highly detailed with intricate texture. The same edit also raises stdL, so on a file near the contrast cut you can move two phrases with one slider.
A local gain moves the light-distribution phrase. File q916 measures a centre-to-border ratio of 1.187 and reads light falling on the centre with darker edges. A centre gain of 0.993 — slightly dimming the middle — brings the ratio to 1.18 and the phrase collapses to evenly lit.
Framing cannot be moved by editing pixels. All 40 files stay in widescreen 16:9 no matter what happens inside the frame, because the number that decides it is the file's width divided by its height. To change the phrase you change the canvas: the seven rows in the second table are that experiment. This is the cleanest example of the general rule — a phrase is a comparison, and you can only move a comparison by moving the number it reads.
Two limits are worth stating. The cut values are constants chosen by this tool, not laws of any image model: another tool with the same nine slots would put its bands somewhere else, and its prompt would be right in the same way. And a phrase is only as good as the number behind it — medium contrast at stdL 38.4 and at 67.9 are the same three words about two very different photographs, which is why the twelve signals behind the line are worth reading next to the words. If you want the vocabulary itself rather than the cuts, the nine slots and their 95 words is that page; if you want the cases where the measurement fails outright, the image types this handles badly counts them by type. And if what you need is the edit that follows, writing the prompt after the line is generated starts from the same numbers.