hermes-agent/skills/creative/pixel-art/ATTRIBUTION.md
Teknium d40a828a8b
feat(pixel-art): add hardware palettes and video animation (#12725)
Expand the pixel-art skill from 2 presets (arcade, snes) to 14 presets
with hardware-accurate palettes (NES, Game Boy, PICO-8, C64, Apple II,
MS Paint, CRT mono), plus a procedural video overlay pipeline.

Ported from Synero/pixel-art-studio (MIT). Full attribution in
ATTRIBUTION.md.

What's in:
- scripts/palettes.py — 28 named RGB palettes (hardware + artistic)
- scripts/pixel_art.py — 14 presets, named palette support, CLI
- scripts/pixel_art_video.py — 12 animation scenes (stars, rain,
  fireflies, snow, embers, lightning, etc.) → MP4/GIF via ffmpeg
- references/palettes.md — palette catalog
- SKILL.md — clarify-tool workflow (offer style, then optional scene)

What's out (intentional):
- Wu's quantizer (PIL's built-in quantize suffices)
- Sobel edge-aware downsample (scipy dep not worth it)
- Atkinson/Bayer dither (would need numpy reimpl)
- Pollinations text-to-image (Hermes uses image_generate instead)

Video pipeline uses subprocess.run with check=True (replaces os.system)
and tempfile.TemporaryDirectory (replaces manual cleanup).
2026-04-19 16:59:20 -07:00

2.2 KiB

Attribution

This skill bundles code ported from a third-party MIT-licensed project. All reuse is credited here.

pixel-art-studio (Synero)

What was ported

scripts/palettes.py — the PALETTES dict containing 23 named RGB palettes (hardware and artistic). Values are reproduced verbatim from scripts/pixelart.py of pixel-art-studio.

scripts/pixel_art_video.py — the 12 procedural animation init/draw pairs (stars, fireflies, leaves, dust_motes, sparkles, rain, lightning, bubbles, embers, snowflakes, neon_pulse, heat_shimmer) and the SCENES → layer mapping. Ported from scripts/pixelart_video.py with minor refactors:

  • Names prefixed with _ for private helpers (_px, _pixel_cross)
  • SCENE_ANIMATIONS renamed to SCENES and restructured to hold layer names (strings) instead of function-name strings resolved via globals()
  • generate_video() split: the Pollinations text-to-image call was removed (Hermes uses its own image_generate + pixel_art() pipeline for base frames). Only the overlay + ffmpeg encoding remains.
  • Frame directory is now a tempfile.TemporaryDirectory instead of hand-managed cleanup.
  • ffmpeg invocation switched from os.system to subprocess.run(check=True) for safety.

What was NOT ported

  • Wu's Color Quantization (PIL's built-in quantize suffices)
  • Sobel edge-aware downsampling (requires scipy; not worth the dep)
  • Bayer / Atkinson dither (would need numpy reimplementation; kept scope tight)
  • Pollinations text-to-image generation (pixelart_image.py, generate_base() in pixelart_video.py) — Hermes has image_generate

License compatibility

pixel-art-studio ships under the MIT License, which permits redistribution with attribution. This skill preserves the original copyright notice here and in the SKILL.md credits block. No code was relicensed.


pixel-art skill itself

  • License: MIT (inherits from hermes-agent repo)
  • Original author of the skill shell: dodo-reach
  • Expansion with palettes + video: Hermes Agent contributors