Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Character consistency across AI-generated images with reference sheets and LoRA techniques. Covers turnaround views, expression sheets, color palettes, and style consistency tricks. Use for: character design, game art, illustration, animation, comics, visual novels. Triggers: character design, character sheet, character consistency, character reference, turnaround sheet, expression sheet, character art, consistent character, character concept, reference sheet, character creation, oc design, char
.claude/skills/aiskillstore-character-design-sheet/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 62% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 59% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 76% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 64% | 0% |
> Install the belt CLI skill: npx skills add belt-sh/cli
Create consistent characters across multiple AI-generated images via inference.sh CLI.
> Requires inference.sh CLI (belt). Install instructions
bashbelt login # Generate a character concept belt app run falai/flux-dev-lora --input '{ "prompt": "character design reference sheet, front view of a young woman with short red hair, green eyes, wearing a blue jacket and white t-shirt, full body, white background, clean lines, concept art style, character turnaround", "width": 1024, "height": 1024 }'
AI image generation produces different-looking characters every time, even with the same prompt. This is the #1 challenge in AI art for any project requiring the same character across multiple images.
| Technique | Consistency | Effort | Best For | |-----------|-------------|--------|----------| | FLUX LoRA (trained on character) | Very high | High (requires training data) | Ongoing projects, many images | | Detailed description anchor | Medium-high | Low | Quick projects, few images | | Same seed + similar prompt | Medium | Low | Variations of single pose | | Image-to-image refinement | Medium | Medium | Refining existing images | | Reference image in prompt | Varies | Low | When model supports it |
Shows the character from multiple angles:
┌────────┬────────┬────────┬────────┐
│ │ │ │ │
│ FRONT │ 3/4 │ SIDE │ BACK │
│ VIEW │ VIEW │ VIEW │ VIEW │
│ │ │ │ │
└────────┴────────┴────────┴────────┘bash# Generate front view belt app run falai/flux-dev-lora --input '{ "prompt": "character design, front view, young woman with short asymmetric red hair, bright green eyes, wearing navy blue bomber jacket over white graphic tee, dark jeans, red sneakers, standing in neutral pose, full body, clean white background, concept art, sharp details", "width": 768, "height": 1024 }' --no-wait # Generate 3/4 view (same description) belt app run falai/flux-dev-lora --input '{ "prompt": "character design, three-quarter view, young woman with short asymmetric red hair, bright green eyes, wearing navy blue bomber jacket over white graphic tee, dark jeans, red sneakers, standing, full body, clean white background, concept art, sharp details", "width": 768, "height": 1024 }' --no-wait # Generate side view belt app run falai/flux-dev-lora --input '{ "prompt": "character design, side profile view, young woman with short asymmetric red hair, bright green eyes, wearing navy blue bomber jacket over white graphic tee, dark jeans, red sneakers, standing, full body, clean white background, concept art, sharp details", "width": 768, "height": 1024 }' --no-wait # Generate back view belt app run falai/flux-dev-lora --input '{ "prompt": "character design, back view, young woman with short asymmetric red hair, wearing navy blue bomber jacket over white graphic tee, dark jeans, red sneakers, standing, full body, clean white background, concept art, sharp details", "width": 768, "height": 1024 }' --no-wait # Stitch into reference sheet belt app run infsh/stitch-images --input '{ "images": ["front.png", "three-quarter.png", "side.png", "back.png"], "direction": "horizontal" }'
Shows the character's face with different emotions:
┌────────┬────────┬────────┐
│NEUTRAL │ HAPPY │ ANGRY │
│ │ │ │
├────────┼────────┼────────┤
│ SAD │SURPRISE│THINKING│
│ │ │ │
└────────┴────────┴────────┘Minimum 6 expressions: neutral, happy, angry, sad, surprised, thinking.
bash# Neutral belt app run falai/flux-dev-lora --input '{ "prompt": "character portrait, close-up face, young woman with short red hair and green eyes, neutral calm expression, clean white background, concept art, consistent character design", "width": 512, "height": 512 }' --no-wait # Happy belt app run falai/flux-dev-lora --input '{ "prompt": "character portrait, close-up face, young woman with short red hair and green eyes, warm genuine smile, happy expression, clean white background, concept art, consistent character design", "width": 512, "height": 512 }' --no-wait # Angry belt app run falai/flux-dev-lora --input '{ "prompt": "character portrait, close-up face, young woman with short red hair and green eyes, furrowed brows, angry determined expression, clean white background, concept art, consistent character design", "width": 512, "height": 512 }' --no-wait # (Continue for sad, surprised, thinking...)
Multiple outfits for the same character:
| Outfit | Description | |--------|-------------| | Casual | Bomber jacket, t-shirt, jeans | | Work | Blazer, button-down, slacks | | Athletic | Sports bra, leggings, running shoes | | Formal | Evening dress, heels |
Document exact colors for consistency:
CHARACTER: Maya Chen
Skin: ████ #F5D0A9 (warm beige)
Hair: ████ #C0392B (auburn red)
Eyes: ████ #27AE60 (emerald green)
Jacket: ████ #2C3E50 (navy blue)
T-shirt: ████ #ECF0F1 (off-white)
Jeans: ████ #34495E (dark slate)
Shoes: ████ #E74C3C (bright red)The most practical consistency technique: write a 50+ word detailed description and reuse it exactly in every prompt.
[age] [gender] with [hair: color, length, style], [eye color] eyes,
[skin tone], [facial features: any distinctive marks],
wearing [top: specific color and style], [bottom: specific color and style],
[shoes: specific color and style], [accessories: specific items]young woman in her mid-twenties with short asymmetric auburn red hair
swept to the right side, bright emerald green eyes, light warm skin
with a small beauty mark below her left eye, wearing a fitted navy
blue bomber jacket with silver zipper over a white crew-neck t-shirt,
dark slate slim jeans, and bright red canvas sneakers, small silver
stud earringsUse this exact block in EVERY prompt for this character, only changing the action/pose/scene.
| Style | Head-to-Body Ratio | Best For | |-------|-------------------|----------| | Realistic | 7.5 : 1 | Film, photorealistic | | Heroic | 8 : 1 | Superheroes, action | | Anime/Manga | 5-6 : 1 | Japanese animation style | | Stylized | 4-5 : 1 | Western animation | | Chibi/Super-deformed | 2-3 : 1 | Cute, comedic, mascots |
Include proportion style in your prompts: "realistic proportions" vs "anime style proportions" vs "chibi proportions"
For projects requiring many images of the same character, train a LoRA:
bash# Use FLUX with a character LoRA belt app run falai/flux-dev-lora --input '{ "prompt": "maya_chen character, sitting at a cafe reading a book, warm afternoon light, candid photography style", "loras": [{"path": "path/to/maya-chen-lora.safetensors", "scale": 0.8}] }'
LoRA Training Tips:
| Issue | Why It Happens | Mitigation | |-------|---------------|------------| | Hair color drift | Model interprets "red hair" differently each time | Use specific shade: "auburn red #C0392B" | | Eye color change | Low priority in generation | Mention eye color early in prompt | | Outfit inconsistency | Model fills in details creatively | Describe every clothing item explicitly | | Age shift | Vague age description | Use "mid-twenties" not "young" | | Face structure change | Different generations = different faces | Use LoRA or same seed base | | Proportion shift | Style interpretation varies | Specify "7.5 head proportions" |
For ongoing projects, maintain a character bible document:
markdown# Character: Maya Chen ## Visual Description (use in all prompts) young woman in her mid-twenties with short asymmetric auburn red hair... [full 50+ word anchor description] ## Color Palette - Skin: #F5D0A9 - Hair: #C0392B - Eyes: #27AE60 - Primary outfit: Navy #2C3E50 - Accent: Red #E74C3C ## Personality Notes (for expression/pose choices) - Confident but approachable - Default expression: slight curious smile - Gestures: talks with hands, leans forward when interested ## Style Keywords concept art, clean lines, sharp details, [art style reference] ## LoRA (if trained) Path: ./loras/maya-chen-v2.safetensors Trigger: maya_chen Recommended scale: 0.8
| Mistake | Problem | Fix | |---------|---------|-----| | Vague descriptions | Different character every time | 50+ word detailed anchor | | Inconsistent prompt structure | Varying emphasis = varying results | Same structure, only change action/scene | | Generating one view only | Can't use character in different contexts | Create full turnaround reference | | No color documentation | Colors drift across generations | Record exact hex codes | | Skipping expression sheet | Character feels one-dimensional | Generate 6+ expressions | | Not using LoRA for big projects | Inconsistency compounds | Train LoRA for 10+ image projects |
bashnpx skills add inference-sh/skills@ai-image-generation npx skills add inference-sh/skills@flux-image npx skills add inference-sh/skills@prompt-engineering
Browse all apps: belt app store
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 8,289 | 6,735 | -19% | 1 | 1 | 0% | 1,528 | 3,952 | +159% | 0 | 0 | — |
case-02 | fail→pass | 13,518 | 7,960 | -41% | 1 | 1 | 0% | 2,627 | 4,251 | +62% | 0 | 0 | — |
case-03 | fail→fail | 13,526 | 10,429 | -23% | 1 | 1 | 0% | 2,117 | 4,114 | +94% | 0 | 0 | — |
case-04 | pass→pass | 12,551 | 3,249 | -74% | 1 | 1 | 0% | 2,076 | 3,143 | +51% | 0 | 0 | — |
case-05 | pass→pass | 12,363 | 10,577 | -14% | 1 | 1 | 0% | 1,884 | 3,863 | +105% | 0 | 0 | — |
case-06 | pass→pass | 14,365 | 4,537 | -68% | 1 | 1 | 0% | 2,272 | 3,545 | +56% | 0 | 0 | — |
case-07 | fail→pass | 13,577 | 3,237 | -76% | 1 | 1 | 0% | 2,050 | 3,262 | +59% | 0 | 0 | — |
case-08 | fail→pass | 14,727 | 5,132 | -65% | 1 | 1 | 0% | 2,217 | 3,561 | +61% | 0 | 0 | — |
case-09 | fail→pass | 28,012 | 8,729 | -69% | 1 | 1 | 0% | 2,371 | 4,162 | +76% | 0 | 0 | — |
case-10 | pass→pass | 14,870 | 9,144 | -39% | 1 | 1 | 0% | 2,210 | 4,093 | +85% | 0 | 0 | — |
case-11 | fail→pass | 18,023 | 9,980 | -45% | 1 | 1 | 0% | 2,681 | 4,400 | +64% | 0 | 0 | — |
case-12 | fail→pass | 13,799 | 6,109 | -56% | 1 | 1 | 0% | 2,289 | 3,942 | +72% | 0 | 0 | — |
case-13 | pass→pass | 8,998 | 3,720 | -59% | 1 | 1 | 0% | 1,663 | 3,409 | +105% | 0 | 0 | — |
case-14 | pass→pass | 19,961 | 7,875 | -61% | 1 | 1 | 0% | 2,802 | 4,062 | +45% | 0 | 0 | — |
case-15 | fail→pass | 11,327 | 2,556 | -77% | 1 | 1 | 0% | 1,649 | 3,054 | +85% | 0 | 0 | — |
case-16 | pass→pass | 12,378 | 6,333 | -49% | 1 | 1 | 0% | 2,133 | 3,740 | +75% | 0 | 0 | — |
case-17 | pass→pass | 12,244 | 20,837 | +70% | 1 | 1 | 0% | 1,968 | 4,153 | +111% | 0 | 0 | — |
case-18 | fail→pass | 15,410 | 12,001 | -22% | 1 | 1 | 0% | 2,151 | 4,334 | +101% | 0 | 0 | — |
case-19 | pass→pass | 12,892 | 8,310 | -36% | 1 | 1 | 0% | 2,060 | 4,041 | +96% | 0 | 0 | — |
case-20 | fail→fail | 32,850 | 17,075 | -48% | 1 | 1 | 0% | 3,130 | 5,783 | +85% | 0 | 0 | — |
case-21 | fail→fail | 55,358 | 23,836 | -57% | 1 | 1 | 0% | 4,286 | 6,087 | +42% | 0 | 0 | — |
case-22 | fail→fail | 13,212 | 9,380 | -29% | 1 | 1 | 0% | 2,821 | 4,475 | +59% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +36 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.