Curated Formatv1.0.0

2000s Effect

Turn 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

2000s digicam transformation: Make the visual recipe clear in one glance

Shared recipe family

One family. 31 recipes.

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

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

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.

Creator style reference

Creator style reference

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.

Local smoke-test input

Local smoke-test 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.

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.

Recipe reference

Recipe reference

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

View all 9 asset references
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 same recognizable person, pose, scene, and composition
  • Natural identity and visible people, objects, and setting
  • One photographic 3:4 source image as the reusable input

What you bring

  • One 3:4 JPEG, PNG, or WebP photo 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.

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

2000s digicam transformation: Make the visual recipe clear in one glance

Example 01 · 2000s digicam transformation

Make the visual recipe clear in one glance

Open finished ad
SKAI source example: Make flash turn a dinner into a memory

Example 02 · SKAI source example

Make flash turn a dinner into a memory

Open finished ad
SKAI source example: Give a subway snapshot real CCD character

Example 04 · SKAI source example

Give a subway snapshot real CCD character

Open finished ad
SKAI source example: Turn a night out into a memory-card find

Example 05 · SKAI source example

Turn a night out into a memory-card find

Open finished ad
SKAI source example: Make a convertible feel caught on a cheap flash

Example 06 · SKAI source example

Make a convertible feel caught on a cheap flash

Open finished ad
SKAI source example: Let a mirror selfie keep its flaws

Example 07 · SKAI source example

Let a mirror selfie keep its flaws

Open finished ad
SKAI source example: Make a pet portrait feel instantly older

Example 08 · SKAI source example

Make a pet portrait feel instantly older

Open finished ad
SKAI source example: Keep the flash hot and the moment messy

Example 09 · SKAI source example

Keep the flash hot and the moment messy

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 3:4 photo and prompt contract checked locally.

  3. Step 03 · approval · provider

    Transform

    One authentic early-2000s digicam image 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 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

Make the visual recipe clear in one glance

  • 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

Saved reference

Make flash turn a dinner into a memory

  • 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

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 · 5 checks
  • 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 · 5 checks
  • 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 · 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 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.
SKILL.md
Open raw file ↗
---
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`.
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.",
    "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."
  ]
}
inputs.json
Open raw file ↗
{
  "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"
}
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 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 }
  ]
}
assets.json
Open raw file ↗
{
  "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" }
  ]
}
quality.json
Open raw file ↗
{
  "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" }
}
goldens.json
Open raw file ↗
{
  "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"] }
  ]
}
format.json
Open raw file ↗
{
  "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"
  ]
}
kit.package.json
Open raw file ↗
{
  "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" }
}
runtime.json
Open raw file ↗
{
  "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"
  ]
}
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 selected Replicate route · usually under 2 min
Inspect + finalizeFree · about 1 min

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