跳到主要內容

像素藝術 (Pixel Art)

使用硬件精確調色板(NES、Game Boy、PICO-8、C64 等)將圖像轉換為復古像素藝術,並將其製作成短視頻動畫。預設涵蓋街機、SNES 以及 10 多種符合時代特徵的風格。在生成之前,使用 clarify 讓用戶選擇風格。

技能元數據

來源捆綁(默認安裝)
路徑skills/creative/pixel-art
版本2.0.0
作者dodo-reach
許可證MIT
標籤creative, pixel-art, arcade, snes, nes, gameboy, retro, image, video

參考:完整 SKILL.md

信息

以下是 Hermes 在觸發此技能時加載的完整技能定義。這是技能激活時代理所看到的指令。

像素藝術 (Pixel Art)

將任何圖像轉換為復古像素藝術,然後可選地將其製作為帶有符合時代特徵效果(雨、螢火蟲、雪、餘燼)的短 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()

預設目錄

預設時代調色板塊大小最佳用途
arcade80 年代街機自適應 16 色8px醒目的海報、主視覺圖
snes16 位自適應 32 色4px角色、細節豐富的場景
nes8 位NES (54 色)8px真實的 NES 外觀
gameboyDMG 掌機4 種綠色調8px單色 Game Boy
gameboy_pocketPocket 掌機4 種灰色調8px單色 GB Pocket
pico8PICO-816 種固定色6px幻想主機外觀
c64Commodore 6416 種固定色8px8 位家用電腦
apple2Apple II 高分辨率6 種固定色10px極致復古,6 種顏色
teletextBBC Teletext8 種純色10px粗獷的原色
mspaintWindows MS Paint24 種固定色8px懷舊桌面風格
mono_greenCRT 熒光粉2 種綠色6px終端/CRT 美學
mono_amberCRT 琥珀色2 種琥珀色6px琥珀色顯示器外觀
neon賽博朋克10 種霓虹色6px蒸汽波/賽博風格
pastel柔和 pastel10 種 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

管道原理

像素轉換:

  1. 增強對比度/顏色/銳度(對於較小的調色板效果更強)
  2. 色調分離以簡化量化前的色調區域
  3. 使用 Image.NEARESTblock 縮小(硬像素,無插值)
  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")。
  • 非常小的源圖像(寬度 <100px)在 8-10px 的塊下會失真。如果源圖像很小,請先將其放大。
  • 分數形式的 blockpalette 會破壞量化 — 請保持它們為正整數。
  • 動畫粒子數量是針對 ~640x480 畫布調整的。在非常大的圖像上,你可能需要使用不同的種子進行第二次處理以調整密度。
  • mono_green / mono_amber 強制 color=0.0(去飽和)。如果你覆蓋並保持色度,雙色調色板可能在平滑區域產生條紋。
  • clarify 循環:每輪最多調用兩次(先風格,後場景)。不要用更多的選擇打擾用戶。

驗證

  • PNG 文件在輸出路徑創建
  • 在預設的塊大小下可見清晰的方形像素塊
  • 顏色數量與預設匹配(目測圖像或運行 Image.open(p).getcolors()
  • 視頻是有效的 MP4(ffprobe 可以打開它),且大小非零

歸屬

命名硬件調色板和 pixel_art_video.py 中的程序化動畫循環移植自 pixel-art-studio(MIT)。詳見此技能目錄中的 ATTRIBUTION.md