{"course":{"slug":"ai-images","title":"Image Generation, in Practice","url":"https://addaly.com/learn/ai-images","level":"beginner","track":"create"},"lesson":{"slug":"matching-grain-and-optics","title":"Making two sources agree","url":"https://addaly.com/learn/ai-images/matching-grain-and-optics","position":49,"of":69,"minutes":8,"answer":"Every image carries a signature of noise, sharpness, depth of field and chromatic behaviour, and a composite reads as fake when two sources disagree on that signature rather than on content.","keyIdea":"Every image carries a signature of noise, sharpness, depth of field and chromatic behaviour, and a composite reads as fake when two sources disagree on that signature rather than on content."},"body":{"format":"markdown","text":"## What the eye is actually detecting\n\nShow someone a composite and they will say it \"looks off\" without being able to say why. They are almost never responding to the content. They are responding to two images having different *physical* characteristics, which the visual system reads as two surfaces rather than one.\n\nFive characteristics, all matchable.\n\n## Grain and noise\n\nEvery photograph has noise (sensor noise, film grain) with a particular size and colour. Generated images have their own, usually finer and more even, and often almost none after upscaling.\n\nThe fix: flatten the composite and add a single grain layer over everything. In GIMP that is a new layer filled with 50% grey, `Filters > Noise > RGB Noise` at a low value, set to Overlay, opacity 10 to 25%.\n\nDoing it over the whole image rather than per element is the important part. A unified grain layer makes disparate sources belong to one photograph, and it is the cheapest, most effective integration step there is. This alone rescues most composites.\n\n## Sharpness and depth of field\n\nIf the generated scene has a shallow depth of field and your product is pin-sharp, the product will not sit in the space. Work out which plane the object occupies and blur it to match, using a graduated blur if it is large enough to span planes.\n\nThe opposite happens too: an upscaled generated background can be unnaturally crisp everywhere, sharper than any real lens, and a normally-photographed product looks soft against it. Then you blur the background slightly rather than sharpening the product.\n\n## Chromatic aberration\n\nReal lenses split colour slightly at high-contrast edges: a faint red-cyan or blue-yellow fringe, strongest at the frame's corners. Generated images often have it, inherited from training data. A cut-out product will not.\n\nIf the scene has visible fringing, add a trace to the product: offset the red and blue channels by a pixel. If it does not, remove any the product has. Either way, both sources must agree, and this is a detail that separates careful work from adequate work.\n\n## Vignette and falloff\n\nReal lenses darken toward the corners. Add one vignette over the flattened composite rather than carrying two.\n\n## Colour temperature and black level\n\nTwo sources will have different whites and different blacks. Match the black point first (one Curves adjustment lifting or lowering the darkest values) then the white balance. People do it the other way round and then cannot get the shadows to agree, because a mismatched black level looks like a colour cast and is not one.\n\n## The order\n\n1. Place and scale the elements.\n2. Match black point, then white balance, per element.\n3. Match depth of field and sharpness, per element.\n4. Match chromatic aberration, per element.\n5. Add contact shadows and cast shadows.\n6. **Flatten a copy.**\n7. Apply grain, vignette and final grade to the whole thing.\n\nSteps six and seven are the ones that do most of the work and the ones most often skipped. Global treatment over a flattened image is what makes separate sources become one photograph.\n\n## Free tools, all of it\n\nGIMP, Krita and Photopea between them do every step. GIMP has Curves, RGB Noise, Gaussian blur, channel offsets for aberration, and a gradient tool for vignettes. If you want a more film-like grain, `Filters > Noise > HSV Noise` is usually better than RGB noise because it varies hue slightly, which is closer to how film behaves.\n\nFor a graded look, GIMP supports colour lookup tables, and free cinematic LUTs are widely available: one applied at reduced opacity over the flattened composite unifies everything and gives the set a house look for free.\n\n## What this cannot fix\n\nMatching signatures fixes *integration*. It does not fix *geometry*. If the product was photographed from eye level and the scene is seen from above, no amount of grain matching will make it sit in the space: the viewer reads perspective before texture, and a perspective mismatch is visible at thumbnail size while a grain mismatch is not.\n\nSo perspective and light direction are decided when you photograph, and are effectively unfixable afterwards. Grain, sharpness, aberration and grade are fixable at any point. Knowing which category a problem falls into tells you whether to open the editor or to reshoot, and reshooting a product against a window takes ten minutes, which is less than an hour of failing to correct perspective in software."},"check":{"question":"Why should grain be applied to a flattened composite rather than to each element separately?","options":[{"text":"Because per-element grain would require matching the noise characteristics of each source individually, which is difficult to judge by eye at working zoom levels.","correct":false,"tempting":"A practical difficulty and not the reason; even perfectly matched per-element grain leaves the elements reading as separate layers."},{"text":"Because applying grain to a layer with transparency produces artefacts at the alpha edges that are visible once the composite is flattened.","correct":false,"tempting":"Edge artefacts can occur with careless masking but are avoidable, and fixing them would still not make the sources cohere."},{"text":"Because a single grain layer over everything is what makes separate sources read as one photograph.","correct":true},{"text":"Because grain applied before flattening is resampled when layers are transformed, which softens the noise and reduces its integrating effect.","correct":false,"tempting":"Transform order is a genuine technical caution, but grain applied per element after all transforms still fails to unify the image."}]},"prev":{"slug":"real-product-generated-scene","title":"The real product in a generated world","url":"https://addaly.com/learn/ai-images/real-product-generated-scene"},"next":{"slug":"edges-and-halos","title":"The fault the client sees on a big screen","url":"https://addaly.com/learn/ai-images/edges-and-halos"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Making two sources agree', in Image Generation, in Practice. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/ai-images/matching-grain-and-optics (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Making two sources agree","courseTitle":"Image Generation, in Practice","module":{"index":5,"slug":"repair-and-extend","title":"Repair, extend, assemble"},"answer":null,"keyIdea":"Every image carries a signature of noise, sharpness, depth of field and chromatic behaviour, and a composite reads as fake when two sources disagree on that signature rather than on content.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"h2","id":"what-the-eye-is-actually-detecting","runs":[{"text":"What the eye is actually detecting"}]},{"t":"p","runs":[{"text":"Show someone a composite and they will say it “looks off” without being able to say why. They are almost never responding to the content. They are responding to two images having different "},{"text":"physical","i":true},{"text":" characteristics, which the visual system reads as two surfaces rather than one."}]},{"t":"p","runs":[{"text":"Five characteristics, all matchable."}]},{"t":"h2","id":"grain-and-noise","runs":[{"text":"Grain and noise"}]},{"t":"p","runs":[{"text":"Every photograph has noise (sensor noise, film grain) with a particular size and colour. Generated images have their own, usually finer and more even, and often almost none after upscaling."}]},{"t":"p","runs":[{"text":"The fix: flatten the composite and add a single grain layer over everything. In GIMP that is a new layer filled with 50% grey, "},{"text":"Filters > Noise > RGB Noise","code":true},{"text":" at a low value, set to Overlay, opacity 10 to 25%."}]},{"t":"p","runs":[{"text":"Doing it over the whole image rather than per element is the important part. A unified grain layer makes disparate sources belong to one photograph, and it is the cheapest, most effective integration step there is. This alone rescues most composites."}]},{"t":"h2","id":"sharpness-and-depth-of-field","runs":[{"text":"Sharpness and depth of field"}]},{"t":"p","runs":[{"text":"If the generated scene has a shallow depth of field and your product is pin-sharp, the product will not sit in the space. Work out which plane the object occupies and blur it to match, using a graduated blur if it is large enough to span planes."}]},{"t":"p","runs":[{"text":"The opposite happens too: an upscaled generated background can be unnaturally crisp everywhere, sharper than any real lens, and a normally-photographed product looks soft against it. Then you blur the background slightly rather than sharpening the product."}]},{"t":"h2","id":"chromatic-aberration","runs":[{"text":"Chromatic aberration"}]},{"t":"p","runs":[{"text":"Real lenses split colour slightly at high-contrast edges: a faint red-cyan or blue-yellow fringe, strongest at the frame’s corners. Generated images often have it, inherited from training data. A cut-out product will not."}]},{"t":"p","runs":[{"text":"If the scene has visible fringing, add a trace to the product: offset the red and blue channels by a pixel. If it does not, remove any the product has. Either way, both sources must agree, and this is a detail that separates careful work from adequate work."}]},{"t":"h2","id":"vignette-and-falloff","runs":[{"text":"Vignette and falloff"}]},{"t":"p","runs":[{"text":"Real lenses darken toward the corners. Add one vignette over the flattened composite rather than carrying two."}]},{"t":"h2","id":"colour-temperature-and-black-level","runs":[{"text":"Colour temperature and black level"}]},{"t":"p","runs":[{"text":"Two sources will have different whites and different blacks. Match the black point first (one Curves adjustment lifting or lowering the darkest values) then the white balance. People do it the other way round and then cannot get the shadows to agree, because a mismatched black level looks like a colour cast and is not one."}]},{"t":"h2","id":"the-order","runs":[{"text":"The order"}]},{"t":"ol","start":1,"items":[[{"text":"Place and scale the elements."}],[{"text":"Match black point, then white balance, per element."}],[{"text":"Match depth of field and sharpness, per element."}],[{"text":"Match chromatic aberration, per element."}],[{"text":"Add contact shadows and cast shadows."}],[{"text":"Flatten a copy.","b":true}],[{"text":"Apply grain, vignette and final grade to the whole thing."}]]},{"t":"p","runs":[{"text":"Steps six and seven are the ones that do most of the work and the ones most often skipped. Global treatment over a flattened image is what makes separate sources become one photograph."}]},{"t":"h2","id":"free-tools-all-of-it","runs":[{"text":"Free tools, all of it"}]},{"t":"p","runs":[{"text":"GIMP, Krita and Photopea between them do every step. GIMP has Curves, RGB Noise, Gaussian blur, channel offsets for aberration, and a gradient tool for vignettes. If you want a more film-like grain, "},{"text":"Filters > Noise > HSV Noise","code":true},{"text":" is usually better than RGB noise because it varies hue slightly, which is closer to how film behaves."}]},{"t":"p","runs":[{"text":"For a graded look, GIMP supports colour lookup tables, and free cinematic LUTs are widely available: one applied at reduced opacity over the flattened composite unifies everything and gives the set a house look for free."}]},{"t":"h2","id":"what-this-cannot-fix","runs":[{"text":"What this cannot fix"}]},{"t":"p","runs":[{"text":"Matching signatures fixes "},{"text":"integration","i":true},{"text":". It does not fix "},{"text":"geometry","i":true},{"text":". If the product was photographed from eye level and the scene is seen from above, no amount of grain matching will make it sit in the space: the viewer reads perspective before texture, and a perspective mismatch is visible at thumbnail size while a grain mismatch is not."}]},{"t":"p","runs":[{"text":"So perspective and light direction are decided when you photograph, and are effectively unfixable afterwards. Grain, sharpness, aberration and grade are fixable at any point. Knowing which category a problem falls into tells you whether to open the editor or to reshoot, and reshooting a product against a window takes ten minutes, which is less than an hour of failing to correct perspective in software."}]}],"check":{"question":[{"text":"Why should grain be applied to a flattened composite rather than to each element separately?"}],"options":[{"text":[{"text":"Because per-element grain would require matching the noise characteristics of each source individually, which is difficult to judge by eye at working zoom levels."}],"correct":false,"tempting":[{"text":"A practical difficulty and not the reason; even perfectly matched per-element grain leaves the elements reading as separate layers."}]},{"text":[{"text":"Because applying grain to a layer with transparency produces artefacts at the alpha edges that are visible once the composite is flattened."}],"correct":false,"tempting":[{"text":"Edge artefacts can occur with careless masking but are avoidable, and fixing them would still not make the sources cohere."}]},{"text":[{"text":"Because a single grain layer over everything is what makes separate sources read as one photograph."}],"correct":true,"tempting":null},{"text":[{"text":"Because grain applied before flattening is resampled when layers are transformed, which softens the noise and reduces its integrating effect."}],"correct":false,"tempting":[{"text":"Transform order is a genuine technical caution, but grain applied per element after all transforms still fails to unify the image."}]}],"order":[1,0,3,2],"why":null},"prev":{"slug":"real-product-generated-scene","title":"The real product in a generated world","minutes":9},"next":{"slug":"edges-and-halos","title":"The fault the client sees on a big screen","minutes":8}}}