visualtoprompt.com

Get a Usable AI Image Prompt From Any Picture — Three Edits

One picture goes in, four different prompt shapes come out. Here is which one your tool actually wants, the three edits every generated prompt needs before you press generate, and all 480 outputs as a file you can download.

One scene drawn three times, from photograph to flat silhouette, with a slider on the right moving from top to bottom.
One scene drawn three times, from photograph to flat silhouette, with a slider on the right moving from top to bottom.

Drop the picture in, read the prompt out, then make three edits before you generate anything: pick the shape your target expects, write your own subject into the front, and check the aspect ratio it handed you. Every other phrase in the output — exposure, contrast, colour temperature, detail level, palette — is computed from your pixels and can go in untouched.

The three edits are ordered by how often they are the thing that ruins the render. Shape mismatch is the most common and the least obvious, because a wrongly-shaped prompt does not fail — it renders something plausible and wrong.

  1. Match the shape to the target. The generator emits four genuinely different strings for four targets: a comma list ending in --ar for Midjourney, a comma list opening with masterpiece, best quality, for Stable Diffusion checkpoints, and two sentence forms for flux and DALL·E. They are not interchangeable.
  2. Write your own subject into the front. Three images were run through it — a night fireworks shot, a backlit meadow and a code screenshot — and the subject field came back empty on all three. It is only filled in when a measured threshold is actually crossed: monochrome share above 0.85, or green or blue dominance above 0.45. The three measured 0.0117, 0.2016 and 0.0222 on monochrome share, so nothing fired, and what you get is a prompt that opens with framing rather than with a thing. Put your own noun in front of it.
  3. Check the aspect ratio it handed you. The --ar value is your pixel dimensions reduced by their greatest common divisor and then scaled down if either side exceeds 60. A 640×360 frame divides cleanly by 40 and comes out as 16:9; a frame that does not divide neatly gets scaled to the nearest representable pair instead. Confirm it is the canvas you actually want.

Four shapes, one measurement

These are real outputs from one of the three — the night fireworks shot, 640×360 — produced by running the formatter for each of the four targets at the default medium length. Same numbers behind all four — nothing about the measurement changed:

midjourney : widescreen 16:9 composition, dark, low-key lighting, dominant
             palette of navy, grey, slate, silver, vivid, saturated colour,
             cool blue colour temperature, medium contrast, highly detailed
             with intricate texture, light falling on the centre with darker
             edges --ar 16:9
sd         : masterpiece, best quality, widescreen 16:9 composition, dark,
             low-key lighting, dominant palette of navy, grey, slate, silver,
             vivid, saturated colour, cool blue colour temperature, medium
             contrast, highly detailed with intricate texture, light falling
             on the centre with darker edges
flux       : A widescreen 16:9 image. Dark, low-key lighting. The dominant
             colours are navy, grey, slate, silver. Vivid, saturated colour,
             cool blue colour temperature. Highly detailed with intricate
             texture.
dalle      : A widescreen 16:9 image, dark, low-key lighting, with a palette
             of navy, grey, slate, silver. Vivid, saturated colour, cool blue
             colour temperature, highly detailed with intricate texture.

Two structural facts are worth knowing because they explain most surprises. The palette line is spliced into third position in both list-shaped variants, right after subject and framing — it is not appended at the end. And the two sentence-shaped variants carry less: the DALL·E form never receives the evenly lit lighting-distribution phrase at any length, and the flux form only gains it at the long setting.

That last point decides what you can do with a line you already have. If you want the same photograph written for a different target, you do not have to run the tool again — you can rewrite it from the line alone, but only in the directions where the source line already carries every value the target reads. Twenty of the thirty-six directions work exactly, and the sixteen that do not are missing a named value rather than being approximate: see what one image to prompt line can carry into another shape.

What came back from three real images

Measured on three real images. monochrome share is the proportion of pixels below 0.10 saturation; the subject label fires above 0.85.
SourcePixels--arFraming phrasePalette wordsMono share
night-fireworks.png640×36016:9widescreen 16:9navy, grey, slate, silver0.0117
strong-backlight.png640×36016:9widescreen 16:9black, charcoal, silver, white0.2016
text-screenshot.png800×45016:9widescreen 16:9charcoal, forest green, slate, grey0.0222
Night fireworks over a dark ridge, the first sample image
night-fireworks (640×360) — mono share 0.0117, palette navy, grey, slate, silver. The Midjourney string runs 267 characters at medium length.
Backlit meadow flowers against a low sun, the second sample image
strong-backlight (640×360) — mono share 0.2016, palette black, charcoal, silver, white. The backlighting is captured as brighter edges with a darker centre; the flowers are not in the output at all.
A code screenshot in a dark editor theme, the third sample image
text-screenshot (800×450) — mono share 0.0222, palette charcoal, forest green, slate, grey. Ninety-two per cent of the frame in one bucket, and no word for the code.

The length of the finished string shifts with the length setting far more than with the picture. Across all three images and all three lengths, the Midjourney variant ran 158–319 characters, Stable Diffusion 175–336, flux 100–273 and DALL·E 93–219. The spread between lengths inside one target is far wider than the spread between pictures — length decides how many measured fields get included, and that is what moves the count.

The Midjourney variant is the one people ask about first, and it has a shape of its own. What a Midjourney prompt looks like when it comes from an image walks the ten slots in the order they appear and explains the one value at the end that never came off the measurement grid.

Download the full grid (CSV) — 480 rows, 40 images × 4 targets × 3 lengths, each row carrying that image's edge measured at its own resolution, generated 2026-10-08

Twenty of those rows, with the measurements behind each line and the model it was written for, are laid out on image prompt examples.

Why the aspect value looks like that

The ratio is not a guess and it is not a lookup table of common sizes. It takes your dimensions, divides both by their greatest common divisor, and then scales them down if either side exceeds 60. A 640×360 frame divides cleanly by 40 and comes out as 16:9, untouched. An 800×450 frame divides by 50 and lands on the same 16:9. Both are ratios you would pick anyway.

The cap exists so that an odd crop does not emit something like 1913:977. The trade-off is that a frame whose true ratio does not divide neatly gets scaled to the nearest representable pair under 60, which is rounded rather than exact. All three samples here happen to divide cleanly, so none of them shows the effect — a screenshot cropped to an unusual width is where you will see it. Check the value before you generate.

What the three lengths drop and add

Length is not verbosity, it is which measured fields get included. At short, contrast, detail and lighting distribution are all dropped. At long, the vertical light phrase is added if one was measured, plus the mood phrase. These are the real strings for strong-backlight.png across all twelve combinations:

midjourney/short   (158) ... slightly warm tone --ar 16:9
midjourney/medium  (239) ... high contrast, moderate detail and texture, brighter
                          edges with a darker centre --ar 16:9
midjourney/long    (291) ... brighter upper half, moody and dramatic atmosphere
                          --ar 16:9
sd/short           (175) masterpiece, best quality, ... slightly warm tone
sd/medium          (256) ... brighter edges with a darker centre
sd/long            (308) ... brighter upper half, moody and dramatic atmosphere
flux/short         (105) A widescreen 16:9 image. Dark, low-key lighting. The
                         dominant colours are black, charcoal, silver, white.
flux/medium        (179) ... Vivid, saturated colour, slightly warm tone.
                         Moderate detail and texture.
flux/long          (247) ... Moderate detail and texture. Brighter edges with a
                         darker centre. Moody and dramatic atmosphere.
dalle/short         (98) A widescreen 16:9 image, dark, low-key lighting, with a
                         palette of black, charcoal, silver, white.
dalle/medium       (172) ... Vivid, saturated colour, slightly warm tone, moderate
                         detail and texture.
dalle/long         (203) ... moderate detail and texture. Moody and dramatic
                         atmosphere.

Read the top of that list before you reach for the long setting: the last 30 characters of the long variant are a mood phrase, and mood is the least reliable thing to add when you are trying to reproduce a specific picture rather than invent one. Medium is the useful default.

Feeding it back into your own tool

The generated order is deliberate and worth preserving. Subject comes first, framing second, palette third, then exposure, saturation, temperature, contrast, detail and lighting distribution. Because weight decays left to right in a Stable Diffusion checkpoint, having your subject at the front is the correct arrangement — do not shuffle it.

Three practical notes for the local case:

The number to look at when a phrase looks wrong

Detail is decided by an edge-density measure against a cut-off of 7 and then one at 15. On these three, edge measured 22.50, 13.02 and 5.14 — above 15, between the two lines, and below 7 — so they came out highly detailed with intricate texture, moderate detail and texture and clean and minimal, smooth surfaces respectively. The closest any of them sits to a cut-off is 1.86. That margin is not a fixed property of your picture: measure the same backlit meadow at full resolution rather than on the 192 grid and edge reads 9.60 instead of 13.02. Crop tighter or resave with more compression and the figure moves with you. When a phrase looks wrong, that is the number to look at.

When the result still comes out wrong

Every edit above assumes the prompt describes your picture and the render is what went wrong. If the render is wrong, work the causes in order rather than rewording — checkpoint first, then the checkpoint's own published settings, then verb form, then weights, then term order. The full ranked list with the parser output behind it is in your image to prompt output is wrong. For the other direction, words in and picture out, see what actually decides the result in prompt to image.