Agent instructions SKILL.md
---
name: wiggly-cyanotype
description: Turn one image into a handcrafted Prussian-blue contact print using the exact gathered SKAI cyanotype prompt.
---
# Cyanotype
Use the packaged runner and exact prompt. Do not call Replicate separately or
create another render path.
From the extracted kit's `v3` directory, prepare the local runner first:
```bash
npm install
npm run format:skai-image -- check --format=cyanotype
npm run format:skai-image -- smoke --format=cyanotype
```
Ask one short question:
> Which 3:4 image should I turn into a handcrafted cyanotype?
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=cyanotype --run=<id> --input=<absolute-image-path> [--model=<route>]
npm run format:skai-image -- validate --format=cyanotype --run=<id>
npm run format:skai-image -- estimate --format=cyanotype --run=<id>
```
Stop after `estimate` and ask the user to approve the paid prediction. Only
after the user explicitly approves the cost should you supply `--approve-paid`:
```bash
npm run format:skai-image -- render --format=cyanotype --run=<id> --approve-paid
npm run format:skai-image -- inspect --format=cyanotype --run=<id>
npm run format:skai-image -- inspect --format=cyanotype --run=<id> --visual-pass --review-notes="<specific observations>"
npm run format:skai-image -- finalize --format=cyanotype --run=<id> --approve-final
```
Hard rules:
- Preserve the source subject and composition.
- Reject or crop to a user-approved 3:4 input before validation so the fixed 3:4 route can preserve composition honestly.
- 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 the creator's source route.
- Add subtle skeletal detail only for a moving person or animal.
- 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.
- 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.",
"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 image should I turn into a handcrafted cyanotype?",
"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"
}
}
Paid-call and resume contract pipeline.json
{
"progress": "Prepare -> Validate -> Transform -> Inspect",
"attemptCap": 3,
"stages": [
{
"id": "prepare",
"output": "One run pinned to the source image, exact gathered prompt, and selected model route.",
"paid": false,
"approvalRequired": false
},
{
"id": "validate",
"output": "The image and prompt contract checked locally.",
"paid": false,
"approvalRequired": false
},
{
"id": "transform",
"output": "One cyanotype print 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
Transform the uploaded image into an authentic handcrafted cyanotype print while preserving the exact composition, framing, perspective, subject placement, proportions, and visual storytelling of the original image.
X-ray aesthetic:
If the uploaded image contains an animal or a person in motion, subtly reveal a semi-transparent skeletal structure inside the body, blended naturally into the cyanotype print. The bones should appear faint and artistic—not medical or graphic—matching the ethereal X-ray look seen in experimental cyanotype photography. Preserve anatomy accurately while keeping the overall image elegant and dreamlike.
Recreate the image using the traditional 19th-century cyanotype photographic printing process with rich Prussian blue tones and soft white highlights. The artwork should look like a genuine contact print made on watercolor paper rather than a digital blue filter.
Cyanotype characteristics:
- Deep Prussian blue monochromatic palette
- White to pale-blue highlights created naturally by the exposure
- Soft tonal transitions with slightly reduced contrast
- Fine watercolor paper texture visible throughout
- Organic chemical staining, slight uneven coating, and subtle edge variations
- Gentle pigment bleeding and handmade imperfections
- Slight exposure falloff near the borders
- Soft grain from the photographic emulsion
- Natural analogue appearance with no artificial digital sharpening
Subject preservation:
- Keep every object, person, animal, building, vehicle, and environmental element recognizable.
- Preserve facial features, clothing, expressions, poses, and anatomy.
- Maintain all lighting direction and shadows from the original scene.
- Retain depth, perspective, and composition exactly.
- Preserve fine details while translating them into cyanotype tonal values.
Artistic rendering:
- Emphasize silhouettes, edges, and natural textures.
- Convert colours into cyanotype luminance rather than simply tinting them blue.
- Produce delicate highlight blooming characteristic of real cyanotype prints.
- Slightly soften micro-details to emulate contact printing.
- Maintain realistic tonal separation.
Quality requirements:
- Museum-quality fine art cyanotype
- Ultra-high resolution
- Authentic analogue chemistry
- Handcrafted photographic print aesthetic
- No modern digital effects
- No artificial HDR
- No oversaturation
- No neon blues
- No cartoon or painterly look
- Preserve the original aspect ratio and composition exactly.
Automatic and visual gates quality.json
{
"automatic": [
"The source input is 3:4 within 0.02 so composition can be preserved",
"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": [
"The source subject, framing, and perspective remain recognizable",
"The palette is deep Prussian blue with soft natural highlights",
"Watercolor paper, chemical staining, grain, and edge falloff feel physical",
"Any skeletal reveal is anatomically plausible, subtle, and only used for a moving person or animal",
"Tonal separation comes from luminance rather than a flat blue tint",
"The result looks like an analogue contact print rather than a digital filter"
],
"finalization": {
"automaticPassRequired": true,
"visualPassRequired": true,
"reviewNotesRequired": true,
"explicitApprovalFlag": "--approve-final"
}
}