像素藝術
帶有時代調色板的像素藝術(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
以下是 Hermes 在觸發此技能時加載的完整技能定義。這是技能激活時代理看到的指令。
像素藝術
將任何圖像轉換為復古像素藝術,然後可選擇將其動畫化為帶有符合時代特徵效果(雨、螢火蟲、雪、餘燼)的短 MP4 或 GIF。
此技能附帶兩個腳本:
scripts/pixel_art.py— 照片 → 像素藝術 PNG(Floyd-Steinberg 抖動)scripts/pixel_art_video.py— 像素藝術 PNG → 動畫 MP4(+ 可選 GIF)
每個腳本均可導入或直接運行。當你需要符合時代的準確顏色(NES、Game Boy、PICO-8 等)時,預設會吸附到硬件調色板;或者使用自適應 N 色量化以獲得街機/SNES 風格的外觀。
何時使用
- 用戶希望從源圖像生成復古像素藝術
- 用戶要求 NES / Game Boy / PICO-8 / C64 / 街機 / SNES 風格
- 用戶希望製作短循環動畫(雨景、夜空、雪景等)
- 海報、專輯封面、社交媒體帖子、精靈圖、角色、頭像
工作流程
在生成之前,與用戶確認風格。不同的預設會產生截然不同的輸出,且重新生成成本較高。
步驟 1 — 提供風格選項
使用 4 個代表性預設調用 clarify。根據用戶的要求選擇集合——不要直接列出全部 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。
步驟 3 — 生成
首先運行 pixel_art();如果請求了動畫,則在結果上鍊式調用 pixel_art_video()。
預設目錄
| 預設 | 時代 | 調色板 | 塊大小 | 最佳用途 |
|---|---|---|---|---|
arcade | 80 年代街機 | 自適應 16 色 | 8px | 大膽的海報、主視覺圖 |
snes | 16 位 | 自適應 32 色 | 4px | 角色、細節豐富的場景 |
nes | 8 位 | NES (54) | 8px | 真正的 NES 外觀 |
gameboy | DMG 掌機 | 4 種綠色色調 | 8px | 單色 Game Boy |
gameboy_pocket | Pocket 掌機 | 4 種灰色色調 | 8px | 單色 GB Pocket |
pico8 | PICO-8 | 16 固定色 | 6px | 幻想主機外觀 |
c64 | Commodore 64 | 16 固定色 | 8px | 8 位家用電腦 |
apple2 | Apple II 高分辨率 | 6 固定色 | 10px | 極致復古,6 種顏色 |
teletext | BBC Teletext | 8 純色 | 10px | 粗獷的原色 |
mspaint | Windows MS Paint | 24 固定色 | 8px | 懷舊桌面 |
mono_green | CRT 熒光粉 | 2 種綠色 | 6px | 終端/CRT 美學 |
mono_amber | CRT 琥珀色 | 2 種琥珀色 | 6px | 琥珀色顯示器外觀 |
neon | 賽博朋克 | 10 種霓虹色 | 6px | 蒸汽波/賽博 |
pastel | 柔和 pastel | 10 種 pastel 色 | 6px | 可愛 / 溫柔 |
命名調色板位於 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 | 熱浪 shimmer + 灰塵 |
調用模式
Python(導入)
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,
)
CLI
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
管道原理
像素轉換:
- 增強對比度/顏色/銳度(對於較小的調色板更強)
- 色調分離以在量化前簡化色調區域
- 使用
Image.NEAREST按block下采樣(硬像素,無插值) - 使用 Floyd-Steinberg 抖動進行量化——針對自適應 N 色調色板或命名硬件調色板
- 使用
Image.NEAREST上採樣回原尺寸
在下采樣之後進行量化可保持抖動與最終像素網格對齊。如果在之前進行量化,則會浪費誤差擴散在即將消失的細節上。
視頻疊加:
- 每幀複製基礎幀(靜態背景)
- 疊加無狀態的逐幀粒子繪製(每種效果一個函數)
- 通過 ffmpeg
libx264 -pix_fmt yuv420p -crf 18進行編碼 - 可選通過
palettegen+paletteuse生成 GIF
依賴項
- Python 3.9+
- Pillow (
pip install Pillow) - PATH 中的 ffmpeg(僅視頻需要 — Hermes 會安裝此包)
注意事項
- 調色板鍵名區分大小寫(
"NES"、"PICO_8"、"GAMEBOY_ORIGINAL")。 - 非常小的源圖像(寬度 <100px)在 8-10px 的塊下會失真。如果源圖像很小,請先將其放大。
- 分數形式的
block或palette會破壞量化——請保持它們為正整數。 - 動畫粒子數量是針對 ~640x480 畫布調整的。在非常大的圖像上,你可能需要使用不同的種子進行第二次處理以調整密度。
mono_green/mono_amber強制color=0.0(去飽和)。如果你覆蓋此設置並保留色度,2 色調色板可能在平滑區域產生條紋。clarify循環:每輪最多調用兩次(先風格,後場景)。不要用更多的選項讓用戶感到困擾。
驗證
- PNG 文件已在輸出路徑創建
- 在預設的塊大小下可見清晰的方形像素塊
- 顏色數量與預設匹配(目視檢查圖像或運行
Image.open(p).getcolors()) - 視頻是有效的 MP4(
ffprobe可以打開它)且大小非零
歸屬
命名硬件調色板和 pixel_art_video.py 中的程序化動畫循環移植自 pixel-art-studio(MIT 許可證)。詳見此技能目錄中的 ATTRIBUTION.md。