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 photo into an authentic early-2000s digicam shot with direct flash, soft focus, noisy CCD texture, dated color, and candid imperfection while preserving the person, pose, scene, and composition.
By Wiggly Studio · Updated July 2026

Shared recipe family
2000s Effect 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 provider prediction; the estimate command prints the selected route before approval
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.

Slides 2 through 9 each already contain exactly one original-photo inset, so Discover adds no second reference overlay. Slide 1 is the native title cover. CTA slides 10 and 11 are intentionally excluded.

Slides 2 through 9 each already contain exactly one original-photo inset, so Discover adds no second reference overlay. Slide 1 is the native title cover. CTA slides 10 and 11 are intentionally excluded.

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 photo, exact gathered prompt, and selected model route.
Step 02
The 3:4 photo and prompt contract checked locally.
Step 03 · approval · provider
One authentic early-2000s digicam image from one approved prediction.
Step 04 · approval
Automatic file checks plus an actual visual review.
Proof & quality
Judge preservation of the person, pose, scene, and composition under an authentic 2002–05 digicam look: direct flash, blown highlights, soft focus, low-end CCD noise, dated color, bloom, and candid imperfection.
The Instagram mobile DM delivered and opened the 2000s Effect Prompts guide, which supplied the exact prompt. The Instagram carousel supplied one native title cover and eight 3:4 transformation proofs.
Slides 2 through 9 each already contain exactly one original-photo inset, so Discover adds no second reference overlay. Slide 1 is the native title cover. CTA slides 10 and 11 are intentionally excluded.
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 2000s Effect Format This runnable Repo preserves the exact prompt delivered by @skaigenerated, its native title cover, and eight source transformation proofs. Each proof already contains one original-photo inset, so Wiggly does not add another. The final two CTA slides are intentionally excluded. Run from `v3`: ```bash npm install npm run format:skai-image -- check --format=2000s-effect npm run format:skai-image -- smoke --format=2000s-effect npm run format:skai-image -- init --format=2000s-effect --run=my-2000s-effect --input=/absolute/path/to/3-by-4-photo.jpg npm run format:skai-image -- validate --format=2000s-effect --run=my-2000s-effect npm run format:skai-image -- estimate --format=2000s-effect --run=my-2000s-effect ``` The input must already be 3:4. Add `--model=nano-banana-2-lite` or `--model=nano-banana-pro` to `init` to select the economy or premium route. Generation requires `REPLICATE_API_TOKEN`. Stop after `estimate` and get the user's explicit approval before supplying the paid flag: ```bash npm run format:skai-image -- render --format=2000s-effect --run=my-2000s-effect --approve-paid ``` No Replicate proof call was made while packaging this Repo. - Economy: `google/nano-banana-2-lite` - Default: `google/nano-banana-2` - Premium: `google/nano-banana-pro` - Model named on the source post: GPT Image 2 The source model is recorded for provenance. Wiggly's official runtime uses the existing Replicate-backed Nano Banana lanes. The estimate is a packaged planning value, so verify Replicate's current rate immediately before paid approval.
--- name: wiggly-2000s-effect description: Turn one 3:4 photo into an authentic early-2000s digicam image with the exact gathered SKAI prompt. --- # 2000s Effect Use the packaged runner and exact prompt. Do not call Replicate separately or create another render path. From the extracted kit's `v3` directory: ```bash npm install npm run format:skai-image -- check --format=2000s-effect npm run format:skai-image -- smoke --format=2000s-effect ``` Ask one short question: > Which 3:4 photo should I turn into an authentic 2000s digicam shot, and should I use Nano Banana 2 (default), Lite (economy), or Pro (premium)? Then initialize the free run. Omit `--model` for Nano Banana 2, or add `--model=nano-banana-2-lite` for economy or `--model=nano-banana-pro` for premium: ```bash npm run format:skai-image -- init --format=2000s-effect --run=<id> --input=<absolute-image-path> [--model=<route>] npm run format:skai-image -- validate --format=2000s-effect --run=<id> npm run format:skai-image -- estimate --format=2000s-effect --run=<id> ``` Stop after `estimate` and ask the user to approve the paid prediction. Only after explicit approval should you supply `--approve-paid`: ```bash npm run format:skai-image -- render --format=2000s-effect --run=<id> --approve-paid npm run format:skai-image -- inspect --format=2000s-effect --run=<id> npm run format:skai-image -- inspect --format=2000s-effect --run=<id> --visual-pass --review-notes="<specific observations>" npm run format:skai-image -- finalize --format=2000s-effect --run=<id> --approve-final ``` Hard rules: - Preserve the same person, pose, scene, composition, and natural identity. - Use harsh direct flash, flat shadows, blown highlights, soft focus, low-end CCD noise, compression artifacts, and imperfect autofocus. - Keep slightly green-yellow dated color, uneven white balance, washed contrast, crushed blacks, and blown whites. - Add mild bloom, halation, chromatic aberration, edge softness, and candid imperfection. - Do not make a polished modern editorial image, illustration, generic global filter, or malformed subject. - Use a user-approved 3:4 input before validation. - Keep the exact gathered prompt unless the user explicitly requests a change. - Use Nano Banana 2 by default, Lite for economy, or Pro for premium. - Validate and estimate before spending, pause for explicit user approval, and never render without `--approve-paid`. - Persist and resume the prediction id. - Never exceed three attempts. - View the output and record specific visual-review notes before finalizing. - Return the finished image and `quality-report.json` to the user after finalization. - 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.",
"The SKAI source names GPT Image 2; Wiggly's runnable Replicate lanes use Nano Banana 2 Lite, Nano Banana 2, and Nano Banana Pro.",
"No Replicate proof call was made for this package.",
"One render attempt is one paid prediction.",
"Paid generation requires explicit approval and is capped at three attempts."
]
}
{
"required": [{ "id": "image", "type": "image", "formats": ["jpg", "png", "webp"], "minimumWidth": 512, "minimumHeight": 512, "maximumBytes": 26214400, "aspectRatio": "3:4", "aspectRatioTolerance": 0.02 }],
"question": "Which 3:4 photo should I turn into an authentic 2000s digicam shot, and should I use Nano Banana 2 (default), Lite (economy), or Pro (premium)?",
"defaults": { "model": "nano-banana-2", "aspectRatio": "3:4", "outputCount": 1 },
"modelRoutes": { "economy": "google/nano-banana-2-lite", "default": "google/nano-banana-2", "premium": "google/nano-banana-pro" },
"sourceModel": "GPT Image 2"
}
{
"progress": "Prepare -> Validate -> Transform -> Inspect",
"attemptCap": 3,
"stages": [
{ "id": "prepare", "output": "One run pinned to the photo, exact gathered prompt, and selected model route.", "paid": false, "approvalRequired": false },
{ "id": "validate", "output": "The 3:4 photo and prompt contract checked locally.", "paid": false, "approvalRequired": false },
{ "id": "transform", "output": "One authentic early-2000s digicam image from one approved prediction.", "paid": true, "approvalRequired": true },
{ "id": "inspect", "output": "Automatic file checks plus an actual visual review.", "paid": false, "approvalRequired": true }
]
}
{
"sourceReference": {
"creator": "@skaigenerated",
"postUrl": "https://www.instagram.com/p/DX6n8vFioky/",
"guide": "assets/source/guide.txt",
"guideTitle": "2000s Effect Prompts",
"guideAccess": "Delivered and opened in Instagram mobile DM on 2026-07-31.",
"nativeHero": "assets/source/slide-01.jpg",
"cleanGuideExample": "assets/source/slide-02.jpg",
"smokeInput": "assets/source/slide-02.jpg",
"modelShown": "GPT Image 2",
"commentsAtCollection": 20558,
"collectedAt": "2026-07-31",
"verification": "The Instagram mobile DM delivered and opened the 2000s Effect Prompts guide, which supplied the exact prompt. The Instagram carousel supplied one native title cover and eight 3:4 transformation proofs.",
"referenceNote": "Slides 2 through 9 each already contain exactly one original-photo inset, so Discover adds no second reference overlay. Slide 1 is the native title cover. CTA slides 10 and 11 are intentionally excluded."
},
"examples": [
{ "id": "native-hero", "path": "assets/source/slide-01.jpg", "provenance": "@skaigenerated carousel title cover" },
{ "id": "dinner", "path": "assets/source/slide-02.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "ocean", "path": "assets/source/slide-03.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "subway", "path": "assets/source/slide-04.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "night-out", "path": "assets/source/slide-05.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "convertible", "path": "assets/source/slide-06.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "mirror", "path": "assets/source/slide-07.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "dog", "path": "assets/source/slide-08.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "crowd", "path": "assets/source/slide-09.jpg", "provenance": "@skaigenerated carousel" }
],
"excluded": [
{ "path": "Instagram carousel slide 10", "reason": "Comment-to-DM CTA, not format proof" },
{ "path": "Instagram carousel slide 11", "reason": "Follow CTA, not format proof" }
]
}
{
"automatic": ["The source input is 3:4 within 0.02", "Exactly 1 decodable JPG, JPEG, PNG, or WebP output", "At least 1080x1440 pixels", "Aspect ratio matches the selected route within 0.02", "At least 50 KB"],
"visual": ["The same person, pose, scene, composition, and natural identity remain recognizable", "Direct on-camera flash creates harsh frontal light, flat shadows, and believable overexposed highlights", "The frame has soft focus, low-end CCD noise, compression artifacts, and imperfect autofocus without breaking the subject", "Color feels dated and inaccurate: slight green-yellow cast, washed contrast, crushed blacks, blown whites, and subtle banding", "There is mild bloom, halation, chromatic aberration, edge softness, and candid imperfect framing—not a polished modern editorial image"],
"finalization": { "automaticPassRequired": true, "visualPassRequired": true, "reviewNotesRequired": true, "explicitApprovalFlag": "--approve-final" }
}
{
"purpose": "Judge preservation of the person, pose, scene, and composition under an authentic 2002–05 digicam look: direct flash, blown highlights, soft focus, low-end CCD noise, dated color, bloom, and candid imperfection.",
"examples": [
{ "id": "native-hero", "title": "Make the visual recipe clear in one glance", "imagePath": "assets/source/slide-01.jpg", "model": "GPT Image 2 · SKAI source", "whyItWorks": ["The native cover makes the nostalgic camera language immediate", "The flash-blown group photo establishes the imperfect digital finish", "It remains a source-native hero rather than a fabricated Wiggly composition"] },
{ "id": "dinner", "title": "Make flash turn a dinner into a memory", "imagePath": "assets/source/slide-02.jpg", "model": "GPT Image 2 · SKAI source", "whyItWorks": ["One baked original inset makes source preservation inspectable", "Harsh flash, motion softness, and noise keep the candid scene believable", "The result feels amateur and alive rather than cleanly editorial"] },
{ "id": "ocean", "title": "Let the light wash the frame", "imagePath": "assets/source/slide-03.jpg", "model": "GPT Image 2 · SKAI source", "whyItWorks": ["The inset preserves both people and the ocean-side pose", "Blown whites and low contrast mimic cheap early-digital exposure", "The softness is visible without losing the people"] },
{ "id": "subway", "title": "Give a subway snapshot real CCD character", "imagePath": "assets/source/slide-04.jpg", "model": "GPT Image 2 · SKAI source", "whyItWorks": ["The original faces, outfits, and location stay recognizable", "Direct flash flattens the scene in a pleasingly unpolished way", "Noise and imperfect focus make the close moment feel found"] },
{ "id": "night-out", "title": "Turn a night out into a memory-card find", "imagePath": "assets/source/slide-05.jpg", "model": "GPT Image 2 · SKAI source", "whyItWorks": ["The baked inset proves the same group and pose survive", "Highlight bloom and motion softness mimic a low-end digicam", "The heavy flash keeps the social moment candid"] },
{ "id": "convertible", "title": "Make a convertible feel caught on a cheap flash", "imagePath": "assets/source/slide-06.jpg", "model": "GPT Image 2 · SKAI source", "whyItWorks": ["The original car, person, and placement remain obvious", "Overexposed skin and edge softness add period camera imperfection", "The dated color keeps it raw rather than commercially polished"] },
{ "id": "mirror", "title": "Let a mirror selfie keep its flaws", "imagePath": "assets/source/slide-07.jpg", "model": "GPT Image 2 · SKAI source", "whyItWorks": ["The inset keeps the original scene easy to compare", "Flash bloom, noise, and uneven color reduce modern-phone polish", "The framed reflection still reads clearly as the same person"] },
{ "id": "dog", "title": "Make a pet portrait feel instantly older", "imagePath": "assets/source/slide-08.jpg", "model": "GPT Image 2 · SKAI source", "whyItWorks": ["The source person, dog, and floor-level composition survive", "Direct flash and imperfect focus turn the moment into a snapshot", "The low dynamic range remains believable rather than damaged"] },
{ "id": "crowd", "title": "Keep the flash hot and the moment messy", "imagePath": "assets/source/slide-09.jpg", "model": "GPT Image 2 · SKAI source", "whyItWorks": ["The baked inset anchors the original friends and crowd", "Blown highlights, warm skin, and noise fit the 2000s camera recipe", "The output stays candid, raw, and human"] }
]
}
{
"id": "2000s-effect",
"version": "1.0.0",
"title": "2000s Effect",
"description": "Give one photo an authentic 2002–05 digicam look—direct flash, bloom, CCD noise, dated color, and candid imperfection—while preserving the person, pose, scene, and composition.",
"status": "agent-ready",
"owner": "Wiggly Studio",
"source": {
"creator": "@skaigenerated",
"postUrl": "https://www.instagram.com/p/DX6n8vFioky/",
"ctaKeyword": "AI",
"modelShown": "GPT Image 2"
},
"outputs": [
"1 inspected 3:4 early-2000s digicam image",
"state.json with model and prediction provenance",
"quality-report.json with automatic and visual inspection"
]
}
{
"name": "wiggly-2000s-effect-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=2000s-effect && node kit-smoke.mjs"
},
"dependencies": { "image-size": "2.0.2", "replicate": "1.4.0", "tsx": "4.20.6" }
}
{
"slug": "2000s-effect",
"version": "1.0.0",
"promptPath": "prompts/transform.txt",
"input": { "mode": "image", "formats": ["jpg", "png", "webp"], "minimumWidth": 512, "minimumHeight": 512, "maximumBytes": 26214400, "aspectRatio": "3:4", "aspectRatioTolerance": 0.02 },
"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", "costEstimate": "about $0.034 per output image at the current listed rate", "timeEstimate": "usually 5-60 seconds" },
"nano-banana-2": { "label": "Nano Banana 2", "lane": "default", "model": "google/nano-banana-2", "family": "nano-banana", "aspectRatio": "3:4", "outputFormat": "jpg", "resolution": "1K", "costEstimate": "about $0.067 per 1K output image at the current listed rate", "timeEstimate": "usually 10-120 seconds" },
"nano-banana-pro": { "label": "Nano Banana Pro", "lane": "premium", "model": "google/nano-banana-pro", "family": "nano-banana", "aspectRatio": "3:4", "outputFormat": "jpg", "resolution": "1K", "costEstimate": "about $0.15 per 1K output image at the current listed rate", "timeEstimate": "usually 30-180 seconds" }
},
"expectedOutputs": 1,
"maximumAttempts": 3,
"smokeInputPath": "assets/source/slide-02.jpg",
"smokeExamplePath": "assets/source/slide-02.jpg",
"minimumOutputWidth": 1080,
"minimumOutputHeight": 1440,
"minimumOutputBytes": 51200,
"manualReview": [
"the same recognizable person, pose, scene, and composition remain intact",
"harsh direct flash, flat shadows, overexposed highlights, and slight bloom feel like a point-and-shoot photo",
"soft focus, low-end CCD noise, compression artifacts, and imperfect autofocus reduce polish without losing the subject",
"inaccurate dated color has a slight green-yellow cast, blown whites, crushed blacks, and washed-out contrast",
"mild halation, edge softness, chromatic aberration, and candid framing feel authentic rather than like a flat global filter"
]
}
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 provider prediction; the estimate command prints the selected route before approval
You provide
One 3:4 JPEG, PNG, or WebP photo at least 512px on both axes · A Replicate API token only when generation is approved
Output
One inspected 3:4 early-2000s digicam image plus prediction and quality provenance