Skills IMA Nano Banana Image Generator
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/allenfancy-gan/ai-nano-banana-ima" ~/.claude/skills/openclaw-skills-ima-nano-banana-image-generator && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/allenfancy-gan/ai-nano-banana-ima" ~/.openclaw/skills/openclaw-skills-ima-nano-banana-image-generator && rm -rf "$T"
manifest:
skills/allenfancy-gan/ai-nano-banana-ima/SKILL.mdsource content
IMA Nano Banana Image Generator
Scope
This skill is for IMA Open API image generation with strict Nano Banana scope:
- Task types:
,text_to_imageimage_to_image - Allowed model IDs only:
gemini-3.1-flash-imagegemini-3-pro-image
- Always execute through bundled script:
scripts/ima_image_create.py
Out of scope:
- Video or non-image tasks
- Non-IMA providers
- Non-Nano-Banana model families (for example SeeDream, Midjourney)
- Handcrafted API requests (do not bypass script)
Quick Runbook (Authoritative)
If any later section conflicts with this runbook, follow this runbook.
- Confirm request is in scope (IMA + Nano Banana image generation/editing).
- Resolve
:task_type- No reference image ->
text_to_image - With reference image/edit request ->
image_to_image
- No reference image ->
- Resolve model:
- Premium/best quality ->
gemini-3-pro-image - Cheapest/budget ->
+gemini-3.1-flash-image--size 512 - Otherwise ->
gemini-3.1-flash-image
- Premium/best quality ->
- Resolve parameters:
- Size ->
(--size
,512
,1K
,2K
)4K - Ratio ->
JSON (for example--extra-params
){"aspect_ratio":"16:9"}
- Size ->
- If user asks
, explain unsupported and downgrade to8K
.4K - For
, require at least one input image.image_to_image - For remote image URLs:
- Prefer
https:// - If user gives
, ask forhttp://
URL or local filehttps://
- Prefer
- Endpoint policy is fixed:
- Main API:
https://api.imastudio.com - Upload API:
https://imapi.liveme.com - No CLI/env override for these domains in this skill.
- Main API:
- Run only
; do not call API endpoints manually.scripts/ima_image_create.py - Use messaging Step 0-4 flow. If
tool is unavailable, use normal replies with same content.message - On success, prefer rendered media output; if media unsupported, return URL + model + elapsed/credit summary.
FAQ (For Ambiguous Inputs)
Q1) How to map intent to task_type
?
task_type| Situation | |
|---|---|
| Prompt-only generation | |
| Edit/transform from URL/local image | |
Q2) How to map user wording to model?
| User wording | model_id | Extra rule |
|---|---|---|
| 默认 / 平衡 / Banana2 / NB2 | | none |
| 最便宜 / budget / cheap | | force |
| 最好 / 高质量 / Pro / premium | | none |
Q3) How to set ratio and size?
| Target | Setting |
|---|---|
Size (,,,) | |
Aspect ratio (,,,,) | |
8K is not supported; downgrade to 4K.
Q4) What placeholder substitutions are required?
-> current skill root path{baseDir}
-> real user/session id string{user_id}
User-Facing Messaging Protocol
Step 0: Acknowledge immediately
Use a short warm reply in user language, for example:
收到,马上开始生成。OK, generating now.
Step 1: Start notification
🎨 开始生成图片,请稍候… • 模型:[Model Name] • 预计耗时:[X~Y 秒] • 消耗积分:[N pts]
Step 2: Progress notification
| Model | Typical Duration | Poll Interval | Push Interval |
|---|---|---|---|
| 20–40s | 5s | 15s |
| 60–120s | 5s | 30s |
Progress format:
⏳ 正在生成中… [P]% 已等待 [elapsed]s,预计最长 [max]s
P = min(95, floor(elapsed / max * 100)) until success.
Step 3: Success notification
✅ 图片生成成功! • 模型:[Model Name] • 耗时:预计 [X~Y]s,实际 [actual]s • 消耗积分:[N pts] 🔗 原始链接:{image_url}
Prefer media attachment; fallback to plain text message if media is not supported.
Step 4: Failure notification
❌ 图片生成失败 • 原因:[natural language reason] • 建议:[retry strategy or model switch] 需要我帮你重试吗?
After Step 4, stop. Do not send duplicate completion messages.
Command Templates (Minimal)
# 1) List models python3 {baseDir}/scripts/ima_image_create.py \ --api-key "$IMA_API_KEY" \ --task-type text_to_image \ --list-models # 2) text_to_image (default/premium/budget/ratio via params) python3 {baseDir}/scripts/ima_image_create.py \ --api-key "$IMA_API_KEY" \ --task-type text_to_image \ --model-id gemini-3.1-flash-image \ --prompt "a cute puppy on grass" \ --size 1K \ --extra-params '{"aspect_ratio":"1:1"}' \ --user-id {user_id} \ --output-json # Notes: # - Premium: set --model-id gemini-3-pro-image # - Cheapest: keep flash model and set --size 512 # 3) image_to_image with remote URL input python3 {baseDir}/scripts/ima_image_create.py \ --api-key "$IMA_API_KEY" \ --task-type image_to_image \ --model-id gemini-3.1-flash-image \ --prompt "turn into oil painting" \ --input-images "https://example.com/photo.jpg" \ --user-id {user_id} \ --output-json # 4) image_to_image with local file input python3 {baseDir}/scripts/ima_image_create.py \ --api-key "$IMA_API_KEY" \ --task-type image_to_image \ --model-id gemini-3.1-flash-image \ --prompt "turn into oil painting" \ --input-images "./local-photo.jpg" \ --user-id {user_id} \ --output-json
Security And Data Handling
Network domains
| Domain | Usage | Trigger |
|---|---|---|
| Product list, create task, poll detail | All generation tasks |
| Upload token + file upload | with local files |
Why two domains?
: IMA's image generation API (handles task orchestration)api.imastudio.com
: IMA's media storage infrastructure (handles large file uploads)imapi.liveme.com- Both services are owned and operated by IMA Studio
Credential flow
| Credential | Where Sent | Why |
|---|---|---|
| | Open API auth () |
| | Upload-token auth for local image uploads |
Notes:
- Upload signing uses shared built-in credentials (same as ima-image-ai skill).
- No API key is sent to presigned upload hosts during binary upload.
- API domains are fixed in script and not user-overridable.
- Never print or persist raw API keys in chat or repo files.
Local persistence
| Path | Purpose | Retention |
|---|---|---|
| Per-user model preference cache | Until removed |
| Operational logs | Auto-cleaned after 7 days |
Error Handling Playbook
| Error pattern | User-facing explanation | Suggested action |
|---|---|---|
/ unauthorized | API key invalid or unauthorized | Regenerate key: https://www.imaclaw.ai/imaclaw/apikey |
/ insufficient points | Credits are insufficient | Recharge: https://www.imaclaw.ai/imaclaw/subscription |
/ / invalid attribute | Parameter-rule mismatch | Retry with defaults or lower complexity |
| timeout | Task took too long | Retry with faster/lower-cost setup |
| network / rate limit | Temporary connectivity/limit issue | Wait and retry |
Fallback messages:
- Chinese:
图片生成遇到问题,请稍后重试或换个模型试试。 - English:
Image generation encountered an issue, please retry or switch model.
Quick Defaults
- Default model:
gemini-3.1-flash-image - Premium model:
gemini-3-pro-image - Cheapest profile: flash model +
--size 512 - Max output:
4K - Recommended ratios:
,1:1
,16:9
,9:16
,4:33:4