Agent skill

Pixi Vn Characters

by DRincs-Productions in DRincs-Productions/pixi-vn

A skill your agent uses when defining visual novel characters for a @drincs/pixi-vn game — creating a character with a name, color, icon and other props, registering it so it can be looked up by id…

LGPL-2.1Auto-check passedWriting & Content

Install Pixi Vn Characters

skills CLI
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-characters -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-characters --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/characters .claude/skills/pixi-vn-characters && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
pixi-vn-characters
GitHub stars
149
Token cost
~3.1k tokens
SKILL.md length
1,068 words
Files
1
Skills in repo
13
Repo updated
First seen
Licence
LGPL-2.1

At a glance

A skill your agent uses when defining visual novel characters for a @drincs/pixi-vn game — creating a character with a name, color, icon and other props, registering it so it can be looked up by id…

  • Works in 4 steps: Defining a character → Registering and looking up characters → Emotions → …
  • Defining visual novel characters for a @drincs/pixi-vn game — creating a character with a name
  • SKILL.md covers When to use this skill, 1. Defining a character, 2. Registering and looking up… and 3. Emotions, plus 2 more sections
  • Calls npm

What it does

Pixi Vn Characters is an agent skill from DRincs-Productions/pixi-vn. Use when defining visual novel characters for a @drincs/pixi-vn game — creating a character with a name, color, icon and other props, registering it so it can be looked up by id, and referencing it from dialogue/narration. Load this before writing any CharacterBaseModel or RegisteredCharacters code.

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Writing & Content, covering Creative writing and fiction and Text to speech and voice. It works with React. The repository describes itself as: Create visual novels with a modern 2D rendering engine and your favorite JavaScript framework.

When your agent uses it

  • Defining visual novel characters for a @drincs/pixi-vn game — creating a character with a name
  • Icon and other props
  • Registering it so it can be looked up by id
  • Referencing it from dialogue/narration

Example prompts

  • “/pixi-vn-characters”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Defining a character
  2. Registering and looking up characters
  3. Emotions
  4. Using a character in dialogue

What it can do on your machine

Read from SKILL.md and the folder at commit 01c19cb. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • pixi-vn.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Pixi Vn Characters loads about 3.1k tokens when it runs. Until then it costs about 81 tokens; SKILL.md has 1,068 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~81
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from DRincs-Productions/pixi-vn at commit 01c19cb, republished under its LGPL-2.1 licence (© DRincs-Productions). 1,068 words, ~3,123 tokens.

Download SKILL.mdSave it as .claude/skills/pixi-vn-characters/SKILL.md (or your agent's skills folder).
name
pixi-vn-characters
description
Use when defining visual novel characters for a @drincs/pixi-vn game — creating a character with a name, color, icon and other props, registering it so it can be looked up by id, and referencing it from dialogue/narration. Load this before writing any `CharacterBaseModel` or `RegisteredCharacters` code.

Pixi'VN Characters

When to use this skill

Use this skill whenever a task involves creating the characters that appear in a Pixi'VN game (name, surname, age, color, icon, and any custom fields), storing them so the engine and narration code can find them by id, or hooking a character into a narration.dialogue line. It does not cover how dialogue/text itself is displayed (see the narration skill) or how variables are generally saved (see the storage skill).

ts
import { CharacterBaseModel, RegisteredCharacters } from "@drincs/pixi-vn";

(Also available from the narrower @drincs/pixi-vn/characters subpath — see pixi-vn-getting-started for when to prefer that.)

Full reference: https://pixi-vn.com/start/character

1. Defining a character

CharacterBaseModel is the built-in character class. Construct it with a unique string id and a props object (name, surname, age, icon, color — all optional):

ts
import { CharacterBaseModel } from "@drincs/pixi-vn";

export const liam = new CharacterBaseModel("liam", {
  name: "Liam",
  surname: "Smith",
  age: 25,
  icon: "https://example.com/liam.png",
  color: "#9e2e12",
});

export const emma = new CharacterBaseModel("emma", {
  name: "Emma",
  surname: "Johnson",
  age: 23,
  icon: "https://example.com/emma.png",
  color: "#c23b7f",
});

The id is the value used everywhere else in the game (dialogue, lookups, history) to reference this character, so it must be unique and stable across saves.

name/surname/age are actually get/set accessors backed by the game's storage (see CharacterStoredClass, which CharacterBaseModel extends, and the stored classes doc): the value passed in the constructor becomes the default, but setting liam.name = "..." at runtime persists an override in storage that survives save/load and takes priority over the default. icon and color are plain readonly fields, not stored/overridable at runtime.

ts
import { liam } from "@/content/characters";

console.log(liam.name); // "Liam"
liam.name = "Liam Smith";
console.log(liam.name); // "Liam Smith" — now persisted in game storage

If a character's id is ever changed between game versions, the engine does not migrate the storage data from the old id to the new one — treat ids as permanent once shipped.

Custom character classes with extra fields

If you need fields beyond name/surname/age/icon/color (e.g. a sprite id or a relationship stat), this is the recommended, docs-endorsed approach (project templates already ship it as models/Character.ts):

  1. Create a class Character extends CharacterStoredClass implements CharacterInterface.
  2. Augment the (otherwise empty) CharacterInterface in a pixi-vn.d.ts file via declare module "@drincs/pixi-vn" so every CharacterInterface consumer in the project — including RegisteredCharacters.get() — sees the richer, project-specific type.
  3. For any field that must persist across saves, back it with a getter/setter that calls this.getStorageProperty() / this.setStorageProperty() (inherited from CharacterStoredClass), the same pattern CharacterBaseModel uses internally for name/surname/age.

This is exactly what the official pixi-vn-react-template (the "TS narration

  • React" project npm create pixi-vn@latest scaffolds) ships as src/models/Character.ts — stored getters/setters for name, surname and age, and plain (non-stored) fields for icon/color:
ts
// models/Character.ts
import { type CharacterInterface, CharacterStoredClass } from "@drincs/pixi-vn";

export default class Character
  extends CharacterStoredClass
  implements CharacterInterface
{
  constructor(
    id: string | { id: string; emotion: string },
    props: CharacterProps,
  ) {
    super(
      typeof id === "string" ? id : id.id,
      typeof id === "string" ? "" : id.emotion,
    );
    this.defaultName = props.name;
    this.defaultSurname = props.surname;
    this.defaultAge = props.age;
    this.icon = props.icon;
    this.color = props.color;
  }

  // stored — persists across save/load, same pattern as CharacterBaseModel
  private defaultName?: string;
  get name(): string {
    return (
      this.getStorageProperty<string>("name") || this.defaultName || this.id
    );
  }
  set name(value: string | undefined) {
    this.setStorageProperty<string>("name", value);
  }

  private defaultSurname?: string;
  get surname(): string | undefined {
    return this.getStorageProperty<string>("surname") || this.defaultSurname;
  }
  set surname(value: string | undefined) {
    this.setStorageProperty<string>("surname", value);
  }

  private defaultAge?: number;
  get age(): number | undefined {
    return this.getStorageProperty<number>("age") || this.defaultAge;
  }
  set age(value: number | undefined) {
    this.setStorageProperty<number>("age", value);
  }

  // not stored
  readonly icon?: string;
  readonly color?: string;
}

interface CharacterProps {
  name?: string;
  surname?: string;
  age?: number;
  icon?: string;
  color?: string;
}
ts
// pixi-vn.d.ts
declare module "@drincs/pixi-vn" {
  interface CharacterInterface {
    name: string;
    surname?: string;
    age?: number;
    readonly icon?: string;
    readonly color?: string;
  }
}

2. Registering and looking up characters

Characters are looked up at runtime by id through the RegisteredCharacters registry (a namespace, not a decorator despite its file name). Calling RegisteredCharacters.add(...) is required — a CharacterBaseModel (or custom class) instance that is only exported/constructed but never passed to add will not be findable by id and will not work in dialogue lookups after a save/load. Register every character you define once, at module load time (recommended: import them all at project startup), then reference it by id elsewhere:

ts
import { RegisteredCharacters } from "@drincs/pixi-vn";

RegisteredCharacters.add(liam, emma);
// or with arrays:
RegisteredCharacters.add([liam, emma]);

Other RegisteredCharacters functions:

  • RegisteredCharacters.get(id) — returns the character (or undefined, logging a warning if it was never registered).
  • RegisteredCharacters.has(id) — checks whether an id is registered.
  • RegisteredCharacters.values() — returns all registered characters.
  • RegisteredCharacters.keys() — returns all registered ids.
  • RegisteredCharacters.clear() — removes all registered characters (mainly useful in tests).
ts
const liam = RegisteredCharacters.get("liam");

Re-adding an id that's already registered overwrites the previous character (a log message notes this), so registration order matters if two files define the same id.

Real-world project convention (official React template)

The official pixi-vn-react-template (what npm create pixi-vn@latest scaffolds for the "TS narration + React" setup) defines its characters as export const instances in src/content/characters.ts, then registers all of them with a single RegisteredCharacters.add([...]) call at module scope:

ts
// src/content/characters.ts
import Character from "@/models/Character";
import { RegisteredCharacters } from "@drincs/pixi-vn";

export const mc = new Character("mc", { name: "Me" });
export const james = new Character("james", {
  name: "James",
  color: "#0084ac",
});
export const steph = new Character("steph", {
  name: "Steph",
  color: "#ac5900",
});
export const sly = new Character("sly", { name: "Sly", color: "#6d00ac" });

RegisteredCharacters.add([mc, james, steph, sly]);

This works with no manual import list to maintain because src/content/index.ts uses import.meta.glob to import every file under content/ for its side effects at app startup — so the module-scope RegisteredCharacters.add(...) call above always runs. That means you never need to remember to import each new character file yourself (dropping it anywhere under content/ is enough), but conversely, a character defined (and .added) in a file outside content/ that nothing else imports never gets its add call executed, and stays silently unregistered.

This is the official template's convention, not a hard requirement of the library — RegisteredCharacters.add can be called from any file, as long as it's guaranteed to run before the character is looked up. Projects without this glob-import setup must import each character file explicitly instead (e.g. from a top-level content/index.ts or the app's entry point).

Show full SKILL.md (366 more words)Show less
Typed ids (optional)

Character ids are typed as CharacterIdType, which is string by default. If a project augments the empty PixivnCharacterIds interface (typically auto-generated by the vitePluginPixivn Vite plugin's typeFilePath option), CharacterIdType narrows to a union of known ids and typos become compile errors. Don't assume this augmentation exists unless you see a generated pixi-vn.gen.d.ts/similar file in the project — if not, treat ids as plain strings.

3. Emotions

A character id may optionally be paired with an emotion by passing an object instead of a plain string as the constructor's first argument:

ts
export const alice = new CharacterBaseModel("alice", {
  name: "Alice",
  icon: "https://example.com/alice.png",
  color: "#9e2e12",
});

export const angryAlice = new CharacterBaseModel(
  { id: "alice", emotion: "angry" },
  { icon: "https://example.com/angryAlice.png" },
);

RegisteredCharacters.add([alice, angryAlice]);

Internally this stores the character's name/surname/age under a separate storage key ("<id>@<emotion>") while still falling back to the base id's stored/default values if an emotion-specific value isn't set — the base id and its emotion variants share the same underlying character data except where the emotion variant overrides it:

ts
console.log(alice.name); // "Alice"

alice.name = "Eleonora";
console.log(alice.name); // "Eleonora"
console.log(angryAlice.name); // "Eleonora" — falls back to the base id's value

angryAlice.name = "Angry Eleonora";
console.log(alice.name); // "Eleonora" — unaffected
console.log(angryAlice.name); // "Angry Eleonora" — its own override now set

Use this only if you need per-emotion overrides of a character's stored fields; for swapping the character's on-screen sprite/image per emotion, that's driven by the canvas/image APIs, not this module.

4. Using a character in dialogue

Once registered, pass the character instance (or its id string) as the character field of a dialogue, e.g. inside a label step:

ts
narration.dialogue = {
  character: liam,
  text: "Which test do you want to perform?",
};
// or by id:
narration.dialogue = { character: "liam", text: "..." };

Which form to prefer depends on whether the project's @drincs/pixi-vn/vite plugin generates typed character ids (the typeFilePath option covered in pixi-vn-getting-started, which narrows CharacterIdType from plain string to a union of the actually-registered ids):

  • Without it, prefer passing the instance (character: liam) — a bare string id has no compile-time typo protection, while the instance is a real variable reference the compiler already checks.
  • With it, prefer the string-id form (character: "liam") — it now gets the same compile-time safety (a typo like "liem" fails to typecheck against the generated CharacterIdType union) without needing to import the character module wherever a dialogue line is written, which keeps label files decoupled from character-definition files.

DialogueInterface.character accepts CharacterInterface | string; when a string id is stored, the engine resolves it back to the registered character object (via RegisteredCharacters.get) when the dialogue is read back — so a character must already be registered by the time its dialogue line runs. Reading/rendering the resolved dialogue is covered by the narration skill.

pixi-vn-getting-started, pixi-vn-narration, pixi-vn-storage

© DRincs-Productions, LGPL-2.1. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/characters of DRincs-Productions/pixi-vn.

Open the folder on GitHubat commit 01c19cb

Compare with similar skills

Pixi Vn Characters next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Pixi Vn Characters compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pixi Vn Characters this skillDRincs-Productions/pixi-vn149—~3.1kAutomated safety check: PassLGPL-2.1
Adaptationdanjdewhurst/story-skills2861 repos~3.5kAutomated safety check: NotesMIT
Reader Paneldanjdewhurst/story-skills2861 repos~3.5kAutomated safety check: NotesMIT
InkOS Creative HarnessNarcooo/inkos10k1 repos~1.1kAutomated safety check: PassAGPL-3.0
Anything2explainerVincentwei1021/anything2explainer2.4k—~2.7kAutomated safety check: PassCustom licence
Video TranslatorInsiderX-Pro/video-translator928—~635Automated safety check: PassMIT

Similar skills

  • Adaptation

    danjdewhurst/story-skills

    This skill should be used when the user asks to "make an audiobook", "narration script", "narrator", "ACX", "Findaway", "pronunciation guide", "how long is the audiobook", "adapt to a screenplay"…

    286 GitHub starsUsed in 1 repo~3.5k tokens
    Media & CreativeAuto-check: notes
  • Reader Panel

    danjdewhurst/story-skills

    This skill should be used when the user asks for a "simulated beta read", "reader panel", "persona read", "first read before my beta readers", "how would a genre reader react", "would a reader keep…

    286 GitHub starsUsed in 1 repo~3.5k tokens
    Writing & ContentAuto-check: notes
  • Drives long-form fiction, scripts, storyboards, interactive films and long-document translation through InkOS, with every change made by a typed action.

    10k GitHub starsUsed in 1 repo~1.1k tokens
    Writing & ContentAuto-check passed
  • Anything2explainer

    Vincentwei1021/anything2explainer

    给一个主题,产出一条黑底 MG 风格(幕底可选星点或点阵波)、有配音字幕章节进度条的科普讲解视频(中文或英文;Remotion 代码动画;时长由用户定,常用 3–5 分钟)。内含可编译模板、图元库、配音/分镜/渲染工具、风格与动效规范、多 agent 分工协议与 QC 判据,以及一条完整样片(《RAG 与知识库》)作为质量标尺。Turn any topic into a narrated…

    2.4k GitHub stars~2.7k tokensUpdated 23 days ago
    Media & CreativeAuto-check passed
  • Video Translator

    InsiderX-Pro/video-translator

    Real time video translation / dubbing skill. An agent skill from InsiderX-Pro/video-translator.

    928 GitHub stars~635 tokensUpdated 3 mo ago
    Writing & ContentAuto-check passed
  • Edit Timeline Studio

    MartinDelophy/ai-video-editor

    Analyze images, video, speech, motion, products, and websites; route local vision, audio, depth, tracking, matting, identity, and restoration models; auto-edit, replicate, enhance, caption, voice…

    905 GitHub stars~7k tokensUpdated yesterday
    Media & CreativeAuto-check passed

More from DRincs-Productions/pixi-vn

All 13 skills in this repo
  • Pixi Vn Assets

    DRincs-Productions/pixi-vn

    A skill your agent uses when adding, organizing, registering, or loading non-code files (images, audio, video) in a Pixi'VN project — local assets processed by PixiJS AssetPack vs.

    149 GitHub stars~2.9k tokensUpdated 10 days ago
    Auto-check passed
  • Pixi Vn History

    DRincs-Productions/pixi-vn

    A skill your agent uses when implementing "go back" / "rewind" / step-navigation features in a Pixi'VN game, or when you need to read the player-facing dialogue/choice history (e.g.

    149 GitHub stars~2.6k tokensUpdated 10 days ago
    Auto-check passed
  • Pixi Vn Minigames

    DRincs-Productions/pixi-vn

    A skill your agent uses when adding a minigame (snake, quiz, puzzle, timing/reaction game, ...) to a Pixi'VN visual novel — the useMinigame lifecycle hook pattern, using PixiJS directly on its own…

    149 GitHub stars~2.9k tokensUpdated 10 days ago
    Auto-check passed
  • Pixi Vn Narration

    DRincs-Productions/pixi-vn

    A skill your agent uses when writing or editing Pixi'VN story content — defining labels (scenes) with newLabel, writing dialogue steps, adding player choices with…

    149 GitHub stars~4.9k tokensUpdated 10 days ago
    Auto-check passed
  • Pixi Vn Saves

    DRincs-Productions/pixi-vn

    A skill your agent uses when implementing save/load in a Pixi'VN game — Game.exportGameState()/restoreGameState()/jsonToGameState(), what the exported GameState contains, and how to persist it (save…

    149 GitHub stars~1.5k tokensUpdated 10 days ago
    Auto-check passed
  • Pixi Vn Sound

    DRincs-Productions/pixi-vn

    A skill your agent uses when playing or stopping background music, sound effects, or voice lines; creating/organizing audio channels; controlling volume, mute, or pan; or wiring Tone.js audio…

    149 GitHub stars~3.3k tokensUpdated 10 days ago
    Auto-check passed

Works with

Questions about Pixi Vn Characters

What does Pixi Vn Characters do?

A skill your agent uses when defining visual novel characters for a @drincs/pixi-vn game — creating a character with a name, color, icon and other props, registering it so it can be looked up by id…. Pixi Vn Characters is an agent skill from DRincs-Productions/pixi-vn. Use when defining visual novel characters for a @drincs/pixi-vn game — creating a character with a name, color, icon and other props, registering it so it can be looked up by id, and referencing it from dialogue/narration.

When should I use Pixi Vn Characters?

Pixi Vn Characters fits situations like: defining visual novel characters for a @drincs/pixi-vn game — creating a character with a name; icon and other props; registering it so it can be looked up by id; referencing it from dialogue/narration.

How do I install Pixi Vn Characters in Claude Code?

Run `npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-characters -a claude-code`. Or copy the skill folder (skills/characters in DRincs-Productions/pixi-vn) into .claude/skills/pixi-vn-characters in your project. Claude Code loads it when a task matches its description.

How do I install Pixi Vn Characters in Codex?

Run `npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-characters -a codex`. Or copy the skill folder (skills/characters in DRincs-Productions/pixi-vn) into .agents/skills/pixi-vn-characters in your project. Codex loads it when a task matches its description.

Can I use Pixi Vn Characters in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-characters -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pixi-vn-characters, .gemini/skills/pixi-vn-characters, .github/skills/pixi-vn-characters and .opencode/skills/pixi-vn-characters in your project.

What does Pixi Vn Characters need to run?

Going by SKILL.md and its folder, Pixi Vn Characters needs the command-line tools its instructions call (npm).

Does Pixi Vn Characters access the network?

SKILL.md names 1 domain. As links in the text: pixi-vn.com. This is read from the text; nothing was executed.

Is Pixi Vn Characters safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Pixi Vn Characters use?

Pixi Vn Characters is published under the LGPL-2.1 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Pixi Vn Characters use?

About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Pixi Vn Characters?

Skills that share tags, products or a category with Pixi Vn Characters: Adaptation (danjdewhurst/story-skills, 286 stars), Reader Panel (danjdewhurst/story-skills, 286 stars), InkOS Creative Harness (Narcooo/inkos, 10k stars) and Anything2explainer (Vincentwei1021/anything2explainer, 2.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Pixi Vn Characters?

DRincs-Productions (a GitHub organization) maintains it in DRincs-Productions/pixi-vn, which has 149 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 1, 2026.

Source: DRincs-Productions/pixi-vn on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.