Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Required before calling image_generate. Create and edit images from a prompt — generate an image, make a picture / logo / illustration / icon / banner / poster / thumbnail / hero image / mockup / product shot / social graphic, or edit / restyle / combine existing images from reference images. Uses OpenAI gpt-image-2 through the Hive image service, billed to the user's Hive credits like an LLM call (no API key needed). Teaches the exact call shape, the quality/cost tradeoff (quality="low" is the
.claude/skills/aden-hive-hive-image-generation/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 83% | 6 |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 207% | 0% |
| case-13 | ✓→✗ | ▼ Worse | 121% | 0% |
| case-20 | ✓→✗ | ▼ Worse | 179% | 0% |
image_generate turns a text prompt into an image (and can edit existing images). It routes through the Hive image service to OpenAI's gpt-image-2; the cost is billed to the user's Hive credits exactly like an LLM call, so there is no API key to configure. Each generated image is also saved to disk.
image_generate(
prompt: str, # required — what to draw
reference_images: list[str] = None,# local paths or http(s) URLs to edit/condition on
size: str = "1024x1024", # 1024x1024 | 1536x1024 (landscape) | 1024x1536 (portrait) | auto
quality: str = "low", # low only (medium & high disabled)
n: int = 1, # 1–4; each image is billed separately
output_format: str = "png", # png | jpeg | webp
model: str = "gpt-image-2",
)Defaults are deliberately cheap and fast. quality is locked to low — medium and high are disabled for cost control, and any request for a higher tier is automatically forced to low. Only raise n when the user explicitly wants variations.
Be concrete: name the subject, style (photo, flat vector, 3D, watercolor…), composition/framing, color palette, mood, and any text to render (gpt-image-2 renders text well — quote it exactly, e.g. the words "Launch Day" in bold).
Pass reference_images to edit, restyle, or compose from existing images — restyle a product photo, place a logo on a mockup, keep a character's identity across images, or merge elements. Provide up to 10 local file paths or http(s) URLs; the model conditions on them at high fidelity. Example:
image_generate(prompt="Put this product on a marble kitchen counter, soft morning light",
reference_images=["data/uploads/bottle.png"])A good source of reference images is something the user attached (read it from the path in their message) or an image you generated earlier (use its saved path).
Image generation can take a couple of minutes, so image_generate runs in the background: it returns immediately with {"status":"started","handle":"bg_…"}. You then poll the generic collect_result tool with that handle until the image is ready:
start = image_generate(prompt="A minimalist bee logo, flat vector, amber on white")
# start.handle == "bg_1"
res = collect_result(handle="bg_1", wait_seconds=30)
# → {"status":"pending", ...} ← not done yet; call collect_result again
# → eventually the real result: {"images":[{"path": …}], "usage": …, …}collect_result waits up to wait_seconds (≤45) per call and returns {"status":"pending"} until generation finishes — just call it again with the same handle until you get the real result. It's fine to do other small things between polls. Don't start a second image while one is pending unless the user asked for several.
The finished result's JSON has images (each with a path) plus model, n, and usage; one image is previewed inline. Call attach_file(path) on the image path to surface a downloadable chip in chat. Do not paste base64 or write  markdown.
Errors surface in the collect_result result as {"error": ...} (the tool never raises). Handle these:
status: 402) — tell the userthey're out of Hive credits; do not retry.
status: 403) — report that imagegeneration is currently unavailable; do not loop.
status: 400) — the prompt was likelyrefused; rephrase it (less explicit, no real-person likeness) and try once.
status: 429) — wait a moment and retry once.pending after several minutes — collect_result keeps returningpending well past ~4 min: the job likely failed. Tell the user and start once more. ({"error":"Unknown … handle"} means it was already collected or never started — just start a fresh image_generate.)
User: "make us a logo — a friendly robot, simple and modern."
image_generate(prompt="A friendly modern robot mascot logo, simple flat vector, rounded shapes, teal and white, centered, plain background", quality="low") → {"status":"started","handle":"bg_1"}collect_result(handle="bg_1", wait_seconds=30) — repeat until it returns the real result (not {"status":"pending"}).result.images[0].path, call attach_file(that_path).| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 10,618 | 14,045 | +32% | 1 | 1 | 0% | 1,605 | 1,729 | +8% | 0 | 0 | — |
case-02 | fail→fail | 5,066 | 8,239 | +63% | 1 | 1 | 0% | 843 | 1,738 | +106% | 0 | 0 | — |
case-03 | fail→fail | 10,403 | 8,894 | -15% | 1 | 1 | 0% | 1,520 | 1,869 | +23% | 0 | 0 | — |
case-04 | fail→fail | 14,835 | 7,368 | -50% | 1 | 1 | 0% | 2,813 | 1,691 | -40% | 0 | 0 | — |
case-05 | fail→fail | 7,958 | 5,194 | -35% | 1 | 1 | 0% | 386 | 1,519 | +294% | 0 | 0 | — |
case-06 | fail→pass | 7,578 | 2,717 | -64% | 1 | 1 | 0% | 1,037 | 1,672 | +61% | 0 | 0 | — |
case-07 | pass→pass | 13,121 | 2,861 | -78% | 1 | 1 | 0% | 1,842 | 1,696 | -8% | 0 | 0 | — |
case-08 | fail→fail | 9,443 | 5,265 | -44% | 1 | 1 | 0% | 1,528 | 2,089 | +37% | 0 | 0 | — |
case-09 | pass→pass | 9,376 | 2,894 | -69% | 1 | 1 | 0% | 1,829 | 1,688 | -8% | 0 | 0 | — |
case-10 | fail→fail | 10,325 | 4,477 | -57% | 1 | 1 | 0% | 1,504 | 2,015 | +34% | 0 | 0 | — |
case-11 | fail→fail | 10,563 | 2,570 | -76% | 1 | 1 | 0% | 1,713 | 1,697 | -1% | 0 | 0 | — |
case-12 | fail→fail | 4,836 | 7,776 | +61% | 1 | 1 | 0% | 654 | 1,733 | +165% | 0 | 0 | — |
case-13 | pass→fail | 5,670 | 8,201 | +45% | 1 | 1 | 0% | 780 | 1,724 | +121% | 0 | 0 | — |
case-14 | fail→fail | 41,122 | 5,459 | -87% | 1 | 1 | 0% | 8,203 | 1,506 | -82% | 0 | 0 | — |
case-15 | fail→fail | 7,416 | 9,070 | +22% | 1 | 1 | 0% | 891 | 1,828 | +105% | 0 | 0 | — |
case-16 | fail→fail | 11,925 | 10,054 | -16% | 1 | 1 | 0% | 465 | 1,914 | +312% | 0 | 0 | — |
case-17 | fail→pass | 12,767 | 2,856 | -78% | 1 | 1 | 0% | 1,680 | 1,765 | +5% | 0 | 0 | — |
case-18 | pass→pass | 11,601 | 8,639 | -26% | 1 | 1 | 0% | 1,541 | 2,589 | +68% | 0 | 0 | — |
case-19 | fail→pass | 8,970 | 18,284 | +104% | 1 | 1 | 0% | 1,350 | 4,138 | +207% | 0 | 0 | — |
case-20 | pass→fail | 5,885 | 34,863 | +492% | 1 | 1 | 0% | 1,132 | 3,163 | +179% | 0 | 0 | — |
case-21 | pass→pass | 10,442 | 10,191 | -2% | 1 | 1 | 0% | 1,401 | 2,592 | +85% | 0 | 0 | — |
case-22 | pass→fail | 12,807 | 31,321 | +145% | 1 | 1 | 0% | 1,694 | 2,540 | +50% | 0 | 0 | — |
case-23 | fail→fail | 24,634 | 6,943 | -72% | 1 | 1 | 0% | 5,665 | 1,609 | -72% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 10 counted toward the lift figure. The other 13 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of 0 percentage points is the difference between those two pass rates over the 10 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.