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" }
}