# Creative Rounds

> Creative rounds

- Skill: `id-bu/creative-rounds` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add id-bu/creative-rounds`
- Raw SKILL.md: https://api.skillmd.com/api/skills/id-bu/creative-rounds/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: id-bu (https://skillmd.com/u/id-bu)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/id-bu/creative-rounds

---


# Creative rounds

Generated pictures and clips are cheap to make and expensive to choose between. This skill
runs the choosing: every round of options goes onto one published page, the reviewer writes on
the page, and the next round is built from what they wrote.

The tools are in `tools/` beside this file. They build self-contained HTML pages from JSON
manifests. Run them with `python3` (Pillow required; ffmpeg for video posters). This skill never
calls an image or video generator: use whichever one the user has, then put its output on the page.

## The flow

```
project
├── Sketch          3–5 different ideas per round, drawn cheaply (pencil-sketch style, lowest price tier)
│   └── rounds      comment · Lock · Drop on every card → next round
├── Hi-fi           only the Locked sketches, rendered properly; two takes per open question
│   └── rounds      same controls; for film work: anchor stills first, then clips in the review room
└── Production      the Locked hi-fi design, cut for every surface it runs on
    └── rounds      one row per surface (feed, story, LinkedIn, listing...), shown inside a mock of the surface where one exists
```

The phase names are the default. A manifest can name its own with `"phases"`.

## Rules for every round

1. **One page per project, same address every round.** Rebuild and republish to the same slug.
   Make a new address only when the user asks for one.
2. **Newest round on top.** Earlier rounds stay on the page, folded (`"fold": "closed"` on a
   strip; `"open": false` on a review-room round). Nothing is deleted while a choice is open.
3. **Every card has a name a person can say.** Name a card by the one thing that sets it apart,
   in plain words: "warm table", "cool table". The reviewer refers to cards by these names, so
   never use codes like "option B" or "v3".
4. **A sketch round shows 3 to 5 different ideas** unless a comment asks for fewer. Different
   means different ideas; five crops of one idea is one idea.
5. **Every card and every row carries a comment box, a Lock and a Drop.** Lock and Drop exclude
   each other.
6. **Read the page before building the next round.** With a notes store configured:
   `curl -s <notes_api>/v1/<slug>/text`. Comments come back grouped by round, locks under
   "Locks" as LOCKED, drops under "Drops" as DROPPED. Never ask the user to paste comments you
   can read. Without a store, ask them to press **Copy all notes** and paste.
7. **Build the next round from what you read:**
   - LOCKED stays exactly as it is. Never regenerate a locked item.
   - DROPPED is not shown again.
   - Everything else is reworked from its comment. A comment changes the prompt itself (the idea,
     the framing, the count); it is never pasted onto the end of the old prompt.
   - New cards may be added.
   - Fold locks and drops into the manifest (`"locked": true`, `"dropped": true`) so they
     survive the rebuild. The manifest is the state between sessions.
   - A reworked card keeps its earlier version folded underneath (`"before"`).
8. **Check the phase first.** The switch at the top of every page belongs to the project.
   Read it with `curl -s <notes_api>/v1/<project>/text` (group "Phase"). Move to the next
   phase only when the current one has Locked cards; render the next phase from those cards only.
9. **Price before you generate.** State the cost of a round before running it, and ask before
   spending more than the user's threshold. Decide on sketches; render finals once.
10. **One link per round in your reply**, plus one line on what changed. The page carries the rest.

What the user says, and what it means:

| They say | Do |
|---|---|
| "reroll", "try again", "next round" | Read the page, rebuild the current phase from the comments (rule 7), republish. |
| "move forward", "go hi-fi", "go to production" | Check there are Locked cards, render the next phase from them, set `"phase"`, republish. |
| "I left comments" | Read them (rule 6) and say back what you understood in a few lines before spending anything. |
| "cut it for ..." / "slice it" | Production: `tools/slice-surfaces.py`, then a row per surface. |

If a brief asks for something that cannot be true or cannot physically happen, say so in one
sentence and build the corrected version. After one "no" on a design direction, ask what
reference the user has in mind before trying again on your own taste.

## Which page tool

| Tool | Use it for | Reference |
|---|---|---|
| `tools/storyboard-sheet.py` | Options as rows of cards (`strips`), and storyboards with beat tables (`scenarios`). The default page for Sketch, Hi-fi stills and Production. | `references/manifests.md` |
| `tools/anchor-sheet.py` | Film work: one still per beat, takes behind a switch, a locked scene shows only its chosen take. | `references/anchor-frames.md` |
| `tools/review-room.py` | Rounds of clips (and stills): every take named, comment + Lock + Drop beside each, frame-precise player. | `references/manifests.md` |
| `tools/slice-surfaces.py` | Production: cut one locked picture into content surfaces and get a ready row of cards. | `references/production-surfaces.md` |

```bash
python3 tools/storyboard-sheet.py project/concepts.json --out build/concepts.html            # build
python3 tools/storyboard-sheet.py project/concepts.json --out build/concepts.html --publish  # build and put live
```

A complete worked example, with placeholder art drawn in code: `examples/demo/`
(`python3 examples/make-demo-assets.py` first).

## Video: notes that point at a frame

In the review room the reviewer scrubs with the pointer (Shift gives a fine ±0.5 s window), steps
single frames with the arrow keys, marks in and out, and loops the marked part. **Note the frame**
writes `[Take name · frame 51 · 0:02.125]` into that take's comment; **note the marked part**
writes the range. Treat these as exact: when a note says a clip is right up to a frame, keep
everything before that frame and change only what follows. Once the user approves a passage of a
film, later rounds never touch it (the film locks forward).

For each note on a clip or still, make two takes that differ in one named thing, so the
comparison answers one question.

## Read when needed

- `references/flow.md` — the whole process in detail, phase by phase, with the project folder layout.
- `references/manifests.md` — every manifest key for the three page tools.
- `references/production-surfaces.md` — the surfaces, their sizes, crop or re-render, surface mocks.
- `references/sketch-prompts.md` — a prompt block that makes any image model draw a flat pencil sketch.
- `references/anchor-frames.md` — locking stills before paying for motion.
- `references/setup.md` — one-time setup: the notes store (a small Cloudflare worker) and publishing.

## Setup check

Before the first round, look for `creative-rounds.json` (in the project folder or above it) or
`~/.config/creative-rounds/config.json`. If neither exists, the pages still build and work:
comments stay in the reviewer's browser and travel by **Copy all notes**. Offer the setup in
`references/setup.md` once; do not block on it.

