All-in-one image generation with Gemini models. Supports Nano Banana (3.1 Flash), Nano Banana Pro (3 Pro), and Nano Banana 2 (2.5 Flash). Triggers on "generate image", "image generation", "nano banana", "edit image".
All-in-one image generation and editing using the full Nano Banana model family. Pick the right model for the job.
which node. If missing, tell the user to install Node.js (e.g. via brew install node or https://nodejs.org).| Flag | Model | Best for |
|---|---|---|
--model nano-banana | Gemini 3.1 Flash Image | Default. Fast, balanced quality and cost. |
--model nano-banana-pro | Gemini 3 Pro Image | Highest quality, up to 4K, slower. |
--model nano-banana-2 | Gemini 2.5 Flash Image |
| Speed-optimized, high-volume batch tasks. |
node {baseDir}/scripts/generate-image.js --prompt "a cat sitting on mars" --filename "cat-on-mars.png"
node {baseDir}/scripts/generate-image.js --prompt "oil painting of a sunset" --filename "sunset.png" --model nano-banana-pro --resolution 4K
node {baseDir}/scripts/generate-image.js \
--prompt "make the sky purple" \
--filename "edited.png" \
-i "/path/to/input.png" \
--model nano-banana-pro
node {baseDir}/scripts/generate-image.js \
--prompt "combine these into a collage" \
--filename "collage.png" \
-i img1.png -i img2.png -i img3.png
| Flag | Short | Default | Description |
|---|---|---|---|
--prompt | -p | required | Image description or editing instruction |
--filename | -f | required | Output filename |
--input-image | -i | -- | Input image(s), repeatable, max 14 |
--model | -- | nano-banana | nano-banana, nano-banana-pro, or nano-banana-2 |
--resolution | -r | 1K | 1K, 2K, or 4K |
--aspect-ratio | -- | -- | e.g. 1:1, 16:9, 4:3, 3:4, 9:16 |
The API key is pre-configured on this machine. No flags or environment variables needed.
All input images are sent as inline base64. Images over 500 KB are automatically compressed to JPEG and resized to fit under the limit. This keeps requests fast and avoids File API auth issues with the enterprise endpoint.
Relative filenames are saved to $OPENCLAW_STATE_DIR/media/outbound/{slugid}/nano-banana/{filename}. Absolute paths are used as-is. Use timestamps in filenames to avoid overwrites: cat-on-mars-20260304-165000.png.
The script prints a MEDIA: <absolute-path> line on stdout. You MUST include this exact MEDIA: line in your reply text so the image is delivered as an attachment in Discord/Slack/chat.
Example reply:
Here's your image!
MEDIA: /Users/alche/.openclaw/media/outbound/my-bot/nano-banana/cat-on-mars.png
Rules:
MEDIA: line from the script output into your reply verbatimMEDIA: line must be on its own line in your response