Adds references/pitfalls.md cataloging known failure modes across 6 categories (mascot generation, image editing, safety, provider quirks, prompt engineering, pipeline tooling) with a quick-reference fix table. Updates SKILL.md with version 1.1.0 in frontmatter and a consolidated 'What Is NOT On-Brand' section with anti-pattern table. Closes #37 Signed-off-by: Magnus Hedemark <magnus919@pm.me>
9.0 KiB
Nous Branding — Pitfalls & Known Failure Modes
This document catalogs known failure modes, gotchas, and mitigations accumulated across multiple sessions of generating Nous-branded images. Use it as a troubleshooting reference when output doesn't match expectations.
1. Mascot Generation Failures
1.1 Sad / Melancholic Expression
Symptom: The Nous Girl looks sad, crying, or melancholic.
Cause: Image models default to a melancholic expression for manga-style characters when the prompt doesn't specify otherwise.
Fix: Always include: "Neutral calm attentive expression — not sad, not crying" in the character description. This must be explicit negation — "calm" alone is insufficient.
1.2 Dark / Black Headphones
Symptom: The mascot appears with black or dark-colored headphones matching the scene's palette.
Cause: The model matches the headphones to the scene's dominant colors instead of the brand's canonical white headphones.
Fix: Always state both the color AND the headphone structure: "White over-ear headphones — the cushioned white band arches across the crown."
1.3 Teardrop / Facial Markings
Symptom: A teardrop appears under the eye, or the face has tattoos, scars, or cyberpunk markings.
Cause: The model free-associates "manga" or "cyberpunk" with facial markings.
Fix: Include explicit exclusions: "No tattoos, no scars, no markings, clean clear skin. No teardrop."
1.4 Wrong Ethnicity
Symptom: The Nous Girl appears Asian instead of French/Caucasian.
Cause: Image models default to Asian features when the prompt specifies "anime" or "manga" style.
Fix: Explicitly state: "French Caucasian, fair skin, light-colored eyes (blue or grey), delicate European features, about 13 years old — NOT Asian."
1.5 Wrong Clothing / Costume
Symptom: The character is dressed in a hoodie, dark cyberpunk outfit, or elaborate costume instead of the brand's white collared shirt.
Cause: The model matches the character's clothing to the scene's aesthetic rather than the brand specification.
Fix: Always state "white collared shirt" and add "not a hoodie, not a dark top" for complex scenes.
1.6 Generic Anime Instead of Retro Manga
Symptom: Output looks like modern glossy anime rather than 1970s-80s cel-shaded manga.
Fix: Use the exact phrase "1970s-80s cel-shaded manga style, high-contrast black ink on white paper".
2. Image Editing / Reference Workflow Pitfalls
2.1 Text Disappears from Edited Images
Symptom: When editing an image that contains text (meme captions, labels, headlines), the model corrupts or drops the text.
Fix: Regenerate with "Keep all text exactly as shown. Do not change or remove any text." Or add text as a post-processing step. This is a known limitation of the /v1/images/edits endpoint.
2.2 Square Input Requirement
Symptom: The edits endpoint rejects non-square input images.
Fix: The generate-with-ref.py script handles this by center-cropping to 1024x1024. Use --pad to pad with average edge color instead of cropping.
2.3 Reference Is Not a Guarantee
Symptom: Uploading the official Nous Girl badge as a reference doesn't guarantee the output matches the canonical design.
Cause: /v1/images/edits does not extract style embeddings like IPAdapter or ControlNet. The reference provides pixel-level context but style transfer is not guaranteed.
Fix: Always restate all key identifiers in the text prompt (white headphones, black hair, white collared shirt, neutral expression) AND all exclusions (no teardrop, no markings). Prefer the sketch sheet (nous-girl-sketch-sheet.png) over a single-pose badge for better character understanding.
2.4 Multi-Pass Editing Complexity
Symptom: Each editing pass degrades image quality or loses fidelity.
Fix: Limit to 3-4 passes maximum. Each pass handles ONE transformation. The working sequence: character swap → style conversion → demographic correction. More passes introduce cumulative artifacts.
2.5 Aspect Ratio Confusion
Symptom: Output is cropped or distorted when using non-square source images.
Fix: The edits endpoint outputs landscape (1536x1024), portrait (1024x1536), or square (1024x1024). Set the desired output size explicitly via the size parameter in generate-with-ref.py or via --aspect flag.
3. Safety / Moderation Blocks
3.1 OpenAI Moderation Rejects Horror Content
Symptom: The safety system blocks prompts containing ominous language, body horror descriptors, or threat-adjacent vocabulary.
Fix: Strip all emotional/response language from the prompt. Describe only neutral visual phenomena. Instead of "horrifying spiral consuming the town," use "spiral shapes in the clouds and on buildings." The concept survives through visual contrast alone — no need to label it as horror.
Known blockers: terrifying, disturbing, grotesque, contorted, twisted (when applied to figures), Uzumaki, body horror.
3.2 Threatening Character Descriptions
Symptom: /v1/images/edits blocks prompts with "henchmen," "weapons," "crime scene," or threatening-character groups.
Fix: Rephrase as neutral physical descriptions: "a group of men in dark suits" not "henchmen." Remove weapon references. Describe the scene's visual elements without labeling their intent.
4. Provider-Specific Quirks
4.1 OpenAI /v1/images/edits
| Issue | Workaround |
|---|---|
| Text vanishes from edits | Include explicit preservation instructions |
| Square input only | Use --pad flag to preserve non-square content |
| Extra auto-generated text (labels, headlines) | Explicitly specify "ONLY the following text: [exact text]. No other text anywhere." |
| Reference doesn't guarantee fidelity | Restate all identifiers in prompt |
4.2 DALL-E 3 (Text-Only)
| Issue | Workaround |
|---|---|
| Can't use reference images | Must specify all details in the prompt text |
| Sad default expression | Explicit negation required |
| Wrong headphones | Must specify color and structure |
| Safety system blocks horror | Strip emotional language, describe visual phenomena only |
4.3 ComfyUI / IPAdapter
| Issue | Workaround |
|---|---|
| Reference can overpower prompt | Lower denoise to 0.6-0.7 |
| Texture/loss of analog feel | Post-process with scripts/postprocess.py |
| Style transfer incomplete | Use Reference-Only ControlNet not just IPAdapter |
5. Prompt Engineering Anti-Patterns
5.1 Not Specifying Emotional State
The single most important lesson: if the prompt says anything about the character's emotional state without specifying "not sad," the model defaults to sad. Always end character descriptions with explicit negations of the default failure modes.
5.2 Not Specifying Ethnicity
For manga-style characters, the model defaults to Asian features. Always state "French Caucasian" for the Nous Girl.
5.3 Assuming Reference Images Replace Text Description
Uploading a reference image does NOT replace the need for a detailed text prompt. The reference influences style and composition, but the model still needs to know what to generate. Always provide:
- Character identifiers (hair, headphones, shirt)
- Palette constraints (hex values if possible)
- Expression (with exclusions)
- What NOT to include (teardrop, markings, dark headphones)
6. Pipeline / Tooling Pitfalls
6.1 generate-with-ref.py Crashes
If the script crashes, check:
- Python dependencies:
pillowinstalled? - Reference path exists:
ls -la assets/ - Config file readable:
~/.hermes/config.yaml - Active image provider set in config
6.2 Post-Processing Too Aggressive
If scripts/postprocess.py --mode imprint destroys too much detail, reduce intensity or switch mode:
--intensity 0.45for fine linework--mode nousfor legacy luminous targets (no xerox/registration/scuffs)--mode standardfor light touch only
6.3 Reference Images Are Placeholders
The assets in assets/ are full-resolution reference images. If the skill was installed via cp -r and the assets directory is empty, sync from the repo:
cp -r /path/to/agent-skills/nous-branding/assets/ ~/.hermes/skills/creative/nous-branding/assets/
Quick Reference: Fixes for Common Problems
| Problem | Fix |
|---|---|
| Sad expression | Add "not sad, not crying" to prompt |
| Black headphones | Specify "white over-ear headphones" + "cushioned white band arches across crown" |
| Teardrop/markings | Add "no tattoos, no scars, no markings, no teardrop" |
| Wrong ethnicity | Add "French Caucasian, NOT Asian" |
| Wrong clothing | Add "white collared shirt, not a hoodie" |
| Glossy anime instead of manga | Use "1970s-80s cel-shaded manga style, high-contrast black ink on white paper" |
| Text disappears in edits | Add "Keep all text exactly as shown" or add text post-process |
| Image too clean | Run python3 scripts/postprocess.py input.png output.png --mode imprint --intensity 0.7 |
| Reference not matching | Use sketch sheet, restate all identifiers in prompt |