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.
generate
Platformneta/generate
Use it in Cohub
Paste this into your agent's chat — it fetches the skill and follows it.
Use the skill: generate. Run `npx -y @neta-art/neta-search-cli@latest skills use neta/generate --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/generate
Summary
Turn your characters and ideas into new images, videos and 3D models, right on your canvas.
Make a new picture, rework one you already have, or restyle it into a different art look.
Animate a scene into a video, or redo a video that came out wrong.
Turn a character or object into a 3D model, then add textures, a skeleton for posing, or movement.
Your characters keep their look: it finds their existing pictures and uses them as the guide for new poses, outfits and scenes.
Browse a large library of art styles, from vintage anime and comics to watercolor, pixel art and woodblock prints.
SKILL.md
# Generate
Most generation tasks (image, video, audio, 3D) are covered here.
## Core loop
1. **Inspect** the selected model's declaration with `params` — legal `--param` keys, input limits, reference support.
2. **Find existing character references.** Before generating an existing character in a new pose, scene, outfit, or action, run `node /mods/neta/neta find images "<character name>"`. Prefer a matching character reference or three-view image; if none exists, fall back to the character atom cover.
3. **Construct** the generate command from the declaration only; pass declared `--param key=value` keys, omit the rest for their defaults. Include the selected character image as an actual reference input; mentioning it only in prose is insufficient.
4. **Submit.** Sync returns the media url in the result JSON. `--async` returns a `taskRunId`; check it once with `generate status` rather than waiting in-turn — except a video, whose cut `references/video/production.md` waits for in this turn.
5. **Look** at every image a sync call returns: open its `mediaPath` with your read tool and hold it against the ask — the right characters, any asked-for text spelled as given, whole hands and faces. Done when you can say what is in the picture because you saw it.
## Quickstart
`<kind>` is `image`, `video`, `audio`, or `3d`. A `3d` generate call also takes `--param operation=<op>`; `generate 3d params` lists the operations and `generate 3d params --param operation=<op>` shows one — see [`playbooks/3d.md`](playbooks/3d.md).
```bash
# inspect the model contract before building anything — declared params, input limits, reference support
node /mods/neta/neta generate <kind> params
# generate synchronously — result JSON carries the media url and mediaPath; use for images the creator is waiting on, or when this turn needs the url
node /mods/neta/neta generate <kind> --prompt "..." --work-title "Short Title" --param key=value
# generate asynchronously — returns a taskRunId; the card converges on its own
node /mods/neta/neta generate <kind> --async --prompt "..." --work-title "Short Title"
# check an async task once, non-blocking (do NOT run `generate reconcile`, it blocks)
node /mods/neta/neta generate status <taskRunId>
# re-render into an existing card instead of creating a new one — keep the same id across retries
node /mods/neta/neta generate <kind> --target-work <workId> --prompt "..."
```
## Rules
- The model comes from `NETA_DEFAULT_<KIND>_MODEL` (Studio injects it; 3D uses `meshy` unless it is set). Override for one call by prefixing the command; never pass `--model`.
- For character continuity, skipping image search is an error when matching image artifacts exist. Do not rely on `@CharacterName` alone when a reusable image is available.
- An `--async` image or 3D submit ends this turn's delivery — no wait-on-agent, no refresh. A video is the exception: `references/video/production.md` polls for the cut in this turn so it can be checked, placed and handed over. Never present a generating card as finished.
- **Before resubmitting**, read what the last call left. `ok:false` with no `taskRunId` never started: fix the cause and send it again. A `taskRunId` means the task exists and may be charged: `generate status <taskRunId>` tells running, done, or `GENERATION_FAILED`, and only `GENERATION_FAILED` is resubmitted. A call that printed no result has usually already written its Work — look in `neta work list`; its `taskRunId` is the key in `.neta/media-tasks.json` whose `target` is that Work's path.
- **Board.** A deliverable the user asked for goes on the Board per the **board-ops** skill — and so does each reviewed step of a multi-step production. A video's reference images, pitch board and final cut are steps of one flow, not hidden ingredients: place each as it is made, so the user can point at a reference or the pitch board while confirming. Only machinery the user never sees stays off — an asset composed inside a web page, a mask, a temporary file, a reference passed silently into a generation. A new version is a new work, placed to the right of the original; `--target-work` re-renders the same card, so the board is untouched. For `--async`, place it only once a later turn finds the task done — never resubmit to get a card.
- Embed only a CLI-returned mediaUrl — `` for images, `<video>` for video. A local path or placeholder is a broken link; after a rerun, confirm the link points at the new version. A 3D model is never embedded: its Work card shows it.
## Playbook
| Branch | Playbook |
| --- | --- |
| image — generate, rework, or restyle a still | [`playbooks/image.md`](playbooks/image.md) |
| video — make, animate, or fix a video | [`playbooks/video.md`](playbooks/video.md) |
| 3d — make, texture, rig, or animate a 3D model | [`playbooks/3d.md`](playbooks/3d.md) |