with one click
pixel-art
Pixel art w/ era palettes (NES, Game Boy, PICO-8).
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Pixel art w/ era palettes (NES, Game Boy, PICO-8).
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Use when a problem or request is underspecified and you need to decide WHAT to clarify before doing the work — the NEXT-BEST QUESTIONS to answer, ranked. Interrogates the prompt into candidate questions, projects plausible answers with probabilities, estimates each question's value of information (how much the answer would change the recommended plan, weighted by likelihood and stakes), discards low-value/redundant ones, and keeps generating until a diverse bucket of high-value questions is filled. Reports a ranked list with recommendations (pre-answer / assume-default) using role-specialized local Ollama models. Reports only — it does not ask the user or answer the questions itself. Triggers: "what should I clarify", "what questions matter here", "is this spec complete", "what am I missing before I start".
Use to run one improvement iteration on the next-best-questions skill: review its learnings journal, research opportunities, pre-register a cost-aware experiment, build off-default, evaluate Δresult AND Δcost, and journal the verdict either way. Triggers: 'improve nbq', 'run the nbq loop', 'next-best-questions iteration'. There are NO scripts; this protocol is agent-executed.
Prompt any model or alias via "ask <model> <question>". Resolves short names (deepseek, kimi, qwen, glm) to full model IDs. Captures session IDs for follow-up questions. Comparison mode: "ask deepseek kimi <question>" dispatches multiple models in parallel. Each call is a full Hermes agent with tools and multi-turn reasoning. Replies inline with a model badge.
Autonomous end-to-end build/debug engine. Use it when asked to build, implement, fix, or debug a module/feature: it runs the WHOLE loop unattended — drafts a checkable Definition of Done, fail-closed gates it (vague or ambiguous requests come back with the blocking questions instead of guesses), generates tests, then loops implement -> lint -> evidence until coverage + two distinct-model judges + real exit codes + a whole-suite regression gate all pass — and on COMPLETE AUTO-MERGES the work into the target repo's current branch (no repo named = a fresh workspace under the write-safe root is the deliverable). Prefer this over the `dev` skill for any multi-file task whose outcome should be verified, merged code rather than role-by-role assistance. NOT for trivial one-shot asks (a quick answer, a one-line edit, running a command) — just do those directly. Run: `devloop "<request>" [--repo PATH]` (or python3 ${HERMES_HOME}/skills/software-development/devloop/scripts/devloop_cli.py) — see "How to run".
An LLM authors a JSON/YAML workflow spec (states, prompts, routing, failure policy); a durable interpreter runs it, passing state from step to step, with suspend/resume, human gates, and replay that never re-runs completed steps. Use when an LLM should define-and-run a multi-step workflow that must pause for a human (approve, decide, fix something) and resume later, survive a crash and continue exactly once, or route declaratively on step errors. Rides a durable-execution-lite engine (append-only journal, deterministic replay). Triggers: LLM-authored workflow, workflow spec, prompt routing, durable resume, resumable script, pause and resume, checkpoint and continue, don't re-run completed steps.
Cron job that reviews Hermes conversation history and captures durable knowledge into the wiki. Handles triage (SKIP/NOTE/PAGE), Slack-session cleanup, and post-capture lint.
| name | pixel-art |
| description | Pixel art w/ era palettes (NES, Game Boy, PICO-8). |
| version | 2.0.0 |
| author | dodo-reach |
| license | MIT |
| platforms | ["linux","macos","windows"] |
| metadata | {"hermes":{"tags":["creative","pixel-art","arcade","snes","nes","gameboy","retro","image","video"],"category":"creative","credits":["Hardware palettes and animation loops ported from Synero/pixel-art-studio (MIT) — https://github.com/Synero/pixel-art-studio"],"config":[{"key":"pixel-art.enabled","description":"Enable pixel-art skill behavior","default":true,"prompt":"Enable pixel-art skill?"}]}} |
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.
Before generating, confirm the style with the user. Different presets produce very different outputs and regenerating is costly.
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.
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.
Run pixel_art() first; if animation was requested, chain into
pixel_art_video() on the result.
| Preset | Era | Palette | Block | Best for |
|---|---|---|---|---|
arcade | 80s arcade | adaptive 16 | 8px | Bold posters, hero art |
snes | 16-bit | adaptive 32 | 4px | Characters, detailed scenes |
nes | 8-bit | NES (54) | 8px | True NES look |
gameboy | DMG handheld | 4 green shades | 8px | Monochrome Game Boy |
gameboy_pocket | Pocket handheld | 4 grey shades | 8px | Mono GB Pocket |
pico8 | PICO-8 | 16 fixed | 6px | Fantasy-console look |
c64 | Commodore 64 | 16 fixed | 8px | 8-bit home computer |
apple2 | Apple II hi-res | 6 fixed | 10px | Extreme retro, 6 colors |
teletext | BBC Teletext | 8 pure | 10px | Chunky primary colors |
mspaint | Windows MS Paint | 24 fixed | 8px | Nostalgic desktop |
mono_green | CRT phosphor | 2 green | 6px | Terminal/CRT aesthetic |
mono_amber | CRT amber | 2 amber | 6px | Amber monitor look |
neon | Cyberpunk | 10 neons | 6px | Vaporwave/cyber |
pastel | Soft pastel | 10 pastels | 6px | Kawaii / 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 | Effects |
|---|---|
night | Twinkling stars + fireflies + drifting leaves |
dusk | Fireflies + sparkles |
tavern | Dust motes + warm sparkles |
indoor | Dust motes |
urban | Rain + neon pulse |
nature | Leaves + fireflies |
magic | Sparkles + fireflies |
storm | Rain + lightning |
underwater | Bubbles + light sparkles |
fire | Embers + sparkles |
snow | Snowflakes + sparkles |
desert | Heat shimmer + dust |
import sys
sys.path.insert(0, "/home/teknium/.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
pixel_art("/path/to/photo.jpg", "/tmp/pixel.png", preset="nes")
# 2. Animate (optional)
pixel_art_video(
"/tmp/pixel.png",
"/tmp/pixel.mp4",
scene="night",
duration=6,
fps=15,
seed=42,
export_gif=True,
)
cd /home/teknium/.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
Pixel conversion:
block with Image.NEAREST (hard pixels, no interpolation)Image.NEARESTQuantizing AFTER downscale keeps dithering aligned with the final pixel grid. Quantizing before would waste error-diffusion on detail that disappears.
Video overlay:
libx264 -pix_fmt yuv420p -crf 18palettegen + paletteusepip install Pillow)"NES", "PICO_8", "GAMEBOY_ORIGINAL").block or palette will break quantization — keep them positive ints.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.Image.open(p).getcolors())ffprobe can open it) with non-zero sizeNamed 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.