What is a photo prompt?
A photo prompt is the line a tool writes after measuring a photograph you already have. On this tool that line is 29 words long at the median, and every one of those words was chosen by comparing nine numbers against fixed thresholds — not by looking at what is in the picture. The word photograph can appear in it, but only through a single branch in the source that fires when the measured monochrome ratio passes 0.85, and only 4 of our 40 files are past that line. Photo on its own appears zero times in 480 generated lines. What follows is what the line is made of, how much of your file survives into it, and what you would have to do to a photograph to make the tool call it one.
What these numbers are. Forty real files — 39 photographs at 640 × 360 and one code screenshot at 800 × 450 — were decoded on this machine, box-downsampled to 192 × 192 (the grid the live tool measures on), and composed into four output shapes at three lengths: 480 lines. Every count below comes from those 480 lines or from the six source files that produce them. No model was called and no image was generated. The 480-line set is the same one published as a downloadable CSV on the page that produced it.
The word photograph appears once in the source, and 36 of 40 files never reach it
Before describing anything else, it is worth asking the literal question: does the line ever call your file a photograph? The answer is one branch. In src/describe.js there is exactly one assignment that produces the phrase, and it sits behind a measurement: when the share of pixels whose HSV saturation is below 0.10 exceeds 0.85, the description gains a subject, and that subject is the fixed string black and white photograph. Nothing else in the library can produce the word. src/compose.js then places it — first in the comma-list shapes, as its own sentence in Flux (The frame is dominated by …), and after dominated by in DALL·E — which is why all 48 occurrences land on exactly 48 of the 480 lines, twelve per shape.
Across the forty files the monochrome ratio runs from 0 to 1 with a median of 0.2393. Four files sit at 1.0 with a mean saturation of 0 — they are greyscale already, and their twelve lines each carry the word. The other 36 do not come close enough, and none of their lines contains it.
| Word | In source | Where | In 480 lines | Which shapes |
|---|---|---|---|---|
photo | 1 | browser.js (comment) | 0 | none |
photograph | 1 | describe.js | 48 | 12 of 120 in each of the four |
picture | 0 | — | 0 | none |
image | 5 | analyze, browser, compose ×2, describe | 240 | Flux 120/120, DALL·E 120/120 |
frame | 1 | compose.js | 12 | Flux 12/120 |
shot | 0 | — | 0 | none |
So the two sentence shapes open with A … image on every one of their 240 lines, while the two comma-list shapes never use the word at all — they start with the framing phrase instead. If you are reading a photo prompt to work out what the tool thinks it was given, the noun carries no information: it is the shape you picked, not the file you uploaded.
What one photograph is reduced to before a word is chosen
The reduction happens in four steps, and each one throws away a known amount. The file is decoded to raw pixels, those pixels are averaged down onto a 192 × 192 grid, the grid is summarised as nine numbers, and those nine numbers are compared against thresholds to pick words. Here is the whole chain for a 640 × 360 photograph:
- 230,400 pixels → 921,600 bytes of decoded RGBA.
- Averaged onto 36,864 cells (192 × 192) = 147,456 bytes, which is 16.0% of what went in. Each cell stands for 6.25 source pixels.
- Summarised as 9 numbers: aspect ratio, mean luma, luma spread, monochrome ratio, mean saturation, red minus blue, edge density, centre ÷ border luma, top ÷ bottom luma. That is 4,096 cells per number.
- Compared against thresholds to produce 29 words and 210 characters at the median.
Those medians are over the twelve lines every file produces; per file the median line runs from 27 to 36 words, and across all 480 lines the character count runs from 90 to 357. The one file that is not 640 × 360 — the 800 × 450 screenshot — arrives at the same 36,864 cells from 360,000 pixels, so its cells are built from 9.7656 pixels each. The grid is fixed; only the amount thrown into each cell changes.
The practical consequence is that nothing in the line is a claim about a region of your photograph. Every clause is a claim about one number computed over all 36,864 cells at once. That is also why the line is stable: the same bytes always give the same nine numbers.
How far the number can move before the word does
The thresholds are coarse, and how coarse is measurable. Take all 780 pairs among the forty files and compare, for each measurement, whether the two files got the same word. Where they did, ask how far apart the numbers were anyway: that distance is how much difference the word is hiding. Where they did not, the smallest gap that still changed the word is the finest distinction the vocabulary can make.
| Measurement | Clause | Range | Words | Same word | Widest word | Smallest change |
|---|---|---|---|---|---|---|
| aspect ratio | framing | 1.78–1.78 | 1 | 780/780 | widescreen 16:9, all 40 files | none |
| mean luma | exposure | 34.51–197.54 | 4 | 207/780 | moderate, slightly dim lighting, 84.56–128.57 | 2.60 |
| luma spread | contrast | 13.68–89.04 | 3 | 409/780 | medium contrast, 38.42–67.45 | 0.90 |
| mean saturation | saturation | 0–0.97 | 4 | 243/780 | vivid, saturated colour, 0.50–0.97 | 0.01 |
| red minus blue | warmth | −167.96–66.15 | 5 | 159/780 | cool blue colour temperature, −167.96 to −14.50 | 0.76 |
| edge density | detail | 3.71–65.84 | 3 | 328/780 | highly detailed with intricate texture, 16.40–65.84 | 1.44 |
| centre ÷ border | light distribution | 0.60–2.04 | 3 | 321/780 | light falling on the centre…, 1.19–2.04 | 0.01 |
| top ÷ bottom | vertical light | 0.42–7.00 | 3 | 312/780 | brighter upper half, 1.23–7.00 | 0.03 |
Two rows are worth reading twice. Warmth: the clause cool blue colour temperature covers every file from −167.96 to −14.50, which is 153.46 units out of a 234.11-unit spread — 65.6% of the whole range is one phrase. Detail is worse: highly detailed with intricate texture covers 16.40 to 65.84, or 79.6% of its range, and vertical light covers 87.7% of its own. At the other end, contrast can flip on a gap of 0.90 and warmth on 0.76: right next to a threshold the vocabulary is sharp, and far from one it is nearly silent.
The framing row is its own kind of answer. All forty files are 16:9, so all forty get widescreen 16:9 and all 780 pairs agree. A photo prompt tells you the shape of the file, always and exactly, and tells you nothing else that reliably.
What it costs to make the line say photograph
The one route to the word is the monochrome branch, so the question becomes: how much of a colour photograph do you have to remove to get there? We ran each file through a ladder that scales every pixel’s distance from its own Rec. 709 luma — saturation down, brightness untouched. Median brightness moved by 0.01 across the forty files, so this is a single-axis experiment: only colour is being taken out.
All 40 files eventually cross 0.85. For the 36 that were not already there, the median file has to keep only 0.18 of its saturation — you strip 82% of the colour out of it. The easiest file crosses while keeping 0.76; the hardest has to go all the way to 0. Across the forty, the monochrome ratio goes from a median of 0.24 to 0.87 and mean saturation from 0.23 to 0.05.
before widescreen 16:9 composition, bright, high-key lighting, dominant palette of silver,
moss green, cream, grey, muted, desaturated tones, neutral colour temperature, …
after black and white photograph, widescreen 16:9 composition, dominant palette of silver,
grey, charcoal, white, bright, high-key lighting, monochrome, black and white, …
(Midjourney shape, medium length, one of the forty files)
And that is what the word costs. Buying it moves the colour clauses, because those are the clauses that read colour:
| Field | Files changed | What it means |
|---|---|---|
| saturation | 36 | the four already-greyscale files had no distance to travel |
| palette names | 30 | colour names collapse toward grey, white and charcoal |
| warmth | 29 | red minus blue collapses toward zero |
| mood | 4 | only where the warmth clause crossed −5 |
Read that as the honest trade. The word photograph is not free and it is not a description of what you uploaded — it is the receipt for having removed enough colour that the library’s one confident statement about a picture became true. A colour photograph, described by a tool that can see nothing but nine numbers, is an image with a palette.
If the question is no longer what a photo prompt is but how to finish one for a shoot — who is in the frame, the pose, the wardrobe, the backdrop, the lens — those five are counted separately in how much of a photoshoot brief the generated line answers: three of the eight items are settled by the line, and none of the 480 lines carries a single word about the other five.
Forty photographs, nine numbers, 480 lines, no model called
Everything above was measured on the same forty files: 39 photographs at 640 × 360 and one code screenshot at 800 × 450, decoded on this machine, box-downsampled to 192 × 192, and composed into four shapes (Midjourney, Stable Diffusion, Flux, DALL·E) at three lengths (short, medium, long) — 480 lines. The saturation ladder re-ran the full pipeline from the decoded pixels at each step, so its before-and-after pairs are the same files measured twice. No model was called, no image was generated, and no figure here comes from another site’s tool.
What you should take away is narrow and useful. A photo prompt is a compression artefact: 921,600 bytes become 147,456, become nine numbers, become 29 words. It is reliable about shape and unreliable about almost everything else, because eight of its nine numbers are summarised into three or four words each. If you want a prompt that says something the tool cannot measure — what is in the photograph, where it was taken, why it was framed that way — you write that part yourself, and you write it around a line that has already told you everything it knows. For how to do that editing without breaking the line, see what five edits do to a generated line; for the nine numbers themselves and the thresholds behind each word, see what this tool measures.