What a seed actually fixes
Generation starts from random noise. A seed is the number that initialises the random number generator that produces that noise. Same seed, same starting noise.
That is all it fixes. Everything else in the path has to match too:
- The model weights, down to the exact checkpoint version.
- The numerical precision: fp32, bf16, fp8 all give different answers.
- The step count, guidance value, scheduler and shift.
- The text encoder and how the prompt was tokenised.
- The batch shape, because some kernels reduce in a different order at different batch sizes.
- The GPU and driver, because attention and convolution kernels are chosen by hardware and some are non-deterministic by design.
Lock all of those and a local run repeats exactly. Miss one and it does not.
Why hosted services will not guarantee it
This is not evasiveness. A hosted endpoint batches your request with other people’s, may route it to a different GPU generation, and may silently update the model: a point release, a safety-filter change, a new default scheduler. Providers usually reserve the right to do all three.
The practical consequence is the one that costs money: a seed that produced a perfect take last month may not reproduce it today. People discover this when a client asks for one small change to a shot from a finished project.
So the record you keep has to be stronger than a seed. For every shot that ships, save:
- The first frame as an actual image file.
- The exact prompt text.
- The model name and version string.
- Every numeric setting.
- The seed.
- The output file itself, at the highest quality you received.
That last one is not a fallback, it is the primary record. The others let you get close; the file is the only thing that is certain.
Using a seed as an instrument
The real value of a seed is not reproducibility. It is isolation.
If you want to know what a prompt change does, you must hold the noise constant. Otherwise you are comparing two different random draws and reading meaning into the difference. This is the single most common error in prompt experimentation, and it wastes entire afternoons.
The protocol:
- Fix the seed and the still.
- Change exactly one thing.
- Generate.
- Compare against the previous output, not against your memory of it.
With a fixed seed, a change that produces no visible difference produced no difference. Without one, you cannot tell.
When the tool gives you no seed
Several consumer products hide it. You then have a different, cruder method: generate four takes of A, four of B, and compare the distributions rather than individual clips. If three of four A-takes hold the face and one of four B-takes does, that is a signal. One clip each is not.
This costs four times as much, which is a real argument for tools that expose a seed, and a real argument for doing prompt experimentation on an open-weights model even if you deliver on a hosted one.
Seed ranges and the myth of good seeds
You will see people share “good seeds”. A seed is meaningful only in combination with the exact prompt, model and settings it was found with. Transplanted anywhere else it is an arbitrary number. There is no such thing as a seed that produces good faces in general.
What is true is that for a fixed prompt and still, some seeds land better than others, and scanning ten seeds is often a better use of money than rewriting the prompt ten times. When a shot is nearly right, roll the seed. When it is structurally wrong, the seed will not save it.
Making a local run deterministic
If you are running the model yourself and want bit-exact repeats, the usual measures are worth knowing:
import torch
torch.manual_seed(0)
torch.use_deterministic_algorithms(True)Plus a fixed CUBLAS_WORKSPACE_CONFIG, a fixed batch size, and no autocast changes between runs. Determinism costs some speed, because it forbids the fastest kernels. Turn it on while you are experimenting and off when you are producing.
ComfyUI is generally reproducible run to run on the same machine with the same graph, which is one of the strongest practical reasons to prototype there even if you finish elsewhere.
Today: pick a shot you have already generated and try to reproduce it from your notes alone. Whatever you could not reproduce is the field missing from your record sheet.
Every lesson here is open. Your progress is recorded once you pass the Editing Video exam.
Check your understanding
A freelancer reruns a six-week-old hosted generation with the identical prompt, still, settings and seed, and gets a visibly different clip. What is the most likely explanation?
Pick the one you would defend. Your answer stays private.
Stuck on something?Ask Chiamaka, your AI tutor
