Curated Formatv1.0.0

Mood Notes

Turn one lifestyle photo into a personal visual journal with scene-specific handwriting, doodles, and a mood-matched music player.

By Wiggly Studio · Updated July 2026

Personal visual journal: Turn a real moment into Mood NotesReference for Turn a real moment into Mood Notes

Shared recipe family

One family. 31 recipes.

Mood Notes 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 Replicate proof generation was purchased for this package.
  • The gathered source examples are the visual proof.
  • 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 8 viewable asset references below. Reference media teaches the recipe; it is not a new result for your input.

Creator example output

Creator example output

The exact prompt, Nano Banana Pro label, guide, and seven examples were gathered through the creator's Instagram DM flow and visually checked. The clean reference inset was reconstructed from the source example because the guide did not provide the raw input photo.

Creator reference input

Creator reference input

The exact prompt, Nano Banana Pro label, guide, and seven examples were gathered through the creator's Instagram DM flow and visually checked. The clean reference inset was reconstructed from the source example because the guide did not provide the raw input photo.

Creator reference 2

Creator reference 2

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

Creator reference 3

Creator reference 3

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

Creator reference 4

Creator reference 4

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

Creator reference 5

Creator reference 5

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

View all 8 asset references
Creator reference 6

Creator reference 6

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

Creator reference 7

Creator reference 7

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

What stays consistent

  • The original subjects and objects
  • The source composition and framing
  • The lighting, colors, and atmosphere
  • Photographic realism

What you bring

  • One JPEG, PNG, or WebP lifestyle 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.

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

Personal visual journal: Turn a real moment into Mood NotesReference for Turn a real moment into Mood Notes

Example 01 · Personal visual journal

Turn a real moment into Mood Notes

Open finished ad
Lifestyle portrait: A relaxed portrait gets its soundtrack

Example 03 · Lifestyle portrait

A relaxed portrait gets its soundtrack

Open finished ad
Colorful moment: Food, texture, and color become notes

Example 07 · Colorful moment

Food, texture, and color become notes

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

    A run pinned to the source photo, exact gathered prompt, and chosen model route.

  2. Step 02

    Validate

    The image and complete provider contract checked locally.

  3. Step 03 · approval · provider

    Transform

    One annotated visual-journal image from the selected Replicate model.

  4. Step 04 · approval

    Inspect

    Automatic file checks plus an actual visual review.

Proof & quality

What a good result looks like.

Judge source-scene preservation, scene-specific handwriting, restrained doodles, readable spacing, and a mood-matched glass music player against seven gathered examples.

The exact prompt, Nano Banana Pro label, guide, and seven examples were gathered through the creator's Instagram DM flow and visually checked. The clean reference inset was reconstructed from the source example because the guide did not provide the raw input photo.

Saved reference

Poolside notes with the reference inset

  • The original poolside photo remains realistic and recognizable
  • Short notes point to the hat, drink, water, light, and overall mood
  • The glass music player fits the sunny palette without hiding the subject

Saved reference

Accessories become the story

  • The matcha, sunglasses, and bag each receive one specific note
  • Small hearts and sparkles support the composition without clutter

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, PNG, or WebP output
  • At least 640x800 pixels
  • Aspect ratio within 0.02 of the selected route
  • At least 50 KB
Visual · 5 checks
  • The original subject, objects, framing, lighting, colors, and atmosphere remain recognizable
  • Short white handwritten notes are specific to visible scene details
  • Arrows, connectors, outlines, and doodles remain sparse and legible
  • The glass music player matches the photo's mood without covering the subject
  • The final image reads as one balanced personal visual-journal composition
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 Mood Notes Format

This runnable Repo preserves the exact prompt and seven source examples gathered
from @skaigenerated. It turns one lifestyle photo into a personal visual journal
through Replicate.

Run from `v3`:

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

Generation requires `REPLICATE_API_TOKEN` and explicit approval:

```bash
npm run format:skai-image -- render --format=mood-notes --run=my-mood-notes --approve-paid
```

View the output, record visual notes with
`inspect --visual-pass --review-notes="..."`, then use
`finalize --approve-final`.

Model routes:

- Economy: `google/nano-banana-2-lite`
- Default: `google/nano-banana-2`
- Source/premium: `google/nano-banana-pro`

No Replicate proof call was made while packaging this Repo. The seven included
source examples and guide are the proof artifacts.
SKILL.md
Open raw file ↗
---
name: wiggly-mood-notes
description: Transform one lifestyle photo into an annotated visual journal using the exact gathered SKAI prompt.
---

# Mood Notes

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

Ask one short question first:

> Which photo should I turn into a personal Mood Notes journal image?

Use Nano Banana 2 by default, Nano Banana 2 Lite for economy, or Nano Banana
Pro only when the user requests the source/premium route.

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

Hard rules:

- Preserve the original subjects, objects, composition, lighting, and atmosphere.
- Keep annotations short, specific, legible, and sparse.
- Keep the music player compact and away from important subjects.
- Validate before spending.
- Never generate without `--approve-paid`.
- Persist and resume the same prediction ID.
- Never exceed three attempts.
- View the actual output and record notes before `--approve-final`.
- 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 Replicate proof generation was purchased for this package.",
    "The gathered source examples are the visual proof.",
    "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 photo should I turn into a personal Mood Notes journal image?",
  "defaults": {
    "model": "nano-banana-2",
    "aspectRatio": "3:4",
    "outputCount": 1
  },
  "modelRoutes": {
    "economy": "google/nano-banana-2-lite",
    "default": "google/nano-banana-2",
    "sourceModel": "google/nano-banana-pro"
  }
}
pipeline.json
Open raw file ↗
{
  "progress": "Prepare -> Validate -> Transform -> Inspect",
  "attemptCap": 3,
  "stages": [
    {
      "id": "prepare",
      "output": "A run pinned to the source photo, exact gathered prompt, and chosen model route.",
      "paid": false,
      "approvalRequired": false
    },
    {
      "id": "validate",
      "output": "The image and complete provider contract checked locally.",
      "paid": false,
      "approvalRequired": false
    },
    {
      "id": "transform",
      "output": "One annotated visual-journal image from the selected Replicate model.",
      "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/DbGRfBrljBO/",
    "resourceUrl": "https://docs.google.com/document/d/12QRyuwfmM-s7-2IBFpC8EMb0HdDc_1K68RSaU3_jcw0/edit",
    "guide": "assets/source/guide.pdf",
    "exampleOutput": "assets/source/example-output.jpg",
    "hero": "assets/source/hero-with-reference.jpg",
    "referenceInput": "assets/source/reference-input.jpg",
    "carouselExamples": [
      "assets/source/example-output.jpg",
      "assets/source/example-02.jpg",
      "assets/source/example-03.jpg",
      "assets/source/example-04.jpg",
      "assets/source/example-05.jpg",
      "assets/source/example-06.jpg",
      "assets/source/example-07.jpg"
    ],
    "promptPath": "prompts/transform.txt",
    "verification": "The exact prompt, Nano Banana Pro label, guide, and seven examples were gathered through the creator's Instagram DM flow and visually checked. The clean reference inset was reconstructed from the source example because the guide did not provide the raw input photo."
  },
  "fixture": {
    "path": "assets/source/reference-input.jpg",
    "purpose": "Local validation and free smoke only; no provider call."
  }
}
quality.json
Open raw file ↗
{
  "automatic": [
    "Exactly 1 decodable JPG, PNG, or WebP output",
    "At least 640x800 pixels",
    "Aspect ratio within 0.02 of the selected route",
    "At least 50 KB"
  ],
  "visual": [
    "The original subject, objects, framing, lighting, colors, and atmosphere remain recognizable",
    "Short white handwritten notes are specific to visible scene details",
    "Arrows, connectors, outlines, and doodles remain sparse and legible",
    "The glass music player matches the photo's mood without covering the subject",
    "The final image reads as one balanced personal visual-journal composition"
  ],
  "finalization": {
    "automaticPassRequired": true,
    "visualPassRequired": true,
    "reviewNotesRequired": true,
    "explicitApprovalFlag": "--approve-final"
  }
}
goldens.json
Open raw file ↗
{
  "purpose": "Judge source-scene preservation, scene-specific handwriting, restrained doodles, readable spacing, and a mood-matched glass music player against seven gathered examples.",
  "examples": [
    {
      "id": "poolside",
      "title": "Poolside notes with the reference inset",
      "imagePath": "assets/source/hero-with-reference.jpg",
      "model": "Nano Banana Pro",
      "whyItWorks": [
        "The original poolside photo remains realistic and recognizable",
        "Short notes point to the hat, drink, water, light, and overall mood",
        "The glass music player fits the sunny palette without hiding the subject"
      ]
    },
    {
      "id": "matcha",
      "title": "Accessories become the story",
      "imagePath": "assets/source/example-02.jpg",
      "model": "Nano Banana Pro",
      "whyItWorks": [
        "The matcha, sunglasses, and bag each receive one specific note",
        "Small hearts and sparkles support the composition without clutter"
      ]
    },
    {
      "id": "garden",
      "title": "A relaxed garden portrait",
      "imagePath": "assets/source/example-03.jpg",
      "model": "Nano Banana Pro",
      "whyItWorks": [
        "Notes describe the jacket, shades, greenery, and relaxed energy",
        "The compact player stays secondary to the seated portrait"
      ]
    },
    {
      "id": "mirror",
      "title": "Mirror-selfie details stay readable",
      "imagePath": "assets/source/example-04.jpg",
      "model": "Nano Banana Pro",
      "whyItWorks": [
        "Arrows connect short notes to the phone, bag, outfit, and room light",
        "White line work remains legible over a bright interior"
      ]
    },
    {
      "id": "beach",
      "title": "Golden-hour beach mood",
      "imagePath": "assets/source/example-05.jpg",
      "model": "Nano Banana Pro",
      "whyItWorks": [
        "The handwritten observations follow the hat, drink, jewelry, and sunlight",
        "The player colors echo the warm beach atmosphere"
      ]
    },
    {
      "id": "street",
      "title": "City walk as a journal page",
      "imagePath": "assets/source/example-06.jpg",
      "model": "Nano Banana Pro",
      "whyItWorks": [
        "Architecture, clothing, and the walk itself receive tailored notes",
        "Sparse line work preserves the street portrait's negative space"
      ]
    },
    {
      "id": "market",
      "title": "A colorful market moment",
      "imagePath": "assets/source/example-07.jpg",
      "model": "Nano Banana Pro",
      "whyItWorks": [
        "Food, clothing, textures, and the setting become personal memory cues",
        "The interface and annotations match the scene's playful color"
      ]
    }
  ]
}
format.json
Open raw file ↗
{
  "id": "mood-notes",
  "version": "1.0.0",
  "title": "Mood Notes",
  "description": "Turn one lifestyle photo into a personal visual journal with handwritten scene notes, small doodles, and a mood-matched glass music player.",
  "status": "agent-ready",
  "owner": "Wiggly Studio",
  "source": {
    "creator": "@skaigenerated",
    "postUrl": "https://www.instagram.com/p/DbGRfBrljBO/",
    "resourceUrl": "https://docs.google.com/document/d/12QRyuwfmM-s7-2IBFpC8EMb0HdDc_1K68RSaU3_jcw0/edit",
    "ctaKeyword": "AI",
    "modelShown": "Nano Banana Pro"
  },
  "outputs": [
    "1 annotated lifestyle image",
    "state.json with model and prediction provenance",
    "quality-report.json with automatic and visual inspection"
  ]
}
kit.package.json
Open raw file ↗
{
  "name": "wiggly-mood-notes-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=mood-notes && node kit-smoke.mjs"
  },
  "dependencies": {
    "image-size": "2.0.2",
    "replicate": "1.4.0",
    "tsx": "4.20.6"
  }
}
runtime.json
Open raw file ↗
{
  "slug": "mood-notes",
  "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": "source model",
      "model": "google/nano-banana-pro",
      "family": "nano-banana",
      "aspectRatio": "3:4",
      "outputFormat": "jpg",
      "resolution": "1K"
    }
  },
  "expectedOutputs": 1,
  "maximumAttempts": 3,
  "smokeInputPath": "assets/source/reference-input.jpg",
  "smokeExamplePath": "assets/source/example-output.jpg",
  "minimumOutputWidth": 640,
  "minimumOutputHeight": 800,
  "minimumOutputBytes": 51200,
  "manualReview": [
    "source scene preservation",
    "short scene-specific annotations",
    "legible white line work and doodles",
    "integrated glass music player",
    "balanced personal journal finish"
  ]
}
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 lifestyle photo at least 512px on both axes · A Replicate API token only when generation is approved

Output

One inspected 3:4 visual-journal image plus prediction and quality provenance