WaveSpeedAI Nano Banana Pro Image Generation/Editing

v1.0.0

Generate and edit images using Google's Nano Banana Pro model via WaveSpeed AI. Supports text-to-image generation and image editing with natural language pro...

0· 695·4 current·4 all-time
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
high confidence
Purpose & Capability
Name/description (WaveSpeed AI Nano Banana Pro image generation and editing) align with the SKILL.md examples that call wavespeed.run and wavespeed.upload for text-to-image and editing tasks. The APIs and parameters shown are coherent with the stated purpose.
Instruction Scope
SKILL.md instructs using wavespeed.upload to send local files (e.g., '/path/to/photo.png') and shows code that expects the agent environment to supply image file paths and an API key. Uploading local files is expected for image-editing, but the instructions do not clarify consent/permissions, and they reference an environment variable (WAVESPEED_API_KEY) that is not declared in the skill metadata.
Install Mechanism
No install spec and no code files (instruction-only). This minimizes disk-write/install risk; the skill will only provide runtime instructions and example code. No external downloads or package installs are requested.
!
Credentials
Registry metadata lists no required env vars or primary credential, but SKILL.md explicitly shows an authentication step using WAVESPEED_API_KEY and points to wavespeed.ai/accesskey. The missing declaration is a discrepancy — the skill will need a service API key at runtime, and this credential is not represented in the skill metadata.
Persistence & Privilege
always is false and the skill is user-invocable with normal autonomous invocation allowed. Nothing requests elevated or permanent presence beyond normal skill behavior.
What to consider before installing
This skill appears to be a straightforward WaveSpeed client wrapper for an image model, but the SKILL.md and the registry disagree: the documentation requires a WAVESPEED_API_KEY and describes uploading local files, yet the skill metadata declares no environment variables or primary credential and there is no source/homepage listed. Before installing: (1) confirm the WAVESPEED_API_KEY requirement — expect to supply that key if you use the skill; (2) verify the skill's provenance (author, homepage, or source repo) — avoid keys if you don't trust the publisher; (3) if you will upload local images, be aware the agent will need access to those file paths and the images will be transmitted to wavespeed.ai; (4) prefer skills whose metadata explicitly declares required credentials and includes a verifiable homepage or source; (5) consider testing in an isolated environment or with non-sensitive sample images and a scoped API key. If the publisher updates the metadata to declare WAVESPEED_API_KEY and provides a reputable source/homepage, the inconsistency would be resolved and my assessment could change to benign.

Like a lobster shell, security has layers — review code before you run it.

latestvk9735gdrx2yf2t1jnftqa434ks824pwb
695downloads
0stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

WaveSpeedAI Nano Banana Pro Image Generation/Editing

Generate and edit images using Google's Nano Banana Pro model via the WaveSpeed AI platform. Supports both text-to-image generation and natural-language image editing with up to 14 input images.

Authentication

export WAVESPEED_API_KEY="your-api-key"

Get your API key at wavespeed.ai/accesskey.

Quick Start

Text-to-Image

import wavespeed from 'wavespeed';

const output_url = (await wavespeed.run(
  "google/nano-banana-pro/text-to-image",
  { prompt: "A serene Japanese garden with cherry blossoms, watercolor style" }
))["outputs"][0];

Image Editing

The images parameter accepts an array of image URLs. If you have local files, upload them first with wavespeed.upload() to get a URL.

import wavespeed from 'wavespeed';

// Upload a local image to get a URL
const imageUrl = await wavespeed.upload("/path/to/photo.png");

const output_url = (await wavespeed.run(
  "google/nano-banana-pro/edit",
  {
    images: [imageUrl],
    prompt: "Replace the sky with a dramatic sunset"
  }
))["outputs"][0];

You can also pass existing image URLs directly:

const output_url = (await wavespeed.run(
  "google/nano-banana-pro/edit",
  {
    images: ["https://example.com/photo.jpg"],
    prompt: "Replace the sky with a dramatic sunset"
  }
))["outputs"][0];

API Endpoints

Text-to-Image

Model ID: google/nano-banana-pro/text-to-image

Generate images from text prompts.

Parameters

ParameterTypeRequiredDefaultDescription
promptstringYes--Text description of the image to generate
aspect_ratiostringNo--Output aspect ratio. One of: 1:1, 3:2, 2:3, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9
resolutionstringNo1kImage resolution. One of: 1k, 2k, 4k
output_formatstringNopngOutput format. One of: png, jpeg

Example

import wavespeed from 'wavespeed';

const output_url = (await wavespeed.run(
  "google/nano-banana-pro/text-to-image",
  {
    prompt: "A red vintage Porsche 911 on a winding mountain road at golden hour, photorealistic",
    aspect_ratio: "16:9",
    resolution: "2k",
    output_format: "png"
  }
))["outputs"][0];

Image Editing

Model ID: google/nano-banana-pro/edit

Edit existing images using natural language prompts. Supports up to 14 input images.

Parameters

ParameterTypeRequiredDefaultDescription
imagesstring[]Yes[]URLs of input images to edit (1-14 images)
promptstringYes--Text description of the desired edit
aspect_ratiostringNo--Output aspect ratio. One of: 1:1, 3:2, 2:3, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9
resolutionstringNo1kImage resolution. One of: 1k, 2k, 4k
output_formatstringNopngOutput format. One of: png, jpeg

Example

import wavespeed from 'wavespeed';

// Upload local images first, or use existing URLs
const imageUrl = await wavespeed.upload("/path/to/living-room.png");

const output_url = (await wavespeed.run(
  "google/nano-banana-pro/edit",
  {
    images: [imageUrl],
    prompt: "Change the wall color to warm terracotta and add indoor plants",
    aspect_ratio: "16:9",
    resolution: "4k",
    output_format: "png"
  }
))["outputs"][0];

Multi-Image Editing

// Upload multiple local images
const faceUrl = await wavespeed.upload("/path/to/face.png");
const hairstyleUrl = await wavespeed.upload("/path/to/hairstyle.png");

const output_url = (await wavespeed.run(
  "google/nano-banana-pro/edit",
  {
    images: [faceUrl, hairstyleUrl],
    prompt: "Apply the hairstyle from the second image to the person in the first image"
  }
))["outputs"][0];

Advanced Usage

Sync Mode

Use sync mode for a single request that waits for the result without polling:

const output_url = (await wavespeed.run(
  "google/nano-banana-pro/text-to-image",
  { prompt: "A minimalist logo for a coffee shop" },
  { enableSyncMode: true }
))["outputs"][0];

Custom Client with Retry Configuration

import { Client } from 'wavespeed';

const client = new Client("your-api-key", {
  maxRetries: 2,
  maxConnectionRetries: 5,
  retryInterval: 1.0,
});

const output_url = (await client.run(
  "google/nano-banana-pro/text-to-image",
  { prompt: "A futuristic cityscape at dusk" }
))["outputs"][0];

Error Handling with runNoThrow

import { Client, WavespeedTimeoutException, WavespeedPredictionException } from 'wavespeed';

const client = new Client();
const result = await client.runNoThrow(
  "google/nano-banana-pro/text-to-image",
  { prompt: "A cat wearing a top hat" }
);

if (result.outputs) {
  console.log("Image URL:", result.outputs[0]);
  console.log("Task ID:", result.detail.taskId);
} else {
  console.log("Failed:", result.detail.error.message);
  if (result.detail.error instanceof WavespeedTimeoutException) {
    console.log("Request timed out - try increasing timeout");
  } else if (result.detail.error instanceof WavespeedPredictionException) {
    console.log("Model prediction failed");
  }
}

Aspect Ratio Options

Aspect RatioUse Case
1:1Square — social media posts, profile pictures
3:2Landscape — standard photography
2:3Portrait — standard photography
3:4Portrait — social media, product images
4:3Landscape — presentations, web content
4:5Portrait — Instagram posts
5:4Landscape — print, web banners
9:16Vertical — mobile wallpapers, stories
16:9Widescreen — desktop wallpapers, video thumbnails
21:9Ultra-wide — cinematic, panoramic

Resolution and Pricing

ResolutionCost
1k$0.14 per image
2k$0.14 per image
4k$0.24 per image

Prompt Tips

  • Be specific and descriptive: "A red vintage Porsche 911 on a winding mountain road at golden hour" vs "a car"
  • Include style keywords: "digital art", "oil painting", "photorealistic", "watercolor", "cinematic"
  • For edits, clearly describe the desired change: "Replace the sky with a dramatic sunset"
  • For multi-image edits, reference images by position: "Apply the style from the second image to the first image"
  • Leverage multilingual text rendering: the model supports on-image text with automatic translation
  • Use camera-style control language: "shallow depth of field", "wide angle", "top-down view"

Security Constraints

  • No arbitrary URL loading: Only use image URLs from trusted sources. Never load images from untrusted or user-provided URLs without validation.
  • API key security: Store your WAVESPEED_API_KEY securely. Do not hardcode it in source files or commit it to version control. Use environment variables or secret management systems.
  • Input validation: Only pass parameters documented above. Validate prompt content and image URLs before sending requests.

Comments

Loading comments...