Curated Formatv1.0.0

1 Selfie, 9 Images

Turn one selfie into nine consistent, quietly surreal editorial photographs.

By Wiggly Studio · Updated July 2026

Surreal portrait series: One selfie, nine impossible scenesReference for One selfie, nine impossible scenes

Shared recipe family

One family. 31 recipes.

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 family

Before you start

Services & costs

Replicate

google/nano-banana-2-lite · google/nano-banana-2 · google/nano-banana-pro

Generate the approved media in this recipe.

REPLICATE_API_TOKEN

Local runtime

Setup, 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.

Setup notes from requirements.json
  • 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.

Included assets

The ingredients behind the format.

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.

Petal umbrella

Petal umbrella

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

Cloud

Cloud

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

Chair

Chair

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

Mirror

Mirror

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

Staircase

Staircase

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

Bed

Bed

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

View all 9 asset references
Phone booth

Phone booth

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

Grocery cart

Grocery cart

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

Door

Door

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

What stays consistent

  • The same recognizable person
  • The same outfit and proportions
  • Quiet brutalist composition
  • Photographic realism

What you bring

  • 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
Read the included contracts and asset inventory ↓

Examples

Examples & references.

9 saved examples for this recipe—not 9 separate Repos. Each example keeps its original version and provenance.

Surreal portrait series: One selfie, nine impossible scenesReference for One selfie, nine impossible scenes

Example 01 · Surreal portrait series

One selfie, nine impossible scenes

Open finished ad

From input to output

How the run works.

From the published pipeline.json. The agent follows the packaged runtime and its approval gates.

  1. Step 01

    Prepare

    One run pinned to the selfie, selected scene prompt, and model route.

  2. Step 02

    Validate

    The selfie and selected prompt contract checked locally.

  3. Step 03 · approval · provider

    Transform

    One selected scene per paid prediction; repeat only for approved variants.

  4. Step 04 · approval

    Inspect

    Automatic file checks plus an actual visual review for every scene.

Proof & quality

What a good result looks like.

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

The Petal Umbrella

  • 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

Saved reference

The Cloud

  • 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

Quality gates

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.

Automatic · 4 checks
  • 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 · 5 checks
  • 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 · 4 checks
  • Automatic Pass Required: true
  • Visual Pass Required: true
  • Review Notes Required: true
  • Explicit Approval Flag: --approve-final

Open the package

Readable Repo files.

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.

README.md
Open raw file ↗
# 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`
SKILL.md
Open raw file ↗
---
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`.
requirements.json
Open raw file ↗
{
  "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."
  ]
}
inputs.json
Open raw file ↗
{
  "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"
  }
}
pipeline.json
Open raw file ↗
{
  "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
    }
  ]
}
assets.json
Open raw file ↗
{
  "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" }
  ]
}
quality.json
Open raw file ↗
{
  "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"
  }
}
goldens.json
Open raw file ↗
{
  "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"
      ]
    }
  ]
}
format.json
Open raw file ↗
{
  "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"
  ]
}
kit.package.json
Open raw file ↗
{
  "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"
  }
}
runtime.json
Open raw file ↗
{
  "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"
  ]
}
Technical proof archive ↗

Run it with a coding agent

Know the run before you start.

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

Prepare + validateFree · about 1 min
Each selected sceneOne current Replicate model charge · usually under 2 min
Inspect + finalizeFree · about 1 min per scene

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