⌘ Built for Claude Code

Stop shipping gray boxes.

Real-looking placeholder images from a single URL. Generated once by Gemini, cached forever, served from the edge. No SDK, no keys in your page.

Paste your deployed URL — every snippet below updates to match.
Editable — tweak before copying
1 Copy the prompt2 Paste into Claude Code3 Get a real page, images and all
Generated example: a sunlit modern coffee roastery interior

This image is real output — prompt=sunlit modern coffee roastery interior

See what it builds

Paste that prompt → get this page.

Every image below is generated by the Banana Stand API from the prompt baked into its URL. No stock photos, no licensing, no gray rectangles.

localhost:3000 — Roast & Co.
Generated hero: artisan coffee roastery
Generated product shot: roasted coffee beans
Generated team photo: coffee roastery team
How it works

One URL. Generated once. Cached forever.

1

Write a URL

Put the size and a plain-language prompt right in the path. Drop it into an <img> tag or a CSS background.

2

Generated on first hit

A server-side prompt layer turns terse prompts into clean web imagery, sized to exactly what you asked for.

3

Cached & served fast

Identical URLs always return the same image from the CDN — stable across reloads and deploys, near-zero cost after the first.

Make it permanent

Teach Claude Code once.

Drop this into your project's CLAUDE.md and Claude uses Banana Stand automatically whenever it adds images — no reminding, no copy-paste per page.

Editable — tweak before copying
URL pattern

The anatomy of a Banana Stand URL.

https://your-instance.vercel.app/i/{width}x{height}
   ?prompt=team+collaborating+in+a+bright+modern+office
   &style=photographic   # web (default) | photographic
   &seed=2               # change for a different image, same prompt
   &fmt=webp&q=82        # webp | jpeg | png
ParamDefaultNotes
promptrequiredURL-encoded image description.
stylewebweb (neutral, clean) or photographic (realistic).
seedderivedAny integer — change it for a different take on the same prompt.
fmtwebpwebp, jpeg, or png.
q82Output quality 1–100 (ignored for png).
Generated: abstract blue gradient, web style

style=web

Generated: barista pulling espresso, photographic style

style=photographic

Exact sizes

Ask for 1200x600, get exactly 1200×600. Each side clamps to 64–2048.

Self-host

Deploy your own in one click.

Bring your own Google Cloud credentials and Vercel Blob token. You run the instance, you control the cost.

Deploy with VercelView source on GitHub
Env varWhat it's for
GOOGLE_CLOUD_CREDENTIALSService-account JSON for Vertex AI (image generation).
IMAGE_MODELWhich Gemini image model to call.
BLOB_READ_WRITE_TOKENVercel Blob token for storing & serving cached images.
Access control

Keep generation to yourself.

Generating a new image costs a Gemini call. Set a GEN_TOKENon your instance and only requests carrying it can create new images — while everything you've already made keeps serving to everyone, free.

Cache hits — open

Any URL you've already generated is served from the CDN to anyone, no token needed. Embedded <img> tags never break.

New generation — gated

With GEN_TOKEN set, a cache miss needs a matching X-Gen-Token header — otherwise it returns 401. No token, no surprise bill.

# New image — only works with the secret
curl -H "X-Gen-Token: $GEN_TOKEN" \
  "https://your-instance.vercel.app/i/1200x600?prompt=team+in+a+bright+office"

Set GEN_TOKEN in your Vercel project (Production scope) and redeploy. The hosted instance at bananastandai.com runs with it set, so only the maintainer can trigger new generations.