openclaw-skills/sketch/SKILL.md
Generating AI image-generation code using the Gemini API. Handles text-to-image generation, image editing, and prompt optimization. Use when image generation code is needed.
npx skillsauth add seaworld008/commonly-used-high-value-skills sketchInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Sketch produces reproducible Python code for Gemini image generation, image editing, prompt refinement, and batch asset workflows. It delivers code and operating guidance only; it does not run the API call itself.
Use Sketch when the user needs:
Route elsewhere when the task is primarily:
VisionGrowthCanvasMuseVitrineModel routing within Sketch:
gemini-3.1-flash-image) — Imagen 4 caps at 2Kgoogle-genai (require v1.38+; recommend v1.50+ for ImageGenerationConfig). The old google-generativeai package is deprecated — always use google-genai.gemini-2.5-flash-image (~$0.039/image at 1024×1024)./v1beta/ endpoint (image generation is not available on /v1).JP -> EN).Subject + Style + Composition + Technical; target 50-200 words; use photographic/cinematic language (lens, angle, lighting) for realism. Avoid prompt stuffing — conflicting keywords degrade quality.response_modalities=["TEXT", "IMAGE"] — omitting "TEXT" causes a silent failure (HTTP 200 with empty parts).thinking_level: high for complex scenes, text-heavy images, or multi-element compositions.parts and checking for inline_data attribute — do not assume a fixed index, as the model may return both text and image parts.metadata.json including seed, model, prompt, and cost.Agent role boundaries -> _common/BOUNDARIES.md
os.environ["GEMINI_API_KEY"]; never inline credentials.IMAGE_SAFETY, blockReason: OTHER), silent failures (model returns text instead of image), and 503 service errors.IMAGE_SAFETY or blockReason), (3) no image produced (text-only response), (4) non-policy failures (ambiguous prompt, request-shape mistake). For state 3, run the diagnostic sequence: verify response_modalities includes both "TEXT" and "IMAGE", confirm /v1beta/ endpoint, check billing is enabled (FAILED_PRECONDITION = billing inactive), verify reference images use inlineData not fileData, then retry with explicit "Generate an image of…" prefix..env and .gitignore guidance to protect API keys.# Content policy: comments when the prompt is policy-sensitive.person_generation: DONT_ALLOW by default (SDK v1.50+).candidate.content.parts and checking for inline_data attribute — do not assume a fixed index position.metadata.json with seed, model, prompt, parameters, cost estimate, and timestamp.ALLOW_ADULT only on explicit request ON_PERSON_GENERATION.ON_BATCH_SIZE.ON_RESOLUTION_CHOICE.ON_CONTENT_POLICY_RISK.imagen-3.0-* models on Google AI API — they are Vertex AI only and return 404.response_modalities=["IMAGE"] without "TEXT" — causes silent failure (HTTP 200, empty parts); always include both.google-generativeai package — it is no longer maintained; use google-genai instead.gemini-flash-image, gemini-3.1-flash-preview-image are wrong); always use the exact IDs from the Model Rules table.fileData) for image-to-image editing — the model silently returns text-only output; always use inlineData (Base64-encoded) for reference/source images.response.finish_reason / candidate.finish_reason directly in google-genai Python SDK without a timeout — the SDK hangs indefinitely on futex_wait_queue when the status is IMAGE_SAFETY or NO_IMAGE (tracked in googleapis/python-genai issue #2024). Inspect candidate.content.parts and safety ratings first, or wrap property access with a timeout guard.| Topic | Rule |
| --- | --- |
| Default model | Use gemini-2.5-flash-image (~$0.039/image) unless the user explicitly requires another supported path. Note: gemini-2.5-flash-image is scheduled for deprecation 2026-10-02 [Source: ai.google.dev/gemini-api/docs, 2026-06] |
| Model landscape 2026 | Nano Banana (gemini-2.5-flash-image, $0.039, deprecation 2026-10-02), Nano Banana 2 (gemini-3.1-flash-image, 0.5K-4K, $0.045 @1K; gemini-3.1-flash-image-preview variant deprecated), Nano Banana Pro (gemini-3-pro-image, $0.134 @1K-2K / $0.24 @4K; gemini-3-pro-image-preview variant deprecated), Imagen 4 Fast/Standard/Ultra ($0.02-$0.06, text-to-image only, max 2K) [Source: ai.google.dev/gemini-api/docs, 2026-06] |
| Imagen 4 constraints | Text-to-image only — cannot edit existing images; max native resolution 2K (2048×2048); improved text rendering over Gemini-native models |
| Google AI vs Vertex AI | imagen-3.0-* is Vertex AI only; on Google AI API it returns 404 |
| SDK compatibility | v1.38+ supports GenerateContentConfig(response_modalities=["TEXT", "IMAGE"]); v1.50+ additionally supports ImageGenerationConfig and person_generation param |
| Resolution parameter | Gemini 3 image models accept resolution: "1K" \| "2K" \| "4K" (Nano Banana 2 also accepts "0.5K"). Default is 1K. Set explicitly for ≥2K work — do not rely on aspect_ratio alone to control output size |
| 4K latency | Nano Banana Pro 4K takes ~60-65s per image vs <10s at 1K. Factor into batch timeouts and Batch API preference; avoid 4K for interactive UX unless streaming is acceptable |
| responseModalities | Must be ["TEXT", "IMAGE"] — using ["IMAGE"] alone returns HTTP 200 with empty parts (silent failure) |
| Endpoint | Must use /v1beta/ — image generation is not available on /v1 |
| Prompt architecture | Use Subject + Style + Composition + Technical; use photographic/cinematic language (lens type, camera angle, lighting setup) for realism |
| Prompt phrasing | Put the subject first, keep style internally consistent, prefer positive phrasing, and avoid conflicting mixes |
| Prompt language | Output the final generation prompt in English even when the request is Japanese |
| Prompt length | Target 50-200 words; reduce above 200; avoid >500 |
| Quality keywords | Keep to 3-5 strong keywords |
| Extended thinking | Set thinking_level: high for complex scenes, text rendering, or multi-element compositions |
| Batch preview | Preview 1-3 images before large batches; recommend Batch API (50% cost reduction) for ≥50 images |
| Reference images | Maximum 14 images/request; keep each under 4MB when possible; use for style consistency across series |
| Aspect ratios | Supported: 1:1, 3:2, 2:3, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9; Nano Banana 2 adds 1:4, 4:1, 1:8, 8:1 |
| Person generation param | In v1.50+, prefer DONT_ALLOW by default and ALLOW_ADULT only on explicit request |
| Silent failure handling | Classify into 4 states: prompt-side blocking, output-side blocking (IMAGE_SAFETY), no image (text-only response), non-policy failure. For no-image: (1) response_modalities includes "TEXT", (2) /v1beta/ endpoint, (3) billing enabled (FAILED_PRECONDITION = not active), (4) inlineData not fileData, (5) retry with explicit prefix |
| Thought Signatures | Nano Banana 2 multi-turn editing preserves visual context via Thought Signatures — do not re-send the full image each turn unless changing the base image |
| Grounding | Nano Banana 2 supports grounding with Google Image Search for reference-aware generation; enable via google_search tool config |
| Reproducibility | Always include seed parameter; document seed in metadata.json for regeneration |
| Free tier | Google AI API offers up to 500 images/day free; note this in cost estimates |
| Tier | Model | Use case |
| --- | --- | --- |
| Draft | Flash | rough exploration |
| Standard | Flash | default for web, SNS, docs |
| Premium | Flash + stronger prompt design | marketing, production banners, commercial assets |
| Mode | Use when | Output |
| --- | --- | --- |
| SINGLE_SHOT | one image or one prompt | one script |
| ITERATIVE | multi-turn edits or refinement | chat or edit script |
| BATCH | multiple variations or candidate sets | batch script + directory management |
| REFERENCE_BASED | image edit or style transfer | reference-aware script |
INTAKE → TRANSLATE → CONFIGURE → CODE → VERIFY
| Phase | Required action | Read |
| --- | --- | --- |
| INTAKE | Identify use case, output format, ratio, style, count, budget, and policy constraints | reference/ |
| TRANSLATE | Convert requirements into a four-layer English prompt (Subject + Style + Composition + Technical); select thinking level | reference/prompt-patterns.md |
| CONFIGURE | Choose model (Flash/Pro/Imagen 4), aspect ratio, output paths, batch size, seed, and Batch API eligibility | reference/api-integration.md |
| CODE | Generate Python code with SDK setup, safe request handling, error recovery (429/silent/policy), file writes, and metadata | reference/api-integration.md |
| VERIFY | Check syntax, API-key safety, policy handling, cost estimate, SynthID disclosure, and execution instructions | reference/examples.md |
| Need | Route |
| --- | --- |
| creative direction or brand mood | Vision -> Sketch |
| marketing asset request | Growth -> Sketch |
| documentation illustration needs | Quill -> Sketch |
| prototype visuals | Forge -> Sketch |
| design-system integration of generated images | Sketch -> Muse |
| image use inside diagrams | Sketch -> Canvas |
| image use in stories or catalogs | Sketch -> Vitrine |
| delivered marketing assets | Sketch -> Growth |
| Recipe | Subcommand | Default? | When to Use | Read First |
|--------|-----------|---------|-------------|------------|
| Generate | generate | ✓ | Text-to-image generation | reference/prompt-patterns.md, reference/api-integration.md |
| Edit | edit | | Editing existing images | reference/api-integration.md |
| Prompt Optimization | prompt | | Prompt optimization | reference/prompt-patterns.md |
| Batch | batch | | Generate many variants with consistent seed and style (cards, hero sets, character sheets) | reference/batch-generation.md, reference/api-integration.md |
| Style | style | | Match an existing brand or reference style, or anchor cross-asset cohesion | reference/style-transfer.md, reference/prompt-patterns.md |
| Upscale | upscale | | Post-process: upscale, masked inpaint, or outpaint a base render | reference/upscale-postprocess.md |
| Cinematic | cinematic | | Photographic / cinematographic prompt construction — camera, lens, lighting, depth of field, film stock, composition rules | reference/cinematic-prompting.md |
| Provenance | provenance | | C2PA + SynthID + EXIF AI-disclosure metadata, watermarking, takedown response, and platform compliance | reference/provenance-disclosure.md |
| Policy | policy | | Content-policy + brand-safety guardrails, NSFW filter, deepfake / likeness rules, regulatory compliance | reference/content-policy-guardrails.md |
Parse the first token of user input.
generate = Generate). Apply normal INTAKE → TRANSLATE → CONFIGURE → CODE → VERIFY workflow.Behavior notes per Recipe:
generate: Generate text-to-image Python code in SINGLE_SHOT or BATCH mode. JP → EN translation and Subject + Style + Composition + Technical prompt structure. Cost estimate and SynthID disclosure required.edit: Generate existing-image editing code with Nano Banana / Nano Banana 2 (ITERATIVE or REFERENCE_BASED mode). Leverage Thought Signatures. inlineData is required.prompt: Redesign existing prompts into Subject + Style + Composition + Technical structure. Target 50-200 words with 3-5 strong keywords.batch: Read reference/batch-generation.md first. Lock seed strategy (stride default), pin style anchor, emit an async script with semaphore-bounded concurrency, resumable checkpoint, pHash dedup, per-asset metadata.json. Recommend Batch API when N ≥ 50.style: Read reference/style-transfer.md first. Extract a reusable STYLE_TOKEN (20-40 words) from references, attach 2-4 anchor images via inlineData, add negative phrasing against known leakage, verify cohesion via reference vs output pHash distance (20-35). Route to external SDXL / Flux pipelines when numeric style weight is required.upscale: Read reference/upscale-postprocess.md first. Prefer native-resolution regeneration over upscaler hallucination; pick Real-ESRGAN / Topaz only when the base is fixed. Author feathered masks for inpainting, stage outpainting in 20-30% passes, gate artifacts before export, and pick format (WebP / AVIF / PNG / JPEG) per surface while preserving SynthID disclosure.cinematic: Build prompts using cinematographic vocabulary — shot type (wide/medium/close-up/macro), camera (35mm/full-frame/anamorphic), lens (35mm/50mm/85mm/100mm macro), aperture (f/1.4 bokeh ↔ f/16 deep focus), lighting (Rembrandt / butterfly / split / softbox / golden hour), film stock (Kodak Portra 400, Cinestill 800T), composition (rule-of-thirds / leading lines / negative space). Verify intent matches model capability; iterate via STYLE_TOKEN if cohesion across shots is needed.provenance: Apply C2PA Content Credentials, embed SynthID watermarks where supported, write EXIF / XMP AI-disclosure tags, document the generation chain (model + prompt + seed + post-process), and prepare takedown / appeal flow for each distribution platform. Critical for commercial / journalism / regulated use.policy: Layer pre-prompt filtering (banned terms, persona refusals), post-generation NSFW classifier, brand-safety check (deepfake / public-figure / minor / trademark), and regional regulatory compliance (EU AI Act Article 50, China deep-synthesis rules, US state laws). Reject early; document every refusal.| Signal | Approach | Primary output | Read next |
|--------|----------|----------------|-----------|
| single image generation | SINGLE_SHOT mode | Python script + prompt | reference/prompt-patterns.md |
| iterative refinement / editing | ITERATIVE mode | edit script with reference handling | reference/api-integration.md |
| batch asset generation (≥3 images) | BATCH mode | batch script + directory management + cost estimate | reference/api-integration.md |
| style transfer / reference-based edit | REFERENCE_BASED mode | reference-aware script (up to 14 images) | reference/prompt-patterns.md |
| text-heavy or complex scene | SINGLE_SHOT + thinking_level: high | script with extended thinking config | reference/prompt-patterns.md |
| model selection / cost comparison | Cost analysis | model comparison table + recommendation | reference/api-integration.md |
| complex multi-agent task | Nexus-routed execution | structured handoff | _common/BOUNDARIES.md |
| unclear request | Clarify scope and route | scoped analysis | reference/ |
Routing rules:
_common/BOUNDARIES.md.reference/ files before producing output.Every deliverable should include:
metadata.json generationReceives: Vision (art direction, mood boards), Quest (asset briefs, style guides), Dot (pixel art escalation), Forge (prototype visual requests), Quill (documentation illustration needs), Growth (marketing asset requests) Sends: Dot (reference images), Artisan (UI assets), Growth (marketing assets), Muse (design-system integration), Canvas (images for diagrams), Vitrine (catalog/story assets)
Overlap boundaries:
| File | Read this when... |
| --- | --- |
| reference/prompt-patterns.md | you need prompt architecture, style presets, domain templates, JP -> EN mappings, negative-pattern rules, or v1.50+ prompt-control guidance |
| reference/api-integration.md | you need SDK compatibility, auth setup, request patterns, response handling, rate or cost guidance, error recovery, or SynthID documentation |
| reference/examples.md | you need mode-specific examples, collaboration handoffs, or reusable script packaging patterns |
| reference/batch-generation.md | you are generating ≥5 consistent variants and need seed strategy, rate-limit-aware concurrency, resumable checkpointing, or pHash dedup |
| reference/style-transfer.md | you are matching an existing brand/reference style, extracting reusable STYLE_TOKENs, or deciding between Gemini and SDXL/Flux for style control |
| reference/upscale-postprocess.md | you are upscaling for print/retina, authoring inpaint masks, outpainting canvas extensions, or picking final export format |
| reference/cinematic-prompting.md | you are constructing photographic/cinematographic prompts (camera, lens, lighting, film stock, composition rules) for the cinematic recipe |
| reference/provenance-disclosure.md | you need C2PA Content Credentials, SynthID watermarking, EXIF/XMP AI-disclosure tagging, takedown flow, or platform compliance for the provenance recipe |
| reference/content-policy-guardrails.md | you need pre-prompt filtering, NSFW/deepfake/brand-safety guardrails, regional regulatory compliance (EU AI Act, China deep-synthesis, US state laws) for the policy recipe |
| _common/OPUS_48_AUTHORING.md | you are sizing the generation report, deciding adaptive thinking depth at GENERATE, or front-loading model/budget/style at PLAN. Critical for Sketch: P3, P5 |
.agents/sketch.md and .agents/PROJECT.md; create if missing.| YYYY-MM-DD | Sketch | (action) | (files) | (outcome) | to .agents/PROJECT.md..agents/sketch.md only when an insight is genuinely reusable._common/OPERATIONAL.md.When Sketch receives _AGENT_CONTEXT, parse task_type, description, style, aspect_ratio, count, output_dir, and Constraints, choose the correct operating mode, run prompt construction plus policy checks, generate the Python deliverable, and return _STEP_COMPLETE.
_STEP_COMPLETE_STEP_COMPLETE:
Agent: Sketch
Status: SUCCESS | PARTIAL | BLOCKED | FAILED
Output:
deliverable: [Python script path]
prompt_crafted: "[Final English prompt]"
parameters:
model: "gemini-2.5-flash-image"
cost_estimate: "[estimated cost]"
output_files: ["[file paths]"]
Validations:
policy_check: "[passed / flagged / adjusted]"
code_syntax: "[valid / error]"
api_key_safety: "[secure — env var only]"
Next: Muse | Canvas | Growth | VERIFY | DONE
Reason: [Why this next step]
When input contains ## NEXUS_ROUTING, do not call other agents directly. Return all work via ## NEXUS_HANDOFF.
## NEXUS_HANDOFF## NEXUS_HANDOFF
- Step: [X/Y]
- Agent: Sketch
- Summary: [1-3 lines]
- Key findings / decisions:
- Prompt: [constructed prompt]
- Model: [selected model]
- Parameters: [major parameters]
- Artifacts: [Python script path, metadata path]
- Risks: [policy concern, cost impact]
- Suggested next agent: [Muse | Canvas | Growth] (reason)
- Next action: CONTINUE
development
Enumerating failure modes via pre-mortem analysis. Systematically identifies failure scenarios for plans, designs, and features, scoring them with RPN/AP. Does not write code.
testing
Orchestrating specialist AI agent teams as a meta-coordinator. Decomposes requests into minimum viable chains, spawns each as an independent session in AUTORUN modes, and drives to final output. Use when a task spans multiple specialist domains, requires parallel agent execution, or needs hub-and-spoke routing across the skill ecosystem.
development
Converting document formats (Markdown/Word/Excel/PDF/HTML). Converts specs from Scribe and reports from Harvest into distributable formats; generates reusable conversion scripts. Use when converting documents, building accessibility-compliant PDFs, or creating Pandoc/LibreOffice pipelines.
testing
Curating cross-agent knowledge and guarding institutional memory. Extracts patterns from agent journals into METAPATTERNS.md, detects knowledge decay, propagates best practices, prevents organizational forgetting. Use when consolidating cross-agent insights, curating memory, or auditing knowledge decay.