vertical-window-scene

Community@sumino/vertical-window-scene
Community skill — not reviewed. It was shared by Jagulus and has not been checked by Neta. Read SKILL.md below before letting an agent use it.
Use it in Cohub

Paste this into your agent's chat — it fetches the skill and follows it.

Use the skill: vertical-window-scene. Run `npx -y @neta-art/neta-search-cli@latest skills use @sumino/vertical-window-scene --via site` and follow what it prints. Read its complete output, redirecting it to a temporary file first if necessary, and resolve relative paths from the skill directory it prints.
Install from a terminal
npx -y @neta-art/neta-search-cli@latest skills use @sumino/vertical-window-scene
Summary

Turn a character into a quiet, magazine-style illustration: a tiny figure in a tall floating frame on pure white.

  • You get one tall portrait-format image: a dense, richly colored scene inside a floating frame, surrounded by clean empty white.
  • Your character appears small inside the scene, set against a landmark from your world, so it feels like a quiet, slightly surreal moment.
  • Flat dark silhouettes of your character's props and motifs drift out of the frame onto the white, with soft reflections beneath it.
  • One giant white letter fragment is cut off by the frame edge, with no readable words anywhere in the picture.
  • Optionally, get a simple gallery page showing the image centered on white with a caption. Works best for characters with a distinct look and props.
SKILL.md
# Vertical Window Scene

One white page, one tall window, one small figure. Inside the frame a dense, saturated scene; outside it, pure `#FFFFFF` carrying flat silhouettes that have escaped the frame, and their reflections on the floor. A single oversized glyph is cropped by the frame edge. The composition is the contrast between a full rectangle and an empty field.

**What it is not:** a full-bleed illustration, a poster with a border, a portrait close-up. The white margin is half the design.

Reply in the user's language. Text the user sees in the deliverable follows the user's language.

## Before you start

| Input | Counts as given when | If missing |
| --- | --- | --- |
| Subject | the user names a character that exists in this world, or the message carries the character | ask once, listing three to five names |
| Appearance + palette | the character's atom has an appearance section and a cover image | ask for the missing piece in the same question |
| Landmark | the world's own setting supplies one | pick a neutral landmark (a tower, a shore, a hall) and say so |
| Motif pair | two motif families follow from the character's props | derive them; do not ask |

All given → build to delivery without asking again. Never ask about format, palette or framing: those are this skill's decisions.

## What you get

- A 3:4 image: floating frame at a fixed geometry, scene inside, two silhouette clusters outside, reflection below, one cropped glyph.
- A palette of exactly three colours (plus at most one accent for the single light source).
- A tiny figure at 12–15% of the frame height, scaled to the architecture.
- An optional one-file plate page that frames the image on white with a caption.

## When to use

- "vertical window illustration", "floating frame", "white frame scene", "silhouette escape", "reflection scene";
- "竖长画框插画", "白底窗口构图", "剪影从画框里飘出来", "画框倒影";
- a quiet, editorial, slightly surreal character piece.

Do not use for: an action scene that must fill the page; a poster with title typography; a character sheet; a close-up portrait.

Out of scope, and never touched by this skill: world settings and configuration (name, style, tone, covers), existing atoms, and existing files. Do not change them, and do not delete anything that is already there.

## Hard rules

0. **Run from the world root** (`/workspace`); every CLI call is `node /mods/neta/neta …`.
1. **Read the subject first.** Get the character's atom, their `## 形象参考` / appearance notes, and their cover. Everything named in the prompt — costume, props, motifs, palette — comes from there. Never invent culture-specific lore.
2. **Pure white field.** `#FFFFFF` only, flat, no paper grain, no vignette on the *white* (grain inside the frame is fine and wanted). A grey or textured margin fails the format.
3. **Fixed geometry.** Frame width 60% of the canvas, height 80%, top margin 10%, side margins 19–20%, bottom 10% reserved for reflections. Do not let the frame touch any edge.
4. **Three colours.** One light (sky/mist), one mid (garment/fog), one dark (structure/silhouette), plus at most one accent used only at the glowing element. A fourth hue fails the print look.
5. **The figure is small.** 12–15% of the frame height, standing inside the scene at a believable scale. Bigger turns it into a portrait; smaller turns it into scenery.
6. **Silhouettes cross the edge.** Two clusters — one on the left margin, one on the right — flat, single colour, no highlight, and at least one shape per cluster must straddle the frame edge so it reads as *escaping*.
7. **Reflections exist.** Below the frame, on white: the figure and the silhouettes reappear at ~25–35% opacity, stretched ~1.2×, soft-edged.
8. **One glyph, cropped.** A giant white sans-serif letter fragment, 2 characters at most, cut by the frame edge. Partial strokes only: no full words, no small text.
9. **Ship it.** Publish the Work and place the card (see `references/publishing.md`).

## Procedure

### 1. Gather the subject (5 facts)

| Fact | Where it goes |
| --- | --- |
| silhouette + signature prop | the figure paragraph |
| world's landmark | the frame's background |
| two motif sets | the two silhouette clusters |
| palette trio | the colour paragraph |
| one glowing element | the accent colour |

If the world gives you nothing for a slot, use a neutral equivalent (a tower, a lamp, moths) — never another world's proper nouns.

### 2. Fill the prompt

Open [`references/prompt-template.md`](references/prompt-template.md). It holds the full prompt with placeholders (`[character]`, `[place]`, `[landmark]`, `[motif-a]`, `[motif-b]`, `[glow]`, `[light]`, `[mid]`, `[dark]`, `[accent]`, `[glyph]`) in both an English and a Chinese version. Fill every placeholder; delete no sentence — each one is a constraint that has failed before.

### 3. Generate

```bash
NETA_DEFAULT_IMAGE_MODEL=gpt-image-2 node /mods/neta/neta generate image \
  --work-title "[character] · window" \
  --param size=1536x2048 --param quality=high --param output_format=png \
  --image "world/media/studio/characters/[character].png" \
  --prompt "$(cat /tmp/window-prompt.txt)"
```

- 3:4 at 1536×2048; nothing larger is needed for this flat style.
- The character reference is an identity input only — say so in the prompt, or the model copies the cover's pose and background.
- One render. Fix by editing the prompt, not by generating variants.

### 4. Verify before showing it

[`references/qa.md`](references/qa.md) has the measurable checks. Quick version:

```bash
# frame box as a percentage of the canvas
identify -format "%wx%h\n" out.png
convert out.png -fuzz 2% -format "%@\n" info:      # trim box of non-white content
# palette count (should be ~3 + white)
convert out.png -colors 8 -format %c histogram:info: | sort -rn | head -8
```

Fail → one targeted re-render. Two misses on the same slot → change the slot's content, not the wording.

### 5. Optional plate page

`templates/plate.html` + `templates/plate.css` are a two-file gallery plate: white page, image centred, one caption line. Copy them next to the image, replace `{{TITLE}}`, `{{CAPTION}}`, `{{IMAGE}}`, then publish the folder as a web Work (`node /mods/neta/neta work publish web <dir>`). Skip it if the deliverable is the image alone.

## Deliver

- **Image only:** the generated image is already a Work; hand it over with an interaction-components card whose target is that Work (`{ "type": "work", "workId": "<id from the generate output>" }`), never a bare Markdown image alone.
- **With a plate page:** publish the folder (`work publish web`), then place the Work card and hand over the published Work id. Say one line about what you measured (trim box, palette count, figure scale) and name anything you could not check.
- If a render fails twice on the same slot, say which slot is fighting and what you changed instead of reporting a finished piece.

## Files

```
.agents/skills/vertical-window-scene/
  SKILL.md
  references/prompt-template.md   # EN + ZH prompt, placeholder table
  references/palette-recipes.md   # four ready palettes, how to derive one
  references/qa.md                # measurable checks + failure table
  references/publishing.md
  templates/plate.html
  templates/plate.css
```

## Pitfalls

- **Grey margin.** "White background" is read as paper; say "absolute pure white #FFFFFF, flat, unlit, no texture" and put the grain sentence *inside* the frame only.
- **Frame too big.** Without percentages the frame eats the margins and the format collapses into a normal illustration.
- **Figure too large.** State the percentage of frame height; otherwise it becomes a portrait.
- **Silhouettes inside the frame.** Say "crossing the frame edge onto the white" — otherwise they stay decorative wallpaper inside the scene.
- **No reflection.** Say "on the white floor below the frame, 1.2× stretched, 30% opacity"; reflections are the half of the device models forget.
- **Readable words.** Ask for "letter fragments, at most two characters, no complete word"; full words come back misspelled.
- **Fourth colour.** Name the trio and then say "no other hue, including skin-tone warmth" — skin is the usual leak.

## Acceptance

The image passes when the trim box measures 60%×80% ±3%, the top margin is 9–11%, the palette histogram shows three hues plus white, the figure is 12–15% of frame height, both margins carry silhouettes that touch the frame edge, the white floor below the frame carries reflections, and no complete word appears anywhere.