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.
isekai-gacha
Verified@wangjiyuan/isekai-gacha
Forked from neta-search/isekai-gacha
Use it in Cohub
Paste this into your agent's chat — it fetches the skill and follows it.
Use the skill: isekai-gacha. Run `npx -y @neta-art/neta-search-cli@latest skills use @wangjiyuan/isekai-gacha --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 @wangjiyuan/isekai-gacha
Summary
Reincarnate any character into another world and get a collectible ukiyo-e trading card showing what they became.
Roll a new race, class, talent, curse, starting item, a fate and the goddess's verdict for one character, in a single pull.
You get one horizontal woodblock-style card: the character full body on the left, a ruled table of results on the right.
Rarer pulls get fancier cards: plain paper, indigo waves, violet with cranes, or gold leaf with a rising sun.
Works with characters from your world or anyone you name. You can lock a race or class, or ask for a ten-pull.
Turn a card into a roleplay: you play the reincarnated character, with a status bar and an opening scene picture.
SKILL.md
# Isekai Reincarnation Gacha
A character of **this world** dies and is reborn in another one. The dice decide what they become.
The card shows that result, and the record keeps it. The roleplay then lets the creator play it.
```bash
S="<skill-dir>" # this skill's own directory — the folder this SKILL.md is in (installed or downloaded)
```
| File | Holds |
|---|---|
| `scripts/read-context.mjs` | Read-only digest of the world: config, characters (id, name, cover, summary), earlier reincarnations |
| `scripts/roll.mjs` | The dice. Per card it outputs the image prompt, the reply text and the roleplay seed |
| `scripts/generate.mjs` | Renders the cards (character cover as reference), writes the records, places the cards on the Board |
| `scripts/roleplay-fields.mjs` | Card → roleplay: prints the fields the card decides, merges them into a designed roleplay, checks the saved one |
| `scripts/rp-cover.mjs` | The roleplay's opening-scene image, image-to-image from the card (gpt-image-2), character in frame |
| `data/tables.json` | Every entry per slot and tier, the fates and the verdict lines (both by overall rarity) |
| `data/card.json` | Odds, rarity thresholds, pity, image model, card look, roleplay rule templates |
| `references/roleplay-handoff.md` | How a card becomes a roleplay — the full procedure. Read it whenever a roleplay is asked from a card |
| `references/known-limits.md` | What the image model gets wrong, and the fixes |
| `gacha/reincarnations/No.<no>.json` | One record per card: written here, read by the roleplay step |
## Language
Reply in the user's language, including the final handover and the next steps. Text the user sees in the deliverable (the card, the reply, the roleplay) follows the user's language too — pass `--lang` to match it. Translate what the scripts print; don't paste it (the card's `reply` text is already in the card's language and is pasted as is).
## Principles
- **One pull by default.** Never start a ten-pull by yourself. A batch runs only when the creator asks for one, by count or by tapping that next step.
- **The only question is which character**, and it is asked only when needed (Step 1).
- **Every card gets exactly one image.** No HTML page.
- **Never re-roll for a better rarity.** The dice result is final.
- **Everything follows the creator's language.** The card text, the reply and the roleplay are all in it: pass `--lang zh` when the creator writes Chinese and `--lang en` otherwise. Switch only when they ask for the card in another language.
- **The card describes the reincarnated self.** Every line is about their life in the new world. **Fate (命运)** is where that life is headed: drawn from the overall rarity's pool, set below a divider, foretold and not yet fulfilled.
- **The record describes the reincarnated version.** Never edit the original character's atom.
- **Content limits:** no gore, no sexual content.
- **A named character is the one rolled, in the same turn.** Whoever the creator names — a character of this world, one from any other work, an original, anyone — gets the card. Never stop to create a character, never ask again, never swap in someone else, never comment on who it is.
## Step 0 — Read the world
```bash
node $S/scripts/read-context.mjs
```
Read nothing else up front. The world is always the current one; never ask which world.
**The creator named a character → go straight to Step 1 and roll**, even when `noCharacters: true`.
**Named nobody and `noCharacters: true` →** the only case with nothing to roll. Ask in one short, friendly line
who they want reincarnated (any name works), and end the turn. No refusal, no explanation of the world being empty.
## Step 1 — Pick the character
1. If the creator named a character, use them:
- the name matches one of `characters[].name` (exact, or one contains the other) → that atom, `--character <id>`;
- no match → roll for exactly that name with `--name "<name as the creator wrote it>"`. No atom is needed for the card.
2. Otherwise, if the world has exactly one character, use them.
3. Otherwise, ask **one** single-choice question through the **questionnaire** skill. It is the only question this skill asks.
- Options are the characters: label = name, description = summary.
- Text-only, because the covers are local files.
- End the turn there, and continue from the answer.
## Step 2 — Read the character
**`--name` (not in this world):** write `--look` from what the creator said plus the character's well-known
appearance, same format as below. There is no cover reference, so `--look` is the only anchor — be specific.
**A world character:** read the chosen atom once:
```bash
node /mods/neta/neta atom get <id>
```
From it, write `--look`: a short English appearance that **starts with their gender and apparent age** (e.g. "young man", "middle-aged woman", "androgynous teen"), then hair, eyes, build, clothing colours and signature marks. Use only what the atom states; if it states no gender, write none and the cover decides.
## Step 3 — Roll
```bash
node $S/scripts/roll.mjs [count] (--character <id> | --name "<name>") --look "<appearance>" [flags] --out /tmp/isekai-batch.json > /dev/null
```
| The creator says | Flag |
|---|---|
| "让林晚转生" | `--character world/characters/林晚.md` |
| "让 Peter Griffin 转生" (not in this world) | `--name "Peter Griffin"` |
| "我想让 TA 当吸血鬼" | `--lock-race "Vampire"`: keeps its table rarity; a value not in the table counts as SR |
| "职业锁成吟游诗人" | `--lock-class "Bard"`: same rule |
| "抽十张" / taps the ten-pull option | `10` |
| the creator writes Chinese (default) / asks for a Chinese card | `--lang zh` — otherwise `--lang en` |
## Step 4 — Render, record, place
```bash
node $S/scripts/generate.mjs /tmp/isekai-batch.json --out /tmp/isekai-result.json --board-title "<name>的异世界转生"
```
This one command does three things:
- renders every card in parallel, passing the character's cover as the reference image when the atom has one;
- writes `gacha/reincarnations/No.<no>.json` for every card that rendered;
- places the cards as one group on the Board the creator is looking at (`--board <path>`).
A command that ended without its result may already have rendered and been charged. Check `neta work list` before running it again.
## Step 5 — Look, fix once
Open each `mediaPath` and check:
- **The person:** the character is recognisably themselves, with the new race traits added on top.
- **The text:** every row is present and spelled as rolled, and the header holds the rarity, title, number and name only.
- **The tags and banner:** the tier tags have the right colours, and the verdict banner is the largest text.
Fix at most once, and only a card that is wrong or unreadable. Re-render into the same Work so the Board card stays put, and change only the thing that was wrong:
```bash
NETA_DEFAULT_IMAGE_MODEL=gpt-image-2 node /mods/neta/neta generate image --target-work <workId> \
--work-title "<title>" --param size=1536x1024 --param quality=high [--image <cover>] --prompt "<same prompt + one fix line>"
```
If it is still wrong after that, hand it over and name the flaw in one line. `references/known-limits.md` lists the usual faults and their fix lines.
## Step 6 — Reply
**Single pull.**
1. Paste the card's `reply` text unchanged:
```
【SR】Isekai Reincarnation No.343147 林晚
🧬 Race: Nine-Tailed Fox [SR]
⚔️ Class: Guildmaster of Assassins [SR]
✨ Talent: Chicken Whisperer [N] — Can talk to every chicken. Chickens love gossip
☠️ Curse: Liar's Blush [R] — The whole world knows when you lie
🎒 Starting Item: A Talking Sword [R]
🔮 Fate: Will duel the Demon Lord under the moon
“Someone is already waiting for you.”
```
2. Hand the card Work over on its own line through the **interaction-components** skill, as a link card with `{ "type": "work", "workId": "<id>" }`.
3. Close with next steps.
**Batch (only when asked).**
1. One line of tier counts.
2. A table, highest tier first: rarity (mark pity cards), No., race · class, one funny highlight.
3. Hand over the top card's Work.
4. Close with next steps. Here the first option targets the top card.
## Next steps
Close through the **next-steps** skill: one options block, at most three options, in the creator's language,
each changing exactly one thing and naming the real character and card number.
1. **Always first — a roleplay from this card.** Its subtitle must carry the card number and the words
"转生卡" / "reincarnation card", so the next turn routes back to this skill:
- zh: title `按转生卡开演`, subtitle `按 No.<no> <name>的转生卡设定,做一个异世界 roleplay`
- en: title `Play this card`, subtitle `Make an isekai roleplay from reincarnation card No.<no> (<name>)`
2. Then up to two of:
- **Again** — `让<name>再转生一次`
- **Another character** — another name from the digest, `让<other>也转生一次`
- **Ten-pull** — the creator's choice, never run unasked: `给<name>来一次十连,四档保底`
## Roleplay from a card
When the ask is a roleplay from a reincarnation card (the first next step, or any ask naming a card
number with roleplay), **follow `references/roleplay-handoff.md` step by step**. In short:
1. `roleplay-fields.mjs --no <no>` — what the card decides. A card rolled with `--name` has no world character yet; the script says so — add that character to the world (name and look from the record), rerun with `--attach <atomId>`, and carry on in the same turn.
2. Design the narrative with create-roleplay's rules (the premise starts in the new world, never at the death, names the player, their race and class, and veils the fate as suspense — something is waiting for them, never what; the opening is the moment they wake in the new world; the fate is only hinted).
3. `roleplay-fields.mjs --no <no> --merge <design>` → `roleplay add`. The script writes, and you never write by hand:
- `optional_characters` = the reincarnated character, so the player plays them;
- `display` = `{"markdown": true, "status_bar": true}`, the plain switch (as in The Ledger of Hearts);
- `mission_plot_attention` = the card's hard settings as numbered rules: rule 1 lists the status items (race·class, talent, curse, item, location) and their starting values; the last rule refuses edits to the card;
- `default_opening` gets a `<status>` block appended at its end (the card's starting values + `opening_location` from the design), so the status shows on the first screen.
4. `rp-cover.mjs` → `roleplay cover set`: the opening scene in the card's ukiyo-e style, drawn from the card image, with the reincarnated character **in** the picture.
5. `roleplay-fields.mjs --no <no> --check <workId> --link` — fix until it passes.
These override create-roleplay's defaults (`display` left out, cover without the player) for this kind of roleplay only.
## Out of scope
- Changing world settings (`world/WORLD.md`, the world's config or visual style).
- Deleting or overwriting existing files — other cards' records, Works, materials, Boards. Each pull only adds its own card Work and its own record.
- Editing the original character's material, or any material other than one this skill adds for a `--name` card's roleplay.
- Editing other skills' folders or `.neta/`.
- Anything beyond the card (and, when asked, its roleplay): no HTML page, no video, no extra images, no ten-pull unasked.
## Rules logic
**Slot rolls.** There are five scored slots: race, class, talent, curse and starting item. Each slot is rolled in two steps:
1. Tier: below 0.55 is N, below 0.83 is R, below 0.96 is SR, the rest is SSR (`card.json › rarity.slotCutoffs`).
2. Entry: a random entry within that tier.
**Overall rarity.** Points are N 0, R 1, SR 2, SSR 3, summed over the five slots:
- 8 or more → SSR
- 6 or more → SR
- 4 or more → R
- below 4 → N
Free-pull odds come out around N 58%, R 30%, SR 10%, SSR 1.7%.
**Unscored rolls.**
- Fate: one of 12 from the overall rarity's pool — N a humble life, R a local legend, SR a foretold great deed, SSR world-changing.
- Verdict: drawn from the overall rarity's pool.
- Number: `No.` followed by 6 digits.
**Pity.** Pity applies only to a batch of 4 or more, which only happens when the creator asks.
- The batch holds at least one N, one R, one SR and one SSR.
- Guaranteed cards reroll until they land on their tier. The rest roll freely, then the batch is shuffled.
- `--no-all-tiers` turns pity off.
**Card.** A horizontal 3:2 ukiyo-e woodblock card, 1536×1024, gpt-image-2, high quality.
- **Left 42%:** the character, full body.
- Their own face, hair, eyes and marks, plus the new race's traits.
- The class outfit.
- Holding the starting item.
- A gag showing the curse.
- **Right 58%:** a ruled table.
- Header: rarity badge, title (`ISEKAI REINCARNATION` / `异世界转生`), number, and the character's name. Nothing else in the header.
- Rows: Race, Class, Talent and Curse (each with a one-line description), Starting Item. Each scored row carries a tier stamp: N grey, R blue, SR violet, SSR gold.
- Below a divider, larger italic: Fate — what they are destined for in the new world.
- Verdict banner: the largest text on the card.
- **What changes with overall rarity:** paper, border and banner escalate. N is plain washi, R is an indigo wave border, SR is violet with cranes and silver mica, SSR is gold leaf with a rising sun. The layout never changes.
- **No stats** appear on the card.