I trained a character LoRA — a small fine-tune that teaches an image model one specific character — on 47 reference images, keeping every single one rather than culling to a "clean" subset. Captioning followed one rule: describe only what varies. Anything present in nearly every image (the character's build, hair, a signature accessory) was left out of the captions on purpose, so the model would absorb it as identity rather than as something it needs a prompt to summon. Anything that only showed up sometimes — an outfit variant, a pose, a background — got written down, so the model would treat it as optional rather than baking it in as default.

Training itself ran on a machine with a dedicated GPU: 1,880 steps in 71 minutes, at roughly 2.3 seconds per step — about 3.8 times faster than the same job on the integrated-memory Mac that had been doing this work before. Worth writing down, because two earlier verbal estimates for the same job (15 minutes, then 53 minutes) were both wrong; only the measured number is trustworthy.

How much of the character survives at lower strength

A LoRA doesn't have to run at full strength — it can be blended in more lightly. I generated the same scene at strengths from 1.0 down to 0.6 to see where the character stops being recognizable. Identity held from 1.0 down to 0.8. At 0.7 the face was noticeably a different person. At 0.6 the outfit changed too. Full strength was also where the earlier "flat, generic" quality some fine-tunes have actually went away — a lower strength wasn't the safer choice here, it was the worse one.

One caption leaked through in a way I didn't expect. A single one of the 47 captions mentioned a specific prop that appeared in exactly that one photo. At full strength, that prop overrode the actual generation prompt — asking for a completely different object produced the trained one instead. It reappeared correctly at lower strengths. One image out of 47 was enough to bend the output; "only caption what varies" turned out to have a real exception worth remembering.

The gap the pose test found

The more useful failure came from a separate test: twelve described poses, generated and checked one by one. Standing and airborne poses worked perfectly. Ground-level poses — crouching, kneeling, sweeping low, hanging — failed completely, zero for four. The reason was obvious in hindsight: the 47 training images included seated shots, but not a single one on the ground in any of those positions. The model hadn't failed to generalize a concept; it had accurately learned that this character doesn't do that, because it had never once seen it.

That's the clean version of a fine-tuning lesson that's easy to say and easy to skip: a LoRA reproduces exactly the range of poses, angles, and situations it was shown, not the range you assumed a "normal" character dataset would imply. The fix isn't a training-parameter change — it's photographing four or five ground-level poses and running the same batch again.