You have a decent photograph of the product. You shot it on the kitchen table beside the window, on a sheet of white card, and the product itself looks fine. What you do not have is a scene. So you ask a generator for a sunlit marble worktop, cut the product out, drop it on top, and the result is wrong in a way you cannot name.
Everyone who looks at it says the same thing: it looks fake. Nobody says why, because the eye files the complaint before the brain has any words for it. The eye is not being vague, though. It runs three specific comparisons, and one of them has come back with a mismatch.
Light direction, shadow quality, perspective. A composite that gets those three right survives a surprising amount of other sloppiness. A composite that gets one of them wrong will not be rescued by better colour, a nicer background, or another twenty prompt attempts.
The three axes
The physics behind each one is short enough to say in a sentence.
- One light. A scene has one dominant source. The sun sits 150 million kilometres away, so its rays arrive effectively parallel and every shadow on a tabletop runs the same way. Two objects lit from different sides were never in the same room.
- Hard light makes hard shadows. Edge softness is set by the apparent size of the source: its width divided by its distance. The sun spans half a degree of sky, which is why sunlight cuts a crisp edge. A softbox at arm’s length spans fifty degrees, which is why it does not.
- One horizon. A rectilinear lens has exactly one eye level, and every horizontal direction in the scene converges to a point sitting on that single line. Your phone held 40 cm above a table and a room shot from standing height do not share it.
You can check all three by eye once you know what to look for, and by eye is exactly where it goes wrong: the eye is superb at noticing a mismatch and hopeless at measuring one. So the tool below asks you to point at things and does the arithmetic itself.
Composite believability check
A composite gives itself away in the physics, not in the pixels. Load your montage and walk three guided checks over it: where the light comes from, how hard the shadow edges are, and whether the product stands on the same ground the camera saw. You do the looking, the tool does the arithmetic and keeps score. The picture is read in this browser tab only, nothing is uploaded and nothing leaves your computer.
or press Enter to pick a file. Until then the example below stands in, and it carries all three faults on purpose.
- Blue is check one on the product: the arrow towards its bright side, and the loupe on its shadow edge.
- Amber is the same two things in the background. The dashed half of that arrow is it turned round, which is where the light was.
- Green is check three: the horizon, the eight percent band around it, and the two lines whose crossing has to land inside it.
1Light directionopen
Two arrows. One on the product, drawn towards its bright side. One in the background, drawn from an object to the tip of its shadow: that one gets turned round, because a shadow points away from the light.
2Shadow edgeopen
Click the picture to drop each loupe on a shadow edge, one on the product, one in the background. They sit at a fixed four times, deliberately small. Then say what you see: hard sun draws a crisp edge, an overcast sky draws a soft one.
3Perspectiveopen
Drag the dashed horizon onto the horizon in the picture, then lay the two green lines along edges of the product that run away from the camera. Where those two meet is the eye level the product was shot at, and it has to sit on the horizon.
Three craft checks, no detector. They find the mistakes a montage makes, which is a different question from whether a picture is real, and coming up empty is not a certificate. The article shows how to avoid making these mistakes in the first place.
It runs entirely in your browser. The picture you drop in is never uploaded: no fetch, no XHR, nothing written to a server.
Two arrows, one light
The first check gives you a radio pair. Pick subject, then drag an arrow across the product towards its bright side, the side where the highlight sits. Pick background, then drag a second arrow from some object in the scene to the tip of the shadow it casts. There is a live preview while you drag, and a 14 px minimum length so a stray click does not register as an arrow.
Those two arrows point in opposite senses on purpose. The subject arrow points at the light. The background arrow points away from it, because shadows fall away from what casts them. The tool turns the background arrow round by 180 degrees before it compares, so both finally say the same thing: this is where the sun is.
Angles come out on a compass rose with 0 at the right and 90 straight up, computed in the picture’s own pixel space rather than in whatever box the browser has squeezed the preview into. Measure an angle on a 16:9 picture that has been scaled unevenly to fit a column and every reading skews towards the horizontal. Mapping the drag back into image coordinates first keeps a 45 degree arrow at 45 degrees.
More than 35 degrees apart is reported as a finding. That threshold is deliberately loose, because real photographs disagree with themselves all the time. A window bouncing off a white wall, a second lamp, a chrome curve throwing a highlight somewhere unexpected: a ten degree tolerance would flag half the genuine product shots on the internet. Thirty-five catches the composite where the product was lit from the left and the background was generated with the sun behind it, which is the failure that actually happens.
The loupe, and why smoothing is off
The second check is about shadow edges, the one people skip because they think they can already see it. At 100 percent zoom on a 1400 px picture, they cannot. So the tool gives you two fixed 4x loupes: a 30 px window of source pixels blown up onto a 120 px canvas, placed by clicking, one for a subject edge and one for a background edge.
Two details there are load bearing. Smoothing is switched off, so the magnified pixels stay square: interpolated, every edge in every picture would look soft and the check would measure nothing but the resampling. And the loupes read the original canvas, not the shrunk preview on screen, so a 4000 px photo still magnifies real captured pixels.
You grade each edge yourself with a three-stage switch: soft, med, hard. Two classes apart is the finding, in either direction. A hard-edged product shadow sitting in a softly lit generated room is exactly as wrong as a soft product on a background full of knife-edged sun shadows, and both happen.
One thing to know before you place them: edge hardness is not constant within a single picture. The penumbra widens with the gap between the object and the surface it shadows. Sunlight spans about half a degree, which works out at roughly 9 mm of fuzz per metre of gap, which is why your own shadow is knife sharp at the feet and blurred at the head under the same sun. Put the two loupes on edges with a comparable gap, or you will grade the physics rather than the composite.
The horizon is where the camera was
The third check gives you a dashed horizon line you can drag, plus two vanishing lines with four green handles between them. You lay the vanishing lines along two edges in the background that are parallel in the real world: the long edges of a worktop, the sides of a doorway. Where they cross is a vanishing point, and in a correctly built picture that point lands on the horizon.
The crossing is solved affinely in fractions rather than in device pixels, so the answer arrives already expressed in picture heights and does not change if the preview is 600 px wide or 1200. More than an 8 percent band away from the horizon is the finding.
The horizon in any photograph sits at the camera’s eye level, full stop. Shoot the product sitting down with the phone 40 cm above the table and its perspective says the viewer is sitting. Render the background from standing height and its horizon is a third of the frame higher. No amount of scaling, rotating or shadow work fixes that, because it is not a placement error. It is two different cameras, and the fix is upstream, in the next prompt.
If your two vanishing lines end up parallel, the tool says so instead of guessing a number: parallel lines never meet, and that state produces no finding. Parallel edges usually mean the camera was square on to that surface, which is a legitimate way to shoot.
The contact shadow
All three checks can pass and the picture can still look like a sticker, and when that happens it is almost always the contact shadow. This is the small, dark, tight seam where the object meets the surface, and it exists for a reason unrelated to the key light: at the contact line almost no light from anywhere in the room reaches into the gap. It is darkest and hardest at the touch point, then widens and lightens as the gap opens.
Which means a contact shadow is there even on a flat overcast day when nothing casts a directional shadow at all. Leave it out and the product floats, however carefully you matched the sun. Put it in and a mediocre composite suddenly reads. Build it as two separate layers, both set to multiply: a tight dark ellipse hugging the base, and the long soft cast shadow running in the direction you just measured with the arrows. Keeping them apart lets you tune the seam without touching the throw, which is the whole argument for working non-destructively on a composite you will revisit. The rest of the anatomy, including why the default drop shadow in every tool looks wrong, is covered separately.
The loupe tends to catch one more thing: the cutout edge itself. Pixels along the boundary still carry a fringe of whatever they were shot against, so a product cut off white card and dropped on a dark generated wall gets a glowing white outline that reads as pasted-on before anything else does. That is an edge problem, not a lighting one, and it gets fixed at the mask.
Briefing the generator with the same three axes
The three things you check afterwards are the three to state in the prompt beforehand, because whatever you leave unstated the generator picks for itself, and it has never seen your product photo.
So read the light off the shot you already have. Where is the highlight on the product? That is the direction. How long is the shadow relative to the object? That is roughly the elevation. Zoom to 400 percent on the edge of the shadow the product casts on the card: crisp means a small hard source, gradual means a big soft one. Were you standing or sitting? That is the camera height. Four readings, two minutes, and now you can write them down.
Surface: empty matte oak worktop, nothing in the middle third
Key: upper left, about 40 degrees above the horizon
Quality: large softbox, soft-edged shadows
Colour: warm key around 3200K, cool fill from a window on the right
Camera: table height, slight downward tilt, 35 mm
Exclude: no product, no props, no people
Two lines there do quiet work. nothing in the middle third gives the product somewhere to stand instead of forcing you to clone out a bowl of lemons. table height is the horizon instruction, and it is the most effective line in the prompt, because perspective is the axis you cannot fix in post.
Colour comes last, not first, and it is the one axis that genuinely is repairable afterwards. Once light, shadow and perspective agree, pulling the product’s white balance and contrast towards the background is a handful of deliberate moves, not a hunt. Doing it in the other order means grading a picture that was never going to work.
Keeping the whole thing in one document helps more than it sounds: WunderPaint’s AI Studio generates a background from your prompt straight onto a layer in the same file as the cut-out product photo, so both shadows live on layers in between and every one of them stays editable. Whatever you build it in, export at the size your shop template actually asks for rather than at whatever the canvas happens to be, since the three WooCommerce settings decide the crop long before your composite reaches a customer.
What the checks refuse to do
The tool judges nothing on its own. You point the arrows, you place the loupes, you grade the edges. It does the trigonometry, the intersection and the bookkeeping. That is why the verdict box is worded “nothing gave it away in these three checks” instead of anything resembling a certificate. A montage that passes has passed three craft checks performed by you. It has not been authenticated, and no browser tool looking at pixels can do that.
The thresholds sit where they sit, on purpose and consistently. Exactly 35 degrees apart passes, because that test is on the greater-than side. Exactly two shadow classes apart is a finding, because that one is on the at-or-more side. Both are documented and both are tested.
A few behaviours are worth knowing before they surprise you. The perspective step counts as checked the moment any one of its three lines moves, because unlike the arrows and the loupes those lines already exist and cannot be in a “not yet drawn” state. Skipping also counts as checked, which is the point of the Skip button: decline a check on a picture with no usable straight edges and you still reach a verdict built on the two that applied. The built-in 1000×700 example arrives with all three readings already taken and all three faults present, so a first-time visitor sees what a mismatch looks like before touching anything, and loading your own picture clears the lot back to empty. A file the browser cannot decode leaves your previous picture on screen with a message rather than blanking the tool.
What it will not do: run twice on one page, hand you a download, or reach the clipboard by any route other than the copy button. The report it produces is plain text carrying both angles, both shadow classes and the horizon and vanishing point positions, enough to paste into a note and compare against the next attempt.
Saying it out loud to customers
A real product on a generated background is a partially synthetic image, and the sensible position is to say so rather than wait to be asked. The European Commission publishes disclosure emblems for exactly this, in three flavours: a basic one, one reading “Fully AI-generated” and one reading “Partially AI-modified”. A composite like the one described here is the third. Good export dialogs offer them in black, white and half opacity, start on None, and never guess on your behalf: only you know what you made.
The other half is metadata. The IPTC digital source type is the field picture agencies and image search actually read, and writing it into the file means the picture keeps declaring its origin after somebody has cropped the emblem off the corner. It costs one checkbox at export.
Then there is the commercial line, which has nothing to do with regulation. A generated scene that implies scale is making a claim: a mug beside a laptop tells the customer how big the mug is, and a generated worktop that makes a matte finish look glossy tells them what they are buying. Backgrounds are fair game. Anything the product itself appears to promise is not, and returns cost more than a second photograph would have.
None of this is a rulebook for making pictures. It is a way of turning “it looks fake” into a number you can act on, which is the difference between iterating and guessing. Once you know the arrows are 62 degrees apart, you know the problem is the sun and not the shadow, and the fix belongs in the prompt rather than in another hour of masking.
The pattern that emerges after a few rounds is that almost every fix is upstream. Light direction, shadow hardness and camera height are all cheap to state in a prompt and expensive to repair in a composite, so the checks end up being less about grading finished work than about writing the next brief. The one thing that genuinely belongs downstream is the contact shadow, because no generator can put a shadow under a product it has never seen. Get those four right, label the result honestly, and a composite built on a kitchen table with a phone will sit on a product page without anyone squinting at it. Not a picture nobody can tell was assembled, but one where nothing quietly contradicts anything else.