Basic Cohub abilities. Most agents already have these mounted; listed here for reference.
Platform Published by the Neta team.
Official Made by the Neta team.
Verified Reviewed by the Neta team.
Community Shared by a Cohub user. Not reviewed — read SKILL.md before you use it.
oc-abyss-wake-poster
Community@sumino/oc-abyss-wake-poster
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-abyss-wake-poster. Run `npx -y @neta-art/neta-search-cli@latest skills use @sumino/oc-abyss-wake-poster --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-abyss-wake-poster
Summary
A vertical art print: tiny boat, sweeping mineral-pigment wake, live text in 11 languages.
You get a 3:4 poster with a small boat in the corner and a huge painted wake carrying your character's colors and symbols.
The character name, world name, and tagline appear as live text that switches between 11 languages when you click the menu.
Works best for a character with a strong visual identity: distinctive colors, clear signature objects, and a world with a poetic theme.
The result is a published web page that displays the poster on a dark gallery wall, plus a card you can place on your board.
The left third stays mostly empty cream paper so the text never covers the artwork, and the boat stays small so the wake dominates.
SKILL.md
# OC Abyss Wake Poster
A quiet, vertical art print for one OC: a minute boat on pale water in the lower-left, and from its stern a huge mineral-pigment wake that carries the character's motifs and world across the right and top of the page. The left third stays paper. The typography is live HTML, not baked into the image, so the theme, tagline and chrome can switch across eleven languages.
**Live demo:** https://neta.art/w/sumino/sweet-nightmare-park/irisdeep-abyss-wake
**Starter:** `templates/` contains the working page and an IrisDeep example. `assets/demo-cover.webp` is the gallery preview.
## What the user gets
- A 3:4 mineral-pigment illustration: vast cream negative space, a tiny boat with a simplified OC, a faint reflection, and a five-to-seven-band wake filled with the OC's symbols and world fragments.
- A single-page web Work that frames the print on a dark gallery wall.
- Live typography in the paper's left area: `NO. 01`, the OC name in a vintage serif, the localized theme, and a localized tagline.
- Eleven complete locales, system-language detection, English default and fallback, a manual selector, and Arabic RTL.
- A published Work and a Board card. The raw artwork is an ingredient, not the deliverable.
## When to use
Use when the user wants a poetic, negative-space OC poster built around a boat and a painted wake, especially:
- "abyss wake", "boat and ribbon poster", "mineral pigment OC poster";
- "岩彩尾迹", "扁舟", "尾迹", "留白色带";
- a multi-language single-character plate for an OC in this world.
Do not use for:
- a branching story, game or interactive fiction — `create-avg` or `game-maker`;
- a chat roleplay or companion — `create-roleplay` / `companion-onboarding`;
- the split-panel skyline poster — that is the `oc-skyline-slices` page pattern, not this one;
- a plain illustration with no web presentation — generate an image only.
## Hard rules
0. **Use the sandbox CLI path.** Every `neta` command is `node /mods/neta/neta …` (`neta` may not be on PATH).
1. **Read the OC before drawing.** Use the world's real character, cover and `## 形象参考`. Never reuse the IrisDeep demo data in another world.
2. **No text in the generated image.** The artwork is the picture only; the left third is paper. All type is HTML in the page. This is what makes i18n possible.
3. **The left third stays clean.** The boat lives in the lower-left, the wake occupies the right and top. Keep the left 30–35% almost empty for the caption.
4. **Tiny boat, huge wake.** The boat is about 3% of the canvas height, the figure is a simplified silhouette with only its core identity features, and the wake is the main visual mass.
5. **The palette comes from the OC.** Read the representative colors, not a generic fantasy palette. The wake may add one or two contrast specks, never a rainbow.
6. **At least 10 complete locales.** English is default and fallback. Every locale has `world`, `theme`, `tagline` and the two UI strings. No half-translated locale.
7. **The page is fixed, no scrollbars.** Desktop is a framed 3:4 print; mobile is a centered print with a gallery mat.
8. **Publish and place the card.** A finished source page without a published Work and a Board card is not shipped. The generated image itself is not placed on the Board.
## Pipeline
### 0. Read the OC and the world
```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>"
```
Record:
- `name` and its atlas number (`NO. 01` … `NO. 09`);
- 4–8 identity features from the cover and `## 形象参考`;
- the OC's representative colors;
- the world/zone it belongs to (`theme`) and the park/world name;
- 6–10 motifs for the wake: signature object, body feature, habitat, weather, landmark, symbol.
If the world already has a multi-language atlas, reuse its zone name and tagline translations. Otherwise translate the theme and tagline into the eleven locales in `references/i18n.md`.
### 1. Create the page work
```bash
SLUG="<name>-abyss-wake" # kebab-case, unique
WORK="works/web/$SLUG"
node /mods/neta/neta work init web "$WORK" --title "<Name> · <Theme>"
# The CLI may normalize works/web -> works/webs; use the printed workDir.
```
Copy the starter into the work directory:
```bash
cp templates/index.html templates/style.css templates/app.js "$WORK"/
cp templates/content.example.js "$WORK/content.js"
mkdir -p "$WORK/assets"
```
`content.js` is the only per-OC data file. Replace every demo value in it.
### 2. Generate the wake artwork
Read `references/art-direction.md` for the full prompt and palette rules.
```bash
NETA_DEFAULT_IMAGE_MODEL=gpt-image-2 node /mods/neta/neta generate image \
--work-title "<Name> · <Theme> wake" \
--work-description "<one sentence about the print>" \
--param size=1152x1536 --param quality=high --param output_format=png \
--prompt "$(cat /tmp/<slug>-wake.txt)"
```
The prompt must start with `@<Name>`, use the reference only for the character's silhouette and core features, and ask for no text, no watermark, a clean left third, a tiny boat in the lower-left and a mineral-pigment wake. Use `gpt-image-2` (reference-capable) unless the world's model is already configured for references.
Save the result as `assets/wake.webp`:
```bash
curl -sL "<mediaUrl>" -o /tmp/<slug>-wake.png
convert /tmp/<slug>-wake.png -quality 90 "$WORK/assets/wake.webp"
```
The generated image Work is an **ingredient**; do not place it on the Board. Only the web Work is a deliverable.
If the left third is not clean, regenerate once with a stronger "left 35% empty cream paper" instruction. The page also lays a soft cream veil behind the caption, so minor texture is recoverable; a busy ribbon in the left third is not.
### 3. Fill `content.js`
```js
window.WAKE = {
name: "IRISDEEP",
number: "NO. 01",
art: "assets/wake.webp",
accent: "#6f8a8b",
langs: {
en: { label: "English", short: "EN", dir: "ltr" },
"zh-CN": { label: "简体中文", short: "中", dir: "ltr" },
// … at least 10 locales, en always present
},
world: { en: "Sweet Nightmare Park", "zh-CN": "蚀梦甜魇疯乐园", /* … */ },
theme: { en: "The Abyss Slide", "zh-CN": "深渊滑梯", /* … */ },
tagline: { en: "Every fall is only another expedition.", "zh-CN": "每一次坠落,都只是另一场探险。", /* … */ },
ui: {
en: { language: "Language", atlas: "OC World Atlas" },
"zh-CN": { language: "语言", atlas: "OC 世界观图鉴" }
// … one per locale
}
};
```
Rules:
- `name` and `number` are proper nouns; they stay identical in every locale.
- `theme` is the OC's world/zone name, translated consistently with the atlas.
- `tagline` is the world's English theme line, translated with the character's voice, not flattened.
- `accent` is the OC's representative color; it colors the language-menu marker.
- Every locale in `langs` must have all five layers: `world`, `theme`, `tagline`, `ui.language`, `ui.atlas`.
- The page supports `?lang=<code>` for QA/share; it still saves a manual choice in `localStorage`.
### 4. Validate
```bash
node scripts/validate-i18n.mjs "$WORK"
```
It checks the required files, at least ten locales, English presence, all keys, and the `langs` metadata. Exit 1 means fix the content, not the page.
### 5. QA
Follow `references/qa.md`. At minimum:
- open at 1440×900 and 390×844;
- switch all locales, including Arabic;
- the name, theme and tagline stay inside the left column, never over the wake;
- the boat is tiny and the left third is readable;
- no page scrollbars, no missing key, no `undefined`;
- the poster remains 3:4 and centered.
### 6. Publish and place
```bash
node /mods/neta/neta work publish web "$WORK_DIR"
```
Place the **web Work** card on the Board with the board-ops `place.mjs` script. If the Board read fails with `unknown property preview` (a newer Studio card field), use the hand-written `neta.work` card patch in `references/publishing.md` — content is safe, only placement needs the fallback.
The final reply links the Work; the raw artwork is never linked as the deliverable.
## Content model
```
$WORK/
index.html
style.css
app.js
content.js # per-OC data; the only file that changes per character
assets/wake.webp # generated artwork, no text
```
`index.html`, `style.css` and `app.js` are generic and should not be edited per OC except for a deliberate layout change. The caption, language menu and fitting logic all read `content.js`.
The name auto-fits: `app.js` shrinks the serif name until it fits the 34% text column. The theme and tagline wrap; the caption grows downward into the empty paper, never over the boat.
## Demo
The shipped example is IrisDeep from *Sweet Nightmare Park*: a teal mineral wake, the Abyss Slide, and eleven locales. It is a demo, not a constraint. Replace the cast, palette, motifs, world, theme and tagline for the target OC.
## Pitfalls
- Baking text into the image kills the locale switch. Keep the image textless.
- A big character in the boat destroys the scale contrast. Keep her a speck.
- A wake that fills the left third leaves nowhere for the caption.
- A warm generic palette ignores the OC. Read the palette from the atom.
- The name `Celestia Vela` is wider than `IRISDEEP`; always run the name fitter and check it.
- Ten locales is the floor, not a target. The starter ships eleven; adding a locale means adding one `langs` entry and five strings, then re-running the validator.
## Publishing this skill
This is a maintainer note, not part of the poster build. The community CLI is:
```bash
npx -y @neta-art/[email protected] skills add oc-abyss-wake-poster
npx -y @neta-art/[email protected] skills submit oc-abyss-wake-poster --wait 120
npx -y @neta-art/[email protected] skills find "abyss wake"
```
Only the space owner can submit. `admitted` / `published: true` means the version was collected; `released: true` means it is live in community search. A fresh community submission is not automatically in Studio's curated shelf. See `references/publishing.md`.