Skip to content
cccskills
FreePublished on GitHubEnglish overview

pixel-art

Turn photos and other images into retro pixel art using palettes such as NES, Game Boy, and PICO-8. Export a PNG, or add effects such as rain, snow, and twinkling stars to create short MP4 or GIF animations.

OriginalShow the original description

Pixel art w/ era palettes (NES, Game Boy, PICO-8).

AI rating100/ 100See how to install

Good for

  • Converting photos into retro pixel art
  • Creating game-inspired avatars and characters
  • Preparing pixel art for posters and social posts
  • Making short animations with rain, snow, or stars

Overview

What it does

pixel-art turns photos and other images into retro artwork with visible square pixels. Choose a fixed palette such as NES, Game Boy, or PICO-8, or a preset that reduces colors to suit the image, then export a PNG. Add rain, snow, fireflies, or twinkling stars to the converted image to create a short MP4 or GIF animation. You can also adjust the palette and pixel size.

When it helps

Use it to give photos the look of older games or create images for avatars, characters, posters, and social media posts. It also suits night scenes, snowy landscapes, and other still images that could use a little movement.

Example requests

  • “Turn this photo into Game Boy-style pixel art.”
  • “Create an image for a poster using the NES palette.”
  • “Add falling snow to the pixel art and make a six-second MP4 and GIF.”

Notes

You need Python 3.9 or later and Pillow. Video output also requires ffmpeg available as a command. Enlarge very small source images first, since coarse pixel blocks can distort their shapes. Palette names are case-sensitive. Presets produce substantially different results, so specify the look you want.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Objective evaluation

AI rated this skill on four points using only the contents of its SKILL.md. Stars and popularity are not taken into account.

Clear instructionsIs it clear when to use it and what it does?
AGoodThe skill explicitly describes converting source images into pixel art and optionally creating short animations.
Concrete stepsAre steps, inputs, outputs, and examples spelled out?
AGoodIt provides steps from style selection to generation, preset tables, and examples producing PNG and video files.
SafetyAre sending data, deleting files, and running commands disclosed?
AGoodScript examples generate images and videos locally with explicit input and output paths.
Easy setupDoes it need few tools or API keys, and are they documented?
AGoodPython 3.9+, the Pillow installation command, and the ffmpeg requirement for video are specified.

The total counts each point as A = 25, B = 15, C = 5. Rated by AI (OpenAI Codex) as of Oct 19, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (7)

  • SKILL.md7.5 KB
  • ATTRIBUTION.md2.2 KB
  • references/palettes.md1.7 KB
  • scripts/__init__.py0 B
  • scripts/palettes.py7.3 KB
  • scripts/pixel_art_video.py11.9 KB
  • scripts/pixel_art.py5.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Pixel Art

Convert any image into retro pixel art, then optionally animate it into a short MP4 or GIF with era-appropriate effects (rain, fireflies, snow, embers).

Two scripts ship with this skill:

  • scripts/pixel_art.py — photo → pixel-art PNG (Floyd-Steinberg dithering)
  • scripts/pixel_art_video.py — pixel-art PNG → animated MP4 (+ optional GIF)

Each is importable or runnable directly. Presets snap to hardware palettes when you want era-accurate colors (NES, Game Boy, PICO-8, etc.), or use adaptive N-color quantization for arcade/SNES-style looks.

When to Use

  • User wants retro pixel art from a source image
  • User asks for NES / Game Boy / PICO-8 / C64 / arcade / SNES styling
  • User wants a short looping animation (rain scene, night sky, snow, etc.)
  • Posters, album covers, social posts, sprites, characters, avatars

Workflow

Before generating, confirm the style with the user. Different presets produce very different outputs and regenerating is costly.

Step 1 — Offer a style

Call clarify with 4 representative presets. Pick the set based on what the user asked for — don't just dump all 14.

Default menu when the user's intent is unclear:

clarify(
    question="Which pixel-art style do you want?",
    choices=[
        "arcade — bold, chunky 80s cabinet feel (16 colors, 8px)",
        "nes — Nintendo 8-bit hardware palette (54 colors, 8px)",
        "gameboy — 4-shade green Game Boy DMG",
        "snes — cleaner 16-bit look (32 colors, 4px)",
    ],
)

When the user already named an era (e.g. "80s arcade", "Gameboy"), skip clarify and use the matching preset directly.

Step 2 — Offer animation (optional)

If the user asked for a video/GIF, or the output might benefit from motion, ask which scene:

clarify(
    question="Want to animate it? Pick a scene or skip.",
    choices=[
        "night — stars + fireflies + leaves",
        "urban — rain + neon pulse",
        "snow — falling snowflakes",
        "skip — just the image",
    ],
)

Do NOT call clarify more than twice in a row. One for style, one for scene if animation is on the table. If the user explicitly asked for a specific style and scene in their message, skip clarify entirely.

Step 3 — Generate

Run pixel_art() first; if animation was requested, chain into pixel_art_video() on the result.

Preset Catalog

PresetEraPaletteBlockBest for
arcade80s arcadeadaptive 168pxBold posters, hero art
snes16-bitadaptive 324pxCharacters, detailed scenes
nes8-bitNES (54)8pxTrue NES look
gameboyDMG handheld4 green shades8pxMonochrome Game Boy
gameboy_pocketPocket handheld4 grey shades8pxMono GB Pocket
pico8PICO-816 fixed6pxFantasy-console look
c64Commodore 6416 fixed8px8-bit home computer
apple2Apple II hi-res6 fixed10pxExtreme retro, 6 colors
teletextBBC Teletext8 pure10pxChunky primary colors
mspaintWindows MS Paint24 fixed8pxNostalgic desktop
mono_greenCRT phosphor2 green6pxTerminal/CRT aesthetic
mono_amberCRT amber2 amber6pxAmber monitor look
neonCyberpunk10 neons6pxVaporwave/cyber
pastelSoft pastel10 pastels6pxKawaii / gentle

Named palettes live in scripts/palettes.py (see references/palettes.md for the complete list — 28 named palettes total). Any preset can be overridden:

pixel_art("in.png", "out.png", preset="snes", palette="PICO_8", block=6)

Scene Catalog (for video)

SceneEffects
nightTwinkling stars + fireflies + drifting leaves
duskFireflies + sparkles
tavernDust motes + warm sparkles
indoorDust motes
urbanRain + neon pulse
natureLeaves + fireflies
magicSparkles + fireflies
stormRain + lightning
underwaterBubbles + light sparkles
fireEmbers + sparkles
snowSnowflakes + sparkles
desertHeat shimmer + dust

Invocation Patterns

Python (import)

import sys
import os
sys.path.insert(0, os.path.expanduser("~/.hermes/skills/creative/pixel-art/scripts"))
from pixel_art import pixel_art
from pixel_art_video import pixel_art_video

# 1. Convert to pixel art
out = os.path.expanduser("~/.hermes/cache/scratch")
pixel_art("/path/to/photo.jpg", f"{out}/pixel.png", preset="nes")

# 2. Animate (optional)
pixel_art_video(
    f"{out}/pixel.png",
    f"{out}/pixel.mp4",
    scene="night",
    duration=6,
    fps=15,
    seed=42,
    export_gif=True,
)

CLI

cd ~/.hermes/skills/creative/pixel-art/scripts

python pixel_art.py in.jpg out.png --preset gameboy
python pixel_art.py in.jpg out.png --preset snes --palette PICO_8 --block 6

python pixel_art_video.py out.png out.mp4 --scene night --duration 6 --gif

Pipeline Rationale

Pixel conversion:

  1. Boost contrast/color/sharpness (stronger for smaller palettes)
  2. Posterize to simplify tonal regions before quantization
  3. Downscale by block with Image.NEAREST (hard pixels, no interpolation)
  4. Quantize with Floyd-Steinberg dithering — against either an adaptive N-color palette OR a named hardware palette
  5. Upscale back with Image.NEAREST

Quantizing AFTER downscale keeps dithering aligned with the final pixel grid. Quantizing before would waste error-diffusion on detail that disappears.

Video overlay:

  • Copies the base frame each tick (static background)
  • Overlays stateless-per-frame particle draws (one function per effect)
  • Encodes via ffmpeg libx264 -pix_fmt yuv420p -crf 18
  • Optional GIF via palettegen + paletteuse

Dependencies

  • Python 3.9+
  • Pillow (pip install Pillow)
  • ffmpeg on PATH (only needed for video — Hermes installs package this)

Pitfalls

  • Pallet keys are case-sensitive ("NES", "PICO_8", "GAMEBOY_ORIGINAL").
  • Very small sources (<100px wide) collapse under 8-10px blocks. Upscale the source first if it's tiny.
  • Fractional block or palette will break quantization — keep them positive ints.
  • Animation particle counts are tuned for ~640x480 canvases. On very large images you may want a second pass with a different seed for density.
  • mono_green / mono_amber force color=0.0 (desaturate). If you override and keep chroma, the 2-color palette can produce stripes on smooth regions.
  • clarify loop: call it at most twice per turn (style, then scene). Don't pepper the user with more picks.

Verification

  • PNG is created at the output path
  • Clear square pixel blocks visible at the preset's block size
  • Color count matches preset (eyeball the image or run Image.open(p).getcolors())
  • Video is a valid MP4 (ffprobe can open it) with non-zero size

Attribution

Named hardware palettes and the procedural animation loops in pixel_art_video.py are ported from pixel-art-studio (MIT). See ATTRIBUTION.md in this skill directory for details.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

1password

FreeSummaryAI rating 100

Set up the 1Password CLI and use stored passwords or API keys in commands and configuration templates. Choose an authentication method, retrieve secret references, and pass credentials to processes through environment variables.

  • Installing and configuring the 1Password CLI
  • Running commands with stored API keys
  • Filling configuration templates with stored secrets
NousResearch/hermes-agent255.1KUpdated Oct 19, 2026

3-statement-model

FreeSummaryAI rating 90

Build an Excel workbook linking the income statement, balance sheet, and cash flow statement. Populate historical figures, create formula-based forecasts, compare scenarios, and check that balances and cash totals agree across all three statements.

  • Populating a financial model template with historical data
  • Building linked forecasts across three financial statements
  • Comparing base, upside, and downside scenarios
NousResearch/hermes-agent255.1KUpdated Oct 19, 2026

accelerate

FreeSummary

Adapt existing PyTorch training scripts to use multiple GPUs or machines with limited code changes. The skill guides configuration, launch commands, mixed precision, which uses lower-precision numbers, and DeepSpeed or FSDP settings for distributing training work and memory.

  • Move a single-GPU training script to multiple GPUs
  • Configure mixed precision training
  • Set up DeepSpeed or FSDP to reduce memory use
NousResearch/hermes-agent255.1KUpdated Oct 19, 2026

actual-setup

FreeSummary

Configure Hermes to run AI models through Actual Computer on your own hardware. Set up either the hosted relay or a local connection, select models, verify responses, and troubleshoot request errors or empty output.

  • Connecting Hermes with an Actual inference key
  • Running models through a local Actual daemon
  • Downloading and loading local models
NousResearch/hermes-agent255.1KUpdated Oct 19, 2026

Test an app from the perspective of a frustrated, less technical user. Find confusing steps and barriers, separate actionable usability problems from personal complaints, and produce screenshots, suggested fixes, and prioritized tickets.

  • Reviewing usability before a launch or demo
  • Checking the experience of a new user
  • Finding friction in signup and subscription flows
NousResearch/hermes-agent255.1KUpdated Oct 19, 2026

Resolve Git merge conflicts between two agents by comparing both changes and their stated goals. Combine compatible work, explain choices where designs differ, and verify the merged result with project builds or tests.

  • Resolving conflicts between branches edited by two agents
  • Integrating changes from parallel worktrees
  • Reviewing reasons for conflicting design choices
NousResearch/hermes-agent255.1KUpdated Oct 19, 2026

See all skills by NousResearch

Report a problem with this skill