Install
openclaw skills install nano-banana-skillNano Banana, Nano Banana Pro, Nano Banana 2 - Google AI image generation models for AI agents. Ultra-high character consistency, 1K-4K resolution, up to 14 reference images, extreme aspect ratios up to 21:9 and 8:1.
openclaw skills install nano-banana-skillNano Banana is Google's cutting-edge AI image generation model series designed for AI agents. Part of the Monet AI unified API platform.
Use this skill when:
If you don't have an API Key, ask your owner to apply at monet.vision.
curl -X POST https://monet.vision/api/v1/tasks/async \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $MONET_API_KEY" \
-d '{
"type": "image",
"input": {
"model": "nano-banana-1",
"prompt": "A cute cat in a garden",
"aspect_ratio": "16:9"
},
"idempotency_key": "unique-key-123"
}'
⚠️ Important:
idempotency_keyis required. Use a unique value (e.g., UUID) to prevent duplicate task creation if the request is retried.
Response:
{
"id": "task_abc123",
"status": "pending",
"type": "image",
"created_at": "2026-02-27T10:00:00Z"
}
Task processing is asynchronous. You need to poll the task status until it becomes success or failed. Recommended polling interval: 5 seconds.
curl https://monet.vision/api/v1/tasks/task_abc123 \
-H "Authorization: Bearer $MONET_API_KEY"
Response when completed:
{
"id": "task_abc123",
"status": "success",
"type": "image",
"outputs": [
{
"model": "nano-banana-1",
"status": "success",
"progress": 100,
"url": "https://files.monet.vision/..."
}
],
"created_at": "2026-02-27T10:00:00Z",
"updated_at": "2026-02-27T10:01:30Z"
}
Example: Poll until completion
const TASK_ID = "task_abc123";
const MONET_API_KEY = process.env.MONET_API_KEY;
async function pollTask() {
while (true) {
const response = await fetch(
`https://monet.vision/api/v1/tasks/${TASK_ID}`,
{
headers: {
Authorization: `Bearer ${MONET_API_KEY}`,
},
},
);
const data = await response.json();
const status = data.status;
if (status === "success") {
console.log("Task completed successfully!");
console.log(JSON.stringify(data, null, 2));
break;
} else if (status === "failed") {
console.log("Task failed!");
console.log(JSON.stringify(data, null, 2));
break;
} else {
console.log(`Task status: ${status}, waiting...`);
await new Promise((resolve) => setTimeout(resolve, 5000));
}
}
}
pollTask();
nano-banana-1 - Google Nano Banana
Ultra-high character consistency
{
model: "nano-banana-1",
prompt: string, // Required
images?: string[], // Optional: Up to 5 reference images
aspect_ratio?: "1:1" | "2:3" | "3:2" | "4:3" | "3:4" | "16:9" | "9:16"
}
nano-banana-1-pro - Nano Banana Pro
Google flagship generation model
{
model: "nano-banana-1-pro",
prompt: string, // Required
images?: string[], // Optional: Up to 14 reference images
aspect_ratio?: "1:1" | "2:3" | "3:2" | "4:3" | "3:4" | "4:5" | "5:4" | "16:9" | "9:16" | "21:9",
resolution?: "1K" | "2K" | "4K"
}
nano-banana-2 - Nano Banana 2
Google Gemini latest model
{
model: "nano-banana-2",
prompt: string, // Required
images?: string[], // Optional: Up to 14 reference images
aspect_ratio?: "1:1" | "2:3" | "3:2" | "4:3" | "3:4" | "4:5" | "5:4" | "16:9" | "9:16" | "21:9" | "4:1" | "1:4" | "8:1" | "1:8",
resolution?: "1K" | "2K" | "4K"
}
POST /api/v1/tasks/async - Create an async task. Returns immediately with task ID.
Request:
curl -X POST https://monet.vision/api/v1/tasks/async \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $MONET_API_KEY" \
-d '{
"type": "image",
"input": {
"model": "nano-banana-1",
"prompt": "A cute cat"
},
"idempotency_key": "unique-key-123"
}'
⚠️ Important:
idempotency_keyis required. Use a unique value (e.g., UUID) to prevent duplicate task creation if the request is retried.
Response:
{
"id": "task_abc123",
"status": "pending",
"type": "image",
"created_at": "2026-02-27T10:00:00Z"
}
POST /api/v1/tasks/sync - Create a task with SSE streaming. Waits for completion and streams progress.
Request:
curl -X POST https://monet.vision/api/v1/tasks/sync \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $MONET_API_KEY" \
-N \
-d '{
"type": "image",
"input": {
"model": "nano-banana-1",
"prompt": "A cute cat"
},
"idempotency_key": "unique-key-123"
}'
GET /api/v1/tasks/{taskId} - Get task status and result.
Request:
curl https://monet.vision/api/v1/tasks/task_abc123 \
-H "Authorization: Bearer $MONET_API_KEY"
Response:
{
"id": "task_abc123",
"status": "success",
"type": "image",
"outputs": [
{
"model": "nano-banana-1",
"status": "success",
"progress": 100,
"url": "https://files.monet.vision/..."
}
],
"created_at": "2026-02-27T10:00:00Z",
"updated_at": "2026-02-27T10:01:30Z"
}
GET /api/v1/tasks/list - List tasks with pagination.
Request:
curl "https://monet.vision/api/v1/tasks/list?page=1&pageSize=20" \
-H "Authorization: Bearer $MONET_API_KEY"
Response:
{
"tasks": [
{
"id": "task_abc123",
"status": "success",
"type": "image",
"outputs": [
{
"model": "nano-banana-1",
"status": "success",
"progress": 100,
"url": "https://files.monet.vision/..."
}
],
"created_at": "2026-02-27T10:00:00Z",
"updated_at": "2026-02-27T10:01:30Z"
}
],
"page": 1,
"pageSize": 20,
"total": 100
}
POST /api/v1/files - Upload a file to get an online access URL.
📁 File Storage: Uploaded files are stored for 24 hours and will be automatically deleted after expiration.
Request:
curl -X POST https://monet.vision/api/v1/files \
-H "Authorization: Bearer $MONET_API_KEY" \
-F "file=@/path/to/your/image.jpg" \
-v
Response:
{
"id": "file_xyz789",
"url": "...",
"filename": "image.jpg",
"size": 1048576,
"content_type": "image/jpeg",
"created_at": "2026-02-27T10:00:00Z"
}
export MONET_API_KEY="monet_xxx"
All API requests require authentication via the Authorization header:
Authorization: Bearer monet_xxx