Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help


title: “Pixel Art — Pixel art w/ era palettes (NES, Game Boy, PICO-8)” sidebar_label: “Pixel Art” description: “Pixel art w/ era palettes (NES, Game Boy, PICO-8)”

{/* 本页面由 website/scripts/generate-skill-docs.py 根据技能对应的 SKILL.md 文件自动生成。请直接编辑源文件 SKILL.md,而非此页面。 */}

像素艺术

支持使用特定时代风格的调色板(NES、Game Boy、PICO-8)进行像素艺术创作。

技能元数据

来源可选 — 通过 hermes skills install official/creative/pixel-art 安装
路径optional-skills/creative\pixel-art
版本2.0.0
开发者dodo-reach
许可协议MIT
支持平台linux、macos、windows
标签creative、pixel-art、arcade、snes、nes、gameboy、retro、image、video

参考:完整 SKILL.md 文件

:::info 以下是当触发该技能时 Hermes 会加载的完整技能定义。技能激活后,智能体将依据此内容执行操作。
::

像素艺术

可将任意图像转换为复古风格的像素艺术,还可根据需求为其添加动画效果, 生成带有时代特色特效(雨滴、萤火虫、雪花、余烬等)的短 MP4 或 GIF 文件。

该技能附带两个脚本:

  • scripts/pixel_art.py — 将照片转换为像素艺术 PNG 图像(采用 Floyd-Steinberg 点阵算法)
  • scripts/pixel_art_video.py — 将像素艺术 PNG 转换为动画 MP4 文件(也可生成 GIF)

这两个脚本均可直接导入或运行。若需还原特定时代的色彩效果(如 NES、Game Boy、PICO-8 等平台的风格),可使用预设的硬件调色板;若希望呈现街机或 SNES 风格,则可选用自适应的 N 色量化功能。

适用场景

  • 用户希望从源图像生成复古像素艺术风格的作品
  • 用户要求采用NES、Game Boy、PICO-8、C64、街机或SNES等游戏机的视觉风格
  • 用户需要简短的循环动画(如雨景、夜空、下雪场景等)
  • 海报、专辑封面、社交平台帖子、精灵图、角色形象、头像

工作流程

在生成内容之前,需先与用户确认风格偏好。不同的预设会带来截然不同的输出结果,重新生成则成本较高。

第一步 — 提供风格选项

调用clarify函数并传入4种具有代表性的预设风格。根据用户的实际需求选择合适的风格组合——无需一次性展示全部14种风格。

当用户的需求不明确时,显示默认菜单:

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)",
    ],
)

当用户已为某个时代指定名称(例如“80年代街机游戏”“Gameboy时代”)时,可直接跳过clarify步骤,使用对应的预设配置。

第2步 — 提供动画效果(可选)

如果用户要求生成视频/GIF,或者输出内容通过动态效果能更佳呈现,可询问用户希望展示哪一场景:

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",
    ],
)

请勿连续两次以上调用 clarify 函数。若需设定风格,则调用一次;若涉及动画制作,则还需再调用一次以设定场景。如果用户在请求中已明确指定了具体的风格和场景,则无需使用 clarify 函数。

第三步 — 生成图像

首先运行 pixel_art() 函数;如果用户要求生成动画,可在其输出结果的基础上继续调用 pixel_art_video() 函数。

预设选项目录

预设名称影视时代调色板数量块尺寸最适合用于
arcade80年代街机动态调整的16种颜色8像素强烈视觉冲击力的海报、角色形象设计
snes16位游戏机动态调整的32种颜色4像素角色形象、细节丰富的场景绘制
nes8位游戏机NES标准色系(54种颜色)8像素还原真实的NES游戏风格
gameboyDMG掌上游戏机4种绿色色调8像素单色风格的Game Boy游戏画面
gameboy_pocket口袋型掌上游戏机4种灰色色调8像素单色风格的Game Boy Pocket游戏画面
pico8PICO-8游戏机固定的16种颜色6像素带有奇幻风格的游戏机外观
c64Commodore 64电脑固定的16种颜色8像素8位家用电脑风格
apple2Apple II高分辨率显示器固定的6种颜色10像素极具复古感、仅支持6种颜色的风格
teletextBBC文字电视服务纯色的8种颜色10像素鲜艳醒目的基础色彩风格
mspaintWindows画图程序固定的24种颜色8像素具有怀旧感的桌面风格
mono_greenCRT荧光屏效果2种绿色色调6像素终端/CRT显示器的视觉风格
mono_amberCRT琥珀色屏幕效果2种琥珀色色调6像素琥珀色监控器风格的画面
neon霓虹赛博风10种霓虹色彩6像素气泡波/赛博朋克风格
pastel柔和淡彩风10种淡彩色调6像素可爱柔和的视觉风格
命名调色板存储在 scripts/palettes.py 文件中(完整列表请参见 references/palettes.md——共计有 28 个命名调色板)。任何预设值均可被覆盖:
pixel_art("in.png", "out.png", preset="snes", palette="PICO_8", block=6)

场景目录(适用于视频)

场景效果
night闪烁的星星 + 萤火虫 + 飘落的树叶
dusk萤火虫 + 闪光粒子
tavern灰尘微粒 + 温暖的闪光效果
indoor灰尘微粒
urban雨滴 + 霓虹灯脉动光效
nature树叶 + 萤火虫
magic闪光粒子 + 萤火虫
storm雨滴 + 闪电
underwater气泡 + 微弱闪光
fire火炭 + 闪光粒子
snow雪花 + 闪光粒子
desert热浪光效 + 灰尘

调用方式

Python(导入方式)

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
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 ~/.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

流处理原理

像素转换:

  1. 提升对比度、色彩饱和度及清晰度(颜色调色板较少的情况下效果更显著)
  2. 在量化之前将图像简化为块状结构,以简化色调区域
  3. 使用 Image.NEAREST 方法按“块”进行缩小处理(采用硬像素方式,不进行插值)
  4. 采用 Floyd-Steinberg 随机化算法进行量化——量化依据可以是自适应的 N 色调色板,也可以是预定义的硬件色调色板
  5. 再次使用 Image.NEAREST 方法将图像放大回原始尺寸

在缩小处理之后再进行量化,可以确保随机化效果与最终的像素网格保持一致。若在缩小之前就进行量化,则会在那些最终会消失的细节上浪费误差扩散资源。

视频叠加:

  • 每一帧都复制基础帧(用于静态背景)
  • 叠加每帧独立的粒子渲染效果(每种特效对应一个函数)
  • 通过 ffmpeg 使用 libx264 -pix_fmt yuv420p -crf 18 进行编码
  • 如需生成 GIF 格式,可使用 palettegen 和 paletteuse 工具

依赖项

  • Python 3.9 及以上版本
  • Pillow 库(可通过 pip install Pillow 安装)
  • PATH 环境变量中需包含 ffmpeg(仅视频处理需要——Hermes 会自动安装该软件)

常见问题与注意事项

  • 调色板键名区分大小写(如 "NES"、"PICO_8"、"GAMEBOY_ORIGINAL")。
  • 非常小的图像源(宽度小于100像素)在8-10像素的块尺寸下会被压缩。若图像过小,建议先进行放大处理。
  • 分数形式的 block 或 palette 值会导致量化错误——请确保使用正整数。
  • 动画粒子数量是根据约640x480分辨率的画布优化的。对于超大尺寸的图像,可能需要使用不同的种子值进行二次处理以调整密度。
  • mono_green / mono_amber 选项会强制将颜色饱和度设为 0.0(即去饱和)。若尝试覆盖此设置并保留色度,双色调色板可能在平滑区域产生条纹。
  • clarify 循环:每轮最多调用两次(先处理风格,再处理场景)。避免向用户频繁提出过多选择。

验证标准

  • 输出路径中会生成PNG文件
  • 在预设的块尺寸下能清晰看到方形的像素块
  • 颜色数量与预设值一致(可通过肉眼观察图像或运行 Image.open(p).getcolors() 查验)
  • 视频为有效的MP4格式(可使用 ffprobe 打开),且文件大小非零

出处说明

pixel_art_video.py 中的命名硬件调色板以及程序化动画循环均源自 pixel-art-studio(MIT许可证)。详细信息请参阅该技能目录下的 ATTRIBUTION.md 文件。