{"course":{"slug":"ai-images","title":"Image Generation, in Practice","url":"https://addaly.com/learn/ai-images","level":"beginner","track":"create"},"lesson":{"slug":"speed-and-steps","title":"Steps, samplers and the seconds you should actually expect","url":"https://addaly.com/learn/ai-images/speed-and-steps","position":7,"of":69,"minutes":8,"answer":"Doubling the step count past roughly 30 buys almost nothing on a standard model, while a distilled model does a usable image in 4 to 8 steps.","keyIdea":"Doubling the step count past roughly 30 buys almost nothing on a standard model, while a distilled model does a usable image in 4 to 8 steps, so measure iterations per second and spend your time where the curve is still steep."},"body":{"format":"markdown","text":"## Know your it/s\n\nEvery interface prints a speed figure during generation, usually iterations per second, and it is the only number that lets you predict anything. Ballpark figures at 1024×1024 on SDXL:\n\n- RTX 4090: roughly 8 to 10 it/s\n- RTX 3060 12 GB: roughly 2 to 3 it/s\n- T4 (free Colab, free Kaggle): roughly 1 to 1.5 it/s\n- M2 Pro MacBook: roughly 0.7 to 1.2 it/s\n\nAt 30 steps, 2 it/s means 15 seconds of sampling plus a second or two of decoding. That is your planning unit. If you intend to explore 60 variations, you are committing to about twenty minutes, and that fact should change how you explore.\n\n> Figure: Seconds of sampling for one 1024-pixel frame. Bars (seconds at thirty steps, sampling only): RTX 4090, about 9 it/s 3.3; RTX 3060 12 GB, about 2.5 it/s 12; Free Colab or Kaggle T4, about 1.2 it/s 25; M2 Pro MacBook, about 0.9 it/s 33; RTX 3060, distilled model, 6 steps 2.4. Decoding adds a second or two on top. The bottom row is why a sixty-frame exploration is three minutes on one setup and twenty on another with the same card.\n\n## The step curve flattens, and where it flattens\n\nSteps are how many denoising passes the sampler makes. More steps means each one moves less, and the result converges. The useful shape of the curve, for a standard non-distilled model:\n\n- 1 to 10 steps: visibly unfinished, soft, sometimes structurally wrong\n- 15 to 25 steps: the image is essentially decided\n- 25 to 35 steps: small refinements to fine texture\n- 35 to 80 steps: differences you need to A/B at 200% zoom to see\n- past 80: nothing, and occasionally worse, as some samplers drift\n\nSo 60 steps costs twice 30 and buys almost nothing. Where people go wrong is inferring \"more steps equals more detail\". It does not add detail; it finishes the detail already implied by the seed and prompt.\n\nThe important exception is at very low step counts with certain samplers. Ancestral samplers (the ones with an `a`: Euler a, DPM++ 2S a) inject fresh noise at every step, so they never fully converge: the image at 20 steps and at 40 steps are different pictures, not the same picture refined. That is why a seed that looked perfect at 25 steps changes when you push to 40 for the final render. If you want \"same image, more finish\", use a non-ancestral sampler such as DPM++ 2M with the Karras schedule, and the seed stays stable as steps rise.\n\n## Distilled models change the arithmetic\n\nTurbo, Lightning, LCM and Hyper variants are trained to reach a usable image in very few steps: typically 4 to 8, sometimes 1. They want low guidance too, often 1.0 to 2.0 rather than the usual 5 to 8. Get that wrong and the output looks burnt and over-contrasted, which is the single most common reason people conclude a turbo model is bad.\n\nA distilled SDXL at 6 steps on a 3060 takes about three seconds. That turns a 60-image exploration from twenty minutes into three, which is not a convenience; it is a different way of working, and the next block builds a whole method on it.\n\nThe cost is real and worth naming: distilled models have less variety. The distillation process teaches the model to jump straight to a high-probability output, so different seeds land closer together, and unusual prompts get pulled toward the ordinary interpretation. Use them to choose composition, then render the winner on the full model.\n\n## Where the time actually goes\n\nFor a single image people assume sampling dominates. Often it does not.\n\n- Model load from disk: 5 to 60 seconds, once per model\n- Text encoding: well under a second\n- Sampling: steps ÷ it/s\n- VAE decode: 0.5 to 3 seconds, more at high resolution\n- Saving with metadata: negligible\n\nSwitching checkpoints between every generation can easily spend more time loading than generating. If you are comparing two checkpoints, do all twelve images on the first and then all twelve on the second, rather than alternating. People alternate because it feels more rigorous. It is the same comparison, four times slower.\n\n## A default that is fine to stop thinking about\n\nThere are roughly thirty samplers in a modern interface and the differences between the good ones are small. A defensible default that you can stop revisiting:\n\n- **DPM++ 2M with the Karras schedule, 25 to 30 steps, CFG 5 to 7** for SDXL and most fine-tunes.\n- **Euler, 20 steps, guidance 3.5** for FLUX-family models, which behave differently and dislike high CFG.\n- **The model card's own numbers** for anything distilled, because those are not suggestions.\n\nChange one of these when you have a reason (you want the ancestral variation, or a model card specifies otherwise) not as a way of hoping for a better picture. Sampler roulette is where beginners spend their first fortnight, and the gain over a sensible default is smaller than the gain from one better sentence in the prompt.\n\n## The honest limit of the speed figures\n\nPublished it/s numbers are close to useless for comparing your machine with somebody else's, because they depend on resolution, precision, attention implementation, batch size, and whether the card is thermally throttling in a laptop chassis. A laptop 4070 can run at half the speed of a desktop 4070 under sustained load, and neither figure is wrong.\n\nMeasure your own, once, at the resolution you actually use, and write it down. That single number tells you what a sixty-image exploration costs in minutes, and that is the only thing it was ever needed for."},"check":{"question":"A frame looks right at 25 steps with Euler a. Rendering the same seed and prompt at 45 steps for the final produces a noticeably different image. Why?","options":[{"text":"The extra steps revealed fine detail that was always latent in the noise, and that added detail changed how the composition reads at full size.","correct":false,"tempting":"Describes refinement, which would not move composition; added steps on a converging sampler change texture rather than what the picture is of."},{"text":"Euler a is ancestral: it adds fresh noise at each step, so it never converges and a different step count follows a different path.","correct":true},{"text":"The seed only sets the initial noise, so changing any other parameter at all will produce an essentially unrelated image from that starting point.","correct":false,"tempting":"Overstates it: with a convergent sampler the same seed and prompt at 25 and 45 steps give recognisably the same picture, which is exactly why the ancestral distinction matters."},{"text":"The scheduler re-spaces the noise timetable whenever the total step count changes, and this affects every sampler in the list to the same degree.","correct":false,"tempting":"The schedule is indeed re-spaced, but convergent samplers still land in almost the same place; blaming the schedule alone predicts instability everywhere, which is not what happens."}]},"prev":{"slug":"the-first-hour","title":"The first hour, and the four errors everybody gets","url":"https://addaly.com/learn/ai-images/the-first-hour"},"next":{"slug":"quantisation-and-offload","title":"Making a big model fit a small card","url":"https://addaly.com/learn/ai-images/quantisation-and-offload"},"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) 'Steps, samplers and the seconds you should actually expect', in Image Generation, in Practice. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/ai-images/speed-and-steps (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":"Steps, samplers and the seconds you should actually expect","courseTitle":"Image Generation, in Practice","module":{"index":1,"slug":"the-kit","title":"The kit, and what each piece of it costs you"},"answer":null,"keyIdea":"Doubling the step count past roughly 30 buys almost nothing on a standard model, while a distilled model does a usable image in 4 to 8 steps, so measure iterations per second and spend your time where the curve is still steep.","hero":{"kind":"figure","figure":{"t":"figure","label":"Figure","figure":{"type":"bars","unit":"seconds at thirty steps, sampling only","title":"Seconds of sampling for one 1024-pixel frame","series":[{"label":"RTX 4090, about 9 it/s","value":3.3},{"label":"RTX 3060 12 GB, about 2.5 it/s","value":12},{"label":"Free Colab or Kaggle T4, about 1.2 it/s","value":25},{"label":"M2 Pro MacBook, about 0.9 it/s","value":33},{"label":"RTX 3060, distilled model, 6 steps","value":2.4,"highlight":true}],"caption":"Decoding adds a second or two on top. The bottom row is why a sixty-frame exploration is three minutes on one setup and twenty on another with the same card."},"alt":"Figure: Seconds of sampling for one 1024-pixel frame. Bars (seconds at thirty steps, sampling only): RTX 4090, about 9 it/s 3.3; RTX 3060 12 GB, about 2.5 it/s 12; Free Colab or Kaggle T4, about 1.2 it/s 25; M2 Pro MacBook, about 0.9 it/s 33; RTX 3060, distilled model, 6 steps 2.4. Decoding adds a second or two on top. The bottom row is why a sixty-frame exploration is three minutes on one setup and twenty on another with the same card."}},"blocks":[{"t":"h2","id":"know-your-it-s","runs":[{"text":"Know your it/s"}]},{"t":"p","runs":[{"text":"Every interface prints a speed figure during generation, usually iterations per second, and it is the only number that lets you predict anything. Ballpark figures at 1024×1024 on SDXL:"}]},{"t":"ul","items":[[{"text":"RTX 4090: roughly 8 to 10 it/s"}],[{"text":"RTX 3060 12 GB: roughly 2 to 3 it/s"}],[{"text":"T4 (free Colab, free Kaggle): roughly 1 to 1.5 it/s"}],[{"text":"M2 Pro MacBook: roughly 0.7 to 1.2 it/s"}]]},{"t":"p","runs":[{"text":"At 30 steps, 2 it/s means 15 seconds of sampling plus a second or two of decoding. That is your planning unit. If you intend to explore 60 variations, you are committing to about twenty minutes, and that fact should change how you explore."}]},{"t":"h2","id":"the-step-curve-flattens-and-where-it-flattens","runs":[{"text":"The step curve flattens, and where it flattens"}]},{"t":"p","runs":[{"text":"Steps are how many denoising passes the sampler makes. More steps means each one moves less, and the result converges. The useful shape of the curve, for a standard non-distilled model:"}]},{"t":"ul","items":[[{"text":"1 to 10 steps: visibly unfinished, soft, sometimes structurally wrong"}],[{"text":"15 to 25 steps: the image is essentially decided"}],[{"text":"25 to 35 steps: small refinements to fine texture"}],[{"text":"35 to 80 steps: differences you need to A/B at 200% zoom to see"}],[{"text":"past 80: nothing, and occasionally worse, as some samplers drift"}]]},{"t":"p","runs":[{"text":"So 60 steps costs twice 30 and buys almost nothing. Where people go wrong is inferring “more steps equals more detail”. It does not add detail; it finishes the detail already implied by the seed and prompt."}]},{"t":"p","runs":[{"text":"The important exception is at very low step counts with certain samplers. Ancestral samplers (the ones with an "},{"text":"a","code":true},{"text":": Euler a, DPM++ 2S a) inject fresh noise at every step, so they never fully converge: the image at 20 steps and at 40 steps are different pictures, not the same picture refined. That is why a seed that looked perfect at 25 steps changes when you push to 40 for the final render. If you want “same image, more finish”, use a non-ancestral sampler such as DPM++ 2M with the Karras schedule, and the seed stays stable as steps rise."}]},{"t":"h2","id":"distilled-models-change-the-arithmetic","runs":[{"text":"Distilled models change the arithmetic"}]},{"t":"p","runs":[{"text":"Turbo, Lightning, LCM and Hyper variants are trained to reach a usable image in very few steps: typically 4 to 8, sometimes 1. They want low guidance too, often 1.0 to 2.0 rather than the usual 5 to 8. Get that wrong and the output looks burnt and over-contrasted, which is the single most common reason people conclude a turbo model is bad."}]},{"t":"p","runs":[{"text":"A distilled SDXL at 6 steps on a 3060 takes about three seconds. That turns a 60-image exploration from twenty minutes into three, which is not a convenience; it is a different way of working, and the next block builds a whole method on it."}]},{"t":"p","runs":[{"text":"The cost is real and worth naming: distilled models have less variety. The distillation process teaches the model to jump straight to a high-probability output, so different seeds land closer together, and unusual prompts get pulled toward the ordinary interpretation. Use them to choose composition, then render the winner on the full model."}]},{"t":"h2","id":"where-the-time-actually-goes","runs":[{"text":"Where the time actually goes"}]},{"t":"p","runs":[{"text":"For a single image people assume sampling dominates. Often it does not."}]},{"t":"ul","items":[[{"text":"Model load from disk: 5 to 60 seconds, once per model"}],[{"text":"Text encoding: well under a second"}],[{"text":"Sampling: steps ÷ it/s"}],[{"text":"VAE decode: 0.5 to 3 seconds, more at high resolution"}],[{"text":"Saving with metadata: negligible"}]]},{"t":"p","runs":[{"text":"Switching checkpoints between every generation can easily spend more time loading than generating. If you are comparing two checkpoints, do all twelve images on the first and then all twelve on the second, rather than alternating. People alternate because it feels more rigorous. It is the same comparison, four times slower."}]},{"t":"h2","id":"a-default-that-is-fine-to-stop-thinking-about","runs":[{"text":"A default that is fine to stop thinking about"}]},{"t":"p","runs":[{"text":"There are roughly thirty samplers in a modern interface and the differences between the good ones are small. A defensible default that you can stop revisiting:"}]},{"t":"ul","items":[[{"text":"DPM++ 2M with the Karras schedule, 25 to 30 steps, CFG 5 to 7","b":true},{"text":" for SDXL and most fine-tunes."}],[{"text":"Euler, 20 steps, guidance 3.5","b":true},{"text":" for FLUX-family models, which behave differently and dislike high CFG."}],[{"text":"The model card’s own numbers","b":true},{"text":" for anything distilled, because those are not suggestions."}]]},{"t":"p","runs":[{"text":"Change one of these when you have a reason (you want the ancestral variation, or a model card specifies otherwise) not as a way of hoping for a better picture. Sampler roulette is where beginners spend their first fortnight, and the gain over a sensible default is smaller than the gain from one better sentence in the prompt."}]},{"t":"h2","id":"the-honest-limit-of-the-speed-figures","runs":[{"text":"The honest limit of the speed figures"}],"role":"limit"},{"t":"p","runs":[{"text":"Published it/s numbers are close to useless for comparing your machine with somebody else’s, because they depend on resolution, precision, attention implementation, batch size, and whether the card is thermally throttling in a laptop chassis. A laptop 4070 can run at half the speed of a desktop 4070 under sustained load, and neither figure is wrong."}]},{"t":"p","runs":[{"text":"Measure your own, once, at the resolution you actually use, and write it down. That single number tells you what a sixty-image exploration costs in minutes, and that is the only thing it was ever needed for."}]}],"check":{"question":[{"text":"A frame looks right at 25 steps with Euler a. Rendering the same seed and prompt at 45 steps for the final produces a noticeably different image. Why?"}],"options":[{"text":[{"text":"The extra steps revealed fine detail that was always latent in the noise, and that added detail changed how the composition reads at full size."}],"correct":false,"tempting":[{"text":"Describes refinement, which would not move composition; added steps on a converging sampler change texture rather than what the picture is of."}]},{"text":[{"text":"Euler a is ancestral: it adds fresh noise at each step, so it never converges and a different step count follows a different path."}],"correct":true,"tempting":null},{"text":[{"text":"The seed only sets the initial noise, so changing any other parameter at all will produce an essentially unrelated image from that starting point."}],"correct":false,"tempting":[{"text":"Overstates it: with a convergent sampler the same seed and prompt at 25 and 45 steps give recognisably the same picture, which is exactly why the ancestral distinction matters."}]},{"text":[{"text":"The scheduler re-spaces the noise timetable whenever the total step count changes, and this affects every sampler in the list to the same degree."}],"correct":false,"tempting":[{"text":"The schedule is indeed re-spaced, but convergent samplers still land in almost the same place; blaming the schedule alone predicts instability everywhere, which is not what happens."}]}],"order":[3,0,1,2],"why":null},"prev":{"slug":"the-first-hour","title":"The first hour, and the four errors everybody gets","minutes":8},"next":{"slug":"quantisation-and-offload","title":"Making a big model fit a small card","minutes":8}}}