oc-text-forest-card

Community@sumino/oc-text-forest-card
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: oc-text-forest-card. Run `npx -y @neta-art/neta-search-cli@latest skills use @sumino/oc-text-forest-card --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/oc-text-forest-card
Summary

Turn one of your characters into a pure-white card covered in black type, with a full-body figure and a mini twin.

  • You get a single card: your character in candy-coloured shading on the right, and a small chibi version in the same pose at her feet.
  • The rest of the page is dense black text: tall vertical name columns, small profile blocks, a quote in her voice, and a barcode at the bottom.
  • Arrows with notes point at real features of your character, and white text fragments sit over her dark clothing.
  • Facts come only from your character's profile. Anything missing prints as ??, so no invented birthdays or heights.
  • It works best for a character with a striking look, a clear role, a recurring habit and a line she would say. It ends as a published page plus a card on your board.
SKILL.md
# OC Text Forest Card

One white page, one character, and an unreasonable amount of black type. The figure stands in candy-coloured cel shading at the right; the Q version stands in the same pose at her feet; everything else is text — vertical columns at the edges, micro archives in the middle, annotations with arrows over her skin, white fragments over her dress.

**Live sheet:** https://neta.art/w/sumino/sweet-nightmare-park/blissful-text-forest
**Package:** `templates/` is the working sheet; `references/typography.md` is the lane and size system; `references/art-direction.md` holds the two plate prompts; `assets/demo-sheet.webp` is the shipped page.

## What the builder gets

- Two generated transparent plates: a full-body figure and a 2.5-head Q version, same outfit, same pose.
- A single-sheet page: `#FFFFFF`, all type `#000`, sized in `cqw` so the whole card scales as one print.
- Layered type: blocks behind the figure, blocks printed over her, white-on-dark fragments on the dress, a rule band and barcode at the foot.
- A published web Work and a Board card.

## When to use

- "text forest", "text sea poster", "idol magazine insert", "fan support card";
- "文字森林", "文字海", "偶像杂志内页", "应援卡";
- a character sheet where typography carries most of the page.

Not for: an illustrated poster with a scene; a magazine cover with a photo and a title; an AVG or game screen.

## Hard rules

0. **Sandbox CLI.** `node /mods/neta/neta …`.
1. **Read the OC.** Atom, `## 形象参考`, cover. Facts, palette, asymmetry and props all come from there.
2. **Type is HTML, never baked.** Image models fake glyphs; the brief forbids false characters. Generate the character only, set every word in code.
3. **Pure white `#FFFFFF`**; no scenes, gradients, textures, frames or colour blocks.
4. **All type black**, except fragments deliberately reversed to white over the dark dress or wing.
5. **One full body + one Q version, same pose.** The chibi must stand on both feet in the same stance, same outfit, same prop, same side.
6. **Canon only.** Missing fields print `??`; never invent a birthday, height or blood type.
7. **Density is the design**: ≥ 12 text blocks, ≥ 3 vertical columns, ≥ 1 block interrupted by the figure, ≥ 1 white block over dark cloth.
8. **Ship it**: published Work plus Board card.

## Pipeline

### 0. Read the world and the OC

```bash
node /mods/neta/neta atom list --type character
node /mods/neta/neta atom get "world/characters/<Name>.md"
node /mods/neta/neta find images "<Name>"
```

Collect: name, kana/reading, role, faction, the repeating beat (a "cycle" line), personality keywords, skills, speech habit, colours, and one quotable line in their voice. Note which fields the atom does **not** have — those become `??`.

### 1. Generate the two plates

Prompts and acceptance in [`references/art-direction.md`](references/art-direction.md).

```bash
NETA_DEFAULT_IMAGE_MODEL=gpt-image-2 node /mods/neta/neta generate image \
  --work-title "<Name> · Text Forest · body" \
  --param size=1024x1536 --param quality=high --param output_format=png --param background=transparent \
  --image "world/media/studio/characters/<Name>.png" \
  --prompt "$(cat /tmp/<slug>-body.txt)"
```

Then a second call for the 2.5-head chibi, `--param size=1024x1024`, same flags. Check each with:

```bash
convert "<file>.png" -alpha extract -format "alpha=%[fx:mean]\n" info:   # 0.3–0.6 = clean cut-out
```

### 2. Create the sheet work

```bash
SLUG="<oc>-text-forest"
WORK="works/web/$SLUG"
node /mods/neta/neta work init web "$WORK" --title "<OC> · Text Forest"
# the CLI may normalize works/web → works/webs; use the printed workDir

cp templates/index.html templates/style.css templates/app.js "$WORK"/
cp templates/content.example.js "$WORK/content.js"
mkdir -p "$WORK/assets"
convert "<body>.png"    -resize 900x -quality 92 "$WORK/assets/body.webp"
convert "<chibi>.png"   -resize 520x -quality 92 "$WORK/assets/chibi.webp"
```

### 3. Rewrite the type

The starter is filled with one finished example. Replace, block by block, following [`references/typography.md`](references/typography.md):

- the giant vertical name and its 10+ repetitions;
- the epithet column and the second vertical column;
- the micro header (name / kana / roman / cycle / role / faction);
- the slogan (three short lines, `nowrap`);
- the voice quote and its English gloss;
- the archive list — canon only, `??` where absent;
- the monologue lines, the tags, the edition line, the Q caption;
- the arrow annotations — each pointing at a real feature of *this* character.

Keep the lane rhythm: micro `1.2` → slogan `21.6` → quote `34.2` → archive `41.5` → monologue `59.4` → closing `71` (cqw from the top).

### 4. QA

[`references/qa.md`](references/qa.md): cut-out edges, no overlapping blocks, no invented facts, density count, 1000×1200 and 390×844.

### 5. Publish and place

```bash
node /mods/neta/neta work publish web "$WORK"
node /mods/neta/.agents/skills/board-ops/scripts/place.mjs \
  --title "<OC> · Text Forest" --work "$WORK"
```

## Files

```
<work>/
  index.html   # sheet, three layers (.back / figure / .chibi / .front), all type
  style.css    # cqw lane system, size scale, white-on-dark rules, mobile
  app.js       # reserved for small interactions; the sheet itself needs none
  content.js   # the fact set (documentation of what the type says)
  assets/body.webp   assets/chibi.webp
```

## Pitfalls

- **Baked text.** Any generated word will eventually be wrong; keep the plates textless.
- **A chibi that sits down.** Without "both feet flat, NOT sitting, NOT kneeling", the dress pools and the pose breaks.
- **Blocks fighting each other.** Every block needs its own `top` and `left`; a shared `position:absolute` class without coordinates dumps it at the origin.
- **White text hidden behind the dress.** White fragments must live in the front layer (z 4), not the back layer.
- **Invented stats.** A fan card with a fabricated birthday is a lie in a nice font.
- **A half-empty corner.** Add a fragment — density is the brief.
- **Poster type on a phone.** The sheet scales; 5 px type is expected. Do not enlarge the type — it breaks the layout.

## Demo

`blissful`, ultimate boss of *Sweet Nightmare Park*: white hair with cyan tips, a skull on the side of her head, spiral pink eyes, a bone left hand, one white wing and one black bone wing, a black dress with a bone-rib corset. Ten-plus black repetitions of her name, a heavy vertical epithet column, an archive list with `??` for height/weight/blood type, the line 「怖がらないで。痛みは、いちばん綺麗な音よ。」, arrows to the eyes, hand and hem, and a 2.5-head chibi standing at her feet in the same pose.