Curated Formatv1.0.0

Dusk Effect

Turn one outdoor photograph into a photorealistic dusk scene with a sunless golden-to-deep-blue sky and a naturally lit foreground.

By Wiggly Studio · Updated July 2026

Landscape transformation: Turn daylight into a believable duskReference for Turn daylight into a believable dusk

Shared recipe family

One family. 31 recipes.

Dusk 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 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 Replicate image charge and usually 2-4 min

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.
  • One render attempt is one paid prediction.
  • Paid generation requires explicit approval and is capped at three attempts.

Included assets

The ingredients behind the format.

The published package includes its agent instructions, input contract, and quality rules, plus 3 viewable asset references below. Reference media teaches the recipe; it is not a new result for your input.

Recipe reference

Recipe reference

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

Recipe reference

Recipe reference

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

Recipe reference

Recipe reference

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

What stays consistent

  • The source people and recognizable foreground objects
  • The original composition and camera angle
  • Fine clothing, landscape, water, and environmental detail
  • A natural photographic finish

What you bring

  • One JPEG, PNG, or WebP outdoor photograph at least 512px on both axes
  • A Replicate API token only when generation is approved
Read the included contracts and asset inventory ↓

Examples

Examples & references.

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

Landscape transformation: Turn daylight into a believable duskReference for Turn daylight into a believable dusk

Example 01 · Landscape transformation

Turn daylight into a believable dusk

Open finished ad
Coastal transformation: Keep the beach clear under a darker skyReference for Keep the beach clear under a darker sky

Example 02 · Coastal transformation

Keep the beach clear under a darker sky

Open finished ad
Outdoor transformation: Change the hour without losing the actionReference for Change the hour without losing the action

Example 03 · Outdoor transformation

Change the hour without losing the action

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 photo, exact gathered prompt, and selected model route.

  2. Step 02

    Validate

    The photo and prompt contract checked locally.

  3. Step 03 · approval · provider

    Transform

    One Dusk Effect transform from one approved prediction.

  4. Step 04 · approval

    Inspect

    Automatic file checks plus an actual visual review.

Proof & quality

What a good result looks like.

Judge source preservation, a natural sunless dusk gradient, a slightly darker sky, well-lit people and foreground, atmospheric haze, and a photorealistic finish.

The delivered Google Doc supplied the exact Nano Banana Pro prompt. The Instagram carousel supplied three complete native before-and-after examples plus one additional source reference.

Wiggly overlays each packaged original at the top right of its matching output on the consumer Format page.

Saved reference

Mountain Hiker at Dusk

  • The person, clothing, binoculars, rocks, and distant peaks stay recognizable
  • The overcast sky becomes a layered pink, lavender, and blue dusk
  • Foreground detail remains naturally lit beneath the darker sky

Saved reference

Beach Path at Dusk

  • The dunes, fence, path, ocean, and bird keep the source composition
  • Golden light near the horizon transitions smoothly into pink and blue
  • The foreground gains warm natural color without looking artificially relit

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, JPEG, PNG, or WebP output
  • At least 640x800 pixels
  • Aspect ratio matches the selected route within 0.02
  • At least 50 KB
Visual · 6 checks
  • People, foreground objects, composition, and fine source details remain recognizable
  • The sky has no visible sun and moves naturally from golden yellow and orange to pink, lavender, and deep blue
  • The sky is slightly darker while people and foreground remain naturally well lit
  • Soft atmospheric haze, smooth tonal transitions, subtle bloom, and cinematic HDR feel photographic
  • Natural green tones remain rich instead of becoming muddy or neon
  • There are no obvious AI artifacts, warped subjects, logos, or watermarks
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 Dusk Effect Format

This runnable Repo preserves the exact gathered prompt, guide, three native
SKAI before-and-after examples, their original reference photos, and one
additional source reference. It uses the shared Wiggly image runner so
validation, paid approval, retry caps, and visual finalization stay explicit.

Run from `v3`:

```bash
npm install
npm run format:skai-image -- check --format=dusk-effect
npm run format:skai-image -- smoke --format=dusk-effect
npm run format:skai-image -- init --format=dusk-effect --run=my-photo --input=/absolute/path/to/photo.jpg
npm run format:skai-image -- validate --format=dusk-effect --run=my-photo
npm run format:skai-image -- estimate --format=dusk-effect --run=my-photo
```

Generation requires `REPLICATE_API_TOKEN` and explicit approval:

```bash
npm run format:skai-image -- render --format=dusk-effect --run=my-photo --approve-paid
```

No Replicate proof call was made while packaging this Repo.

Model routes:

- Economy: `google/nano-banana-2-lite`
- Default: `google/nano-banana-2`
- Premium and creator source: `google/nano-banana-pro`
SKILL.md
Open raw file ↗
---
name: wiggly-dusk-effect
description: Apply the exact gathered SKAI Dusk Effect prompt to one outdoor photograph.
---

# Dusk Effect

Use the packaged runner and exact prompt. Do not call Replicate separately or
create another render path.

Ask one short question:

> Which outdoor photo should I give the Dusk Effect?

Then run:

```bash
npm run format:skai-image -- init --format=dusk-effect --run=<id> --input=<absolute-image-path>
npm run format:skai-image -- validate --format=dusk-effect --run=<id>
npm run format:skai-image -- estimate --format=dusk-effect --run=<id>
npm run format:skai-image -- render --format=dusk-effect --run=<id> --approve-paid
npm run format:skai-image -- inspect --format=dusk-effect --run=<id>
npm run format:skai-image -- inspect --format=dusk-effect --run=<id> --visual-pass --review-notes="<specific observations>"
npm run format:skai-image -- finalize --format=dusk-effect --run=<id> --approve-final
```

Hard rules:

- 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 and creator-source fidelity.
- Validate before spending 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.
- 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.",
    "One render attempt is one paid prediction.",
    "Paid generation requires explicit approval and is capped at three attempts."
  ]
}
inputs.json
Open raw file ↗
{
  "required": [
    {
      "id": "photo",
      "type": "image",
      "formats": ["jpg", "png", "webp"],
      "minimumWidth": 512,
      "minimumHeight": 512,
      "maximumBytes": 26214400
    }
  ],
  "question": "Which outdoor photo should I give the Dusk Effect?",
  "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",
    "source": "google/nano-banana-pro"
  }
}
pipeline.json
Open raw file ↗
{
  "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 photo and prompt contract checked locally.",
      "paid": false,
      "approvalRequired": false
    },
    {
      "id": "transform",
      "output": "One Dusk Effect transform from one approved prediction.",
      "paid": true,
      "approvalRequired": true
    },
    {
      "id": "inspect",
      "output": "Automatic file checks plus an actual visual review.",
      "paid": false,
      "approvalRequired": true
    }
  ]
}
assets.json
Open raw file ↗
{
  "sourceReference": {
    "creator": "@skaigenerated",
    "postUrl": "https://www.instagram.com/skaigenerated/p/DbGRFNSFlmt/",
    "resourceUrl": "https://docs.google.com/document/d/1rjRBiqYyVmbafUaCYejMmA9LtvfqoE02lGSW6V58ozk/edit",
    "guide": "assets/source/guide.pdf",
    "cover": "assets/source/cover.jpg",
    "referenceInset": "assets/source/mountain-hiker-reference.jpg",
    "verification": "The delivered Google Doc supplied the exact Nano Banana Pro prompt. The Instagram carousel supplied three complete native before-and-after examples plus one additional source reference.",
    "referenceNote": "Wiggly overlays each packaged original at the top right of its matching output on the consumer Format page."
  },
  "examples": [
    {
      "id": "mountain-hiker",
      "path": "assets/source/mountain-hiker.jpg",
      "referencePath": "assets/source/mountain-hiker-reference.jpg"
    },
    {
      "id": "beach-path",
      "path": "assets/source/beach-path.jpg",
      "referencePath": "assets/source/beach-path-reference.jpg"
    },
    {
      "id": "paddleboard",
      "path": "assets/source/paddleboard.jpg",
      "referencePath": "assets/source/paddleboard-reference.jpg"
    }
  ],
  "additionalReferences": [
    {
      "id": "lakeside",
      "path": "assets/source/lakeside-reference.jpg"
    }
  ]
}
quality.json
Open raw file ↗
{
  "automatic": [
    "Exactly 1 decodable JPG, JPEG, PNG, or WebP output",
    "At least 640x800 pixels",
    "Aspect ratio matches the selected route within 0.02",
    "At least 50 KB"
  ],
  "visual": [
    "People, foreground objects, composition, and fine source details remain recognizable",
    "The sky has no visible sun and moves naturally from golden yellow and orange to pink, lavender, and deep blue",
    "The sky is slightly darker while people and foreground remain naturally well lit",
    "Soft atmospheric haze, smooth tonal transitions, subtle bloom, and cinematic HDR feel photographic",
    "Natural green tones remain rich instead of becoming muddy or neon",
    "There are no obvious AI artifacts, warped subjects, logos, or watermarks"
  ],
  "finalization": {
    "automaticPassRequired": true,
    "visualPassRequired": true,
    "reviewNotesRequired": true,
    "explicitApprovalFlag": "--approve-final"
  }
}
goldens.json
Open raw file ↗
{
  "purpose": "Judge source preservation, a natural sunless dusk gradient, a slightly darker sky, well-lit people and foreground, atmospheric haze, and a photorealistic finish.",
  "examples": [
    {
      "id": "mountain-hiker",
      "title": "Mountain Hiker at Dusk",
      "imagePath": "assets/source/mountain-hiker.jpg",
      "referencePath": "assets/source/mountain-hiker-reference.jpg",
      "model": "Nano Banana Pro",
      "whyItWorks": [
        "The person, clothing, binoculars, rocks, and distant peaks stay recognizable",
        "The overcast sky becomes a layered pink, lavender, and blue dusk",
        "Foreground detail remains naturally lit beneath the darker sky"
      ]
    },
    {
      "id": "beach-path",
      "title": "Beach Path at Dusk",
      "imagePath": "assets/source/beach-path.jpg",
      "referencePath": "assets/source/beach-path-reference.jpg",
      "model": "Nano Banana Pro",
      "whyItWorks": [
        "The dunes, fence, path, ocean, and bird keep the source composition",
        "Golden light near the horizon transitions smoothly into pink and blue",
        "The foreground gains warm natural color without looking artificially relit"
      ]
    },
    {
      "id": "paddleboard",
      "title": "Paddleboard at Dusk",
      "imagePath": "assets/source/paddleboard.jpg",
      "referencePath": "assets/source/paddleboard-reference.jpg",
      "model": "Nano Banana Pro",
      "whyItWorks": [
        "The swimmer, board, paddle, water, and distant shore remain intact",
        "A sunless orange-to-blue gradient replaces the bright daytime sky",
        "The subject and water stay clear while the atmosphere becomes cinematic"
      ]
    }
  ]
}
format.json
Open raw file ↗
{
  "id": "dusk-effect",
  "version": "1.0.0",
  "title": "Dusk Effect",
  "description": "Turn one outdoor photograph into a photorealistic dusk scene with a golden-to-deep-blue sky, soft haze, and a naturally lit foreground.",
  "status": "agent-ready",
  "owner": "Wiggly Studio",
  "source": {
    "creator": "@skaigenerated",
    "postUrl": "https://www.instagram.com/skaigenerated/p/DbGRFNSFlmt/",
    "resourceUrl": "https://docs.google.com/document/d/1rjRBiqYyVmbafUaCYejMmA9LtvfqoE02lGSW6V58ozk/edit",
    "ctaKeyword": "AI",
    "modelShown": "Nano Banana Pro"
  },
  "outputs": [
    "1 inspected Dusk Effect photograph",
    "state.json with model and prediction provenance",
    "quality-report.json with automatic and visual inspection"
  ]
}
kit.package.json
Open raw file ↗
{
  "name": "wiggly-dusk-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=dusk-effect && node kit-smoke.mjs"
  },
  "dependencies": {
    "image-size": "2.0.2",
    "replicate": "1.4.0",
    "tsx": "4.20.6"
  }
}
runtime.json
Open raw file ↗
{
  "slug": "dusk-effect",
  "version": "1.0.0",
  "promptPath": "prompts/transform.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",
      "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"
    },
    "nano-banana-pro-source": {
      "label": "Nano Banana Pro (creator source)",
      "lane": "source model",
      "model": "google/nano-banana-pro",
      "family": "nano-banana",
      "aspectRatio": "3:4",
      "outputFormat": "jpg",
      "resolution": "1K"
    }
  },
  "expectedOutputs": 1,
  "maximumAttempts": 3,
  "smokeInputPath": "assets/source/mountain-hiker-reference.jpg",
  "smokeExamplePath": "assets/source/mountain-hiker.jpg",
  "minimumOutputWidth": 640,
  "minimumOutputHeight": 800,
  "minimumOutputBytes": 51200,
  "manualReview": [
    "source people, foreground, composition, and details stay recognizable",
    "sunless golden-orange to pink-lavender-deep-blue dusk gradient",
    "sky is slightly darker while people and foreground remain naturally lit",
    "soft haze, cinematic HDR, smooth transitions, subtle bloom, and rich natural greens",
    "photorealistic DSLR finish with no obvious AI artifacts"
  ]
}
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 · under 1 min
One image transformCurrent Replicate model rate · usually under 2 min
Inspect + finalizeFree · about 1 min

One Replicate image charge and usually 2-4 min

You provide

One JPEG, PNG, or WebP outdoor photograph at least 512px on both axes · A Replicate API token only when generation is approved

Output

One inspected 3:4 Dusk Effect photograph plus prediction and quality provenance