{"course":{"slug":"ai-images","title":"Image Generation, in Practice","url":"https://addaly.com/learn/ai-images","level":"beginner","track":"create"},"lesson":{"slug":"stacking-controls","title":"Two controls, without the plastic look","url":"https://addaly.com/learn/ai-images/stacking-controls","position":41,"of":69,"minutes":8,"answer":"Stacking conditioning signals removes the model's freedom in proportion to the total constraint, so the sum of the strengths matters more than any individual value and should stay near 1.2 to 1.5.","keyIdea":"Stacking conditioning signals removes the model's freedom in proportion to the total constraint, so the sum of the strengths matters more than any individual value and should stay near 1.2 to 1.5."},"body":{"format":"markdown","text":"## When one control is not enough\n\nA figure in a specific pose, in a room with specific geometry. Pose control gets the body; depth gets the room. You need both, and both is where results start going wrong.\n\nTwo controls at strength 1.0 each is not \"well controlled\". It is a picture with almost no freedom left, and it looks it.\n\n## The budget\n\nTreat total constraint as a budget of roughly **1.2 to 1.5** across all active controls. Some worked allocations:\n\n> Figure: The constraint budget, and the ceiling you should not pass. Bars (total control strength): One control on its own 0.9; Depth 0.7 plus canny 0.5 1.2; Pose 0.8 plus depth 0.5 1.3; Pose 0.7, depth 0.4, adapter 0.4 1.5; Two controls at full strength 2. Past about 1.5 the model has no freedom left and the picture looks it: flat light, outlines a shade too exact, and four seeds that come back almost identical.\n\n```text\none control                 0.8 - 1.0\npose 0.8  +  depth 0.5      = 1.3\ndepth 0.7 +  canny 0.5      = 1.2\npose 0.7  +  depth 0.4  +  ip-adapter 0.4   = 1.5, at the ceiling\n```\n\nAlso stagger the end steps. Running everything to the same point is unnecessarily rigid; a useful pattern is to let the structural control end earliest and the looser one run slightly longer:\n\n```text\ndepth   strength 0.6   end at 0.5    (geometry is settled early)\npose    strength 0.8   end at 0.7    (the body needs holding longer)\n```\n\n## Combinations that earn their complexity\n\n**Pose + depth**: a person in a designed space. The most common pair in commercial work.\n\n**Depth + colour-block img2img**: geometry from a blockout, palette from a painting. Run the blocks as the starting image at denoise 0.6 with the depth control active.\n\n**Canny + IP-Adapter style**: keep a product's exact silhouette, change its entire material and setting. The best route to \"the same bottle, ten different scenes\".\n\n**Softedge + regional prompting**: loose arrangement with attribute control per area.\n\n**Depth + normal**: for objects where sculptural form matters and depth alone reads flat. Unusually, these two agree with each other, so they can run higher than most pairs.\n\n## When controls disagree\n\nThis is the real source of trouble. If your pose skeleton puts an arm where your depth map has a solid wall, the model has to satisfy two contradictory demands. What you get is an arm passing through the wall, a melted region where the two meet, or one control silently losing.\n\nThe failure is diagnosable: a specific area that looks wrong in every seed while everything else is fine. When you see that, overlay the two control images in an editor and look at that area. They will be arguing.\n\nThe fix is to make the inputs agree before generating, not to tune strengths afterwards. Move the wall in the blockout. Adjust the pose. Five minutes on the inputs beats an hour on the sliders, and tuning strengths on contradictory inputs only decides which constraint wins rather than removing the conflict.\n\n## The symptom of over-control\n\nLearn to recognise it, because it is easy to produce and hard to see if you have been staring at the image:\n\n- Flat lighting despite a lighting prompt, because the model had no room to build form.\n- Outlines slightly too crisp and too exactly matching the control.\n- A posed, dead quality, as though everything were waiting.\n- Backgrounds that are simple and uninteresting.\n- Every seed looking nearly the same. This is the clearest signal of all: if four seeds are almost identical, you have over-constrained, because seed variation is exactly the freedom you removed.\n\nRun that last check deliberately. Four seeds at your current settings. If they differ meaningfully, the constraint level is healthy. If they do not, drop the total by 0.3 and try again.\n\n## Knowing when to stop stacking\n\nThe deeper point is that stacking controls is often a sign that the job has moved past generation. If you need this pose, this geometry, this palette, this silhouette and this style, you have specified the image almost completely, and at that point building it from parts is usually faster and always more controllable.\n\nGenerate the elements separately, each with one control and plenty of freedom, and assemble them in a layered editor. That is compositing, it is the subject of the next block, and it is how most professional work involving these tools is actually produced. The control stack is for when you want one coherent render with a few things held fixed, not for when you want to specify everything."},"check":{"question":"Four different seeds with pose and depth controls both at strength 1.0 produce nearly identical images. What does that indicate?","options":[{"text":"The controls are contradicting each other, which has collapsed the range of outputs that can satisfy both constraints at once.","correct":false,"tempting":"Contradiction produces a specific damaged region that varies between seeds, not uniform agreement across all four."},{"text":"The seeds are too close together numerically, so the starting noise fields are similar enough to produce comparable compositions.","correct":false,"tempting":"Sequential seed values produce entirely unrelated noise fields, so numeric closeness has no effect on similarity."},{"text":"Total constraint is too high, so almost no freedom is left for the seed to influence.","correct":true},{"text":"The control images are being applied to the full sampling schedule, so the seed's contribution is overwritten during the final steps of denoising.","correct":false,"tempting":"End-step timing does affect rigidity, but even a control running to completion leaves seed variation visible unless the total strength is already excessive."}]},"prev":{"slug":"style-adapters","title":"Transferring a look from an image without training anything","url":"https://addaly.com/learn/ai-images/style-adapters"},"next":{"slug":"inpainting-is-the-job","title":"The finished image is never one generation","url":"https://addaly.com/learn/ai-images/inpainting-is-the-job"},"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) 'Two controls, without the plastic look', in Image Generation, in Practice. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/ai-images/stacking-controls (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":"Two controls, without the plastic look","courseTitle":"Image Generation, in Practice","module":{"index":4,"slug":"steering-with-images","title":"Steering with pictures instead of adjectives"},"answer":null,"keyIdea":"Stacking conditioning signals removes the model’s freedom in proportion to the total constraint, so the sum of the strengths matters more than any individual value and should stay near 1.2 to 1.5.","hero":{"kind":"figure","figure":{"t":"figure","label":"Figure","figure":{"type":"bars","unit":"total control strength","title":"The constraint budget, and the ceiling you should not pass","series":[{"label":"One control on its own","value":0.9},{"label":"Depth 0.7 plus canny 0.5","value":1.2,"highlight":true},{"label":"Pose 0.8 plus depth 0.5","value":1.3,"highlight":true},{"label":"Pose 0.7, depth 0.4, adapter 0.4","value":1.5,"highlight":true},{"label":"Two controls at full strength","value":2}],"caption":"Past about 1.5 the model has no freedom left and the picture looks it: flat light, outlines a shade too exact, and four seeds that come back almost identical."},"alt":"Figure: The constraint budget, and the ceiling you should not pass. Bars (total control strength): One control on its own 0.9; Depth 0.7 plus canny 0.5 1.2; Pose 0.8 plus depth 0.5 1.3; Pose 0.7, depth 0.4, adapter 0.4 1.5; Two controls at full strength 2. Past about 1.5 the model has no freedom left and the picture looks it: flat light, outlines a shade too exact, and four seeds that come back almost identical."}},"blocks":[{"t":"h2","id":"when-one-control-is-not-enough","runs":[{"text":"When one control is not enough"}]},{"t":"p","runs":[{"text":"A figure in a specific pose, in a room with specific geometry. Pose control gets the body; depth gets the room. You need both, and both is where results start going wrong."}]},{"t":"p","runs":[{"text":"Two controls at strength 1.0 each is not “well controlled”. It is a picture with almost no freedom left, and it looks it."}]},{"t":"h2","id":"the-budget","runs":[{"text":"The budget"}]},{"t":"p","runs":[{"text":"Treat total constraint as a budget of roughly "},{"text":"1.2 to 1.5","b":true},{"text":" across all active controls. Some worked allocations:"}]},{"t":"code","lang":"text","label":"Text","text":"one control                 0.8 - 1.0\npose 0.8  +  depth 0.5      = 1.3\ndepth 0.7 +  canny 0.5      = 1.2\npose 0.7  +  depth 0.4  +  ip-adapter 0.4   = 1.5, at the ceiling"},{"t":"p","runs":[{"text":"Also stagger the end steps. Running everything to the same point is unnecessarily rigid; a useful pattern is to let the structural control end earliest and the looser one run slightly longer:"}]},{"t":"code","lang":"text","label":"Text","text":"depth   strength 0.6   end at 0.5    (geometry is settled early)\npose    strength 0.8   end at 0.7    (the body needs holding longer)"},{"t":"h2","id":"combinations-that-earn-their-complexity","runs":[{"text":"Combinations that earn their complexity"}]},{"t":"p","runs":[{"text":"Pose + depth","b":true},{"text":": a person in a designed space. The most common pair in commercial work."}]},{"t":"p","runs":[{"text":"Depth + colour-block img2img","b":true},{"text":": geometry from a blockout, palette from a painting. Run the blocks as the starting image at denoise 0.6 with the depth control active."}]},{"t":"p","runs":[{"text":"Canny + IP-Adapter style","b":true},{"text":": keep a product’s exact silhouette, change its entire material and setting. The best route to “the same bottle, ten different scenes”."}]},{"t":"p","runs":[{"text":"Softedge + regional prompting","b":true},{"text":": loose arrangement with attribute control per area."}]},{"t":"p","runs":[{"text":"Depth + normal","b":true},{"text":": for objects where sculptural form matters and depth alone reads flat. Unusually, these two agree with each other, so they can run higher than most pairs."}]},{"t":"h2","id":"when-controls-disagree","runs":[{"text":"When controls disagree"}]},{"t":"p","runs":[{"text":"This is the real source of trouble. If your pose skeleton puts an arm where your depth map has a solid wall, the model has to satisfy two contradictory demands. What you get is an arm passing through the wall, a melted region where the two meet, or one control silently losing."}]},{"t":"p","runs":[{"text":"The failure is diagnosable: a specific area that looks wrong in every seed while everything else is fine. When you see that, overlay the two control images in an editor and look at that area. They will be arguing."}]},{"t":"p","runs":[{"text":"The fix is to make the inputs agree before generating, not to tune strengths afterwards. Move the wall in the blockout. Adjust the pose. Five minutes on the inputs beats an hour on the sliders, and tuning strengths on contradictory inputs only decides which constraint wins rather than removing the conflict."}]},{"t":"h2","id":"the-symptom-of-over-control","runs":[{"text":"The symptom of over-control"}]},{"t":"p","runs":[{"text":"Learn to recognise it, because it is easy to produce and hard to see if you have been staring at the image:"}]},{"t":"ul","items":[[{"text":"Flat lighting despite a lighting prompt, because the model had no room to build form."}],[{"text":"Outlines slightly too crisp and too exactly matching the control."}],[{"text":"A posed, dead quality, as though everything were waiting."}],[{"text":"Backgrounds that are simple and uninteresting."}],[{"text":"Every seed looking nearly the same. This is the clearest signal of all: if four seeds are almost identical, you have over-constrained, because seed variation is exactly the freedom you removed."}]]},{"t":"p","runs":[{"text":"Run that last check deliberately. Four seeds at your current settings. If they differ meaningfully, the constraint level is healthy. If they do not, drop the total by 0.3 and try again."}]},{"t":"h2","id":"knowing-when-to-stop-stacking","runs":[{"text":"Knowing when to stop stacking"}]},{"t":"p","runs":[{"text":"The deeper point is that stacking controls is often a sign that the job has moved past generation. If you need this pose, this geometry, this palette, this silhouette and this style, you have specified the image almost completely, and at that point building it from parts is usually faster and always more controllable."}]},{"t":"p","runs":[{"text":"Generate the elements separately, each with one control and plenty of freedom, and assemble them in a layered editor. That is compositing, it is the subject of the next block, and it is how most professional work involving these tools is actually produced. The control stack is for when you want one coherent render with a few things held fixed, not for when you want to specify everything."}]}],"check":{"question":[{"text":"Four different seeds with pose and depth controls both at strength 1.0 produce nearly identical images. What does that indicate?"}],"options":[{"text":[{"text":"The controls are contradicting each other, which has collapsed the range of outputs that can satisfy both constraints at once."}],"correct":false,"tempting":[{"text":"Contradiction produces a specific damaged region that varies between seeds, not uniform agreement across all four."}]},{"text":[{"text":"The seeds are too close together numerically, so the starting noise fields are similar enough to produce comparable compositions."}],"correct":false,"tempting":[{"text":"Sequential seed values produce entirely unrelated noise fields, so numeric closeness has no effect on similarity."}]},{"text":[{"text":"Total constraint is too high, so almost no freedom is left for the seed to influence."}],"correct":true,"tempting":null},{"text":[{"text":"The control images are being applied to the full sampling schedule, so the seed’s contribution is overwritten during the final steps of denoising."}],"correct":false,"tempting":[{"text":"End-step timing does affect rigidity, but even a control running to completion leaves seed variation visible unless the total strength is already excessive."}]}],"order":[3,0,1,2],"why":null},"prev":{"slug":"style-adapters","title":"Transferring a look from an image without training anything","minutes":8},"next":{"slug":"inpainting-is-the-job","title":"The finished image is never one generation","minutes":9}}}