Replicate
google/nano-banana-2-lite · google/nano-banana-2 · google/nano-banana-pro
Generate the approved media in this recipe.
REPLICATE_API_TOKENRemaster one portrait with directional studio light, jewelry sparkle, crushed blacks, and a dark luxury-editorial grade while preserving the person, pose, and outfit.
By Wiggly Studio · Updated July 2026

Shared recipe family
Dark Aesthetic Filter 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 12 viewable asset references below. Reference media teaches the recipe; it is not a new result for your input.

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

Slides 2 through 11 each already contain exactly one original-photo inset, so Discover adds no second reference overlay. Slide 1 is the native title cover. CTA slides 12 and 13 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.

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
11 saved examples for this recipe—not 11 separate Repos. Each example keeps its original version and provenance.

Example 01 · Dark aesthetic transformation










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 portrait, exact gathered prompt, and selected model route.
Step 02
The 3:4 portrait and prompt contract checked locally.
Step 03 · approval · provider
One dark luxury-editorial portrait from one approved prediction.
Step 04 · approval
Automatic file checks plus an actual visual review.
Proof & quality
Judge identity, pose, and outfit preservation under hard directional light, crushed blacks, bright jewelry speculars, dark desaturated color, analog grain, and a high-end underground editorial mood.
The delivered Google Doc supplied the exact Dark Aesthetic Filter prompt. The Instagram carousel supplied one native title cover and ten 3:4 transformation proofs.
Slides 2 through 11 each already contain exactly one original-photo inset, so Discover adds no second reference overlay. Slide 1 is the native title cover. CTA slides 12 and 13 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 Dark Aesthetic Filter Format This runnable Repo preserves the exact prompt delivered by @skaigenerated, its native title cover, and ten 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=dark-aesthetic-filter npm run format:skai-image -- smoke --format=dark-aesthetic-filter npm run format:skai-image -- init --format=dark-aesthetic-filter --run=my-dark-aesthetic-filter --input=/absolute/path/to/3-by-4-portrait.jpg npm run format:skai-image -- validate --format=dark-aesthetic-filter --run=my-dark-aesthetic-filter npm run format:skai-image -- estimate --format=dark-aesthetic-filter --run=my-dark-aesthetic-filter ``` 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=dark-aesthetic-filter --run=my-dark-aesthetic-filter --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: Nano Banana 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-dark-aesthetic-filter description: Remaster one 3:4 portrait with the exact gathered SKAI dark luxury-editorial prompt. --- # Dark Aesthetic Filter 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=dark-aesthetic-filter npm run format:skai-image -- smoke --format=dark-aesthetic-filter ``` Ask one short question: > Which 3:4 portrait should I remaster with the dark aesthetic filter, 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=dark-aesthetic-filter --run=<id> --input=<absolute-image-path> [--model=<route>] npm run format:skai-image -- validate --format=dark-aesthetic-filter --run=<id> npm run format:skai-image -- estimate --format=dark-aesthetic-filter --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=dark-aesthetic-filter --run=<id> --approve-paid npm run format:skai-image -- inspect --format=dark-aesthetic-filter --run=<id> npm run format:skai-image -- inspect --format=dark-aesthetic-filter --run=<id> --visual-pass --review-notes="<specific observations>" npm run format:skai-image -- finalize --format=dark-aesthetic-filter --run=<id> --approve-final ``` Hard rules: - Preserve the same recognizable person, pose, and outfit. - Use strong directional studio light, deep shadows, hard contrast, and controlled highlight bloom. - Make chains, pendants, metal, and skin catch bright but believable specular highlights. - Keep dark desaturated tones, cool metallic shadows, visible pores and fabric, and slight cinematic grain. - Do not smooth skin, flatten the lighting, turn it into an illustration, or produce a generic global filter. - 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 Nano Banana 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 portrait should I remaster with the dark aesthetic filter, 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": "Nano Banana 2"
}
{
"progress": "Prepare -> Validate -> Transform -> Inspect",
"attemptCap": 3,
"stages": [
{ "id": "prepare", "output": "One run pinned to the portrait, exact gathered prompt, and selected model route.", "paid": false, "approvalRequired": false },
{ "id": "validate", "output": "The 3:4 portrait and prompt contract checked locally.", "paid": false, "approvalRequired": false },
{ "id": "transform", "output": "One dark luxury-editorial portrait 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/skaigenerated/p/DWrhCPxCvjf/",
"resourceUrl": "https://docs.google.com/document/d/1sZRxTmRxJ76QLFXUi5worCtBZIOx0i9rxfBC7tWe9eM/mobilebasic",
"guide": "assets/source/guide.txt",
"nativeHero": "assets/source/skai-carousel-01.jpg",
"cleanGuideExample": "assets/source/guide-example.jpg",
"smokeInput": "assets/source/smoke-input.jpg",
"modelShown": "Nano Banana 2",
"commentsAtCollection": 24113,
"collectedAt": "2026-07-31",
"verification": "The delivered Google Doc supplied the exact Dark Aesthetic Filter prompt. The Instagram carousel supplied one native title cover and ten 3:4 transformation proofs.",
"referenceNote": "Slides 2 through 11 each already contain exactly one original-photo inset, so Discover adds no second reference overlay. Slide 1 is the native title cover. CTA slides 12 and 13 are intentionally excluded."
},
"examples": [
{ "id": "native-hero", "path": "assets/source/skai-carousel-01.jpg", "provenance": "@skaigenerated carousel title cover" },
{ "id": "bath-cash", "path": "assets/source/skai-carousel-02.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "cash-stack", "path": "assets/source/skai-carousel-03.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "car-door", "path": "assets/source/skai-carousel-04.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "hood-script", "path": "assets/source/skai-carousel-05.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "eyes-closed", "path": "assets/source/skai-carousel-06.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "leopard-wall", "path": "assets/source/skai-carousel-07.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "sunglasses", "path": "assets/source/skai-carousel-08.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "concrete-step", "path": "assets/source/skai-carousel-09.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "graffiti-prayer", "path": "assets/source/skai-carousel-10.jpg", "provenance": "@skaigenerated carousel" },
{ "id": "studio-smile", "path": "assets/source/skai-carousel-11.jpg", "provenance": "@skaigenerated carousel" }
],
"excluded": [
{ "path": "Instagram carousel slide 12", "reason": "Comment-to-DM CTA, not format proof" },
{ "path": "Instagram carousel slide 13", "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, outfit, anatomy, and natural facial identity remain recognizable", "Directional studio light, deep shadows, hard contrast, and controlled highlight bloom feel intentional", "Jewelry and skin carry bright, believable specular detail without waxy skin", "The grade is dark, desaturated, cool, metallic, tactile, and slightly grainy", "There is no malformed anatomy, flat global filter, cartoon treatment, or plastic cosmetic finish"],
"finalization": { "automaticPassRequired": true, "visualPassRequired": true, "reviewNotesRequired": true, "explicitApprovalFlag": "--approve-final" }
}
{
"purpose": "Judge identity, pose, and outfit preservation under hard directional light, crushed blacks, bright jewelry speculars, dark desaturated color, analog grain, and a high-end underground editorial mood.",
"examples": [
{ "id": "native-hero", "title": "Make the visual recipe clear in one glance", "imagePath": "assets/source/skai-carousel-01.jpg", "model": "Nano Banana 2 · SKAI source", "whyItWorks": ["The native cover makes the lighting language immediately clear", "Hard light and crushed shadows establish the dark editorial finish", "It remains a source-native hero rather than a fabricated Wiggly composition"] },
{ "id": "bath-cash", "title": "Make jewelry own the light", "imagePath": "assets/source/skai-carousel-02.jpg", "model": "Nano Banana 2 · SKAI source", "whyItWorks": ["One baked original inset makes identity preservation inspectable", "Cash, jewelry, and skin catch controlled hard highlights", "The environment falls away without losing tactile detail"] },
{ "id": "cash-stack", "title": "Keep the pose, push the contrast", "imagePath": "assets/source/skai-carousel-03.jpg", "model": "Nano Banana 2 · SKAI source", "whyItWorks": ["The source inset proves the familiar person and outfit survive", "Blacks are crushed but the subject remains legible", "Specular metal and fabric texture avoid a generic dark filter"] },
{ "id": "car-door", "title": "Turn a street shot into a magazine spread", "imagePath": "assets/source/skai-carousel-04.jpg", "model": "Nano Banana 2 · SKAI source", "whyItWorks": ["The original framing survives the lighting rebuild", "Directional highlights isolate the person from the setting", "The finish reads as a high-budget fashion editorial"] },
{ "id": "hood-script", "title": "Make ink and chains cut through black", "imagePath": "assets/source/skai-carousel-05.jpg", "model": "Nano Banana 2 · SKAI source", "whyItWorks": ["The inset anchors the original face and hoodie", "Jewelry, ink, and fabric retain micro-detail in deep shadow", "The image uses contrast as styling rather than hiding detail"] },
{ "id": "eyes-closed", "title": "Let diamonds carry the frame", "imagePath": "assets/source/skai-carousel-06.jpg", "model": "Nano Banana 2 · SKAI source", "whyItWorks": ["The pose stays recognizable in the baked comparison", "Bright jewelry highlights are precise, not plastic", "The underexposed base keeps attention on the subject"] },
{ "id": "leopard-wall", "title": "Hold skin and leather against texture", "imagePath": "assets/source/skai-carousel-07.jpg", "model": "Nano Banana 2 · SKAI source", "whyItWorks": ["The original person remains plainly identifiable", "Skin, denim, and wall texture remain visible through the grade", "Cool shadows and grain create the raw editorial mood"] },
{ "id": "sunglasses", "title": "Use hard light like a spotlight", "imagePath": "assets/source/skai-carousel-08.jpg", "model": "Nano Banana 2 · SKAI source", "whyItWorks": ["The inset preserves a direct before-and-after reading", "Sunglasses and jewelry catch sharp but believable reflections", "The lighting sculpts a simple portrait into a studio moment"] },
{ "id": "concrete-step", "title": "Keep the street pose, rebuild the mood", "imagePath": "assets/source/skai-carousel-09.jpg", "model": "Nano Banana 2 · SKAI source", "whyItWorks": ["The source pose and outfit survive the remaster", "Deep falloff isolates the seated subject", "The cooler grade and texture avoid flattening the scene"] },
{ "id": "graffiti-prayer", "title": "Crush the blacks without losing detail", "imagePath": "assets/source/skai-carousel-10.jpg", "model": "Nano Banana 2 · SKAI source", "whyItWorks": ["A baked inset retains an honest source reference", "Hands, clothing, and background still read in shadow", "The result balances aggressive contrast with photographic detail"] },
{ "id": "studio-smile", "title": "Make joy survive the dark grade", "imagePath": "assets/source/skai-carousel-11.jpg", "model": "Nano Banana 2 · SKAI source", "whyItWorks": ["The source face stays recognizably the same", "Hard studio light gives jewelry and skin a premium sheen", "The expression keeps the result human instead of cosmetically perfect"] }
]
}
{
"id": "dark-aesthetic-filter",
"version": "1.0.0",
"title": "Dark Aesthetic Filter",
"description": "Remaster one portrait with dramatic directional light, bright jewelry highlights, crushed blacks, and a dark luxury-editorial grade while keeping the person, pose, and outfit recognizable.",
"status": "agent-ready",
"owner": "Wiggly Studio",
"source": {
"creator": "@skaigenerated",
"postUrl": "https://www.instagram.com/skaigenerated/p/DWrhCPxCvjf/",
"resourceUrl": "https://docs.google.com/document/d/1sZRxTmRxJ76QLFXUi5worCtBZIOx0i9rxfBC7tWe9eM/mobilebasic",
"ctaKeyword": "dark",
"modelShown": "Nano Banana 2"
},
"outputs": [
"1 inspected 3:4 dark luxury-editorial portrait",
"state.json with model and prediction provenance",
"quality-report.json with automatic and visual inspection"
]
}
{
"name": "wiggly-dark-aesthetic-filter-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=dark-aesthetic-filter && node kit-smoke.mjs"
},
"dependencies": { "image-size": "2.0.2", "replicate": "1.4.0", "tsx": "4.20.6" }
}
{
"slug": "dark-aesthetic-filter",
"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/smoke-input.jpg",
"smokeExamplePath": "assets/source/guide-example.jpg",
"minimumOutputWidth": 1080,
"minimumOutputHeight": 1440,
"minimumOutputBytes": 51200,
"manualReview": [
"the same recognizable person, pose, and outfit remain intact",
"strong directional studio light, deep shadows, high-contrast chiaroscuro, and controlled bloom",
"bright but believable specular highlights on jewelry and skin without plastic smoothing",
"dark desaturated tones, cool metallic shadows, visible pores and fabric, and slight cinematic grain",
"a gritty high-budget underground editorial mood rather than a flat filter, illustration, or malformed portrait"
]
}
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 portrait at least 512px on both axes · A Replicate API token only when generation is approved
Output
One inspected 3:4 dark luxury-editorial portrait plus prediction and quality provenance