Pixelfx logo

Pixelfx

Organization
patch-gg
pixelfx

Make pixel art effects and sprite animations in code with the pixelfx library, which has 232 ready-made ones (fire, explosions, water, ice, lightning, sci-fi, melee, impacts, projectiles, spawn and death, arcane, holy, shadow, status, nature, weather, UI, pickups, transitions, critters) to drop into a game, recolor, export as sprite sheets or remix, plus a draft, render, look, refine loop that makes new ones look hand-animated. Use when someone wants pixel art VFX, sprite animations or sprite sheets, game juice, a specific effect ("a frost nova for my mage", "a coin pickup sparkle"), wants to use or export a pixelfx effect in Godot, Unity, Phaser or a canvas game, or wants their pixel effects to look better.

Overview

Publisherpatch-gg
Repositorypixelfx
Skill namepixelfx
Stars
348
Forks
40
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by patch-gg on GitHub. Read the source before you install it.

Installation

Install the Pixelfx AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/patch-gg/pixelfx/tree/main/skills/pixelfx
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/patch-gg/pixelfx.git /tmp/pixelfx
mkdir -p .claude/skills
cp -r /tmp/pixelfx/skills/pixelfx .claude/skills/pixelfx
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Pixelfx in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Pixelfx on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Pixelfx is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

pixelfx

Pixel art effects as code. Each effect is one file, src/fx/<category>/<name>.js, that draws into two buffers: color (pixels: opaque, dithered or truly translucent) and light (additive glow). No images, so an effect can be played live, recolored, mirrored, reseeded and rendered to a sprite sheet for any engine.

The method is Hugo Duprez's (How to make (good) pixel art effects with Claude): code is clay, trust your eyes, feed your references. One-shot prompts make mediocre effects. Drafts you render, look at and refine make good ones.

Before anything

  1. Work in a pixelfx checkout. If the working directory has no tools/render.mjs, clone one next to the project: git clone https://github.com/patch-gg/pixelfx. No install step: the tools use only Node.
  2. Check it runs: node tools/render.mjs fire/torch writes records/fire/torch/contact.png. Open that PNG with your image-reading tool. That contact sheet is how you see every effect from now on.

1. Look for an existing effect first

node tools/list.mjs <words> searches ids, names, tags and descriptions (node tools/list.mjs frost, node tools/list.mjs slash loop). docs/CATALOG.md lists everything by category. Render the candidates and look at them before choosing. Most requests are an existing effect with different options:

  • palette: the main ramp, dark to bright, as hex strings. Any PAL ramp in src/core/color.js (fire ember lava smoke dust ice water electric volt poison holy heal arcane shadow blood earth stone gold leaf wood metal bone neon cyber matrix candy night) or your own. A blue fire is {"palette": PAL.ice}.
  • seed for a different but equivalent take; flip to face left; angle to rotate; light (0..1+) for glow strength; plus each effect's own knobs in its meta.options (size, count, radius, text, height...).
  • Try options without editing code: node tools/render.mjs fire/torch --opts '{"palette":["#102","#215","#43a","#8cf","#fff"]}'.

2. Put it in the game

Canvas or WebGL games in JS or TS (plain canvas, Phaser, PixiJS, Kaplay, three.js): use the code directly. It has no dependencies; copy src/core and the effect files you need, or depend on the repo.

js
import { createFrame, clearFrame, createFx, composite } from "pixelfx";   // src/core/index.js
import * as frostNova from "pixelfx/fx/ice/frost-nova";                   // src/fx/ice/frost-nova.js

const frame = createFrame(320, 180);            // the game's pixel resolution; ox, oy scroll it with the camera
const img = new ImageData(320, 180);
const fx = createFx(frostNova, { x: hero.x, y: hero.y, flip: hero.facing < 0 });

// every tick
fx.update(dt);
clearFrame(frame);
fx.draw(frame, "back");    // what goes behind characters
drawCharacters();          // your own sprites, or draw them into frame.color yourself
fx.draw(frame, "front");
composite(frame, img.data, background);   // color over the background plus light; or null for transparent
ctx.putImageData(img, 0, 0);              // then scale the canvas up with image-rendering: pixelated
if (fx.done()) removeIt();               // one-shots end on their own; fx.stop() fades a loop out

Several effects can share one frame. In a WebGL engine, upload the composited RGBA to a texture each frame, or render the effect to a sprite sheet once (below) and play it like any other animation.

Any engine (Godot, Unity, GameMaker, Defold, LÖVE, Bevy, Construct): export sprite sheets. node tools/render.mjs ice/frost-nova --sheet writes records/ice/frost-nova/frost-nova.png (transparent frames in a grid) and frost-nova.json (Aseprite-style frames, so Phaser's atlas loader, Godot and Unity Aseprite importers and most tools read it; meta.pixelfx has fps, loop, frame size, columns and the pivot). Set the pivot to meta.pixelfx.pivot (the effect's origin, e.g. the feet), import with nearest-neighbour filtering and no compression, and play at meta.pixelfx.fps. Glow is baked into the sheet as color with alpha, which reads as additive over dark scenes; for bright scenes, render a recolored version or keep the effect on a dark layer.

For the full library: node tools/render.mjs <category> --sheet does a whole category.

3. Make a new one

Read docs/AUTHORING.md first: it is the contract (meta, draw(p, t, o) for pure effects or create(o) for simulated ones, local coordinates, seamless loops, ending empty), the toolkit, the painter API and the quality bar. Then:

  1. Say it in one line with art direction: what it is, how it moves, its palette, its timing. "A frost nova: crystals erupt in a ring from the feet outward, a white flash at the center, shards spin off, the floor stays frosted and fades."
  2. Find references in the library: node tools/list.mjs <words>, then read the two or three closest effect files and borrow their techniques (Particles and Bits in src/core/sim.js for sparks, smoke and debris, p.disc for translucent volumes, cycle for seamless particles, tileFbm scrolls for flames and water). Look at the closest of Hugo Duprez's effects too: they are the quality bar. If his has more detail, light or life at the same size on screen, yours isn't done.
  3. Draft. node tools/new.mjs <category>/<name> (add --loop for a loop) gives a working file. When the direction is open, write 3 to 5 genuinely different drafts (<name>-a.js .. -e.js), render them all (node tools/render.mjs "<category>/<name>-*") and look at every contact sheet before choosing. Show the user the strongest two or three if they're around (--gif makes animations to share).
  4. Look, judge, fix. Render, open records/<id>/contact.png, and judge like a picky pixel artist. Fix the worst thing, render again. Three rounds minimum; a showpiece takes more. --all shows every frame, --mp4 shows motion at full speed.
  5. Check. node tools/check.mjs <id> catches drawing outside the canvas, one-shots that don't end empty, loop seams, unseeded randomness and slow frames. Fix until it passes clean. Delete the drafts you didn't keep.

What to look for, and the usual fix:

you seefix
it reads as mush at 1xfewer colors, a clear silhouette, one focal point, bigger shapes
speckle: lone noise pixels inside shapesthreshold noise less, quantize with at(), no noise on small shapes
floaty, no punchfast in, slow out (ease.outQuart/outExpo), a 1 to 2 frame white hero frame, shorter total time
stiff or mechanicalvary every particle (size, speed, delay, life), add secondary motion (sparks, smoke, debris)
washed outless glow (k 0.2 to 0.5), darker edge steps, keep white for the hottest core only
flatlight from one side: brighter top-left, darker bottom-right step; a darker ramp step at the base
smooth gradients, vector lookhard ramp steps in color; softness only in light and in translucent smoke
a checkerboard where smoke should beSMOKE, VAPOUR or DUST particles, or p.disc: truly translucent, lit on top
seam when a loop wrapscycle, loopNoise(phase), whole-cell tileNoise scrolls, sin(phase * TAU * n)
a one-shot that pops offlet it shrink, dither out or fall away before t = duration

Directional effects face right, ground effects stand on y = 0, actor effects wrap o.actor (a 24 x 38 stock character's mask and pixels), and nothing uses Math.random. Generic motifs are fine; never recreate a specific game's sprites, characters or logos.

4. Native code instead of JS

If the game can't run JS and a sprite sheet isn't enough (an effect that follows a moving target, or needs per-instance colors at runtime), port the effect. Pure effects are a function of time; simulated ones step the particles in src/core/sim.js. Keep the two-buffer idea, the 4x4 Bayer threshold for dithered alpha and the palette ramp lookups. Render the JS original and your port side by side to check they match.

Frequently asked questions

What does the Pixelfx AI skill do?

Make pixel art effects and sprite animations in code with the pixelfx library, which has 232 ready-made ones (fire, explosions, water, ice, lightning, sci-fi, melee, impacts, projectiles, spawn and death, arcane, holy, shadow, status, nature, weather, UI, pickups, transitions, critters) to drop into a game, recolor, export as sprite sheets or remix, plus a draft, render, look, refine loop that makes new ones look hand-animated. Use when someone wants pixel art VFX, sprite animations or sprite sheets, game juice, a specific effect ("a frost nova for my mage", "a coin pickup sparkle"), wants...

Why use Pixelfx on TypingMind?

Because you install it once and use it with any model. Pixelfx is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Pixelfx in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/patch-gg/pixelfx/tree/main/skills/pixelfx. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Pixelfx?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Pixelfx?

As many as you like. As long as a model supports skills, you can use Pixelfx with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Pixelfx AI skill free?

Yes. It is published on GitHub by patch-gg under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇