Wiggly / Format Lab /

2000s-effect

agent-ready
v1.0.0

2000s Effect

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.

One source image in. 1 inspected image out.

Download runnable kit

Gathered source proof

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.

Make the visual recipe clear in one glance
GPT Image 2 · SKAI source

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
Make flash turn a dinner into a memory
GPT Image 2 · SKAI source

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
Let the light wash the frame
GPT Image 2 · SKAI source

Let the light wash the frame

  • 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
Give a subway snapshot real CCD character
GPT Image 2 · SKAI source

Give a subway snapshot real CCD character

  • 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
Turn a night out into a memory-card find
GPT Image 2 · SKAI source

Turn a night out into a memory-card find

  • 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
Make a convertible feel caught on a cheap flash
GPT Image 2 · SKAI source

Make a convertible feel caught on a cheap flash

  • 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
Let a mirror selfie keep its flaws
GPT Image 2 · SKAI source

Let a mirror selfie keep its flaws

  • 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
Make a pet portrait feel instantly older
GPT Image 2 · SKAI source

Make a pet portrait feel instantly older

  • 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
Keep the flash hot and the moment messy
GPT Image 2 · SKAI source

Keep the flash hot and the moment messy

  • 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

Exact gathered prompt

Apply a realistic early-2000s digital camera (2002 digicam) aesthetic to the input image. Add direct on-camera flash effect: harsh frontal lighting, overexposed skin highlights, flat shadows, strong highlight bloom and halation around bright areas. Introduce slight motion blur from hand shake, soft focus, and imperfect autofocus. Reduce sharpness to mimic a low-end CCD sensor. Add visible digital noise, grain, and compression artifacts. Lower dynamic range: blown-out whites, crushed blacks, washed-out contrast. Color grading should feel inaccurate and dated: slight green-yellow tint, uneven white balance, subtle color banding, and plasticky skin tones. Lens imperfections: mild chromatic aberration, edge softness, slight blur, and cheap lens quality. Add a subtle dreamy glow/haze across the image, especially around lights and skin. Framing should feel imperfect and candid: slightly off-center, like a casual snapshot. Overall look: authentic 2000–2005 point-and-shoot camera photo, nostalgic, amateur, unpolished, raw. “do not change composition, pose, or subject identity” “preserve original scene, only apply visual style”

Source: @skaigenerated · model shown: GPT Image 2

The official run

Prepare -> Validate -> Transform -> Inspect

  1. 1. prepare
    free

    One run pinned to the photo, exact gathered prompt, and selected model route.

  2. 2. validate
    free

    The 3:4 photo and prompt contract checked locally.

  3. 3. transform
    paid

    One authentic early-2000s digicam image from one approved prediction.

    Explicit approval required

  4. 4. inspect
    free

    Automatic file checks plus an actual visual review.

    Explicit approval required

Model routes

  • economy: Nano Banana 2 Lite · 3:4
  • default: Nano Banana 2 · 3:4
  • premium: Nano Banana Pro · 3:4

What prevents waste

  • The complete contract validates locally before spending.
  • Paid generation needs an explicit approval flag.
  • The prediction ID is saved before polling.
  • Interrupted jobs resume instead of duplicating.
  • Three attempts is the hard cap.

Repo files

Agent instructions SKILL.md
---
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`.
Replicate BYOK requirements requirements.json
{
  "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."
  ]
}
Input contract and model routing inputs.json
{
  "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"
}
Paid-call and resume contract pipeline.json
{
  "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 }
  ]
}
Exact gathered prompt prompts/transform.txt
Apply a realistic early-2000s digital camera (2002 digicam) aesthetic to the input image. Add direct on-camera flash effect: harsh frontal lighting, overexposed skin highlights, flat shadows, strong highlight bloom and halation around bright areas. Introduce slight motion blur from hand shake, soft focus, and imperfect autofocus. Reduce sharpness to mimic a low-end CCD sensor. Add visible digital noise, grain, and compression artifacts. Lower dynamic range: blown-out whites, crushed blacks, washed-out contrast. Color grading should feel inaccurate and dated: slight green-yellow tint, uneven white balance, subtle color banding, and plasticky skin tones. Lens imperfections: mild chromatic aberration, edge softness, slight blur, and cheap lens quality. Add a subtle dreamy glow/haze across the image, especially around lights and skin. Framing should feel imperfect and candid: slightly off-center, like a casual snapshot. Overall look: authentic 2000–2005 point-and-shoot camera photo, nostalgic, amateur, unpolished, raw. “do not change composition, pose, or subject identity” “preserve original scene, only apply visual style”
Automatic and visual gates quality.json
{
  "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" }
}