Defuddle
kepano/obsidian-skills
Uses the Defuddle CLI to pull clean, readable Markdown, JSON or metadata from web pages, stripping navigation, ads and clutter to save tokens.
A skill your agent uses when upgrading an existing @drincs/pixi-vn project to a newer version, or when a runtime/type error matches a known breaking change.
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-migration -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-migration --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/migration .claude/skills/pixi-vn-migration && rm -rf skills-srcUse ~/.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/
Install the "pixi-vn-migration" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/migration into .claude/skills/pixi-vn-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-migration", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/migrationType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-migration -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-migration --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/migration .agents/skills/pixi-vn-migration && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pixi-vn-migration" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/migration into .agents/skills/pixi-vn-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-migration", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-migration -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-migration --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/migration .cursor/skills/pixi-vn-migration && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pixi-vn-migration" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/migration into .cursor/skills/pixi-vn-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-migration", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/DRincs-Productions/pixi-vn.git --path skills/migration--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-migration -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-migration --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/migration .gemini/skills/pixi-vn-migration && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pixi-vn-migration" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/migration into .gemini/skills/pixi-vn-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-migration", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-migrationInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-migration -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/migration .github/skills/pixi-vn-migration && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pixi-vn-migration" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/migration into .github/skills/pixi-vn-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-migration", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-migration -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install DRincs-Productions/pixi-vn pixi-vn-migration --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/DRincs-Productions/pixi-vn.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/migration .opencode/skills/pixi-vn-migration && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pixi-vn-migration" agent skill from https://github.com/DRincs-Productions/pixi-vn/tree/main/skills/migration into .opencode/skills/pixi-vn-migration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pixi-vn-migration", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pixi-vn-migrationA skill your agent uses when upgrading an existing @drincs/pixi-vn project to a newer version, or when a runtime/type error matches a known breaking change.
Pixi Vn Migration is an agent skill from DRincs-Productions/pixi-vn. Use when upgrading an existing @drincs/pixi-vn project to a newer version, or when a runtime/type error matches a known breaking change. Covers every breaking change between versions with before/after code.
Its SKILL.md is about 5.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with npm. The repository describes itself as: Create visual novels with a modern 2D rendering engine and your favorite JavaScript framework.
Read from SKILL.md and the folder at commit 01c19cb. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
pixi-vn.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pixi Vn Migration loads about 5.3k tokens when it runs. Until then it costs about 56 tokens; SKILL.md has 1,298 words of instructions outside code blocks.
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.
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.
The full file from DRincs-Productions/pixi-vn at commit 01c19cb, republished under its LGPL-2.1 licence (© DRincs-Productions). 1,298 words, ~5,326 tokens.
.claude/skills/pixi-vn-migration/SKILL.md (or your agent's skills folder).Official docs: pixi-vn.com/faq/migration. That page also covers
the separate nqtr and pixi-vn-ink packages — this skill only covers the core @drincs/pixi-vn
package (the ## pixi-vn section of that page), since that's what this skill set documents.
Use this skill whenever a task is "upgrade this project's @drincs/pixi-vn from version X to the
latest", or a developer hits an error that looks like a removed/renamed API. Check the currently
installed version first (package.json dependency, or PIXIVN_VERSION/GameState.pixivn_version
at runtime — see pixi-vn-getting-started), then walk forward through only the version sections
below that fall between the installed version and the target — most of these changes don't apply
unless a project is crossing that specific boundary.
tickersCanvas transition helpers and canvas effects are now also grouped under discoverable namespaces:
transitions contains showWithDissolve, showWithFade, moveIn, moveOut, zoomIn, zoomOut,
pushIn, pushOut, removeWithDissolve, and removeWithFade; effects contains shakeEffect.
The previous flat exports remain available in v1.9.4 for compatibility, but are deprecated. Update imports and calls when migrating:
import { moveIn, shakeEffect, zoomIn } from "@drincs/pixi-vn"; // [!code --]
import { effects, transitions } from "@drincs/pixi-vn"; // [!code ++]
await zoomIn("alice", "alice"); // [!code --]
await transitions.zoomIn("alice", "alice"); // [!code ++]
await moveIn("alice", "alice"); // [!code --]
await transitions.moveIn("alice", "alice"); // [!code ++]
shakeEffect("alice"); // [!code --]
effects.shakeEffect("alice"); // [!code ++]The transition and effect behavior and their options are unchanged. This is an organizational API
change intended to make canvas helpers easier to discover. The existing module entry points remain
valid; the same namespaces are available from @drincs/pixi-vn/canvas.
canvas.tickers → top-level tickersTicker management is no longer part of the canvas manager: it's its own tickers singleton,
exported from @drincs/pixi-vn next to canvas, sound, etc. canvas.tickers still works in
v1.9.4 — it just forwards to tickers — but it's deprecated. The methods and their arguments are
unchanged; only the receiver changes:
import { canvas } from "@drincs/pixi-vn"; // [!code --]
import { tickers } from "@drincs/pixi-vn"; // [!code ++]
canvas.tickers.add("alien", new RotateTicker({ speed: 0.2 })); // [!code --]
tickers.add("alien", new RotateTicker({ speed: 0.2 })); // [!code ++]
canvas.tickers.pause({ canvasAlias: "alien" }); // [!code --]
tickers.pause({ canvasAlias: "alien" }); // [!code ++]
await canvas.tickers.forceCompletion(id); // [!code --]
await tickers.forceCompletion(id); // [!code ++]The same applies to every other member (addSequence, find, remove, removeAll, resume,
isPaused, unlinkComponent, transfer, completeOnStepEnd, onComplete, currentTickers,
currentTickersSteps). The type CanvasTickersInterface is likewise a deprecated alias of the new
TickersInterface:
import type { CanvasTickersInterface } from "@drincs/pixi-vn"; // [!code --]
import type { TickersInterface } from "@drincs/pixi-vn"; // [!code ++]TickerBase, tickerDecorator, RegisteredTickers, and the Ticker* types are still exported
from @drincs/pixi-vn exactly as before. Saves are unaffected: tickers are still serialized as part
of the canvas state.
Only code that reached into canvas internals breaks: the ticker bookkeeping on
CanvasManagerStatic (_currentTickers, _currentTickersSequence, _currentTickersTimeouts,
_tickersToCompleteOnStepEnd, currentTickersWithoutCreatedBySteps, currentTickersSequence,
generateTickerId, addTickerTimeoutInfo, removeTickerTimeout*) moved to the
TickersManagerStatic namespace, where the two former getters are now functions:
CanvasManagerStatic._currentTickers; // [!code --]
TickersManagerStatic._currentTickers; // [!code ++]
CanvasManagerStatic.currentTickersSequence; // [!code --]
TickersManagerStatic.currentTickersSequence(); // [!code ++]Prefer the public tickers.currentTickers / tickers.currentTickersSteps over either.
This release removes several APIs that had been marked @deprecated for a while, with no
replacement other than the one already documented at deprecation time:
Repeat/Pause(duration) and the RepeatType/PauseType types are gone. canvas.addTickersSequence
now only accepts plain Ticker steps — chain tickers by duration instead of pause/repeat markers:
canvas.addTickersSequence("alien", [
new RotateTicker({ speed: 0.1, clockwise: true }, 2),
Pause(1), // [!code --]
new RotateTicker({ speed: 0.2, clockwise: false }, 2),
Repeat, // [!code --]
]);See pixi-vn-canvas/tickers.md for the current sequencing API.
forceCompleteBeforeNext is gone from every transition helper (showWithDissolve, moveIn,
zoomIn, ...) and from CommonTickerProps — use completeOnContinue directly, it's no longer
just an alias:
await showWithDissolve("alice", "alice", {
forceCompleteBeforeNext: true, // [!code --]
completeOnContinue: true, // [!code ++]
});The deprecated AssetMemory.image field was removed; use AssetMemory.alias/url instead.
Game.restoreGameState(data, navigate) lost its navigate overload — pass only data, and
configure navigation once via Game.onNavigate (or Game.init({ navigate })) instead:
Game.restoreGameState(data, navigateTo); // [!code --]
Game.restoreGameState(data); // [!code ++]The singular Game.onError(...) handler was removed; use Game.addOnError/Game.removeOnError
(already the recommended API since v1.6.0):
Game.onError((type, error, { notify, uiTransition }) => { ... }); // [!code --]
Game.addOnError((error, { notify, uiTransition }) => { ... }); // [!code ++]See pixi-vn-canvas/tickers.md for the current tickers/transitions API and
pixi-vn-getting-started for the current Game API.
The canvas, sound, storage, and narration managers used to expose dozens of unrelated
methods directly on the manager (ticker methods, layer methods, and HTML-layer methods all mixed
together on canvas, for example). This release groups related operations into namespaced
sub-APIs — canvas.tickers/.layers/.htmlLayers, sound.channels/.unsaved,
storage.temp/.flags, narration.labels/.queries/.input/.choices — so each manager reads
as a short, discoverable surface instead of a flat list, and related options/overloads live next to
each other. See pixi-vn-canvas, pixi-vn-sound, pixi-vn-storage, and pixi-vn-getting-started
for the current shape of each namespace.
Almost every old flat method still works and just forwards to its namespaced replacement — it's
marked @deprecated but not removed, so migrate at your own pace. Two members are an exception:
their type changed, so they break immediately rather than just warning.
sound.channels was AudioChannelInterface[]; it is now an object, and the array moved to
.values:
sound.channels.map((c) => c.alias); // [!code --]
sound.channels.values.map((c) => c.alias); // [!code ++]narration.choices (getter) was StoredIndexedChoiceInterface[] | undefined; it now returns a
namespace object, and the array moved to .list. The setter, narration.choices = [...], is
unchanged — it's a shortcut for .list:
const choices = narration.choices; // [!code --]
const choices = narration.choices.list; // [!code ++]Every other rename below is a non-breaking, forward-compatible deprecation.
canvas's ticker methods moved to canvas.tickers (since v1.9.4 that is itself a deprecated alias
of the top-level tickers — if you are migrating past v1.9.4, go straight to tickers.*, see
v1.9.3 → v1.9.4 above):
canvas.transferTickers("old", "new"); // [!code --]
canvas.tickers.transfer("old", "new"); // [!code ++]canvas.currentTickers; // [!code --]
canvas.tickers.currentTickers; // [!code ++]canvas.currentTickersSteps; // [!code --]
canvas.tickers.currentTickersSteps; // [!code ++]canvas.findTicker("t1"); // [!code --]
canvas.tickers.find("t1"); // [!code ++]canvas.addTicker("alien", new RotateTicker({ speed: 0.2 })); // [!code --]
canvas.tickers.add("alien", new RotateTicker({ speed: 0.2 })); // [!code ++]canvas.addTickersSequence("alien", steps); // [!code --]
canvas.tickers.addSequence("alien", steps); // [!code ++]canvas.unlinkComponentFromTicker("alien", RotateTicker); // [!code --]
canvas.tickers.unlinkComponent("alien", RotateTicker); // [!code ++]canvas.removeAllTickers(); // [!code --]
canvas.tickers.removeAll(); // [!code ++]canvas.removeTicker("t1"); // [!code --]
canvas.tickers.remove("t1"); // [!code ++]canvas.pauseTicker({ canvasAlias: "alien" }); // [!code --]
canvas.tickers.pause({ canvasAlias: "alien" }); // [!code ++]canvas.resumeTicker({ canvasAlias: "alien" }); // [!code --]
canvas.tickers.resume({ canvasAlias: "alien" }); // [!code ++]canvas.isTickerPaused("alien"); // [!code --]
canvas.tickers.isPaused("alien"); // [!code ++]canvas.completeTickerOnStepEnd({ id: "t1" }); // [!code --]
canvas.tickers.completeOnStepEnd({ id: "t1" }); // [!code ++]canvas.forceCompletionOfTicker("t1"); // [!code --]
canvas.tickers.forceCompletion("t1"); // [!code ++]canvas.onTickerComplete("t1", options); // [!code --]
canvas.tickers.onComplete("t1", options); // [!code ++]canvas's layer methods moved to canvas.layers:
canvas.gameLayer; // [!code --]
canvas.layers.gameLayer; // [!code ++]canvas.addLayer("ui", uiLayer); // [!code --]
canvas.layers.add("ui", uiLayer); // [!code ++]canvas.getLayer("ui"); // [!code --]
canvas.layers.get("ui"); // [!code ++]canvas.removeLayer("ui"); // [!code --]
canvas.layers.remove("ui"); // [!code ++]canvas's HTML-layer methods moved to canvas.htmlLayers:
canvas.addHtmlLayer("ui", root); // [!code --]
canvas.htmlLayers.add("ui", root); // [!code ++]canvas.getHtmlLayer("ui"); // [!code --]
canvas.htmlLayers.get("ui"); // [!code ++]canvas.removeHtmlLayer("ui"); // [!code --]
canvas.htmlLayers.remove("ui"); // [!code ++]sound's transient/unsaved playback methods moved to sound.unsaved:
sound.playTransient("ui-click"); // [!code --]
sound.unsaved.playTransient("ui-click"); // [!code ++]sound.pauseUnsavedAll(); // [!code --]
sound.unsaved.pauseAll(); // [!code ++]sound.resumeUnsavedAll(); // [!code --]
sound.unsaved.resumeAll(); // [!code ++]sound.stopTransientAll(); // [!code --]
sound.unsaved.stopTransientAll(); // [!code ++]sound's channel creation/lookup methods moved to sound.channels (alongside the .values change
above):
sound.addChannel("music"); // [!code --]
sound.channels.add("music"); // [!code ++]sound.findChannel("music"); // [!code --]
sound.channels.find("music"); // [!code ++]storage's temporary-variable methods moved to storage.temp (a new storage.temp.deadlines map
is exposed alongside them):
storage.setTempVariable("key", "value"); // [!code --]
storage.temp.set("key", "value"); // [!code ++]storage.removeTempVariable("key"); // [!code --]
storage.temp.remove("key"); // [!code ++]storage's flag methods moved to storage.flags:
storage.setFlag("introSeen", true); // [!code --]
storage.flags.set("introSeen", true); // [!code ++]storage.getFlag("introSeen"); // [!code --]
storage.flags.get("introSeen"); // [!code ++]narration's label-stack members moved to narration.labels:
narration.openedLabels; // [!code --]
narration.labels.opened; // [!code ++]narration.currentLabel; // [!code --]
narration.labels.current; // [!code ++]narration.closeCurrentLabel(); // [!code --]
narration.labels.closeCurrent(); // [!code ++]narration.closeAllLabels(); // [!code --]
narration.labels.closeAll(); // [!code ++]narration's read-only queries moved to narration.queries:
narration.isLabelAlreadyCompleted(label); // [!code --]
narration.queries.isLabelAlreadyCompleted(label); // [!code ++]narration.alreadyCurrentStepMadeChoices; // [!code --]
narration.queries.alreadyCurrentStepMadeChoices; // [!code ++]narration.isCurrentStepAlreadyOpened; // [!code --]
narration.queries.isCurrentStepAlreadyOpened; // [!code ++]narration.getTimesLabelOpened(label); // [!code --]
narration.queries.timesLabelOpened(label); // [!code ++]narration.getTimesChoiceMade(index); // [!code --]
narration.queries.timesChoiceMade(index); // [!code ++]narration's input-request members moved to narration.input:
narration.inputValue; // [!code --]
narration.input.value; // [!code ++]narration.isRequiredInput; // [!code --]
narration.input.isRequired; // [!code ++]narration.inputType; // [!code --]
narration.input.type; // [!code ++]narration.requestInput({ type: "number" }); // [!code --]
narration.input.request({ type: "number" }); // [!code ++]narration.removeInputRequest(); // [!code --]
narration.input.removeRequest(); // [!code ++]narration's choice selection moved to narration.choices (alongside the .list change above):
narration.selectChoice(choices[0], {}); // [!code --]
narration.choices.select(choices[0], {}); // [!code ++]The audio system moved from @pixi/sound to Tone.js (performance, stability, flexibility). Two
consequences (full API in pixi-vn-sound):
media's volume is no longer a plain linear number — it's now a Tone.js decibel Param:const bgmMedia = sound.find("bgm_cheerful");
if (bgmMedia) bgmMedia.volume = 90; // [!code --]
if (bgmMedia) bgmMedia.volume.value = 90; // [!code ++]sound.edit(alias, options)) is no longer
possible — there is no replacement call; re-load/re-play with new options instead.HTML layers (canvas.addHtmlLayer) now default to userSelect: "none" (prevents accidental text
selection during UI interaction). Opt back in per layer if needed:
const htmlLayer = canvas.addHtmlLayer("ui", root, { userSelect: "auto" }); // [!code ++]Navigation is now centralized: use Game.onNavigate once instead of passing a navigate function to
every call site that needs one (see pixi-vn-getting-started):
Game.onNavigate((path) => navigateTo(path)); // [!code ++]
Game.restoreGameState(data, navigateTo); // [!code --]
Game.restoreGameState(data); // [!code ++]Custom UI storage reactivity: storage.setStorageHandler({ onSetVariable, onRemoveVariable, onClearOldTempVariable }) lets a UI state store mirror game-storage changes automatically (see
pixi-vn-storage) — new capability, not a breaking change, but worth knowing this version added it.
Game.start, storage key convention, addOnErrorThe sound API was completely redesigned around the sound/channels/media/assets split (see
pixi-vn-sound for the current shape):
sound.add("bird", "resources/bird.mp3"); // [!code --]
sound.play("bird", { loop: true }); // [!code ++] (sound.play replaces add()+play())
let s = sound.add("bird", { url: "resources/bird.mp3", loop: true }); // [!code --]
s.play(); // [!code --]
s.pause(); // [!code --]
sound.play("bird", { loop: true }); // [!code ++]
sound.pause("bird"); // [!code ++]Other changes this version:
Game.start(label, props) was added as the recommended entry point (see pixi-vn-getting-started)
instead of the previous Game.clear() + narration.call(...) pair:Game.clear(); // [!code --]
narration.call("start", gameProps); // [!code --]
Game.start("start", gameProps); // [!code ++]:-separated namespacing convention (e.g. character:alice:friendship) —
doesn't break existing saves or the API, just a recommended naming style (see pixi-vn-storage).Game.addOnError (supports multiple stacked handlers) instead of the
singular, now-deprecated Game.onError, and dropped the type argument (see
pixi-vn-getting-started):Game.onError((type, error, { notify, uiTransition }) => { ... }); // [!code --]
Game.addOnError((error, { toast, uiTransition }) => { ... }); // [!code ++]pixi.js external, canvas resize CSSpixi.js is now marked external for non-CDN builds (Vite, official templates) — needed
because pixi.js doesn't support multiple bundled instances; only relevant if something in the
build config assumed it was bundled.pixi-vn-getting-started's exact index.html/styles.css).stepHistory.back() takes props, not a navigate functionTo support synchronous multi-step back/continue requests, stepHistory.back()'s argument changed
from a path-navigation callback to the same StepLabelProps-shaped object passed to every step —
the actual navigate function now lives on Game.init() instead (see pixi-vn-history /
pixi-vn-getting-started):
stepHistory.back((_path) => {
/* navigate in the url path */
}); // [!code --]
const gameProps = {};
stepHistory.back(gameProps); // [!code ++]Game.init(body, {
height: 1080,
width: 1920,
backgroundColor: "#303030",
navigate: (_path) => {
/* navigate in the url path */
}, // [!code ++]
}).then(() => {
/* ... */
});Also removed in this release (all long-deprecated): stepHistory.goBack, narration.goNext,
PIXI (the re-exported namespace), canvas.canvasWidth/canvas.canvasHeight,
canvas.onEndOfTicker, the FadeAlphaTicker/MoveTicker/RotateTicker/ZoomTicker preset classes,
narration.canContinue (now stepHistory-side), narration.callLabel/jumpLabel (now call/
jump), narration.choiceMenuOptions, storage.startingStorage/setVariable/getVariable/
removeVariable (now storage.default/set/get/remove).
canvas.animate replaces ticker presetsCanvas animation was rebuilt around canvas.animate (PixiJS tickers + the motion library, see
pixi-vn-canvas), deprecating the old ticker-preset classes (FadeAlphaTicker, MoveTicker,
RotateTicker, ZoomTicker) in favor of transition helpers (showWithDissolve, moveIn, ...) and
canvas.animate directly.
The first stable release split the engine into independent modules (canvas/characters/history/
narration/sound/storage), introduced the Game namespace as the main entry point, and pulled step
history out into its own stepHistory module (previously part of narration). Renames, all still
relevant if migrating a pre-1.0 project:
clearAllGameDatas(); // [!code --]
Game.clear(); // [!code ++]
canvas.initialize(body, options).then(...); // [!code --]
Game.init(body, options).then(...); // [!code ++]
getSaveData(); // [!code --]
Game.exportGameState(); // [!code ++]
getSaveJson(); // [!code --]
JSON.stringify(Game.exportGameState()); // [!code ++]
loadSaveData(data, navigate); // [!code --]
Game.restoreGameState(data, navigate); // [!code ++]
jsonToSaveData(json); // [!code --]
JSON.parse(json); // [!code ++]
narration.canGoBack; // [!code --]
stepHistory.canGoBack; // [!code ++]
narration.back(); // [!code --]
stepHistory.back(); // [!code ++]
narration.narrativeHistory; // [!code --]
stepHistory.narrativeHistory; // [!code ++]See pixi-vn-getting-started for the current Game API, pixi-vn-history for stepHistory, and
pixi-vn-saves for the current exportGameState/restoreGameState save/load flow.
Game API, project setup.Game.exportGameState/restoreGameState).stepHistory API.© 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
Just SKILL.md in skills/migration of DRincs-Productions/pixi-vn.
Open the folder on GitHubat commit 01c19cb
Pixi Vn Migration 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pixi Vn Migration this skillDRincs-Productions/pixi-vn | 149 | — | ~5.3k | Automated safety check: Pass | LGPL-2.1 | |
| Defuddlekepano/obsidian-skills | 49k | 11 repos | ~208 | Automated safety check: Pass | MIT | |
| Vercel Deploybytedance/deer-flow | 84k | 10 repos | ~797 | Automated safety check: Pass | MIT | |
| Knap Markdown Templateskepano/obsidian-skills | 49k | 2 repos | ~986 | Automated safety check: Pass | MIT | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 4 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Nx Run Tasksnomcopter/react-mosaic | 4.8k | 8 repos | ~613 | Automated safety check: Pass | Custom licence |
kepano/obsidian-skills
Uses the Defuddle CLI to pull clean, readable Markdown, JSON or metadata from web pages, stripping navigation, ads and clutter to save tokens.
bytedance/deer-flow
Deploys a project to Vercel with one script and no login, then returns a live preview URL and a claim link for moving the deployment into your own Vercel account.
kepano/obsidian-skills
Renders Markdown notes from Knap templates and JSON data on the command line, including notes built from Defuddle web page output.
shareAI-lab/learn-claude-code
Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.
nomcopter/react-mosaic
Helps with running tasks in an Nx workspace. An agent skill from nomcopter/react-mosaic.
HKUDS/OpenHarness
Validates OpenHarness features by running real multi-turn agent loops with live LLM calls against an unfamiliar codebase, checking actual tool execution.
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.
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…
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.
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…
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…
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…
Works with
A skill your agent uses when upgrading an existing @drincs/pixi-vn project to a newer version, or when a runtime/type error matches a known breaking change. Pixi Vn Migration is an agent skill from DRincs-Productions/pixi-vn. Use when upgrading an existing @drincs/pixi-vn project to a newer version, or when a runtime/type error matches a known breaking change.
Pixi Vn Migration fits situations like: upgrading an existing @drincs/pixi-vn project to a newer version; A runtime/type error matches a known breaking change.
Run `npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-migration -a claude-code`. Or copy the skill folder (skills/migration in DRincs-Productions/pixi-vn) into .claude/skills/pixi-vn-migration in your project. Claude Code loads it when a task matches its description.
Run `npx skills add DRincs-Productions/pixi-vn --skill pixi-vn-migration -a codex`. Or copy the skill folder (skills/migration in DRincs-Productions/pixi-vn) into .agents/skills/pixi-vn-migration in your project. Codex loads it when a task matches its description.
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-migration -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-migration, .gemini/skills/pixi-vn-migration, .github/skills/pixi-vn-migration and .opencode/skills/pixi-vn-migration in your project.
SKILL.md names no scripts, command-line tools or credentials: Pixi Vn Migration is instructions for the agent only.
SKILL.md names 1 domain. As links in the text: pixi-vn.com. This is read from the text; nothing was executed.
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.
Pixi Vn Migration 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.
About 5.3k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pixi Vn Migration: Defuddle (kepano/obsidian-skills, 49k stars), Vercel Deploy (bytedance/deer-flow, 84k stars), Knap Markdown Templates (kepano/obsidian-skills, 49k stars) and MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.