VisualToPrompt

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.

Every candidate word for “the thing you uploaded”, counted in the six source files that build the line and in the 480 lines those files produced. Source counts are whole-word matches including comments; one of them, photo in browser.js, is inside a comment and cannot reach output.
WordIn sourceWhereIn 480 linesWhich shapes
photo1browser.js (comment)0none
photograph1describe.js4812 of 120 in each of the four
picture0—0none
image5analyze, browser, compose ×2, describe240Flux 120/120, DALL·E 120/120
frame1compose.js12Flux 12/120
shot0—0none

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:

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.

780 pairs among forty files. “Range” is the spread of that measurement across the forty files; “widest word” is the clause that covers the largest share of that spread; “smallest change” is the smallest gap between two files that still produced different wording.
MeasurementClauseRangeWordsSame wordWidest wordSmallest change
aspect ratioframing1.78–1.781780/780widescreen 16:9, all 40 filesnone
mean lumaexposure34.51–197.544207/780moderate, slightly dim lighting, 84.56–128.572.60
luma spreadcontrast13.68–89.043409/780medium contrast, 38.42–67.450.90
mean saturationsaturation0–0.974243/780vivid, saturated colour, 0.50–0.970.01
red minus bluewarmth−167.96–66.155159/780cool blue colour temperature, −167.96 to −14.500.76
edge densitydetail3.71–65.843328/780highly detailed with intricate texture, 16.40–65.841.44
centre ÷ borderlight distribution0.60–2.043321/780light falling on the centre…, 1.19–2.040.01
top ÷ bottomvertical light0.42–7.003312/780brighter upper half, 1.23–7.000.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:

Which fields changed wording when the file was pushed past the monochrome threshold, out of forty files. The subject field is the one that produces the word itself; the six measured fields not listed — framing, exposure, contrast, detail, light distribution, vertical light — changed on zero files.
FieldFiles changedWhat it means
saturation36the four already-greyscale files had no distance to travel
palette names30colour names collapse toward grey, white and charcoal
warmth29red minus blue collapses toward zero
mood4only 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.