174 lines
7.8 KiB
Markdown
174 lines
7.8 KiB
Markdown
---
|
|
name: style-creator
|
|
description: This skill should be used when the user asks to "add a new style", "create a style", "add an art style", "new aesthetic", "custom style", "make a style for", or needs to add a new art style to the gemskills style library. Guides the complete workflow from defining the style to generating and optimizing the reference tile.
|
|
---
|
|
|
|
# Style Creator
|
|
|
|
Add new art styles to the gemskills style library with properly crafted prompts, reference tiles, and registry entries.
|
|
|
|
## When to Use
|
|
|
|
- Adding a new art style to the library
|
|
- Creating a regional or cultural aesthetic style
|
|
- Defining a custom visual style with a reference tile
|
|
- Batch-adding multiple related styles
|
|
|
|
## Important: Working Directory
|
|
|
|
All file edits and commands operate relative to `${CLAUDE_PLUGIN_ROOT}` (the plugin root).
|
|
|
|
**Sharp may fail in the plugin cache.** If `bun run optimize` fails, the tile generation script auto-optimizes. If both fail, use `sips` as a fallback:
|
|
```bash
|
|
sips -s format png -s formatOptions best <tile-path> --out <tile-path>
|
|
```
|
|
|
|
## Workflow
|
|
|
|
Follow these steps in order. Do not skip steps.
|
|
|
|
### Step 1: Define the Style
|
|
|
|
Gather from the user:
|
|
- **Name**: Human-readable name (e.g. "Miami Aesthetic")
|
|
- **ID**: Lowercase with hyphens (e.g. `miami-aesthetic`)
|
|
- **Short name**: 3-4 character abbreviation (e.g. `miam`)
|
|
- **Category**: One of: `traditional`, `digital`, `illustration`, `photography`, `design`, `retro`, `technique`, `decorative`, `creative`, `cultural`
|
|
|
|
If the user provides only a name or concept, derive the ID and short name automatically. Choose the category that best fits.
|
|
|
|
### Step 2: Write promptHints
|
|
|
|
The `promptHints` field is a comma-separated string of descriptors prepended to user prompts when the style is used. Focus on:
|
|
|
|
- Color palette keywords
|
|
- Texture and material descriptors
|
|
- Technique and medium references
|
|
- Mood and atmosphere terms
|
|
- Compositional patterns
|
|
|
|
Keep to 8-12 descriptors. These guide the model when generating user images, not the tile itself.
|
|
|
|
### Step 3: Write the tilePrompt
|
|
|
|
Apply these principles — do NOT read external reference files, the rules are right here:
|
|
|
|
**Core principle: Texture vs Object.** The tile must transfer materiality/medium/technique, NOT a scene. A tile showing "a cyberpunk city" will bleed city elements into every user prompt. A tile showing "neon refractions on chrome with film grain" transfers only the visual physics.
|
|
|
|
**6-part prompt structure:**
|
|
1. **Full-bleed anchor**: `Full-bleed [style] filling the entire canvas`
|
|
2. **Macro/texture anchor**: `extreme close-up macro texture`, `seamless pattern`, `abstract composition`
|
|
3. **Style descriptors**: Specific movements, artists, time periods
|
|
4. **Materiality/medium**: What the art is "made of" — `cracked canvas`, `halftone dots`, `VHS static`, `watercolor bleed`
|
|
5. **Palette and lighting**: `chiaroscuro`, `pastel gradients`, `neon rim light`, `sepia tones`
|
|
6. **Anti-container enforcers**: `Edge to edge, no frame, no border, no [style-specific items]`
|
|
|
|
**Category tips:**
|
|
- **Abstract styles**: Focus on geometry and brushwork, avoid naming objects
|
|
- **Figurative styles** (anime, comic): Generate the *ink and paper*, not a character. Use `dense montage` or `extreme macro of brushwork`
|
|
- **Photography**: Focus on camera artifacts — grain, light leaks, vignette, bokeh
|
|
- **Design movements**: Focus on repeating motifs and materials
|
|
- **Regional aesthetics**: Color palette and textures, NOT photos of places. No buildings, streets, or landmarks.
|
|
|
|
**Anti-container items to add based on style:**
|
|
- Paintings: `no canvas, no easel, no gallery, no museum, no wall`
|
|
- Crafts: `no hoop, no frame, no desk, no table`
|
|
- Photos: `no letterbox, no black bars, no monitor, no screen`
|
|
- Textiles: `no cloth edge, no fabric edge, no bed, no furniture`
|
|
|
|
### Step 4: Add to styles.json
|
|
|
|
Add the new style entry to the `styles` array in:
|
|
```
|
|
${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/assets/styles.json
|
|
```
|
|
|
|
Entry format:
|
|
```json
|
|
{
|
|
"id": "style-id",
|
|
"shortName": "shrt",
|
|
"name": "Style Name",
|
|
"category": "category",
|
|
"promptHints": "descriptor1, descriptor2, descriptor3",
|
|
"tilePrompt": "Full-bleed ... Edge to edge, no frame, no border."
|
|
}
|
|
```
|
|
|
|
Verify the ID and short name are unique across all existing styles before adding.
|
|
|
|
### Step 5: Generate the Tile
|
|
|
|
Generate the reference tile using the tile generation script:
|
|
|
|
```bash
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/scripts/generate_tiles.ts --style <style-id>
|
|
```
|
|
|
|
This generates a 512x512 PNG tile at `assets/tiles/<style-id>.png` and auto-optimizes it.
|
|
|
|
If auto-optimization fails, try manually from the plugin root:
|
|
```bash
|
|
bun run ${CLAUDE_PLUGIN_ROOT}/optimize -- --file=skills/browsing-styles/assets/tiles/<style-id>.png
|
|
```
|
|
|
|
If sharp is unavailable, use sips:
|
|
```bash
|
|
sips -s format png -s formatOptions best ${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/assets/tiles/<style-id>.png --out ${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/assets/tiles/<style-id>.png
|
|
```
|
|
|
|
If the style benefits from a reference image (e.g. a regional aesthetic), use the generate-image script with `--input`:
|
|
|
|
```bash
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts \
|
|
"<tilePrompt text>" \
|
|
--input /path/to/reference.jpg \
|
|
--aspect 1:1 --size 1K \
|
|
--output ${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/assets/tiles/<style-id>.png
|
|
```
|
|
|
|
### Step 6: Visual Verification
|
|
|
|
**Do not read the generated tile back into context.** Ask the user to visually inspect it. Common issues:
|
|
|
|
- Not full-bleed? (frames, borders, containers, canvas edges)
|
|
- Shows a scene instead of the aesthetic?
|
|
- Wrong color palette?
|
|
- Text, logos, or trademarked content?
|
|
|
|
If it fails, update the tilePrompt and regenerate.
|
|
|
|
### Step 7: Update Counts
|
|
|
|
After adding styles, update the style count in these files:
|
|
- `${CLAUDE_PLUGIN_ROOT}/README.md` (style count mentions)
|
|
- `${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json` (description text and version bump)
|
|
- `${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/SKILL.md` (count)
|
|
- `${CLAUDE_PLUGIN_ROOT}/skills/team-group-photo/SKILL.md` (count)
|
|
|
|
Regenerate `STYLES.md` from the plugin root:
|
|
```bash
|
|
bun -e "
|
|
const root = process.env.CLAUDE_PLUGIN_ROOT;
|
|
const data = JSON.parse(require('fs').readFileSync(root + '/skills/browsing-styles/assets/styles.json', 'utf8'));
|
|
const styles = data.styles;
|
|
const cats = data.categories;
|
|
const grouped = {};
|
|
for (const s of styles) { if (!grouped[s.category]) grouped[s.category] = []; grouped[s.category].push(s); }
|
|
let md = '# Art Styles Reference\n\n' + styles.length + ' styles across ' + Object.keys(grouped).length + ' categories. Use \\\`--style <id>\\\` or \\\`--style <short>\\\` with any image generation skill.\n\n## Categories\n\n| Category | Count | Description |\n|----------|-------|-------------|\n';
|
|
for (const [cat, desc] of Object.entries(cats)) { md += '| ' + cat + ' | ' + (grouped[cat]?.length || 0) + ' | ' + desc + ' |\n'; }
|
|
md += '\n';
|
|
for (const [cat, desc] of Object.entries(cats)) { const items = grouped[cat] || []; if (!items.length) continue; md += '## ' + cat.charAt(0).toUpperCase() + cat.slice(1) + '\n\n| Tile | ID | Short | Name |\n|------|-----|-------|------|\n'; for (const s of items) { md += '| <img src=\"skills/browsing-styles/assets/tiles/' + s.id + '.png\" width=\"80\" /> | ' + s.id + ' | ' + s.shortName + ' | ' + s.name + ' |\n'; } md += '\n'; }
|
|
require('fs').writeFileSync(root + '/STYLES.md', md);
|
|
console.log('STYLES.md written with ' + styles.length + ' styles');
|
|
"
|
|
```
|
|
|
|
### Step 8: Bump Version and Commit
|
|
|
|
Bump the patch version in `${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json` and commit all changes.
|
|
|
|
## Context Discipline
|
|
|
|
**Do not read generated tile images back into context.** The scripts output file paths only. Ask the user to visually inspect tiles and provide feedback for iteration.
|