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.
character-design-sheet
Officialneta-search/character-design-sheet
Use it in Cohub
Paste this into your agent's chat — it fetches the skill and follows it.
Use the skill: character-design-sheet. Run `npx -y @neta-art/neta-search-cli@latest skills use neta-search/character-design-sheet --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.
npx -y @neta-art/neta-search-cli@latest skills use neta-search/character-design-sheet
Summary
Full-body reference sheet showing one character from front, side, and back with expressions and colors
One generated image with three standing views plus face closeups, detail callouts, and color swatches
Works best with a character who has a distinctive outfit, hairstyle, or visual traits worth documenting
Comes out as a horizontal reference page you can open, share, or use as a visual guide
The character's name appears as the sheet title; labels and callouts only if you ask for them
SKILL.md
# Character design sheet
One generated image: a concept-art reference page for **one** character, the kind an artist works from. Not a poster, not a trading card, not a single portrait.
## Requirements
This skill decides *what* the image is; the neta platform's `generate` skill does the generating.
- Step 1 (pick the character) comes first and may end the turn. Only once the character is given, read `/mods/neta/.agents/skills/generate/SKILL.md` and `/mods/neta/.agents/skills/generate/playbooks/image.md` and follow their core loop (model declaration, character references, submit, reply). Steps 2–7 run inside that loop.
- If `/mods/neta` does not exist in this world, tell the user image generation is not available here and stop.
## Steps
1. **Pick the character.** The character is *given* only when the user's message names it, or the message itself carries a selected character material. Anything else is **not given** — a description or epithet ("the girl who always carries books"), a role, or "the selected one" with no selection attached to the message. When it is not given, this is a **stop gate**: the turn does only three things — read `manifest.json`, ask **one** short question (your best match from the world by name, plus a few other characters from `manifest.json`), end the turn. In that turn do not read the generate docs, search or download images, write prompts or submit anything — even when you are sure who is meant; being sure is still a guess until the user confirms. Do not infer a selection from roleplays, memories, uploads or recent works. Once given, read it from the world (`manifest.json`, then the character atom).
2. **Find references** exactly as `generate` says (existing three-view or character images first, the atom cover otherwise). `--ref-file` takes a path inside the world; if you only have a URL, download it into this run's output folder first and pass that relative path.
3. **Fill the template** at `/mods/neta/.agents/skills/generate/references/image/character-design-sheet.md`: use its prompt template and its fill-in data block, with facts from the atom. Keep its layout and constraints (front / side / back must match; no extra characters, logos or watermark). Write the **first** prompt already clean, so it is not spent on a predictable block: no numeric ages, "teen", "girl/boy", "kid", "student", school or school-uniform terms (tie, pleated skirt, knee socks, tights, sweater vest, house names / crests — say "robe", "jacket", "trousers", "boots"), and no actor / film / celebrity mention. If the character is young in canon or lives in a school setting, add the line "adult character with adult proportions, not a child".
4. **Aspect ratio 16:9**, set through the parameter the image declaration exposes. With a pixel `size` parameter, width:height must be exactly 16:9 (e.g. `1536x864`); `1536x1024` is 3:2, not 16:9.
5. **Submit** through the `new` branch **synchronously** (no `--async`), work title `<Character> design sheet` — this turn needs the result to retry and to hand the Work over. If the provider rejects it (`content_policy_violation` / `moderation_blocked`), follow **If generation is blocked** below.
6. **Self-check** the Work before handing it over, from the world root:
`node <skill-dir>/scripts/check-sheet.mjs --work <work.id> --name "<Character>" [--out <this run's output folder>]`
(`<skill-dir>` = the folder this SKILL.md sits in; pass `--out` whenever the turn names an output folder, so the report `sheet-check-report.json` lands there). Pass = the last line is `SHEET CHECK PASS`. If `work_registered`, `artifact_ready` or `image_loads` fail, there is nothing the user can open — do not hand over a card; resubmit once, and if it still fails say plainly that no sheet was delivered. If only `aspect_16_9` fails, resubmit once with a corrected 16:9 size, check again, then hand over the best Work and name any remaining deviation.
7. **Reply and close** the way `generate` says. Hand the sheet over with an **interaction-components** link card whose target is the Work itself, `work.id` and `asset.url` taken from the successful generate result (`data.outputs[0].work.id`, `data.outputs[0].asset.url`). Write it as a real block in the reply, exactly this shape — the tags included, **not** inside a code fence, never as bare JSON:
```text
<interaction-json>
{
"version": 1,
"fallback": "<work title> — <one line on what the sheet shows>",
"component": {
"kind": "link",
"target": { "type": "work", "workId": "<work.id>" },
"presentation": {
"name": "<work title>",
"visual": { "type": "image", "url": "<asset.url>" }
}
}
}
</interaction-json>
```
(The fence above is only for showing it here.) A markdown image, a raw file URL, a `world-file` link or a fenced JSON snippet is not the handover — the card must point at the Work. Then close with **next-steps**.
## If generation is blocked
A content-safety rejection is not the end of the turn; it replaces generate's one-shot retry with this ladder. Each rung keeps everything from the rung before, and you stop at the first success:
1. Re-scrub everything step 3 lists — check the outfit line word by word (skirt, tights, knee socks, tie, sweater vest and house / school names are the usual leftovers) — and add "adult character with adult proportions, not a child" if it is not there yet.
2. Drop the `@Character` token **and** every reference image (the token attaches the atom cover on its own); describe the look in plain prose from the atom, without franchise, IP, house or school names, crests or emblems. The character's name appears only in the TEXT line as the sheet title, nowhere else in the prompt.
3. Drop the readable name from the image (no text at all); the name stays in the work title.
If rung 3 is what got through, say plainly in the reply that the name is on the Work, not on the sheet. If all rungs are blocked, say plainly that no sheet was made, list what was tried, and stop — do not hand over a card.
## Text on the sheet
- The sheet's title is the **character's name** — not the world's name. (Only exception: rung 3 of **If generation is blocked**.)
- Labels only if the user asked for them; otherwise the name is the only text (as the template says). If labels are wanted: at most 6, short, each used once.
- Text follows the user's language, or the language of the world's own documents.
## Not this skill
- Lore, stats or a profile document for one character → `character-profile-card`.
- A chart of how several characters relate → `character-relationship-poster`.
- A poster, cover or single illustration → use `generate` directly.