"The checkpoint you have is one piece of the model. The other pieces have to come from somewhere — and figuring out where is half the work."
A Checkpoint Is Not Always the Whole Model
With older image models, the file you downloaded was the whole thing: backbone, text encoder, VAE, all in one checkpoint. Transformer-era models broke that assumption too. A FLUX checkpoint shared in the community format is often transformer-only — it contains the DiT backbone and nothing else. The text encoders (a CLIP and a large T5) and the VAE are simply not in the file. Try to load it like an old all-in-one checkpoint and you get a model with no way to read a prompt.
Source the Missing Pieces Explicitly
The fix is to load the transformer from the local file and source the auxiliary components — the T5, the CLIP, the VAE — from the model's base repository definition. In practice: load the transformer with a from-single-file path, then construct the full pipeline supplying that transformer while letting the base components come from their known definitions. The local file gives you the part that's actually local; the rest is assembled around it.
The First-Run Trip: Missing Tokenizer Dependencies
There's a sharp edge here that bites everyone once. The large T5 text encoder needs specific tokenizer libraries installed to function — and if they're absent, the failure doesn't say 'install these libraries.' It says something obscure about being unable to load a tokenizer or convert it. The real cause is two missing packages in the environment. This is the canonical first-run trip for this model family: the error message points at a symptom, and the fix is a dependency you didn't know you needed.
MPS Is Not CUDA, and That's Usually Fine
All of this runs on Apple Silicon's Metal backend, not on the CUDA most diffusion code assumes. Most of the time the difference is invisible — the same model code runs on the Metal device. But the abstraction isn't perfect: some operations behave subtly differently, some dtype choices matter more, and the unified-memory model (from the OOM lesson) changes the memory math. The discipline is to treat the compute backend as a known variable, test on the actual device, and never assume CUDA-tuned advice transfers unchanged.