diff --git a/.claude/skills/asset-gen/SKILL.md b/.claude/skills/asset-gen/SKILL.md new file mode 100644 index 0000000..5f151e4 --- /dev/null +++ b/.claude/skills/asset-gen/SKILL.md @@ -0,0 +1,126 @@ +--- +name: asset-gen +description: > + Generate themed visual assets for the Lords of Ash CK3 total conversion mod + using the generate_image MCP tool (Nano Banana / Gemini 2.5 Flash Image). + Use when generating any mod art: trait icons, modifier icons, decision + illustrations, event backgrounds, loading screens, bookmark art, coat of arms + emblems, religion icons, building icons, MaA icons, lifestyle assets, scheme + icons, focus icons, activity assets, workshop thumbnail, or frontend art. + Also use when the user asks about visual identity, art direction, asset + pipeline, or DDS conversion. Triggers on: "generate icons", "make trait art", + "create loading screen", "asset pipeline", "convert to DDS", "art style", + "generate assets", "batch generate". +--- + +# Asset Generation — Lords of Ash + +Generate visually consistent, CK3-native art assets using the `generate_image` +MCP tool. + +Asset descriptions, filenames, resolutions, and directory paths are documented +in `docs/REQUIRED_ASSETS.md`. This skill provides the visual identity, prompt +system, and workflow. + +## Prompt Assembly + +Every `generate_image` call uses three parts: + +``` +[STYLE PREFIX] + [CATEGORY TEMPLATE] + [ASSET DESCRIPTION from docs/REQUIRED_ASSETS.md] +``` + +Never call `generate_image` with just the asset description. Always prepend the +style prefix and matching category template. + +- **Style prefix and color palette**: Read `references/style-guide.md` +- **Category templates**: Read `references/category-templates.md` and match by + asset type (trait icon, modifier icon, decision illustration, etc.) +- **Asset description**: Look up the specific asset in `docs/REQUIRED_ASSETS.md` + +## Aspect Ratio Mapping + +| Asset Type | Pixel Size | `aspect_ratio` | +|------------|-----------|----------------| +| All square icons | various | `1:1` | +| Decision illustrations | 1100x440 | `5:2` (fallback: `16:9` + crop) | +| Event backgrounds | 1592x848 | `16:9` | +| Loading screens | 3840x2160 | `16:9` | +| Bookmark art | 1920x1080 | `16:9` | +| Frontend art | 3840x2160 | `16:9` | +| Activity headers | 1100x440 | `5:2` (fallback: `16:9` + crop) | +| Lifestyle strips | 480x160 | `3:1` (fallback: `16:9` + crop) | +| Perk tree backgrounds | 348x812 | `9:16` + crop | +| Lifestyle sidebars | 608x1552 | `9:16` + crop | + +If the tool doesn't support an exact ratio, generate at the nearest standard +ratio and resize/crop with ImageMagick. + +## Single Asset Workflow + +1. Find the asset in `docs/REQUIRED_ASSETS.md` — note filename, resolution, + directory, DDS format, and description. +2. Read `references/style-guide.md` for the style prefix. +3. Read `references/category-templates.md` for the matching template. +4. Assemble the full prompt and call `generate_image` with correct `aspect_ratio`. +5. Save the PNG to `lords_of_ash/` at the correct `gfx/` path. +6. Report what was generated. + +## Batch Workflow + +When generating multiple assets of the same type: + +1. Read the style prefix and category template once. +2. Iterate through assets in `docs/REQUIRED_ASSETS.md` for that category. +3. Use the same style prefix and template for every asset. +4. Call `generate_image` in batches of **no more than 3 parallel calls** at a + time. Wait for each batch to complete before starting the next. This avoids + overwhelming the image generation API. +5. Save PNGs to correct paths after each batch. +6. Report summary: count generated, failures, paths written. + +## DDS Conversion + +CK3 requires DDS format. After generating PNGs, convert using the format +mapping and commands in `references/dds-conversion.md`. + +All output paths are under `lords_of_ash/gfx/`. The full directory structure is +documented at the end of `docs/REQUIRED_ASSETS.md`. + +## Critical Rules + +- Always prepend the style prefix — without it, images drift in style. +- Icons need dark/near-black backgrounds — light backgrounds break CK3 UI. +- Trait icons are 120x120, NOT 60x60. Modifier icons are 60x60. +- Trait icons MUST be uncompressed ARGB in DDS, not DXT5. +- CoA emblems MUST be uncompressed ARGB for the color mask system. +- Modifier icons need mipmaps; trait icons do not. +- Decision illustrations: weight composition right (left side has UI overlay). +- Filenames are case-sensitive on Linux — match mod code exactly. +- Append "absolutely no text, no letters, no words, no labels, no titles, no + captions, no watermarks" to icon prompts — the model tends to add text despite + weaker phrasing. +- Never use circular medallion/coin framing for icons — the model defaults to + round compositions which leave white/light corners on a square canvas. Enforce + "flat square, dark background edge-to-edge" in the prompt. +- Icons must be symbolic motifs only, not scenes or landscapes. If the model + generates an environment instead of an icon, the prompt needs stronger + "this is an icon, not a scene" language. +- Enforce painterly style explicitly — the model sometimes drifts to vector/flat + graphic/mobile game art. Add "painterly style only — NOT vector art, NOT flat + graphic design, NOT mobile game art" when this happens. +- For trait families that form a progression (e.g. weak/strong/savant), describe + the same base motif in each prompt and only vary the intensity/effects. Specify + orientation ("horizontal", "not tilted") to keep compositions consistent. +- Allomantic energy uses cyan-blue, never green or purple. + +## Quality Checklist + +After generating, verify: +- Colors match the palette (no oversaturated neons, no pastels) +- Composition matches the category template +- No unwanted text, labels, or signatures +- Dark/near-black background for icons +- Resolution correct (or needs crop/resize) +- Visually distinguishable from similar assets in same category +- Ash, mist, or metallic elements present where appropriate diff --git a/.claude/skills/asset-gen/references/category-templates.md b/.claude/skills/asset-gen/references/category-templates.md new file mode 100644 index 0000000..3fb3898 --- /dev/null +++ b/.claude/skills/asset-gen/references/category-templates.md @@ -0,0 +1,153 @@ +# Category Templates + +Insert between the Style Prefix and asset-specific description. Match by asset type. + +## Icons + +### Trait icons (120x120, 1:1) +``` +CK3 trait icon: a single centered symbolic motif on a very dark, near-black background +that fills the ENTIRE square canvas edge-to-edge. Do NOT use circular medallion, coin, +or round frame compositions — the image must be a flat square with dark background +reaching all four corners. No white, no light-colored backgrounds anywhere. This is an +icon, not a scene — no landscapes, no environments, just the symbolic motif. Do NOT +render as a 3D object, canvas, or painting on a wall — this IS the flat image. Clean bold +silhouette that reads clearly at small sizes. No text, no letters, no words, no labels, +no titles, no captions whatsoever. No border frame, no outer decoration. The symbol fills +roughly 70% of the canvas. Subtle inner glow and metallic sheen on the motif. One clear +visual concept — dramatic but simple. +``` + +### Modifier icons (60x60, 1:1) +``` +CK3 modifier icon: a tiny, highly simplified symbol on a very dark background. Extremely +clean and minimal — must be readable at 60x60 pixels. Maximum one or two visual elements. +Bold shapes only, no fine detail. Strong color contrast against the dark background. +``` + +### Faith icons (100x100, 1:1) +``` +CK3 faith icon: a single sacred or institutional symbol centered on a dark background. +Clean iconographic style with metallic sheen. Slightly more ornate than trait icons but +still readable at small sizes. Communicate the faith's identity in one glance. +``` + +### Building icons (60x60, 1:1) +``` +CK3 building icon: a tiny simplified architectural silhouette on a dark background. One +building shape with one or two distinguishing features. Must read at very small sizes. +``` + +### MaA / regiment icons (60x60, 1:1) +``` +CK3 regiment icon: a tiny simplified warrior or creature silhouette on a dark background. +Single figure shown from chest up or in action pose. Bold shapes, convey the unit type +through silhouette alone. +``` + +### Focus icons (140x140, 1:1) +``` +CK3 focus icon: a symbolic motif for an area of study or training. Dark background. More +detailed than trait icons but still iconographic. Visually related to its parent lifestyle. +``` + +### Scheme icons (120x120, 1:1) +``` +CK3 scheme icon: a symbolic motif suggesting covert or political action. Dark background. +Suggests secrecy, manipulation, or hidden intent. Clear silhouette at small sizes. +``` + +### Casus belli icons (60x60, 1:1) +``` +CK3 casus belli icon: a tiny bold symbol of conflict or claim on a dark background. +Aggressive, assertive motif. Sword, fist, crown, or territorial symbol. +``` + +## Illustrations + +### Decision illustrations (1100x440, 5:2) +``` +CK3 decision illustration: wide cinematic panoramic scene. Painterly with dramatic lighting. +Composition weighted slightly right (left side gets UI overlay in-game). Atmospheric depth +with mist, ash particles, and volumetric light. Characters at mid-distance. Dark vignetting. +``` + +### Event scene backgrounds (1592x848, 16:9) +``` +CK3 event background: a wide atmospheric environment with no characters in the scene — this +is a backdrop only. Rich environmental detail, strong mood lighting. Ash, mist, or +candlelight depending on setting. A place where dramatic events unfold. +``` + +### Activity header backgrounds (1100x440, 5:2) +``` +CK3 activity header: wide panoramic scene of the activity in progress. Painterly, dramatic +lighting. Dynamic composition with multiple figures. Atmospheric environmental storytelling. +``` + +## Large Format + +### Loading screens (3840x2160, 16:9) +``` +CK3 loading screen: an epic sweeping landscape or cityscape at maximum visual quality. +Painterly, cinematic framing. Grand sense of scale — the viewer feels small. Rich +atmospheric perspective with layers of mist and ash. The first art players see — make it +striking and immediately communicate the world. +``` + +### Bookmark background (1920x1080, 16:9) +``` +CK3 bookmark background: a dramatic wide scene establishing a moment in history. Painterly. +Leave space in the lower-center and sides for character portrait overlays. Dark, moody, +atmospheric establishing shot. +``` + +### Bookmark character overlay (1920x1080, 16:9) +``` +CK3 bookmark character: a single character from the waist up on a dark/transparent background. +Painterly, dramatic side-lighting. Clear readable features and distinctive clothing. Facing +slightly toward camera. Edges fade to darkness for compositing over a background. +``` + +### Frontend background (3840x2160, 16:9) +``` +CK3 main menu background: a grand, atmospheric Scadrial landscape at 4K. Painterly. The +scene should work as a static backdrop behind menu UI elements. Dramatic but not too busy. +``` + +## Specialty + +### Coat of Arms emblems (128x128, 1:1) +``` +Heraldic emblem: a single bold crest motif on a transparent background. Flat graphic style +with clean edges — NOT painterly. Uses simple flat color fills. Bold silhouette, medieval +heraldry adapted to a dark industrial-fantasy world of metals and ash. Think sigil, not +painting. +``` + +### Lifestyle strips (480x160, 3:1) +``` +CK3 lifestyle strip: a wide horizontal banner in three visual sections showing a triptych +related to the lifestyle theme. Dark atmospheric background. Painterly with metallic accents. +``` + +### Perk tree backgrounds (348x812, 9:16 + crop) +``` +CK3 perk tree background: a tall narrow vertical atmospheric illustration. Moody and ambient +without strong focal points (UI overlays this). Gradual tonal shift from dark at top to +slightly lighter at bottom. Subtle thematic elements — mist, metal, ash. +``` + +### Lifestyle sidebar illustrations (608x1552, 9:16 + crop) +``` +CK3 lifestyle sidebar: a very tall vertical scene related to the lifestyle. Painterly. +Strong vertical composition — the eye travels bottom to top. Main visual interest centered +horizontally (this appears as a sidebar panel). +``` + +### Workshop thumbnail (512x512, 1:1) +``` +Mod logo thumbnail: a striking square composition with the mod's key visual identity. Must +read at small sizes (Steam Workshop browsing). Dark background with signature crimson and +cyan accents. Central iconic motif — a Mistborn silhouette or metallic arts symbol. +``` diff --git a/.claude/skills/asset-gen/references/dds-conversion.md b/.claude/skills/asset-gen/references/dds-conversion.md new file mode 100644 index 0000000..ee5c3f9 --- /dev/null +++ b/.claude/skills/asset-gen/references/dds-conversion.md @@ -0,0 +1,58 @@ +# PNG to DDS Conversion + +The `generate_image` tool outputs PNG. CK3 requires DDS. Convert after generation. + +## DDS Format by Asset Type + +| Asset Type | DDS Format | Mipmaps | +|------------|-----------|---------| +| Trait icons (120x120) | B8G8R8A8_UNORM (uncompressed ARGB) | No | +| Modifier icons (60x60) | B8G8R8A8_UNORM (uncompressed ARGB) | Yes (6 levels) | +| Faith icons (100x100) | B8G8R8A8_UNORM | No | +| CoA emblems (128x128) | B8G8R8A8_UNORM (Linear) | No | +| Building icons (60x60) | B8G8R8A8_UNORM | No | +| MaA icons (60x60) | B8G8R8A8_UNORM | No | +| Decision illustrations | BC1_UNORM (DXT1) | No | +| Event backgrounds | BC1_UNORM (DXT1) | No | +| Loading screens | BC1_UNORM (DXT1) | No | +| Bookmark backgrounds | BC1_UNORM (DXT1) | No | +| Bookmark overlays | BC3_UNORM (DXT5) | No | +| Tenet icons (260x400) | BC3_UNORM (DXT5) | No | +| Portrait textures | BC3_UNORM (DXT5) | Yes | +| Frontend art | BC1_UNORM (DXT1) | No | + +## Conversion with ImageMagick (Linux) + +ImageMagick 7 with the `dds` delegate can write DDS files: + +```bash +# Uncompressed ARGB, no mipmaps (trait icons, faith icons, CoA emblems) +magick input.png -define dds:compression=none -define dds:mipmaps=0 output.dds + +# DXT1 opaque, no mipmaps (decisions, events, loading screens) +magick input.png -define dds:compression=dxt1 -define dds:mipmaps=0 output.dds + +# DXT5 with alpha, no mipmaps (bookmark overlays, tenet icons) +magick input.png -define dds:compression=dxt5 -define dds:mipmaps=0 output.dds + +# Uncompressed ARGB with mipmaps (modifier icons) +magick input.png -define dds:compression=none -define dds:mipmaps=6 output.dds +``` + +## Resize / Crop with ImageMagick + +```bash +# Resize to exact pixel dimensions +magick input.png -resize 120x120! output.png + +# Center-crop from a wider source +magick input.png -gravity center -crop 1100x440+0+0 +repage output.png +``` + +## Common Pitfalls + +- Trait icons MUST be uncompressed ARGB, not DXT5 — wrong format = invisible in-game +- CoA emblems MUST be uncompressed ARGB or the color mask tinting system breaks +- Modifier icons need mipmaps; trait icons do not +- Filenames are case-sensitive on Linux — match exactly what mod code references +- Check `magick identify` output to verify format and dimensions after conversion diff --git a/.claude/skills/asset-gen/references/style-guide.md b/.claude/skills/asset-gen/references/style-guide.md new file mode 100644 index 0000000..98d6de9 --- /dev/null +++ b/.claude/skills/asset-gen/references/style-guide.md @@ -0,0 +1,39 @@ +# Style Guide — Lords of Ash Visual Identity + +## Style Prefix + +Prepend to **every** `generate_image` prompt: + +``` +Dark fantasy digital painting. Palette: deep charcoal blacks (#1a1a2e), muted ash greys, +burnt orange embers (#c44b28), blood-red crimson skies (#6b0f1a), with electric cyan-blue +(#00d4ff) magical energy accents. Metallic elements in cool steel-silver and warm aged-gold. +Perpetually overcast world with falling volcanic ash particles and thick ground-level mist. +Mood: gritty and oppressive but not grimdark — defiant hope underneath. Painterly brushwork +with dramatic chiaroscuro lighting. Inspired by Brandon Sanderson's Mistborn aesthetic. +``` + +## Color Palette + +| Role | Hex Examples | +|------|-------------| +| Primary darks | `#1a1a2e`, `#16213e`, `#0f0f23` | +| Atmosphere (ash grey) | `#4a4a5a`, `#6b6b7b`, `#8a8a8a` | +| Accent warm (ember) | `#c44b28`, `#8b2500`, `#e85d26` | +| Sky / danger (crimson) | `#6b0f1a`, `#8b1a2b`, `#4a0a12` | +| Allomantic energy (cyan) | `#00d4ff`, `#4fc3f7`, `#80deea` | +| Steel / iron | `#8a9bae`, `#b0bec5`, `#546e7a` | +| Gold / brass | `#c4a35a`, `#b8860b`, `#daa520` | +| Pewter | `#71797E`, `#8a8a8a`, `#a9a9a9` | +| Atium (iridescent) | `#e8e8f0`, `#c0c0d0`, `#f0f0ff` | +| Corruption / Ruin | `#3d0c0c`, `#5c1a1a`, `#2b0a0a` | +| Hope / Preservation | `#d0dfe6`, `#e0ecf0`, `#f0f5f8` | + +## Moodboard Anchors + +- Silhouetted Mistborn on rooftop against crimson sky with oversized pale moon +- Koloss as dark hulking shapes in mid-ground +- Falling ash/snow particles in every scene +- Electric cyan glow for all Allomantic effects (lines, auras, coin trails) +- House crests as embossed dark metal badges on deep crimson with vignette +- CK3-style chrome framing (beveled metal borders, riveted edges, parchment textures)