Best image to prompt site or tool?
We cannot rank them, and neither can anyone else who has not measured them. What we can do is give you the test instead of the verdict. Six edits, each one click in any image editor, and each one asks a specific question about how a tool reads a picture: does it hold still under a mirror, does it notice which way up the light is, does the ratio in its own line agree with the sentence in front of it. We ran all six on this tool across forty real files, four output shapes and three lengths — 480 lines per edit, 2,880 re-measured lines, and three repeat passes that differed zero times. Below is the score on every check, with the numbers behind each one, so that when you run the same six on something else you have a baseline to compare against rather than a feeling.
What these numbers are. Forty real files — 39 stock photographs at 640 × 360 and one code screenshot at 800 × 450, 22,834 to 489,354 bytes — were decoded on this machine, box-downsampled to 192 × 192, the grid the live tool measures on, and composed into four shapes at three lengths: 480 lines. Each of the six edits was then applied to the pixels on disk and the whole pipeline run again from the decoded file, so every figure here is a before-and-after on the same forty files. No model was called and no image was generated. Nothing in this page is measured on or quoted from another site’s tool: we have no access to one, and a ranking built without measurements would just be an opinion. The 480 baseline lines are the same set published as a downloadable CSV on the page that produced them.
Check one: give it the same picture three times
Before anything else, run the tool on one file three times and compare the text character by character. This is the cheapest check and the one that decides whether the rest are worth doing: a tool that returns different words for identical bytes cannot be debugged, because you will never know whether a change came from your edit or from the tool’s own mood.
We ran the full 480-line set three times over. Zero of the 480 lines differed between any two passes — 1,440 lines produced, none of them disagreeing with its own siblings. That is not a promise, it is a consequence of how the measurement is written: the analysis step is arithmetic over pixel values, and Math.random, Date and now( appear zero times across the six source files that produce the line. There is no clock and no dice in the path from file to text.
What to look for in another tool: run the same file twice with nothing changed. If the text moves, stop there — every other check on this page assumes a tool that holds still.
The twenty-run version of that check, together with the follow-up question — how far a re-export has to go before the words move — is measured out on the page on what holds still and what changes: identical bytes give 9,120 line comparisons with zero differences, while six bits of colour per channel rewrites 214 of the 480.
Check two: mirror it left to right
Mirroring does not change what is in the picture; it changes which way round it is. Everything a photograph can be measured for — how bright it is, how much contrast, how saturated, how rough — survives a mirror exactly. So a mirrored file should produce a line that is either identical or different for a reason you can name.
On this tool, 11 of the 40 files changed anything at all, and 125 of the 480 lines moved. The only clause that moved on more than one file is the palette: 10 of 40 files came back with a different set or a different order of colour names. One file also changed its light-distribution clause. The measurement behind all of it barely twitched — across the forty files the largest movement in mean brightness was 0.27 on a 0–255 scale, in contrast 0.13, in edge density 0.20, and in saturation and monochrome ratio 0.00.
before … bright, high-key lighting, dominant palette of silver, moss green, cream, grey, muted …
after … bright, high-key lighting, dominant palette of silver, olive, cream, charcoal, muted …
(Midjourney shape, long length, one of the forty files; everything else in the line is unchanged)
Why a colour name can move when no measurement does: the palette is not read off the whole file. The file is first reduced to 192 × 192 by averaging blocks of source pixels, and which source columns fall into each block depends on where the columns are. Flip the file and a different set of columns lands in each block, so the 12-bit colour buckets shift by a few counts. Buckets are then merged when they sit within a distance of 52 in RGB space, and the merged average decides the name. A shift of a few counts is enough to push moss green across into olive, or to swap the order of two names. This is worth knowing before you judge any tool on its colour list: the list is the most fragile part of the line and the part most tools lean on hardest.
Check three: flip it top to bottom
Now the question is narrower: does the tool know which way up the light is? A vertical flip leaves brightness, contrast, saturation and colour exactly where they were, and inverts one thing — whether the top or the bottom of the frame is brighter.
28 of the 40 files changed their vertical-light clause, and 159 of the 480 lines moved. Every one of those 28 went the way the arithmetic says it must: brighter upper half became brighter lower half, or the reverse. On this tool that clause only exists when one half is at least 1.2× the other, measured over the rows above 45% of the height against the rows below 55% — the 12 files that did not flip were the ones sitting inside that dead band.
before … evenly lit, brighter lower half, calm and cool atmosphere
after … evenly lit, brighter upper half, calm and cool atmosphere
(Stable Diffusion shape, long length; the flip moves exactly one clause)
Two things fall out of this check that you can use on any tool. First, only two of the four shapes this tool writes can carry that clause at all: the two sentence shapes never print it, so their line counts stay at 10 or 11 changed lines — all of them palette — while the two comma-list shapes jump to 28 at long length. If you are comparing tools, compare them at the same length setting, or you will be measuring the setting rather than the tool. Second, rotating 180° produced the same slot changes as flipping vertically — 28 vertical, 1 distribution, 10 palette — because the horizontal half of that rotation does nothing at all. A tool that reacts differently to a 180° rotation than to a vertical flip is reacting to something other than the picture.
Check four: rotate it ninety degrees
This is the only edit of the six where every single line changed: 480 of 480. The reason is not light or colour, it is shape. Rotating a 640 × 360 file gives you a 360 × 640 file, and the ratio inverts from 1.78 to 0.56. Two separate parts of the line report shape, and both moved on 40 of 40 files: the opening phrase went from widescreen 16:9 to portrait 2:3, and the trailing parameter went from --ar 16:9 to --ar 9:16.
| Field | Mirror | Flip v. | Rotate 180 | Rotate 90 | Slide | Crop 1% |
|---|---|---|---|---|---|---|
| framing | 0 | 0 | 0 | 40 | 0 | 0 |
| exposure | 0 | 0 | 0 | 0 | 0 | 0 |
| contrast | 0 | 0 | 0 | 0 | 0 | 0 |
| saturation | 0 | 0 | 0 | 0 | 0 | 0 |
| warmth | 0 | 0 | 0 | 0 | 0 | 0 |
| detail | 0 | 0 | 0 | 0 | 3 | 1 |
| light distribution | 1 | 1 | 1 | 1 | 22 | 1 |
| vertical light | 0 | 28 | 28 | 28 | 0 | 0 |
| subject | 0 | 0 | 0 | 0 | 0 | 0 |
| mood | 0 | 0 | 0 | 0 | 0 | 0 |
| palette names | 10 | 10 | 10 | 10 | 0 | 12 |
| hint (never printed) | 0 | 0 | 0 | 0 | 0 | 0 |
| Files changing anything | 11 | 28 | 31 | 40 | 24 | 13 |
| Lines changed of 480 | 125 | 159 | 165 | 480 | 129 | 231 |
| Aspect parameter changed | 0 | 0 | 0 | 40 | 0 | 40 |
Note what the two shape readings say after the rotation: the phrase says portrait 2:3, the parameter says 9:16. Both are computed from the same 0.56 ratio, by two code paths that never consult each other — one sorts the ratio into a bucket of eight fixed phrases, the other reduces it by its greatest common divisor. That is not a bug you can fix by rotating back; it is what happens whenever a file sits between two bucket edges. What to look for in another tool: rotate a picture and read the shape clause and any ratio parameter side by side. If they disagree, believe the parameter or the file’s own dimensions, not the sentence.
Check five: slide the same pixels sideways
This is the strictest check of the six, because it changes nothing at all about the pixels: take the image, move every column half the width to the right, and wrap the ones that fall off back to the left. The multiset of pixel values is identical. Brightness, contrast, saturation and the monochrome ratio all moved by 0.00 on every one of the forty files, and they should — the same values are simply in different places.
Yet 129 of the 480 lines changed. The clause that moved is light distribution, on 22 of 40 files: the centre window is the middle 40% of the frame and the border is everything else, and sliding the content by half the width moves what used to be the centre out to the edge. So light falling on the centre with darker edges becomes evenly lit, or becomes brighter edges with a darker centre, with the picture itself untouched. Three files also moved their detail clause, because edge density shifted by up to 0.63 — again not because any pixel changed value, but because the averaging grid now cuts different columns.
| Shape & length | Mirror | Flip v. | Rotate 180 | Rotate 90 | Slide | Crop 1% |
|---|---|---|---|---|---|---|
| Midjourney short | 10 | 10 | 10 | 40 | 0 | 40 |
| Midjourney medium | 11 | 11 | 11 | 40 | 24 | 40 |
| Midjourney long | 11 | 28 | 31 | 40 | 24 | 40 |
| Stable Diffusion short | 10 | 10 | 10 | 40 | 0 | 12 |
| Stable Diffusion medium | 11 | 11 | 11 | 40 | 24 | 13 |
| Stable Diffusion long | 11 | 28 | 31 | 40 | 24 | 13 |
| Flux short | 10 | 10 | 10 | 40 | 0 | 12 |
| Flux medium | 10 | 10 | 10 | 40 | 3 | 12 |
| Flux long | 11 | 11 | 11 | 40 | 24 | 13 |
| DALL·E short | 10 | 10 | 10 | 40 | 0 | 12 |
| DALL·E medium | 10 | 10 | 10 | 40 | 3 | 12 |
| DALL·E long | 10 | 10 | 10 | 40 | 3 | 12 |
The lesson for judging any tool is in that table rather than in the totals: a tool’s answer to “what changed?” is shaped as much by which clauses its output format can hold as by what it measured. Before you conclude that one tool is more sensitive than another, check that both are writing the same number of clauses.
Check six: crop one percent off every edge
The last edit is the smallest, and it is the one that catches the most. Trim 1% off each side of a 640 × 360 file and you have 628 × 354 — a change no one can see. Brightness moves by at most 1.97, contrast by 0.75, edge density by 0.53, and the ratio itself by less than 0.01. The framing phrase does not move on a single file: all forty still read widescreen 16:9. And yet 231 of the 480 lines changed, because the aspect parameter changed on 40 of 40 files.
before widescreen 16:9 composition, … balanced, natural atmosphere --ar 16:9
after widescreen 16:9 composition, … balanced, natural atmosphere --ar 60:34
(Midjourney shape, long length; the middle of the line is byte-identical)
The mechanism is arithmetic, not perception. The parameter is produced by dividing the dimensions by their greatest common divisor and then scaling the result down if either side is above 60: 640 × 360 has a gcd of 40, which gives the clean 16:9; 628 × 354 has a gcd of only 2, which gives 314:177, and rescaling that pair down to the cap is what produces 60:34. One percent of an edge is enough to collapse the common divisor from 40 to 2. The result is a line that opens by calling the picture widescreen 16:9 and closes with a parameter that says 60:34 — two readings of one file, computed by two paths, disagreeing by more than the crop did. If you take one practical thing from this page, take this check: crop a few pixels and see whether the tool’s numbers still agree with its own words.
Here is the same six edits read from the other end — not what the wording did, but what the eight measured numbers did. These are the largest changes seen on any of the forty files, which is why most of them are small enough to be invisible and still manage to move a clause.
| Edit | Brightness | Contrast | Edge | Saturation | Monochrome | Ratio | Centre ÷ border | Top ÷ bottom |
|---|---|---|---|---|---|---|---|---|
| Mirror | 0.27 | 0.13 | 0.20 | 0.00 | 0.00 | 0.00 | 0.04 | 0.03 |
| Flip vertically | 0.53 | 0.22 | 0.16 | 0.00 | 0.00 | 0.00 | 0.03 | 6.86 |
| Rotate 180° | 0.54 | 0.28 | 0.23 | 0.00 | 0.00 | 0.00 | 0.05 | 6.86 |
| Rotate 90° | 0.53 | 0.22 | 0.16 | 0.00 | 0.00 | 1.22 | 0.03 | 6.36 |
| Slide sideways | 0.00 | 0.00 | 0.63 | 0.00 | 0.00 | 0.00 | 1.85 | 0.00 |
| Crop 1% per edge | 1.97 | 0.75 | 0.53 | 0.01 | 0.01 | 0.00 | 0.05 | 0.16 |
What the six checks cost you
A check you will not run is worth nothing, so here is what all six cost on this machine: each of the forty files was decoded, reduced to the 192 × 192 grid, measured, and composed into all twelve shape-and-length combinations five times over, and the fastest pass for each file is what the table reports.
| Stage | Median | Fastest | Slowest |
|---|---|---|---|
| Decode the file | 15.05 ms | 9.81 ms | 27.32 ms |
| Reduce to 192 × 192 | 2.53 ms | 2.21 ms | 4.18 ms |
| Measure 36,864 samples | 2.59 ms | 1.90 ms | 3.43 ms |
| Compose all twelve lines | 0.04 ms | 0.04 ms | 0.04 ms |
| Measure + compose | 2.63 ms | 1.94 ms | 3.48 ms |
In other words the expensive part of an image-to-prompt tool is getting the file open, not thinking about it: writing all twelve candidate lines costs less than a tenth of a millisecond, because it is string assembly over twelve measured numbers. If a tool takes seconds to hand you a line, the time is going somewhere other than the measurement — usually a network round trip, which is a different question from whether the line is any good, and one worth asking separately.
The six checks, and the one question they cannot answer
All six checks are geometric, and that is their limit as well as their strength: none of them requires a tool to recognise anything. A tool can pass all six and still hand you a line with no subject in it, because a mirror, a flip, a rotation, a slide and a crop never ask what the picture is of. That question has its own answer on the page that searched 480 lines for object nouns and found 59 of 61 of them at zero.
The counts on this page come from six edits applied to forty files that were then re-decoded, re-measured and re-composed from scratch: 2,880 lines produced by the edits, plus 1,440 from the three repeat passes, plus the 480 un-edited baselines. “Changed” means the two strings differ by at least one character. The twelve fields are the ones the composer can fill, and the numbers behind them are set out on what an image to prompt tool measures; the resize that decides all of them before any word exists is documented on where your image goes, which is also where the grid alignment behind the palette flips is explained. The trailing ratio parameter, and why it disagrees with the sentence in front of it, belongs to the Midjourney shape. For how wide a band each measurement is pinned to before the wording moves at all, see what one line pins down. No model was called, no image was generated, and no other tool was opened: everything here is a before-and-after on files that were already on this machine.
That is the whole test, and it fits in ten minutes: three runs of the same file, then five edits you can make in any editor. It will not tell you which site has the nicest interface. It will tell you the thing that actually decides whether the output is usable — whether the words in the line are still true of the picture when the picture has only been turned around.