3.9 KiB
3.9 KiB
AI Artist Validation Workflow
Agent instructions for mandatory validation interview before image generation.
Step 1: Parse Arguments
Extract from user input:
- concept: The subject/description (required)
- --mode: search (default), creative, or wild
- --skip: If present, use defaults and skip to Step 4
Defaults for --skip mode: Style=Photorealistic, Mood=Professional, Colors=Auto, Aspect=16:9
Step 2: Interview User
Use AskUserQuestion with these 4 questions in a single call:
{"questions": [
{"question": "Visual style?", "header": "Style", "multiSelect": false, "options": [
{"label": "Photorealistic (Recommended)", "description": "Professional photography, 8K"},
{"label": "Cinematic", "description": "Film-like, dramatic lighting"},
{"label": "Illustration", "description": "Digital art, stylized"},
{"label": "Minimalist", "description": "Clean, white space"}
]},
{"question": "Mood?", "header": "Mood", "multiSelect": false, "options": [
{"label": "Professional", "description": "Corporate, trustworthy"},
{"label": "Energetic", "description": "Dynamic, bold"},
{"label": "Calm", "description": "Peaceful, serene"},
{"label": "Dramatic", "description": "High contrast, intense"}
]},
{"question": "Colors?", "header": "Colors", "multiSelect": false, "options": [
{"label": "Auto-select (Recommended)", "description": "AI chooses"},
{"label": "Warm tones", "description": "Oranges, reds"},
{"label": "Cool tones", "description": "Blues, greens"},
{"label": "High contrast", "description": "Blacks, neons"}
]},
{"question": "Aspect ratio?", "header": "Ratio", "multiSelect": false, "options": [
{"label": "16:9 (Recommended)", "description": "Widescreen"},
{"label": "1:1", "description": "Square"},
{"label": "9:16", "description": "Vertical"},
{"label": "4:3", "description": "Standard"}
]}
]}
Dynamic questions (ask separately if concept matches):
- "banner/poster/thumbnail" → Ask about text space
- "product/showcase" → Ask about background preference
Step 3: Build Prompt
Map answers to keywords:
| Style | Keywords |
|---|---|
| Photorealistic | photorealistic, professional photography, 8K, RAW |
| Cinematic | cinematic, film still, anamorphic, dramatic lighting |
| Illustration | digital illustration, artistic, stylized |
| Minimalist | minimalist, clean design, white space |
| Mood | Keywords |
|---|---|
| Professional | professional, clean, corporate, polished |
| Energetic | dynamic, bold, vibrant, high energy |
| Calm | serene, peaceful, soft, tranquil |
| Dramatic | dramatic, high contrast, intense, moody |
| Colors | Keywords |
|---|---|
| Auto-select | (none) |
| Warm tones | warm palette, golden tones, amber |
| Cool tones | cool palette, blue tones, teal |
| High contrast | high contrast, bold blacks, neon |
Template: [concept], [style], [mood], [colors]. Professional quality. NEVER add watermarks.
Step 4: Confirm & Generate
Show preview, then ask confirmation:
{"questions": [{"question": "Generate?", "header": "Confirm", "multiSelect": false, "options": [
{"label": "Yes, generate (Recommended)", "description": "Proceed"},
{"label": "Edit prompt", "description": "Modify first"},
{"label": "Start over", "description": "Re-answer"}
]}]}
If "Edit prompt": Ask user for edited text, use that instead. If "Start over": Return to Step 2.
Run generation:
cd .opencode/skills/ai-artist && .venv/bin/python3 scripts/generate.py "[concept]" \
-o ./generated-$(date +%Y%m%d-%H%M%S).png \
--mode [mode] \
-ar [ratio] \
-v
Error Handling
| Error | Action |
|---|---|
| API key missing | Tell user to set GEMINI_API_KEY |
| Model error | Suggest --model flash |
| No concept | Ask user for concept |
Output
[OK] Image generated: [path]
Style: [style] | Mood: [mood] | Aspect: [ratio]
Tip: Use --skip to bypass interview next time.