Replicate
google/nano-banana-2-lite · google/nano-banana-2 · google/nano-banana-pro
Generate the approved media in this recipe.
REPLICATE_API_TOKENTurn one selfie into nine consistent, quietly surreal editorial photographs.
By Wiggly Studio · Updated July 2026


Shared recipe family
1 Selfie, 9 Images belongs to Image Filters. These recipes share a runtime; adjacent examples are not separate Repos. The download on this page packages this specific recipe.
See the full recipe familyBefore you start
google/nano-banana-2-lite · google/nano-banana-2 · google/nano-banana-pro
Generate the approved media in this recipe.
REPLICATE_API_TOKENSetup, validation & inspection
Node.js >=22 · npm
Typical run estimate
One prediction per selected scene; the complete set is nine predictions
Estimates describe the saved recipe, not a price guarantee. Confirm current provider pricing and approve any spend before generation. Your coding agent may have its own fees or usage limits. Never paste API keys into chat.
Included assets
The published package includes its agent instructions, input contract, and quality rules, plus 9 viewable asset references below. Reference media teaches the recipe; it is not a new result for your input.

Supplied creator reference—not a new Wiggly-generated result.

Supplied creator reference—not a new Wiggly-generated result.

Supplied creator reference—not a new Wiggly-generated result.

Supplied creator reference—not a new Wiggly-generated result.

Supplied creator reference—not a new Wiggly-generated result.

Supplied creator reference—not a new Wiggly-generated result.
Examples
9 saved examples for this recipe—not 9 separate Repos. Each example keeps its original version and provenance.


















From input to output
From the published pipeline.json. The agent follows the packaged runtime and its approval gates.
Step 01
One run pinned to the selfie, selected scene prompt, and model route.
Step 02
The selfie and selected prompt contract checked locally.
Step 03 · approval · provider
One selected scene per paid prediction; repeat only for approved variants.
Step 04 · approval
Automatic file checks plus an actual visual review for every scene.
Proof & quality
Judge identity and outfit consistency, believable levitation, quiet brutalist composition, and photographic realism across all nine gathered scenes.
The public Google Doc supplied the original selfie, Nano Banana 2 label, and nine prompts. The Instagram carousel supplied the nine matching source outputs.
Saved reference
Saved reference
These are the acceptance criteria in quality.json—not a claim that every pictured example passed the current version. Inspect each new output before finalizing.
Open the package
Actual files from the published v1.0.0 package. Expand any file to inspect the instructions, requirements, or evidence before sending the Repo to your agent.
# Wiggly 1 Selfie, 9 Images Format This runnable Repo preserves the original selfie, nine exact prompts, and nine source outputs gathered from @skaigenerated. Each selected scene is one independent Replicate prediction so cost and retries stay visible. Run from `v3`: ```bash npm install npm run format:skai-image -- check --format=selfie-nine-images npm run format:skai-image -- smoke --format=selfie-nine-images npm run format:skai-image -- init --format=selfie-nine-images --run=my-umbrella --variant=petal-umbrella --input=/absolute/path/to/selfie.jpg npm run format:skai-image -- validate --format=selfie-nine-images --run=my-umbrella npm run format:skai-image -- estimate --format=selfie-nine-images --run=my-umbrella ``` Generation requires `REPLICATE_API_TOKEN` and explicit approval: ```bash npm run format:skai-image -- render --format=selfie-nine-images --run=my-umbrella --approve-paid ``` Use one run per selected variant. A complete nine-image set therefore uses nine paid predictions. No Replicate proof call was made while packaging this Repo. Model routes: - Economy: `google/nano-banana-2-lite` - Default/source: `google/nano-banana-2` - Premium: `google/nano-banana-pro`
--- name: wiggly-selfie-nine-images description: Turn one selfie into a consistent nine-scene surreal editorial photo set using the exact gathered SKAI prompts. --- # 1 Selfie, 9 Images Use the packaged runner and prompt variants. Do not call Replicate separately or create another render path. Ask one short question at a time: 1. Which selfie should I use? 2. Do you want one scene or the complete nine-image set? Variants: `petal-umbrella`, `cloud`, `chair`, `mirror`, `staircase`, `bed`, `phone-booth`, `grocery-cart`, `door` For each selected variant, use a unique run id: ```bash npm run format:skai-image -- init --format=selfie-nine-images --run=<id> --variant=<variant> --input=<absolute-image-path> npm run format:skai-image -- validate --format=selfie-nine-images --run=<id> npm run format:skai-image -- estimate --format=selfie-nine-images --run=<id> npm run format:skai-image -- render --format=selfie-nine-images --run=<id> --approve-paid npm run format:skai-image -- inspect --format=selfie-nine-images --run=<id> npm run format:skai-image -- inspect --format=selfie-nine-images --run=<id> --visual-pass --review-notes="<specific observations>" npm run format:skai-image -- finalize --format=selfie-nine-images --run=<id> --approve-final ``` Hard rules: - Preserve the same person, outfit, skin tone, and proportions across scenes. - State that one scene is one paid prediction; all nine means nine predictions. - Validate every run before spending. - Never generate without `--approve-paid`. - Persist and resume each prediction id. - Never exceed three attempts for any scene. - View every output and record scene-specific notes before finalizing. - Never print, store, or commit `REPLICATE_API_TOKEN`.
{
"runtime": {
"node": ">=22",
"commands": ["npm"]
},
"providers": [
{
"name": "Replicate",
"models": [
"google/nano-banana-2-lite",
"google/nano-banana-2",
"google/nano-banana-pro"
]
}
],
"environment": [
{
"name": "REPLICATE_API_TOKEN",
"secret": true,
"requiredFor": ["render", "resume"]
}
],
"notes": [
"All smoke and validation commands are local.",
"No proof generation was purchased for this package.",
"Each selected scene is one independent paid prediction.",
"The complete nine-image set therefore uses nine predictions.",
"Paid generation requires explicit approval and is capped at three attempts per scene."
]
}
{
"required": [
{
"id": "selfie",
"type": "image",
"formats": ["jpg", "png", "webp"],
"minimumWidth": 512,
"minimumHeight": 512,
"maximumBytes": 26214400
}
],
"question": "Which selfie should I use, and do you want one scene or all nine?",
"variants": [
"petal-umbrella",
"cloud",
"chair",
"mirror",
"staircase",
"bed",
"phone-booth",
"grocery-cart",
"door"
],
"defaults": {
"model": "nano-banana-2",
"variant": "petal-umbrella",
"aspectRatio": "3:4",
"outputCountPerRun": 1
},
"modelRoutes": {
"economy": "google/nano-banana-2-lite",
"default": "google/nano-banana-2",
"premium": "google/nano-banana-pro"
}
}
{
"progress": "Prepare -> Validate -> Transform -> Inspect",
"attemptCapPerScene": 3,
"stages": [
{
"id": "prepare",
"output": "One run pinned to the selfie, selected scene prompt, and model route.",
"paid": false,
"approvalRequired": false
},
{
"id": "validate",
"output": "The selfie and selected prompt contract checked locally.",
"paid": false,
"approvalRequired": false
},
{
"id": "transform",
"output": "One selected scene per paid prediction; repeat only for approved variants.",
"paid": true,
"approvalRequired": true
},
{
"id": "inspect",
"output": "Automatic file checks plus an actual visual review for every scene.",
"paid": false,
"approvalRequired": true
}
]
}
{
"sourceReference": {
"creator": "@skaigenerated",
"postUrl": "https://www.instagram.com/p/DasjanLiqFq/",
"resourceUrl": "https://docs.google.com/document/d/1_SvsT81yfNMgLP5W_g6YUwwAIZZbIlorLeG1Zu2Z_Dc/edit",
"guide": "assets/source/guide.pdf",
"originalInput": "assets/source/original-selfie.jpg",
"verification": "The public Google Doc supplied the original selfie, Nano Banana 2 label, and nine prompts. The Instagram carousel supplied the nine matching source outputs."
},
"examples": [
{ "variant": "petal-umbrella", "path": "assets/source/petal-umbrella.jpg" },
{ "variant": "cloud", "path": "assets/source/cloud.jpg" },
{ "variant": "chair", "path": "assets/source/chair.jpg" },
{ "variant": "mirror", "path": "assets/source/mirror.jpg" },
{ "variant": "staircase", "path": "assets/source/staircase.jpg" },
{ "variant": "bed", "path": "assets/source/bed.jpg" },
{ "variant": "phone-booth", "path": "assets/source/phone-booth.jpg" },
{ "variant": "grocery-cart", "path": "assets/source/grocery-cart.jpg" },
{ "variant": "door", "path": "assets/source/door.jpg" }
]
}
{
"automatic": [
"Exactly 1 decodable JPG, PNG, or WebP output per run",
"At least 640x800 pixels",
"Aspect ratio within 0.02 of 3:4",
"At least 50 KB"
],
"visual": [
"The same person, outfit, skin tone, and proportions remain recognizable",
"The selected scene matches its exact packaged prompt",
"The subject and main prop have coherent anatomy and geometry",
"Levitation has a clear visible air gap",
"The image reads as a quiet editorial photograph rather than CGI or illustration"
],
"finalization": {
"automaticPassRequired": true,
"visualPassRequired": true,
"reviewNotesRequired": true,
"explicitApprovalFlag": "--approve-final"
}
}
{
"purpose": "Judge identity and outfit consistency, believable levitation, quiet brutalist composition, and photographic realism across all nine gathered scenes.",
"examples": [
{
"id": "petal-umbrella",
"title": "The Petal Umbrella",
"imagePath": "assets/source/petal-umbrella.jpg",
"model": "Nano Banana 2",
"whyItWorks": [
"The source outfit and proportions remain recognizable",
"The visible air gap makes the levitation unambiguous",
"Deep red petals provide one controlled accent",
"Soft light keeps the frame photographic"
]
},
{
"id": "cloud",
"title": "The Cloud",
"imagePath": "assets/source/cloud.jpg",
"model": "Nano Banana 2",
"whyItWorks": [
"A dense cloud supports a relaxed full-body pose",
"Large negative space creates the intended isolation",
"The warm ribbed wall stays quiet behind the subject"
]
},
{
"id": "chair",
"title": "The Chair",
"imagePath": "assets/source/chair.jpg",
"model": "Nano Banana 2",
"whyItWorks": [
"The seated posture remains casual despite the floating chair",
"Worn wood adds one warm material accent",
"The grounded camera angle keeps the surrealism believable"
]
},
{
"id": "mirror",
"title": "The Mirror",
"imagePath": "assets/source/mirror.jpg",
"model": "Nano Banana 2",
"whyItWorks": [
"The mirror reads as a complete unsupported object",
"The reflection anchors the subject to the glass",
"The aged gold frame stays restrained"
]
},
{
"id": "staircase",
"title": "The Staircase",
"imagePath": "assets/source/staircase.jpg",
"model": "Nano Banana 2",
"whyItWorks": [
"The subject is frozen in a readable walking step",
"Detached stairs preserve the surreal premise",
"Crumbling concrete adds motion without visual noise"
]
},
{
"id": "bed",
"title": "The Bed",
"imagePath": "assets/source/bed.jpg",
"model": "Nano Banana 2",
"whyItWorks": [
"The fully clothed subject remains visually consistent",
"Heavy sheets drape naturally from the floating bed",
"The white bedding creates clean tonal contrast"
]
},
{
"id": "phone-booth",
"title": "The Phone Booth",
"imagePath": "assets/source/phone-booth.jpg",
"model": "Nano Banana 2",
"whyItWorks": [
"Clear panels keep the subject readable",
"Suspended pigeons reinforce the frozen-time idea",
"The receiver and cord retain useful object detail"
]
},
{
"id": "grocery-cart",
"title": "The Grocery Cart",
"imagePath": "assets/source/grocery-cart.jpg",
"model": "Nano Banana 2",
"whyItWorks": [
"The cross-legged pose fits naturally inside the cart",
"Wire mesh and wheels keep convincing real-world detail",
"Floating bags stay secondary to the subject"
]
},
{
"id": "door",
"title": "The Door",
"imagePath": "assets/source/door.jpg",
"model": "Nano Banana 2",
"whyItWorks": [
"All four door edges remain visibly detached",
"The mid-step pose reads clearly",
"The large air gap completes the impossible transition"
]
}
]
}
{
"id": "selfie-nine-images",
"version": "1.0.0",
"title": "1 Selfie, 9 Images",
"description": "Turn one selfie into a consistent nine-scene surreal editorial photo set.",
"status": "agent-ready",
"owner": "Wiggly Studio",
"source": {
"creator": "@skaigenerated",
"postUrl": "https://www.instagram.com/p/DasjanLiqFq/",
"resourceUrl": "https://docs.google.com/document/d/1_SvsT81yfNMgLP5W_g6YUwwAIZZbIlorLeG1Zu2Z_Dc/edit",
"ctaKeyword": "AI",
"modelShown": "Nano Banana 2"
},
"outputs": [
"1 inspected 3:4 image per selected scene",
"up to 9 finalized scene runs for the complete set",
"state.json and quality-report.json for every scene"
]
}
{
"name": "wiggly-selfie-nine-images-format-kit",
"private": true,
"version": "1.0.0",
"type": "module",
"engines": {
"node": ">=22"
},
"scripts": {
"check:kit": "node kit-smoke.mjs",
"format:skai-image": "tsx scripts/skai-image-format.ts",
"test": "tsx tests/skai-image-format-runner.test.ts --format=selfie-nine-images && node kit-smoke.mjs"
},
"dependencies": {
"image-size": "2.0.2",
"replicate": "1.4.0",
"tsx": "4.20.6"
}
}
{
"slug": "selfie-nine-images",
"version": "1.0.0",
"promptPath": "prompts/petal-umbrella.txt",
"promptVariants": {
"petal-umbrella": "prompts/petal-umbrella.txt",
"cloud": "prompts/cloud.txt",
"chair": "prompts/chair.txt",
"mirror": "prompts/mirror.txt",
"staircase": "prompts/staircase.txt",
"bed": "prompts/bed.txt",
"phone-booth": "prompts/phone-booth.txt",
"grocery-cart": "prompts/grocery-cart.txt",
"door": "prompts/door.txt"
},
"input": {
"mode": "image",
"formats": ["jpg", "png", "webp"],
"minimumWidth": 512,
"minimumHeight": 512,
"maximumBytes": 26214400
},
"defaultModel": "nano-banana-2",
"modelRoutes": {
"nano-banana-2-lite": {
"label": "Nano Banana 2 Lite",
"lane": "economy",
"model": "google/nano-banana-2-lite",
"family": "nano-banana",
"aspectRatio": "3:4",
"outputFormat": "jpg"
},
"nano-banana-2": {
"label": "Nano Banana 2",
"lane": "default / source model",
"model": "google/nano-banana-2",
"family": "nano-banana",
"aspectRatio": "3:4",
"outputFormat": "jpg",
"resolution": "1K"
},
"nano-banana-pro": {
"label": "Nano Banana Pro",
"lane": "premium",
"model": "google/nano-banana-pro",
"family": "nano-banana",
"aspectRatio": "3:4",
"outputFormat": "jpg",
"resolution": "1K"
}
},
"expectedOutputs": 1,
"maximumAttempts": 3,
"smokeInputPath": "assets/source/original-selfie.jpg",
"smokeExamplePath": "assets/source/petal-umbrella.jpg",
"minimumOutputWidth": 640,
"minimumOutputHeight": 800,
"minimumOutputBytes": 51200,
"manualReview": [
"same person and outfit",
"selected scene fidelity",
"face, hands, and prop geometry",
"clear levitation air gap",
"quiet photographic realism"
]
}
Run it with a coding agent
The agent reads this version’s instructions, checks the requirements, and walks you through the approved workflow. Review the inputs and estimate before starting.
Typical run
One prediction per selected scene; the complete set is nine predictions
You provide
One JPEG, PNG, or WebP selfie at least 512px on both axes · One scene or the complete nine-image set · A Replicate API token only when generation is approved
Output
One inspected 3:4 JPG per selected scene, with run and quality provenance