238 lines
12 KiB
Markdown
238 lines
12 KiB
Markdown
---
|
|
name: generate-image
|
|
description: This skill should be used when the user asks to "generate an image", "create a banner", "make artwork", "create an illustration", "generate a logo", "make a graphic", "design a header", "AI art", "img2img", "social share image", "OG image", "open graph image", "Twitter card", "hero image", "cover photo", "profile picture", "social media graphic", or needs AI image generation. Handles prompt rewriting and Gemini 3 Pro image generation API calls.
|
|
---
|
|
|
|
# Generate Image
|
|
|
|
Generate images using Nano Banana Pro (`gemini-3-pro-image-preview`).
|
|
|
|
## When to Use
|
|
|
|
Use this skill when the user asks to:
|
|
- Generate an image from a text prompt
|
|
- Create artwork, illustrations, or graphics
|
|
- Generate variations of an existing image (img2img)
|
|
- Create scenes with multiple reference images (character + location + other characters)
|
|
|
|
## Style Selection
|
|
|
|
**If the user hasn't specified a style**, present a multi-choice question before proceeding:
|
|
|
|
> **How would you like to handle the art style?**
|
|
>
|
|
> 1. **Pick a style** - Browse 167 styles visually and choose one
|
|
> 2. **Let me choose** - I'll suggest a style based on your prompt
|
|
> 3. **What are styles?** - Learn how the style system works
|
|
> 4. **No style** - Generate without a specific art style
|
|
|
|
Use the `AskUserQuestion` tool to present this choice.
|
|
|
|
**If the user picks "Pick a style"**, launch the style picker (pick mode is the default):
|
|
|
|
```bash
|
|
STYLE_JSON=$(bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/scripts/preview_server.ts)
|
|
```
|
|
|
|
The picker opens a browser. The user clicks a style, views the detail modal, clicks "Select This Style". `STYLE_JSON` receives the selection as JSON and the server exits. Parse the `id` field and pass it via `--style <id>` to the generate command.
|
|
|
|
**If the user picks "Let me choose"**, select the most fitting style based on their prompt and explain why. Use the style suggestions in the "Suggest Styles to Users" section below.
|
|
|
|
**If the user picks "What are styles?"**, explain: there are 167 curated art styles across 10 categories (traditional, digital, illustration, photography, design, retro, technique, decorative, creative, cultural). Each style includes prompt hints and a visual reference tile that gets sent to Gemini for better adherence. Then re-ask the style question.
|
|
|
|
**If the user already specified a style** (e.g. "generate in watercolor style"), skip this step entirely and use `--style` directly.
|
|
|
|
## Gather Design Direction First
|
|
|
|
**Ask clarifying questions before rewriting prompts** to understand the user's intent:
|
|
|
|
1. **Purpose**: What is the image for? (banner, logo, social media, product shot, art piece)
|
|
2. **Color palette**: Any brand colors? Dark/light theme? Specific mood?
|
|
3. **Composition constraints**: Aspect ratio needs? Text overlay space? Full-bleed vs bordered?
|
|
4. **Key elements**: What must be included? What should be avoided?
|
|
|
|
Simple requests like "make a cat image" can proceed with sensible defaults. Complex requests like "create a banner for my app" require clarification to avoid iteration waste.
|
|
|
|
## Prompt Rewriting (Critical)
|
|
|
|
**Before generating any image, always rewrite the user's prompt** using the guide in `references/prompt-guide.md`.
|
|
|
|
The core principle: **"Describe the scene, don't just list keywords."**
|
|
|
|
### Rewriting Checklist
|
|
|
|
Transform simple prompts by adding:
|
|
1. **Subject details**: Specific appearance, clothing, expression, materials
|
|
2. **Environment/Setting**: Location, time of day, weather, indoor/outdoor
|
|
3. **Lighting**: Natural/artificial, direction, quality, color temperature
|
|
4. **Composition**: Camera angle, distance, framing, focal length
|
|
5. **Style/Aesthetic**: Photorealistic, illustration style, art movement
|
|
6. **Mood/Atmosphere**: Emotional tone, color palette mood
|
|
7. **Technical specs**: Aspect ratio, level of detail, textures
|
|
|
|
### Example Transformation
|
|
|
|
**User says**: "banner for my app"
|
|
**Rewritten prompt**: "A modern, full-bleed banner for a technology application. Dark gradient background transitioning from deep navy to black. Abstract geometric network visualization with glowing nodes connected by thin lines. Clean sans-serif typography positioned left of center. Professional, tech-forward aesthetic with no visible borders or edges - the design extends seamlessly to all edges. 16:9 aspect ratio."
|
|
|
|
**User says**: "a cat"
|
|
**Rewritten prompt**: "A fluffy orange tabby cat lounging on a sun-drenched windowsill, soft afternoon light creating a warm glow on its fur. The cat is in a relaxed pose with half-closed eyes, conveying contentment. Shot from a low angle with shallow depth of field, the background showing a blurred garden view. Photorealistic, warm color palette."
|
|
|
|
## Recommended Workflow
|
|
|
|
**Draft → Iterate → Final** approach saves time and API costs:
|
|
|
|
1. **Draft Phase (1K)**: Generate quickly at default resolution to test prompts
|
|
2. **Iteration Phase**: Refine prompts incrementally, creating new files each attempt
|
|
3. **Final Phase (4K)**: Only produce high-res output after prompt is validated
|
|
|
|
**Do not read the image back** - the script outputs only the file path. This allows efficient iteration without Claude loading large image data.
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "prompt" [options]
|
|
```
|
|
|
|
### Options
|
|
|
|
- `--input <path>` - Reference image (can specify multiple times, up to 14 images)
|
|
- `--style <id>` - Apply style from the style library (see browsing-styles skill)
|
|
- `--size <1K|2K|4K>` - Image size (default: 1K for fast drafts)
|
|
- `--aspect <ratio>` - Aspect ratio: 1:1, 16:9, 9:16, 4:3, 3:4
|
|
- `--negative <prompt>` - Negative prompt (what to avoid)
|
|
- `--count <n>` - Number of images (1-4, default: 1)
|
|
- `--guidance <n>` - Guidance scale
|
|
- `--seed <n>` - Random seed for reproducibility
|
|
- `--output <path>` - Output path
|
|
- `--model <name>` - `gemini` (default) or `grok` (Grok Imagine Image via Replicate)
|
|
|
|
### Examples
|
|
|
|
```bash
|
|
# Simple generation
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "cyberpunk cityscape at night"
|
|
|
|
# With art style (100+ available, use short names or full IDs)
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "mountain landscape" --style impressionism
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "portrait" --style ukiy
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "city street" --style noir
|
|
|
|
# High-res with specific aspect ratio
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "mountain landscape" --size 4K --aspect 16:9
|
|
|
|
# With negative prompt
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "portrait of a cat" --negative "low quality, blurry"
|
|
|
|
# Combine style with other options
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "cat sleeping" --style wtrc --size 4K --aspect 1:1
|
|
|
|
# Generate multiple variations
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "abstract art" --count 4
|
|
|
|
# Single reference image (img2img)
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "make it look like a watercolor painting" --input photo.jpg
|
|
|
|
# Multiple reference images (character consistency, scene composition)
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "King on throne in dramatic lighting" \
|
|
--input character.png \
|
|
--input throne-room.png \
|
|
--aspect 16:9 --size 2K
|
|
|
|
# Multiple characters in a scene
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "Two warriors facing each other in combat" \
|
|
--input warrior1.png \
|
|
--input warrior2.png \
|
|
--input battlefield.png \
|
|
--aspect 16:9
|
|
```
|
|
|
|
## Multiple Reference Images
|
|
|
|
Gemini supports up to 14 reference images per request:
|
|
- **6 objects** - Locations, items, environments
|
|
- **5 humans** - Character consistency across generations
|
|
- Use detailed prompts describing how reference images should be combined
|
|
- Reference images help maintain consistency across scene generations
|
|
|
|
## Common Formats
|
|
|
|
| Format | Aspect Ratio | Recommended Size | Crop Target |
|
|
|--------|-------------|-----------------|-------------|
|
|
| OG / Social Share | 16:9 | 2K | 1200x630 via sips |
|
|
| Twitter Card | 16:9 | 2K | 1200x628 via sips |
|
|
| Hero Banner | 16:9 | 4K | Full width |
|
|
| Profile Picture | 1:1 | 1K | 512x512 or 1024x1024 |
|
|
| Story / Reel | 9:16 | 2K | 1080x1920 |
|
|
| Team Lineup | 21:9 | 2K | Full width |
|
|
|
|
### Social Share Image Workflow
|
|
|
|
**All 4 steps are required. Do not skip optimization.**
|
|
|
|
1. **Generate** at 16:9 with center-weighted prompt at `--size 2K` (retina-ready):
|
|
```bash
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "CENTER all important elements, no content near edges. [your prompt]" --aspect 16:9 --size 2K --output social-share.png
|
|
```
|
|
2. **Crop** to exact platform dimensions:
|
|
```bash
|
|
sips -z 630 1200 -c 630 1200 social-share.png --out social-share-og.png # OG
|
|
sips -z 628 1200 -c 628 1200 social-share.png --out social-share-tw.png # Twitter
|
|
```
|
|
3. **Optimize** - convert to JPEG at 85% quality (social images never need transparency):
|
|
```bash
|
|
sips -s format jpeg -s formatOptions 85 social-share-og.png --out social-share-og.jpg
|
|
```
|
|
4. **Verify** dimensions and file size:
|
|
```bash
|
|
sips -g pixelWidth -g pixelHeight social-share-og.jpg
|
|
ls -la social-share-og.jpg # Target: <500KB
|
|
```
|
|
|
|
**Why optimize?** Gemini outputs PNG (~1-2MB). JPEG at 85% reduces to ~200-400KB with no visible quality loss. Social platforms re-compress uploads, so starting with a well-optimized JPEG prevents double-compression artifacts.
|
|
|
|
## Available Styles
|
|
|
|
100+ styles across 9 categories: traditional art, digital, illustration, photography, design/UI, retro, techniques, decorative, and creative/material-based.
|
|
|
|
When a style has a tile reference image (`assets/tiles/<id>.png`), it is automatically sent as a visual reference to Gemini alongside the prompt hints — this produces much better style adherence.
|
|
|
|
### Suggest Styles to Users
|
|
|
|
When generating images, proactively suggest relevant styles:
|
|
- For landscapes: `impr`, `roma`, `wtrl`, `cine`
|
|
- For portraits: `barq`, `prer`, `anim`, `fnoi`
|
|
- For UI/web: `brut`, `nbrt`, `glas`, `flat`
|
|
- For retro/vintage: `y2k`, `frug`, `psyc`, `koda`
|
|
- For whimsical/fun: `ghbl`, `kawa`, `chld`, `brit`
|
|
- For dramatic: `cybr`, `nnoi`, `surr`, `expr`
|
|
- For creative: `sand`, `undr`, `orig`, `clay`, `lego`
|
|
|
|
Browse all: `bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/scripts/list_styles.ts --table`
|
|
Search: `bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/browsing-styles/scripts/list_styles.ts --search "watercolor"`
|
|
|
|
## Models
|
|
|
|
### Gemini (default)
|
|
|
|
Uses `gemini-3-pro-image-preview` - **Nano Banana Pro**, Google's professional image generation model with thinking capabilities.
|
|
|
|
### Grok Imagine Image (`--model grok`)
|
|
|
|
Uses `xai/grok-imagine-image` via Replicate. Requires `REPLICATE_API_TOKEN` (or `REPLICATE_API_KEY`). Text-to-image only (no reference images or style tiles). This is a **last-resort fallback** — Gemini produces better results including likeness. Only use when:
|
|
- Content is blocked by Gemini's safety filters
|
|
- The user specifically requests it
|
|
|
|
```bash
|
|
# Grok image generation
|
|
bun run --cwd ${CLAUDE_PLUGIN_ROOT} ${CLAUDE_PLUGIN_ROOT}/skills/generate-image/scripts/generate.ts "A medieval girl standing on a futuristic hoverpod" --model grok --output hoverpod.jpg
|
|
```
|
|
|
|
> Last verified: March 2026. If a newer generation exists, STOP and suggest a PR to `b-open-io/gemskills`. See the ask-gemini skill's `references/gemini-api.md` for current models and Google's official `gemini-api-dev` skill for the canonical source.
|
|
|
|
## Reference Files
|
|
|
|
For detailed prompting strategies and techniques:
|
|
- **`references/prompt-guide.md`** - Comprehensive Gemini prompting guide with 7 strategies, example transformations, and best practices from Google's official documentation
|
|
- **ask-gemini skill's `references/gemini-api.md`** - Current Gemini models, SDK info, and dynamic documentation via llms.txt
|