When training a character-based LoRA for Stable Diffusion, image quality and consistency are only half the battle. The diversity of input perspectives can dramatically improve generalization and reduce overfitting — even with a small dataset.
That’s where the “Crop 'n' Flip” method comes in.
This guide walks you through what Crop 'n' Flip is, when and why to use it, how to prepare your dataset, and how to apply it efficiently using a powerful Python script — attached below. (Look in attachments.)
Why Use Crop 'n' Flip?
Crop 'n' Flip is a data augmentation method that:
Crops multiple areas from each image (halves and corners)
Flips each crop horizontally to introduce mirrored perspective
This provides spatial and compositional variation, helping your model:
Learn consistent concepts from different angles and zoom levels
Generalize better across inference prompts
Avoid overfitting to centered, symmetrical poses
Especially useful for LoRA training with small datasets, this method can multiply your dataset size 10x with no extra artwork.
Minimum Dataset Requirements
To make the most of Crop 'n' Flip, follow these dataset rules:
Requirement Recommendation:
Image Count Minimum: 4 images / Recommended: 20
Subject — Character only. no groups or composites
Clothing — Only one outfit per dataset
Composition — Mixed (Body, Face, Posing)
Art Style Consistent (same series/artist/game)
Avoid mixing outfits or designs. This will lead to muddy activator performance and inconsistent results.
Tagging Configuration
When using taggers to auto-caption your images, apply the following settings:
Max Tags 30
Min Threshold 0.3
Prepend Tags
Trigger/Activatortag
Cleanup Rule Remove only tags specific to the character (e.g., “red hair”), not generic tags
This ensures your training tags are clean, activator-focused, and stable across your dataset. Generic concepts will be absorbed by the activator embedding, enhancing prompt performance.
Training Settings for Civitai
If you're training your LoRA for Civitai, use these training parameters:
Setting Value Tags Shuffle --> Enabled
Keep Token --> 1
All Other Settings --> Default
This ensures that:
The activator tag is always at the beginning
Tokens are randomized enough for generalization
The model stays compatible with Civitai upload requirements
Running the Crop 'n' Flip Script
This script automatically performs:
Smart cropping (top/bottom halves + 4 corners)
Horizontal flipping of all generated images
Filename management to avoid overwriting
Filtering: Only numeric filenames (e.g.
1.jpg,22.png) will be processed
Script Modes
There are two ways to use the script:
🔹 Single Folder Mode
Processes all matching images in a single directory.
python crop_and_flip.py /path/to/your/images
🔸 Batch Mode (-r)
Recursively processes all valid images in subfolders of the target directory.
python crop_and_flip.py -r /path/to/root/folder
This is useful if you keep each character in its own folder — the script will process them all in one go.
📎 Script is included in the attachment. Look for "crop_and_flip.py"
Conclusion
Using Crop 'n' Flip is one of the most effective ways to:
Expand small datasets
Improve model generalization
Maintain stylistic and visual consistency
Combined with good tagging practices and standard Civitai settings, you’ll get cleaner, sharper, and more reliable LoRA models — with no additional artwork required.
And thanks to the provided script, it only takes one command to get started.
Examples of this Method
https://civitai-proxy.pages.dev/models/1913798/dr-stone-lilian-weinberg
https://civitai-proxy.pages.dev/models/1913731/dr-stone-ruby
https://civitai-proxy.pages.dev/models/1913537/dr-stone-minami
https://civitai-proxy.pages.dev/models/1913523/dr-stone-kohaku
https://civitai-proxy.pages.dev/models/1912104/vox-machina-vexahlia
https://civitai-proxy.pages.dev/models/1912089/vox-machina-keyleth
https://civitai-proxy.pages.dev/models/1911880/dungeons-and-dragons-diana-the-acrobat
https://civitai-proxy.pages.dev/models/1911867/captain-n-the-game-master-princess-lana
!!Update!!
crop_and_flipv2.py – Public Testing
Small-Dataset Augmentor (character-focused)
Blocks Covered
Classic augmentations: rotate, flip, zoom-crop, noise, blur
Color & style: brightness / contrast / saturation / gamma jitter, hue shift
Structured crops: thirds (top / mid / bottom), halves (left / right), corners, center
Features
Recursive processing (
-r) with mirrored folder structure in outputDeterministic randomness via
--seedClear file suffixes to avoid collisions (auto de-duplicate with
_1,_2, …)Target output resolution (default: 768x768)
Rotation border fill: reflected pixels (default) or black fill (
--rot-fill)Optional automatic output folder if not supplied:
<input>_aug
Usage
Single folder → auto create sibling output
python crop_and_flipv2.py /path/in
Single folder with explicit output
python crop_and_flipv2.py /path/in /path/out
Recursive
python crop_and_flipv2.py -r /root/in /root/out
Useful Options
--size 768x768 # target WxH (default 768x768)
--max-rot 12 # max rotation degrees (±)
--noise 6 # Gaussian noise sigma (0=off)
--blur 0.6 # Gaussian blur radius (0=off)
--jitter 0.12 # brightness/contrast/saturation jitter ±(0..1)
--hues -20 0 20 # list of hue shifts in degrees
--zooms 0.05 0.1 # zoom-in crop factors (5%,10%) as crops then resize
--no-flip # disable horizontal flip
--no-classic # disable classic block
--no-color # disable color block
--no-struct # disable structural crop block
--format png|jpg|webp # override output format
--rot-fill reflect|black # border handling for rotations (default: reflect)
--seed 123 # RNG seed for determinism
Notes
Designed for character-focused datasets (background is variable/noisy).
Avoids extreme crops below target detail; zooms are skipped if the source is too small.

