TL;DR: These 10 FLUX.2 photorealism formulas are assembled from Black Forest Labs' own documented parameters and prompting guidance, not from rendered tests. We have no image-generation access. Each one names the mechanism doing the work: a capture context, a light source, a lens, a colour lock, or a request-body field. Copy the template, fill the brackets, expect variation.
Everything cited below was read from api.bfl.ai/openapi.json and docs.bfl.ai/llms-full.txt on September 3, 2026. If you want a ready-made preset library organized by subject instead of mechanism, our FLUX.2 prompt generator with 25 photorealism presets is the companion page, and it also covers the full FLUX.2 parameter surface: variants, pricing, and licences, all in one place.
What actually makes a FLUX.2 prompt read as a photograph?
Naming a mechanism, not asking for a mood.
Black Forest Labs' own prompting guide is direct about this: "FLUX.2 excels at generating photorealistic images across a wide range of subjects — from macro photography to cinematic landscapes and documentary scenes. Prompt the model as if describing a real photograph: specify lens, lighting, framing, and texture details for maximum realism." Its tip on the same page is the sentence worth keeping: "To get believable photorealism, prompt the model as if a real photo is being captured in the moment. Use photography language (lens, lighting, framing) and explicitly ask for real texture (pores, wrinkles, fabric wear, imperfections)."
That is four mechanisms, not one word. The 10 formulas below each isolate one of them, either from the prose prompting guide or from a field in the request body itself, so you can reach for the right lever instead of stacking adjectives and hoping.
Formula 1: The Capture-Context Anchor
Name the photographic format before you name anything else in the frame.
BFL's style guide publishes four named looks with their own descriptor phrases: "Modern Digital" ("shot on Sony A7IV, clean sharp, high dynamic range"), "2000s Digicam" ("early digital camera, slight noise, flash photography, candid, 2000s digicam style"), "80s Vintage" ("film grain, warm color cast, soft focus, 80s vintage photo"), and "Analog Film" ("shot on Kodak Portra 400, natural grain, organic colors"). Each phrase is doing the work of a dozen adjectives at once: it encodes noise, colour cast, sharpness, and era in three or four words, because it points at a real physical process rather than a vibe.
[CAPTURE CONTEXT, e.g. "shot on Kodak Portra 400, natural grain, organic colors"],
[SUBJECT], [SETTING].
FILLED: Shot on Kodak Portra 400, natural grain, organic colors, a
weathered fisherman mending nets on a stone quay, harbor boats
receding into morning fog behind him.
Formula 2: Camera-and-Lens Simulation
Name actual gear, not a category like "professional photo."
BFL's own tip states this plainly: for photorealism, specify camera models, lenses, and film stocks, since "Shot on Fujifilm X-T5, 35mm f/1.4" produces more authentic results than just "professional photo." Its worked examples pair a specific body with a specific lens and aperture: "Shot on Hasselblad X2D, 80mm lens, f/2.8, natural lighting" and "Canon 5D Mark IV, 24-70mm at 35mm, golden hour, shallow depth of field". A camera name carries sensor character and rendering quirks that "professional photo" carries none of.
Shot on [CAMERA BODY], [LENS] at [FOCAL LENGTH]mm, f/[APERTURE],
[LIGHTING CONDITION]. [SUBJECT] in [SETTING].
FILLED: Shot on Fujifilm X-T5, 35mm f/1.4, overcast daylight. A
locksmith at his workbench, brass shavings catching the window light.
Why does lighting move a FLUX.2 render more than anything else?
Because BFL says so directly, and builds its whole style guide around that claim.
Lighting has the "greatest single impact" on output quality, in BFL's own words, and its guide adds that "good lighting" is not enough on its own: describe it like a photographer would. The guide breaks it into five things to describe: source, quality, direction, temperature, and interaction with surfaces. Formulas 3 through 5 are three different ways of applying that instruction.
Formula 3: Single Consequential Light Source
State one light, its angle, and what it does to the face or surface, not "good lighting".
BFL's portrait-lighting examples name the light and its geometric consequence together: "Portrait with Rembrandt lighting, key light at 45 degrees, dramatic chiaroscuro effect" for a 45-degree key, and "Artistic portrait, split lighting, strong side illumination, dramatic contrast" for a 90-degree side light. Naming the angle is what turns a lighting name into an instruction the model can act on rather than a label it can ignore.
[SUBJECT], [LIGHTING PATTERN] lighting, key light at [ANGLE] degrees,
[NAMED VISUAL CONSEQUENCE].
FILLED: A retired boxer in a bare-knuckle gym, Rembrandt lighting,
key light at 45 degrees, a small triangle of light under his far eye
and a hard shadow line down the cheek.
Formula 4: Environmental Light Quality Swap
Reach for the quality of light before the source, since BFL pairs each source with a fixed quality.
Its accordion on environmental light gives four definitions in a breath, pairing each named source with its fixed quality: window light is soft, even illumination; golden hour is warm and soft; blue hour is cool and moody; overhead artificial is harsh and dramatic. Swapping the source swaps the whole feel in one word, because each name already carries its quality.
[SUBJECT] in [SETTING], lit by [LIGHT SOURCE: window light / golden
hour / blue hour / overhead artificial], [ONE VISUAL CONSEQUENCE OF
THAT LIGHT].
FILLED: A greenhouse gardener repotting seedlings, lit by window
light, soft even illumination falling across the potting bench with
no visible shadow edge.
Formula 5: Chiaroscuro and Practical-Light Narrative
Build the scene around a light source that exists inside the frame, not one implied from outside it.
BFL's cinematic-lighting examples both name a visible in-scene source: "Film noir detective scene, single practical desk lamp, strong chiaroscuro lighting" and "Cyberpunk street scene, neon signs and LED strips providing atmospheric lighting". A practical light (a lamp, a sign, a screen) gives the model a reason for the shadow pattern instead of asking it to invent one from nothing.
[SCENE], [NAMED PRACTICAL LIGHT SOURCE IN FRAME], [LIGHTING STYLE:
chiaroscuro / atmospheric / harsh].
FILLED: A night mechanic's bay, a single caged work-light hanging
over the engine, strong chiaroscuro lighting carving the block into
bright highlight and total shadow.
Formula 6: The Hex-Locked Palette
Use hex codes when a colour has to match exactly, not approximately.
BFL's Exact Color Control page states the case directly: "Specify brand colors via hex codes with precision matching. No approximation—get the exact colors you need." Its syntax guide names the mechanism: signal a hex colour with the keyword "color" or "hex" followed by the code, then associate each hex value with a specific object or surface. One of its own worked examples: A vase on a table in living room, the color of the vase is a gradient of color, starting with color #02eb3c and finishing with color #edfa3c. The flowers inside the vase have the color #ff0088.
[SUBJECT/SURFACE 1], color #[HEX 1]. [SUBJECT/SURFACE 2], color
#[HEX 2]. [SCENE DESCRIPTION].
FILLED: A ceramic mug on a walnut counter, color #C4725A. Steam
rising from the coffee inside. Morning window light from the left,
soft shadow beneath the mug.
Formula 7: The JSON Structured Recipe
Move to a schema when a shoot has multiple SKUs and one field, like colour or pose, needs to change without touching the rest.
BFL states plainly that it supports both forms equally: "FLUX.2 understands both formats equally well—choose based on your workflow needs." Its own list of when to reach for JSON opens with "Production workflows requiring consistent structure" and "Automation and programmatic generation". Its own base schema:
{
"scene": "overall scene description",
"subjects": [
{ "description": "detailed subject description", "position": "where in frame", "action": "what they're doing" }
],
"style": "artistic style",
"color_palette": ["#hex1", "#hex2", "#hex3"],
"lighting": "lighting description",
"mood": "emotional tone",
"background": "background details",
"composition": "framing and layout",
"camera": { "angle": "camera angle", "lens": "lens type", "depth_of_field": "focus behavior" }
}
Keep every SKU's JSON identical except the two or three keys that actually change. subjects[0].description and color_palette cover most product resets, and the rest of the shoot stays visually consistent by construction rather than by luck.
Formula 8: The Flex Guidance-Down Realism Dial
Turn one number down when a render looks slightly illustrated rather than photographed.
Only flux-2-flex exposes it. Its schema description, read directly from api.bfl.ai/openapi.json: "Guidance scale for image generation. High guidance scales improve prompt adherence at the cost of reduced realism." The field runs 1.5 to 10.0, default 5.0. Black Forest Labs publishes no recommended value for any subject, so this formula is a starting point to sweep from, not a setting to copy. Our companion piece on FLUX guidance scale covers the sweep method and why a value never carries between endpoints.
ENDPOINT: flux-2-flex
GUIDANCE: [start at 5.0 default, sweep down toward 2.0-3.0 for skin
and product realism]
STEPS: [50 default; drop only if latency matters more than detail]
PROMPT: [SUBJECT], [LIGHTING], [LENS]. Real texture, visible
imperfections, no retouching.
Formula 9: The Disable-Pup Determinism Lock
Turn the automatic prompt rewriting off when a shoot list needs every frame built from the exact same instruction.
Pro and max both apply prompt upsampling by default. The disable_pup field's own description: "Disable automatic prompt upsampling for this request. FLUX.2 [pro] and [max] apply prompt upsampling by default; set this to true to generate from your prompt exactly as written." Flex carries the same behaviour under a different name, prompt_upsampling, also defaulting to true. Klein needs no flag at all. BFL's overview states plainly that FLUX.2 [klein] "does not include prompt upsampling. Write detailed, descriptive prompts for best results." So what you send is what it receives, every time.
pro / max: { "prompt": "...", "disable_pup": true, ... }
flex: { "prompt": "...", "prompt_upsampling": false, ... }
klein: { "prompt": "..." } — no flag needed, never upsamples
Use this whenever visual consistency across a batch matters more than letting the model quietly improve a thin prompt.
Formula 10: The Positive-Only Imperfection Swap
Since no FLUX.2 endpoint accepts a negative prompt, describe the imperfection you want instead of the flaw you don't.
Searching BFL's complete OpenAPI spec for negative returns zero hits for a negative_prompt field on any FLUX.2 path. The only two matches anywhere in the spec are the outpainting endpoint's unrelated "Negative values are allowed" note about pixel offsets. BFL's replacement method, from its Technical Parameters page: identify the unwanted element, ask what would fill that space, then describe that positively. For photorealism specifically, the swap that matters is turning a plastic-looking or CGI-looking complaint into a named texture: the same photorealism page's own instruction is to "ask for real texture (pores, wrinkles, fabric wear, imperfections)" rather than to disclaim artificiality.
INSTEAD OF: "not CGI, not plastic-looking, no airbrushing"
WRITE: "[SURFACE] shows visible pores across the nose and a
slight sheen on the forehead; [FABRIC] shows a slubby
weave and a worn crease at the fold."
Can you combine several formulas in one prompt?
Yes, and BFL's own worked examples already do this by stacking clauses in the order the guide itself uses: capture context, then subject, then location, then light, then lens, then material.
None of the 10 formulas above are exclusive. Each one isolates a single mechanism so you can learn it in isolation, but a real production prompt usually stacks three or four of them into one paragraph, because each mechanism sits in a different part of the sentence and none of them conflict. A capture-context anchor (Formula 1) sets the era. A named light source (Formula 3 or 4) sets the mood. A camera-and-lens clause (Formula 2) sets the composition. A material-behaviour swap (Formula 10) sets the surface. Stacked together, in that order, they read as one coherent photograph rather than four separate instructions competing for attention.
Here is one prompt built from four formulas at once, with each clause's source formula marked so you can see the seam:
[F1: CAPTURE] Shot on Kodak Portra 400, natural grain, organic colors.
[F2: CAMERA] Shot on Fujifilm X-T5, 35mm f/1.4.
[F4: LIGHT] Golden hour, warm and soft, raking across the workbench.
[F10: MATERIAL] A leatherworker's hands show a worn callus and a
faint ink stain; the hide on the bench shows a visible grain and a
scuffed edge where it has been folded and unfolded for years.
FILLED AS ONE PARAGRAPH: Shot on Kodak Portra 400, natural grain,
organic colors, a leatherworker's hands at his bench in late-
afternoon golden hour light, warm and soft, raking low across the
tools. Shot on Fujifilm X-T5, 35mm f/1.4. His hands show a worn
callus and a faint ink stain; the hide on the bench shows a visible
grain and a scuffed edge where it has been folded and unfolded for
years.
The only formula that resists stacking cleanly is Formula 7, the JSON schema, since it is a different prompt format rather than a clause you can splice into a sentence. Translate the same four mechanisms into the schema's own keys instead: style carries the capture context, lighting carries Formula 4, camera carries Formula 2, and a materials note inside subjects[0].description carries Formula 10.
Which FLUX.2 variant fits which formula?
| Feature | FLUX.2 [pro] | FLUX.2 [max] | FLUX.2 [flex] | FLUX.2 [klein] |
|---|---|---|---|---|
| Formulas 1–7 and 10 (prompt-only, no request-body field) | ||||
| Formula 8 (guidance dial) | ||||
| Formula 9 lock mechanism | disable_pup: true | disable_pup: true | prompt_upsampling: false | no flag, never upsamples |
| Prompt upsampling applied by default | ||||
| Max reference images (API) | 8 | 8 | 8 | 4 |
| Positioned for (BFL's own wording) | Production at scale | Highest quality, final assets | Quality with control | Real-time, high-volume |
Formula 8 is the only one that requires a specific endpoint. Everything else is portable because it lives in the words, not in a parameter.
What can't be verified here, and why that matters
Every formula above cites a Black Forest Labs page or a field in its published API spec, read on September 3, 2026. None of it was run through FLUX.2 to confirm the output. We build prompts, not images, and have no image-generation access to test against, so we won't claim these are "tested" the way a rendering pipeline could claim it. BFL itself publishes no recommended guidance value, no ranked list of which formula wins for which subject, and no accuracy figure for photorealism specifically. Two consequences follow: treat every filled example as a first draft, and expect the same prompt to render differently across seeds, endpoints, and whichever side of the prompt-upsampling default you land on.
That is also why the word "tested" was dropped from this page's title before it was written. A tested claim implies someone ran the formula and looked at the pixel output; what actually happened here is closer to a literature review of BFL's own documentation, checked for internal consistency and reproduced exactly. Both are useful. They are not the same claim, and conflating them is the specific failure this page was written to avoid.
Prompt Architects does not generate FLUX.2 images. We generate the prompt, store the formula once with its variables named, and keep the wording identical the next time someone on the team needs the same shot with a different subject. The free plan runs 5 prompt enhancements a day, forever, and image prompt generation starts on the Pro plan; current pricing is on the pricing page. For the full parameter reference and 25 ready-made presets organized by subject, see our FLUX.2 prompt generator.
Stop rewriting prompts. Start shipping.
Works with ChatGPT, Claude, Gemini, Grok, Midjourney, Ideogram, Veo3 & Kling. 4.8★ on the Chrome Web Store.
Create An Account