← Simplified for AICONTENT HISTORY

Update to Simplified for AI

Snapshot Nov 3, 2026 · 18:19 UTC · version 2.1.0

Collection source: downloaded plugin package. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.

WHAT CHANGED

Payment or plan references changed

Full description — Now says: Create images or broad prompt/reference-guided transformations with Simplified. Use for new photos, graphics, illustrations, posters, and compositions. For...

Observed in published text. Live prices and checkout terms have not been verified by this change.

Save Simplified for AI and check future changes in Following.

Up to 3 plugins free · no card required.

All fields and original values.

Full description

Before

Sep 30, 2026 · 22:54 UTC

Generate AI images with Simplified — text-to-image, image editing, and reference-guided generation across Flux, Google (Gemini/Imagen), OpenAI GPT Image, Ideogram, Stable Diffusion, Qwen and Seedream. Use when the user asks to create, ge...

After

Nov 3, 2026 · 18:19 UTC

Create images or broad prompt/reference-guided transformations with Simplified. Use for new photos, graphics, illustrations, posters, and compositions. For background removal/replacement, restoration, upscaling, masked edits, or format c...

Skill instructions

Before

Sep 30, 2026 · 22:54 UTC

>- Generate AI images with Simplified — text-to-image, image editing, and reference-guided generation across Flux, Google (Gemini/Imagen), OpenAI GPT Image, Ideogram, Stable Diffusion, Qwen and Seedream. Use when the user asks to ...

After

Nov 3, 2026 · 18:19 UTC

Create images or broad prompt/reference-guided transformations with Simplified. Use for new photos, graphics, illustrations, posters, and compositions. For background removal/replacement, restoration, upscaling, masked edits, or format c...

Compare saved observations

Download comparison JSON

SKILL.md text changes

− removed · + added

--- before
+++ after
@@ -1,218 +1,65 @@
 ---
 name: generate-image
-description: >-
-  Generate AI images with Simplified — text-to-image, image editing, and
-  reference-guided generation across Flux, Google (Gemini/Imagen), OpenAI GPT
-  Image, Ideogram, Stable Diffusion, Qwen and Seedream. Use when the user asks to
-  create, generate, make, draw, or design an image, photo, picture, graphic,
-  logo, poster, banner, icon, or illustration from a description.
+description: Create images or broad prompt/reference-guided transformations with Simplified. Use for new photos, graphics, illustrations, posters, and compositions. For background removal/replacement, restoration, upscaling, masked edits, or format conversion, use edit-image.
 ---
 
-# Generate AI Image
+# Generate Image
 
-Generate an image from a text prompt using Simplified, across many leading AI
-providers, and return a viewable image URL (plus an asset id you can reuse).
+For background removal/replacement, restoration, upscaling, masked edits, or format conversion, use `edit-image`. Continue here for prompt/reference-guided generation.
 
-## What it can do
+Create or edit an image with Simplified and retain an asset ID when the result will be reused. Use the current generation tool schema as the request contract; model catalogs describe availability and limits, not a reason to substitute provider-specific field names.
 
-- **Text-to-image** (`capability: "prompt"`) — make an image from a description.
-- **Image editing / image-to-image** (`capability: "reference_image"`) — transform
-  or edit using one reference image.
-- **Multi-reference composition** (`capability: "multiple_images"`) — guide with
-  several reference images (supported on some models).
-
-Good for: product shots, hero/banner images, social graphics, illustrations,
-3D-style renders, icons/logo concepts, photoreal scenes, and **text rendered inside
-the image** (posters, quote cards, ad headlines).
-
-## How to use it
-
-1. **Discover** — call `api_getModelFields(type: "image")` to get the current list of
-   models, capabilities, and credit costs. Filter out models that cannot satisfy the
-   requested capability; don't choose on model name alone.
-2. **Choose the model** — use [Model selection](#model-selection). For the selected
-   model, call `api_getModelFields(type: "image", model_id, capability)` and use its
-   exact `parameters` schema. This is the source of truth; don't guess model ids,
-   capabilities, field names, or costs.
-3. **Choose storage** — `transient` for a one-off, `asset` to reuse the image (e.g.
-   post it via the `simplified-social` skill).
-4. **Explain the choice when it matters** — before a costly or ambiguous request,
-   name the selected model, why it fits, and the discovered credit cost. If the user
-   explicitly chose a model, honor it when it supports the requested capability.
-5. **Generate** — call `api_generateImage` with `parameters` matching the discovered
-   schema. This spends credits.
-6. **Present the result** — show the returned URL as a link, never embedded (see
-   [Presenting the result](#presenting-the-result)).
-
-For an ordinary prompt-only request, use the quality-first default below after
-confirming it is still available. Always inspect live fields for reference-image,
-multi-image, exact-size, quality, or resolution requests.
-
-## The request
-
-### The tools
-
-- **`api_getModelFields`** — discover available models and the per-(model, capability)
-  field schema. Read-only, spends **no credits**. Call it first.
-- **`api_generateImage`** — **consumes paid AI credits**.
-
-### Fields
-
-Top-level fields for `api_generateImage`:
-
-- `model` — a model id from `api_getModelFields` (e.g. `google.gemini-3.1-flash-image-preview`).
-- `capability` — `prompt` | `reference_image` | `multiple_images`.
-- `storage` — see [Storage](#storage) (default `transient`).
-- `parameters` — a **required nested object**; never flatten its fields to the top
-  level, and put the prompt text in `parameters.prompt` (not in `capability`).
-
-The **exact keys inside `parameters` vary by model** — get them from
-`api_getModelFields(type: "image", model_id, capability)`, don't assume. They differ
-in real ways: most models take `aspect_ratio`, but OpenAI GPT Image uses `size` +
-`quality` + `count`, Gemini adds `image_size`, Flux 2 uses `resolution`, and the
-reference-image field is variously named `input_image`, `image_prompt`,
-`reference_images`, `source_image`, or `style_reference_images`.
-
-### Resolving Simplified asset references
-
-Treat a Simplified `asset_id` as the canonical reference, but follow the live model
-schema at the generation boundary. When a model field is a URL or URL list (for
-example Gemini `reference_images`):
-
-1. Call `api_getAsset` with the permanent asset UUID.
-2. Require `status: 4` (`DONE`) and the expected `asset_type` before generating.
-3. Pass the current `file_url` returned by `api_getAsset` into the model-specific
-   reference field. If the URL is signed, preserve its complete query string and use
-   it before expiry.
-4. Do not trust a cached URL copied from a brand-kit record when an `asset_id` is
-   available. Brand records can contain stale or malformed derived URLs; resolve the
-   ID immediately before generation instead.
+## Workflow
 
-In short: **IDs at rest, URLs at the model boundary, IDs downstream.** Do not pass a
-client-local path to the hosted connector.
+1. Resolve workspace/teamspace scope when needed using `simplified-workspace`. Carry its `space_id` into related calls.
+2. Resolve existing references with `manage-assets`: search names/tags with `api_listAssets` if available, or use supplied IDs/URLs. Check asset readiness with `api_getAsset` before generating.
+3. Select a compatible model from `api_listImageModels`, or `api_getModelFields(type: "image")` if that is the discovery tool exposed in this client. Inspect `api_getImageModelFields` or the available model-fields tool for limits/options when the request requires a particular resolution, quality, reference count, or provider. Honor explicit model choices when supported. Model IDs and credit costs can change; do not guess them.
+4. Build the nested request below. Use `storage: "asset"` for reusable outputs; use `transient` only for an explicitly temporary result. The current schema recommends/defaults to asset storage; pass the choice explicitly.
+5. Call `api_generateImage` when the user requests generation. Generation spends credits: clarify once when cost, quantity, or intent is ambiguous. Do not add a confirmation when the user already authorized that generation.
+6. Wait for the tool's response, inspect its actual status, and report the result. Current apikit waits for completion; do not start a second job or manually poll while the call is still active.
 
-### Storage
+## Current request contract
 
-| `storage` | Behavior |
+```json
+{
+  "model": "<model ID returned by discovery>",
+  "storage": "asset",
+  "parameters": {
+    "prompt": "A studio product photo with space for a headline",
+    "aspect_ratio": "4:5",
+    "count": 1
+  }
+}
+```
+
+This is a template: substitute a discovered model ID before calling it. `model`, `storage`, and `parameters` are top-level. `prompt`, `aspect_ratio`, `count`, and `reference_images` belong inside `parameters`.
+
+For editing, add `parameters.reference_images: ["<ready asset UUID>"]`. For composition, supply several references in that array; supported counts depend on the model. Prefer workspace asset UUIDs. The image tool also accepts absolute HTTP(S) image URLs; preserve the full signed query string if using one. Local paths, filenames, and another workspace's UUIDs are invalid.
+
+`capability` is optional: no references selects `prompt`, one selects `reference_image`, and several select `multiple_images`. Several references compose one output; use `count` for several generated outputs. If setting a capability explicitly, confirm the model supports it.
+
+Use the normalized public field `reference_images` for every model. Do not replace it with provider fields such as `input_image` or `source_image`, even if a catalog describes internal provider fields. Add optional model-specific controls only when the generation schema/live contract accepts them.
+
+## Choose for the outcome
+
+For ordinary social graphics, select a currently available general model; for dense text/layout or higher resolution, inspect compatible models and limits. For continuity/editing, filter by reference support. When the user specifies a provider, use that family's currently recommended compatible ID. For a budget-sensitive request, inspect available credit metadata and generate only the requested count. Treat credit rates as estimates unless the tool explicitly guarantees the charge; size, quality, and count can affect usage.
+
+## Storage and results
+
+| Mode | Use |
 |---|---|
-| `transient` | **Default.** Temporary URL, not saved, expires. Best for one-off images. |
-| `asset` | Persistent — no expiry, returns an `asset_id`. Use when you want to **reuse** the image, e.g. attach it to a post via the `simplified-social` skill (pass the `asset_id` in `media`). |
-| `default` | Saved to your AiImageArt gallery. |
+| `asset` | Save in the Asset Library and retain a reusable UUID |
+| `transient` | Temporary output URL without a permanent asset ID |
+| `default` | Save in the image gallery; do not assume this supplies an Asset Library UUID |
 
-### Examples
+Read the returned envelope rather than assuming all clients return identical wrappers. Common successful image results are in `detail.result`; entries can be URL strings (transient) or objects containing `asset_id` and `url` (asset). Keep every returned output when generating multiple images.
 
-**Text-to-image (default, transient):**
-```json
-{ "model": "google.gemini-3.1-flash-image-preview", "capability": "prompt", "storage": "transient",
-  "parameters": { "prompt": "A white ceramic coffee cup on a clean white background", "aspect_ratio": "1:1" } }
-```
+Present the result using the client’s supported preview or a usable link and include the permanent `asset_id` when present. Signed file URLs may expire even for saved assets. Refresh them with `api_getAsset`. If the user later wants to reuse a transient image, import its accessible URL with `api_createAsset` instead of generating again.
 
-**Keep it to reuse / post to social (asset):**
-```json
-{ "model": "google.gemini-3.1-flash-image-preview", "capability": "prompt", "storage": "asset",
-  "parameters": { "prompt": "product hero shot of sneakers", "aspect_ratio": "4:5" } }
-```
+For social drafts, hand off actual IDs to `simplified-social.media`; generation is not permission to publish.
 
-**Edit / reference-guided** — the reference field name is model-specific; take it from
-`api_getModelFields` (here `input_image` for a Flux Kontext model, not a guessed name):
-```json
-{ "model": "flux.flux-kontext-pro", "capability": "reference_image", "storage": "asset",
-  "parameters": { "prompt": "put this logo on a t-shirt", "input_image": "<asset_uuid_or_https_url>" } }
-```
+## Errors and incomplete jobs
 
-## Model selection
+An accepted request is not proof of a finished image. On timeout/pending status, retain the returned job identifiers and use only the continuation operation the response/tool schema specifies. Never blindly repeat a paid generation. Report provider errors and use the supported-value list for a targeted correction. A 429 may indicate quota or rate limits: report its actual message rather than assuming credits are always exhausted.
 
-Choose for the requested outcome, not provider popularity. These routes are maintained
-defaults, but model availability, capabilities, parameters, and credits can change;
-`api_getModelFields(type: "image")` remains authoritative.
-
-| User need | Preferred model | Why / tradeoff |
-|---|---|---|
-| Normal social image, product shot, illustration, character continuity, or general edit | `google.gemini-3.1-flash-image-preview` | **Quality-first default.** Strong all-around prompt following and reference fidelity. Do not interpret “Flash” as the cheapest option. |
-| Complex professional design, dense typography/layout, menu, invitation, high-fidelity product mockup, factual visualization, or explicit 4K | `google.gemini-3-pro-image-preview` | Premium quality and instruction handling; slower and typically costs more. Use only when the request benefits from it. |
-| Budget-sensitive generation or explicit GPT Image request | `openai.imgen-2` | The catalog's `credits_per_image` is a **baseline**, not the final charge. Cost varies with `size`, `quality`, and `count`. Use the live API field `quality: "auto"` (the operational “effort auto” setting) unless the user requests a different quality. It uses `size` rather than `aspect_ratio`. |
-| Short headline or typography-first poster/banner | `ideogram.ideogram-v3-turbo` | Specialized text rendering. Prefer Gemini Pro when the design also requires a dense or complex professional layout. |
-| Targeted edit with a single source image | `google.gemini-3.1-flash-image-preview`; `flux.flux-kontext-pro` when explicitly requested or better suited by live metadata | Default to Gemini for fidelity. Flux Kontext is a specialized alternative; inspect its `input_image` contract first. |
-| Many reference images or exact reference limits | Best compatible model returned live | Filter by `multiple_images` and the discovered reference limit. Never assume every model accepts the same number or field name. |
-| User names Flux, Seedream, Qwen, Stable Diffusion, or another available model | The requested model, if compatible | Respect an explicit preference. Otherwise do not automatically route to an unvalidated specialist merely because it is available or cheaper. |
-
-### Routing rules
-
-1. Infer the hard constraints: capability, reference count, aspect ratio/size,
-   resolution, text/layout complexity, budget, and any explicit provider choice.
-2. Filter the live catalog by those constraints.
-3. Use Gemini 3.1 Flash when no stronger constraint applies. Upgrade to Gemini 3 Pro
-   only for the professional-design cases above. Consider GPT Image 2 when minimizing
-   credits is explicit or as the first fallback, but state that its live catalog rate
-   is only a baseline and the final charge varies with `size`, `quality`, and `count`.
-   Default to `size: "auto"`, `quality: "auto"`, and `count: 1` unless the request
-   requires different values.
-4. For a typography-first graphic, choose Ideogram Turbo; for dense layout or 4K,
-   choose Gemini Pro instead.
-5. Never silently change models after an error. Report the failure and proposed
-   fallback with its live credit cost, then regenerate only when the user's existing
-   intent clearly authorizes the additional spend.
-
-When a request is ambiguous and the choice materially changes cost or output, offer
-the most relevant two choices, leading with the recommended model. Do not dump the
-entire catalog on the user.
-
-## Response
-
-The response shape depends on `storage`:
-
-- **`transient` (default)** — `result` is a list of **URL strings**:
-  ```json
-  { "status": "SUCCESS", "detail": { "result": ["https://replicate.delivery/…/out-0.webp"], "transient": true } }
-  ```
-  Read `detail.result[0]` (a URL string). No `asset_id` — the URL is temporary.
-
-- **`asset`** — `result` is a list of **objects** with a reusable id:
-  ```json
-  { "status": "SUCCESS", "detail": { "result": [{ "asset_id": "<uuid>", "url": "https://…/image.webp?Expires=…" }], "transient": false, "storage": "asset" } }
-  ```
-  Read `detail.result[0].url` (the image; **signed URL — expires**) and
-  `detail.result[0].asset_id` (permanent — hand off to `simplified-social`'s `media`).
-
-Output format varies by model and provider. Inspect the returned asset or response
-metadata instead of assuming WebP; for example, Gemini may return JPEG.
-
-## Presenting the result
-
-**Never embed the returned image URL with Markdown image syntax** (`![](url)`), and
-never do anything that makes the client fetch/render the image inline. Always present
-the result as a **plain URL or a Markdown link** the user can click:
-
-- ✅ `Here's your image: https://…/out-0.webp`
-- ✅ `[View generated image](https://…/out-0.webp)`
-- ❌ `![generated image](https://…/out-0.webp)`
-
-Reasons: these URLs are signed and **expire**, inline rendering fails or shows a
-broken image, and clients like Codex otherwise try to display the asset instead of
-handing the user a usable link — poor UX. When `storage:"asset"`, also surface the
-permanent `asset_id` (as text) so it can be reused with `simplified-social`.
-
-## Gotchas
-
-- **Discover before generating.** Call `api_getModelFields` to confirm the model id
-  and `parameters` schema — it eliminates 400 errors on invalid/missing keys and
-  prevents routing from stale model or credit assumptions.
-- **Resolve asset-backed references before generating.** Use `api_getAsset`, require
-  `status: 4`, and pass its current `file_url` when the live model field expects a
-  URL. Keep the source `asset_id` for future runs.
-- **Generation spends credits.** If the request is ambiguous, restate what you'll
-  generate and confirm once. If it's explicit, proceed.
-- **Do not overstate GPT Image 2 pricing.** Treat `credits_per_image` as baseline
-  metadata. Final usage varies with `size`, `quality`, and `count`. The live API calls
-  the effort control `quality`; use `quality: "auto"` for the usual “effort auto”
-  behavior and never describe the baseline as the guaranteed charge.
-- `429` = AI credits exhausted; tell the user plainly and don't retry.
-- On error, report it; don't silently retry.
-
-## Example prompts to try
-
-- "A minimalist product photo of a white ceramic coffee cup on a clean white background, soft studio lighting"
-- "A vibrant 3D render of a friendly robot mascot, pastel colors, studio lighting, 1:1"
-- "A cinematic 16:9 landscape of snowy mountains at golden hour"
-- "A flat vector app icon of a paper plane, rounded corners, blue gradient"
-- "A bold quote card that says 'Ship it' in modern type" (use `ideogram.ideogram-v3-turbo` for crisp text)
+Examples users can ask: “Make a vertical product photo and save it”; “Find my uploaded logo and use it in a poster”; “Edit this asset to use a blue background”; “Create three variations for review.”
Full technical diff · 2 changed fields

changed /description

BEFORE
"Generate AI images with Simplified — text-to-image, image editing, and reference-guided generation across Flux, Google (Gemini/Imagen), OpenAI GPT Image, Ideogram, Stable Diffusion, Qwen and Seedream. Use when the user asks to create, generate, make, draw, or design an image, photo, picture, graphic, logo, poster, banner, icon, or illustration from a description."
AFTER
"Create images or broad prompt/reference-guided transformations with Simplified. Use for new photos, graphics, illustrations, posters, and compositions. For background removal/replacement, restoration, upscaling, masked edits, or format conversion, use edit-image."

changed /skill_md_contents

BEFORE
"---\nname: generate-image\ndescription: >-\n  Generate AI images with Simplified — text-to-image, image editing, and\n  reference-guided generation across Flux, Google (Gemini/Imagen), OpenAI GPT\n  Image, Ideogram, Stable Diffusion, Qwen and Seedream. Use when the user asks to\n  create, generate, make, draw, or design an image, photo, picture, graphic,\n  logo, poster, banner, icon, or illustration from a description.\n---\n\n# Generate AI Image\n\nGenerate an image from a text prompt using Simplified, across many leading AI\nproviders, and return a viewable image URL (plus an asset id you can reuse).\n\n## What it can do\n\n- **Text-to-image** (`capability: \"prompt\"`) — make an image from a description.\n- **Image editing / image-to-image** (`capability: \"reference_image\"`) — transform\n  or edit using one reference image.\n- **Multi-reference composition** (`capability: \"multiple_images\"`) — guide with\n  several reference images (supported on some models).\n\nGood for: product shots, hero/banner images, social graphics, illustrations,\n3D-style renders, icons/logo concepts, photoreal scenes, and **text rendered inside\nthe image** (posters, quote cards, ad headlines).\n\n## How to use it\n\n1. **Discover** — call `api_getModelFields(type: \"image\")` to get the current list of\n   models, capabilities, and credit costs. Filter out models that cannot satisfy the\n   requested capability; don't choose on model name alone.\n2. **Choose the model** — use [Model selection](#model-selection). For the selected\n   model, call `api_getModelFields(type: \"image\", model_id, capability)` and use its\n   exact `parameters` schema. This is the source of truth; don't guess model ids,\n   capabilities, field names, or costs.\n3. **Choose storage** — `transient` for a one-off, `asset` to reuse the image (e.g.\n   post it via the `simplified-social` skill).\n4. **Explain the choice when it matters** — before a costly or ambiguous request,\n   name the selected model, why it fits, and the discovered credit cost. If the user\n   explicitly chose a model, honor it when it supports the requested capability.\n5. **Generate** — call `api_generateImage` with `parameters` matching the discovered\n   schema. This spends credits.\n6. **Present the result** — show the returned URL as a link, never embedded (see\n   [Presenting the result](#presenting-the-result)).\n\nFor an ordinary prompt-only request, use the quality-first default below after\nconfirming it is still available. Always inspect live fields for reference-image,\nmulti-image, exact-size, quality, or resolution requests.\n\n## The request\n\n### The tools\n\n- **`api_getModelFields`** — discover available models and the per-(model, capability)\n  field schema. Read-only, spends **no credits**. Call it first.\n- **`api_generateImage`** — **consumes paid AI credits**.\n\n### Fields\n\nTop-level fields for `api_generateImage`:\n\n- `model` — a model id from `api_getModelFields` (e.g. `google.gemini-3.1-flash-image-preview`).\n- `capability` — `prompt` | `reference_image` | `multiple_images`.\n- `storage` — see [Storage](#storage) (default `transient`).\n- `parameters` — a **required nested object**; never flatten its fields to the top\n  level, and put the prompt text in `parameters.prompt` (not in `capability`).\n\nThe **exact keys inside `parameters` vary by model** — get them from\n`api_getModelFields(type: \"image\", model_id, capability)`, don't assume. They differ\nin real ways: most models take `aspect_ratio`, but OpenAI GPT Image uses `size` +\n`quality` + `count`, Gemini adds `image_size`, Flux 2 uses `resolution`, and the\nreference-image field is variously named `input_image`, `image_prompt`,\n`reference_images`, `source_image`, or `style_reference_images`.\n\n### Resolving Simplified asset references\n\nTreat a Simplified `asset_id` as the canonical reference, but follow the live model\nschema at the generation boundary. When a model field is a URL or URL list (for\nexample Gemini `reference_images`):\n\n1. Call `api_getAsset` with the permanent asset UUID.\n2. Require `status: 4` (`DONE`) and the expected `asset_type` before generating.\n3. Pass the current `file_url` returned by `api_getAsset` into the model-specific\n   reference field. If the URL is signed, preserve its complete query string and use\n   it before expiry.\n4. Do not trust a cached URL copied from a brand-kit record when an `asset_id` is\n   available. Brand records can contain stale or malformed derived URLs; resolve the\n   ID immediately before generation instead.\n\nIn short: **IDs at rest, URLs at the model boundary, IDs downstream.** Do not pass a\nclient-local path to the hosted connector.\n\n### Storage\n\n| `storage` | Behavior |\n|---|---|\n| `transient` | **Default.** Temporary URL, not saved, expires. Best for one-off images. |\n| `asset` | Persistent — no expiry, returns an `asset_id`. Use when you want to **reuse** the image, e.g. attach it to a post via the `simplified-social` skill (pass the `asset_id` in `media`). |\n| `default` | Saved to your AiImageArt gallery. |\n\n### Examples\n\n**Text-to-image (default, transient):**\n```json\n{ \"model\": \"google.gemini-3.1-flash-image-preview\", \"capability\": \"prompt\", \"storage\": \"transient\",\n  \"parameters\": { \"prompt\": \"A white ceramic coffee cup on a clean white background\", \"aspect_ratio\": \"1:1\" } }\n```\n\n**Keep it to reuse / post to social (asset):**\n```json\n{ \"model\": \"google.gemini-3.1-flash-image-preview\", \"capability\": \"prompt\", \"storage\": \"asset\",\n  \"parameters\": { \"prompt\": \"product hero shot of sneakers\", \"aspect_ratio\": \"4:5\" } }\n```\n\n**Edit / reference-guided** — the reference field name is model-specific; take it from\n`api_getModelFields` (here `input_image` for a Flux Kontext model, not a guessed name):\n```json\n{ \"model\": \"flux.flux-kontext-pro\", \"capability\": \"reference_image\", \"storage\": \"asset\",\n  \"parameters\": { \"prompt\": \"put this logo on a t-shirt\", \"input_image\": \"<asset_uuid_or_https_url>\" } }\n```\n\n## Model selection\n\nChoose for the requested outcome, not provider popularity. These routes are maintained\ndefaults, but model availability, capabilities, parameters, and credits can change;\n`api_getModelFields(type: \"image\")` remains authoritative.\n\n| User need | Preferred model | Why / tradeoff |\n|---|---|---|\n| Normal social image, product shot, illustration, character continuity, or general edit | `google.gemini-3.1-flash-image-preview` | **Quality-first default.** Strong all-around prompt following and reference fidelity. Do not interpret “Flash” as the cheapest option. |\n| Complex professional design, dense typography/layout, menu, invitation, high-fidelity product mockup, factual visualization, or explicit 4K | `google.gemini-3-pro-image-preview` | Premium quality and instruction handling; slower and typically costs more. Use only when the request benefits from it. |\n| Budget-sensitive generation or explicit GPT Image request | `openai.imgen-2` | The catalog's `credits_per_image` is a **baseline**, not the final charge. Cost varies with `size`, `quality`, and `count`. Use the live API field `quality: \"auto\"` (the operational “effort auto” setting) unless the user requests a different quality. It uses `size` rather than `aspect_ratio`. |\n| Short headline or typography-first poster/banner | `ideogram.ideogram-v3-turbo` | Specialized text rendering. Prefer Gemini Pro when the design also requires a dense or complex professional layout. |\n| Targeted edit with a single source image | `google.gemini-3.1-flash-image-preview`; `flux.flux-kontext-pro` when explicitly requested or better suited by live metadata | Default to Gemini for fidelity. Flux Kontext is a specialized alternative; inspect its `input_image` contract first. |\n| Many reference images or exact reference limits | Best compatible model returned live | Filter by `multiple_images` and the discovered reference limit. Never assume every model accepts the same number or field name. |\n| User names Flux, Seedream, Qwen, Stable Diffusion, or another available model | The requested model, if compatible | Respect an explicit preference. Otherwise do not automatically route to an unvalidated specialist merely because it is available or cheaper. |\n\n### Routing rules\n\n1. Infer the hard constraints: capability, reference count, aspect ratio/size,\n   resolution, text/layout complexity, budget, and any explicit provider choice.\n2. Filter the live catalog by those constraints.\n3. Use Gemini 3.1 Flash when no stronger constraint applies. Upgrade to Gemini 3 Pro\n   only for the professional-design cases above. Consider GPT Image 2 when minimizing\n   credits is explicit or as the first fallback, but state that its live catalog rate\n   is only a baseline and the final charge varies with `size`, `quality`, and `count`.\n   Default to `size: \"auto\"`, `quality: \"auto\"`, and `count: 1` unless the request\n   requires different values.\n4. For a typography-first graphic, choose Ideogram Turbo; for dense layout or 4K,\n   choose Gemini Pro instead.\n5. Never silently change models after an error. Report the failure and proposed\n   fallback with its live credit cost, then regenerate only when the user's existing\n   intent clearly authorizes the additional spend.\n\nWhen a request is ambiguous and the choice materially changes cost or output, offer\nthe most relevant two choices, leading with the recommended model. Do not dump the\nentire catalog on the user.\n\n## Response\n\nThe response shape depends on `storage`:\n\n- **`transient` (default)** — `result` is a list of **URL strings**:\n  ```json\n  { \"status\": \"SUCCESS\", \"detail\": { \"result\": [\"https://replicate.delivery/…/out-0.webp\"], \"transient\": true } }\n  ```\n  Read `detail.result[0]` (a URL string). No `asset_id` — the URL is temporary.\n\n- **`asset`** — `result` is a list of **objects** with a reusable id:\n  ```json\n  { \"status\": \"SUCCESS\", \"detail\": { \"result\": [{ \"asset_id\": \"<uuid>\", \"url\": \"https://…/image.webp?Expires=…\" }], \"transient\": false, \"storage\": \"asset\" } }\n  ```\n  Read `detail.result[0].url` (the image; **signed URL — expires**) and\n  `detail.result[0].asset_id` (permanent — hand off to `simplified-social`'s `media`).\n\nOutput format varies by model and provider. Inspect the returned asset or response\nmetadata instead of assuming WebP; for example, Gemini may return JPEG.\n\n## Presenting the result\n\n**Never embed the returned image URL with Markdown image syntax** (`![](url)`), and\nnever do anything that makes the client fetch/render the image inline. Always present\nthe result as a **plain URL or a Markdown link** the user can click:\n\n- ✅ `Here's your image: https://…/out-0.webp`\n- ✅ `[View generated image](https://…/out-0.webp)`\n- ❌ `![generated image](https://…/out-0.webp)`\n\nReasons: these URLs are signed and **expire**, inline rendering fails or shows a\nbroken image, and clients like Codex otherwise try to display the asset instead of\nhanding the user a usable link — poor UX. When `storage:\"asset\"`, also surface the\npermanent `asset_id` (as text) so it can be reused with `simplified-social`.\n\n## Gotchas\n\n- **Discover before generating.** Call `api_getModelFields` to confirm the model id\n  and `parameters` schema — it eliminates 400 errors on invalid/missing keys and\n  prevents routing from stale model or credit assumptions.\n- **Resolve asset-backed references before generating.** Use `api_getAsset`, require\n  `status: 4`, and pass its current `file_url` when the live model field expects a\n  URL. Keep the source `asset_id` for future runs.\n- **Generation spends credits.** If the request is ambiguous, restate what you'll\n  generate and confirm once. If it's explicit, proceed.\n- **Do not overstate GPT Image 2 pricing.** Treat `credits_per_image` as baseline\n  metadata. Final usage varies with `size`, `quality`, and `count`. The live API calls\n  the effort control `quality`; use `quality: \"auto\"` for the usual “effort auto”\n  behavior and never describe the baseline as the guaranteed charge.\n- `429` = AI credits exhausted; tell the user plainly and don't retry.\n- On error, report it; don't silently retry.\n\n## Example prompts to try\n\n- \"A minimalist product photo of a white ceramic coffee cup on a clean white background, soft studio lighting\"\n- \"A vibrant 3D render of a friendly robot mascot, pastel colors, studio lighting, 1:1\"\n- \"A cinematic 16:9 landscape of snowy mountains at golden hour\"\n- \"A flat vector app icon of a paper plane, rounded corners, blue gradient\"\n- \"A bold quote card that says 'Ship it' in modern type\" (use `ideogram.ideogram-v3-turbo` for crisp text)\n"
AFTER
"---\nname: generate-image\ndescription: Create images or broad prompt/reference-guided transformations with Simplified. Use for new photos, graphics, illustrations, posters, and compositions. For background removal/replacement, restoration, upscaling, masked edits, or format conversion, use edit-image.\n---\n\n# Generate Image\n\nFor background removal/replacement, restoration, upscaling, masked edits, or format conversion, use `edit-image`. Continue here for prompt/reference-guided generation.\n\nCreate or edit an image with Simplified and retain an asset ID when the result will be reused. Use the current generation tool schema as the request contract; model catalogs describe availability and limits, not a reason to substitute provider-specific field names.\n\n## Workflow\n\n1. Resolve workspace/teamspace scope when needed using `simplified-workspace`. Carry its `space_id` into related calls.\n2. Resolve existing references with `manage-assets`: search names/tags with `api_listAssets` if available, or use supplied IDs/URLs. Check asset readiness with `api_getAsset` before generating.\n3. Select a compatible model from `api_listImageModels`, or `api_getModelFields(type: \"image\")` if that is the discovery tool exposed in this client. Inspect `api_getImageModelFields` or the available model-fields tool for limits/options when the request requires a particular resolution, quality, reference count, or provider. Honor explicit model choices when supported. Model IDs and credit costs can change; do not guess them.\n4. Build the nested request below. Use `storage: \"asset\"` for reusable outputs; use `transient` only for an explicitly temporary result. The current schema recommends/defaults to asset storage; pass the choice explicitly.\n5. Call `api_generateImage` when the user requests generation. Generation spends credits: clarify once when cost, quantity, or intent is ambiguous. Do not add a confirmation when the user already authorized that generation.\n6. Wait for the tool's response, inspect its actual status, and report the result. Current apikit waits for completion; do not start a second job or manually poll while the call is still active.\n\n## Current request contract\n\n```json\n{\n  \"model\": \"<model ID returned by discovery>\",\n  \"storage\": \"asset\",\n  \"parameters\": {\n    \"prompt\": \"A studio product photo with space for a headline\",\n    \"aspect_ratio\": \"4:5\",\n    \"count\": 1\n  }\n}\n```\n\nThis is a template: substitute a discovered model ID before calling it. `model`, `storage`, and `parameters` are top-level. `prompt`, `aspect_ratio`, `count`, and `reference_images` belong inside `parameters`.\n\nFor editing, add `parameters.reference_images: [\"<ready asset UUID>\"]`. For composition, supply several references in that array; supported counts depend on the model. Prefer workspace asset UUIDs. The image tool also accepts absolute HTTP(S) image URLs; preserve the full signed query string if using one. Local paths, filenames, and another workspace's UUIDs are invalid.\n\n`capability` is optional: no references selects `prompt`, one selects `reference_image`, and several select `multiple_images`. Several references compose one output; use `count` for several generated outputs. If setting a capability explicitly, confirm the model supports it.\n\nUse the normalized public field `reference_images` for every model. Do not replace it with provider fields such as `input_image` or `source_image`, even if a catalog describes internal provider fields. Add optional model-specific controls only when the generation schema/live contract accepts them.\n\n## Choose for the outcome\n\nFor ordinary social graphics, select a currently available general model; for dense text/layout or higher resolution, inspect compatible models and limits. For continuity/editing, filter by reference support. When the user specifies a provider, use that family's currently recommended compatible ID. For a budget-sensitive request, inspect available credit metadata and generate only the requested count. Treat credit rates as estimates unless the tool explicitly guarantees the charge; size, quality, and count can affect usage.\n\n## Storage and results\n\n| Mode | Use |\n|---|---|\n| `asset` | Save in the Asset Library and retain a reusable UUID |\n| `transient` | Temporary output URL without a permanent asset ID |\n| `default` | Save in the image gallery; do not assume this supplies an Asset Library UUID |\n\nRead the returned envelope rather than assuming all clients return identical wrappers. Common successful image results are in `detail.result`; entries can be URL strings (transient) or objects containing `asset_id` and `url` (asset). Keep every returned output when generating multiple images.\n\nPresent the result using the client’s supported preview or a usable link and include the permanent `asset_id` when present. Signed file URLs may expire even for saved assets. Refresh them with `api_getAsset`. If the user later wants to reuse a transient image, import its accessible URL with `api_createAsset` instead of generating again.\n\nFor social drafts, hand off actual IDs to `simplified-social.media`; generation is not permission to publish.\n\n## Errors and incomplete jobs\n\nAn accepted request is not proof of a finished image. On timeout/pending status, retain the returned job identifiers and use only the continuation operation the response/tool schema specifies. Never blindly repeat a paid generation. Report provider errors and use the supported-value list for a targeted correction. A 429 may indicate quota or rate limits: report its actual message rather than assuming credits are always exhausted.\n\nExamples users can ask: “Make a vertical product photo and save it”; “Find my uploaded logo and use it in a poster”; “Edit this asset to use a blue background”; “Create three variations for review.”\n"
Full snapshot data
{
  "description": "Create images or broad prompt/reference-guided transformations with Simplified. Use for new photos, graphics, illustrations, posters, and compositions. For background removal/replacement, restoration, upscaling, masked edits, or format conversion, use edit-image.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 754
    },
    {
      "relative_path": "assets/simplified-icon-256.png",
      "size_in_bytes": 8191
    },
    {
      "relative_path": "assets/simplified-logo.png",
      "size_in_bytes": 6726
    },
    {
      "relative_path": "assets/simplified-treadmark-logo.png",
      "size_in_bytes": 18491
    }
  ],
  "name": "generate-image",
  "skill_md_contents": "---\nname: generate-image\ndescription: Create images or broad prompt/reference-guided transformations with Simplified. Use for new photos, graphics, illustrations, posters, and compositions. For background removal/replacement, restoration, upscaling, masked edits, or format conversion, use edit-image.\n---\n\n# Generate Image\n\nFor background removal/replacement, restoration, upscaling, masked edits, or format conversion, use `edit-image`. Continue here for prompt/reference-guided generation.\n\nCreate or edit an image with Simplified and retain an asset ID when the result will be reused. Use the current generation tool schema as the request contract; model catalogs describe availability and limits, not a reason to substitute provider-specific field names.\n\n## Workflow\n\n1. Resolve workspace/teamspace scope when needed using `simplified-workspace`. Carry its `space_id` into related calls.\n2. Resolve existing references with `manage-assets`: search names/tags with `api_listAssets` if available, or use supplied IDs/URLs. Check asset readiness with `api_getAsset` before generating.\n3. Select a compatible model from `api_listImageModels`, or `api_getModelFields(type: \"image\")` if that is the discovery tool exposed in this client. Inspect `api_getImageModelFields` or the available model-fields tool for limits/options when the request requires a particular resolution, quality, reference count, or provider. Honor explicit model choices when supported. Model IDs and credit costs can change; do not guess them.\n4. Build the nested request below. Use `storage: \"asset\"` for reusable outputs; use `transient` only for an explicitly temporary result. The current schema recommends/defaults to asset storage; pass the choice explicitly.\n5. Call `api_generateImage` when the user requests generation. Generation spends credits: clarify once when cost, quantity, or intent is ambiguous. Do not add a confirmation when the user already authorized that generation.\n6. Wait for the tool's response, inspect its actual status, and report the result. Current apikit waits for completion; do not start a second job or manually poll while the call is still active.\n\n## Current request contract\n\n```json\n{\n  \"model\": \"<model ID returned by discovery>\",\n  \"storage\": \"asset\",\n  \"parameters\": {\n    \"prompt\": \"A studio product photo with space for a headline\",\n    \"aspect_ratio\": \"4:5\",\n    \"count\": 1\n  }\n}\n```\n\nThis is a template: substitute a discovered model ID before calling it. `model`, `storage`, and `parameters` are top-level. `prompt`, `aspect_ratio`, `count`, and `reference_images` belong inside `parameters`.\n\nFor editing, add `parameters.reference_images: [\"<ready asset UUID>\"]`. For composition, supply several references in that array; supported counts depend on the model. Prefer workspace asset UUIDs. The image tool also accepts absolute HTTP(S) image URLs; preserve the full signed query string if using one. Local paths, filenames, and another workspace's UUIDs are invalid.\n\n`capability` is optional: no references selects `prompt`, one selects `reference_image`, and several select `multiple_images`. Several references compose one output; use `count` for several generated outputs. If setting a capability explicitly, confirm the model supports it.\n\nUse the normalized public field `reference_images` for every model. Do not replace it with provider fields such as `input_image` or `source_image`, even if a catalog describes internal provider fields. Add optional model-specific controls only when the generation schema/live contract accepts them.\n\n## Choose for the outcome\n\nFor ordinary social graphics, select a currently available general model; for dense text/layout or higher resolution, inspect compatible models and limits. For continuity/editing, filter by reference support. When the user specifies a provider, use that family's currently recommended compatible ID. For a budget-sensitive request, inspect available credit metadata and generate only the requested count. Treat credit rates as estimates unless the tool explicitly guarantees the charge; size, quality, and count can affect usage.\n\n## Storage and results\n\n| Mode | Use |\n|---|---|\n| `asset` | Save in the Asset Library and retain a reusable UUID |\n| `transient` | Temporary output URL without a permanent asset ID |\n| `default` | Save in the image gallery; do not assume this supplies an Asset Library UUID |\n\nRead the returned envelope rather than assuming all clients return identical wrappers. Common successful image results are in `detail.result`; entries can be URL strings (transient) or objects containing `asset_id` and `url` (asset). Keep every returned output when generating multiple images.\n\nPresent the result using the client’s supported preview or a usable link and include the permanent `asset_id` when present. Signed file URLs may expire even for saved assets. Refresh them with `api_getAsset`. If the user later wants to reuse a transient image, import its accessible URL with `api_createAsset` instead of generating again.\n\nFor social drafts, hand off actual IDs to `simplified-social.media`; generation is not permission to publish.\n\n## Errors and incomplete jobs\n\nAn accepted request is not proof of a finished image. On timeout/pending status, retain the returned job identifiers and use only the continuation operation the response/tool schema specifies. Never blindly repeat a paid generation. Report provider errors and use the supported-value list for a targeted correction. A 429 may indicate quota or rate limits: report its actual message rather than assuming credits are always exhausted.\n\nExamples users can ask: “Make a vertical product photo and save it”; “Find my uploaded logo and use it in a poster”; “Edit this asset to use a blue background”; “Create three variations for review.”\n"
}

SHA-256 of public snapshot: 8a77e70840de4773fc61bde08d68a04d6b0b7b3322fd3ea94e8e4c7358759248