pixel-art について
pixel-art は、画像をレトロなピクセルアートに変換し、短いアニメーションも作成できるクリエイティブスキルです。ポスター、キャラクター、アバターなどの制作向けで、ハードウェア風パレットやシーン効果を Python スクリプトまたはコマンドラインから利用できます。
主な機能
- 01画像をピクセルアート PNG に変換
- 02ハードウェア風パレットに対応
- 03適応型カラー量子化
- 04MP4 アニメーションと任意の GIF を作成
- 05複数のアニメーションシーンを選択
活用シーン
- 01写真をレトロなピクセルアートに変換
- 02NES や Game Boy 風の画像を作成
- 03夜景や雨のシーンをアニメーション化
- 04ポスター、キャラクター、アバター素材を制作
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nousresearch/ hermes-agent --skill pixel-artインストール後、Claude Code で/pixel-artを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
ATTRIBUTION.mdreferences/palettes.mdscripts/__init__.pypalettes.pypixel_art_video.pypixel_art.py詳細
ピクセルアート
画像をレトロなピクセルアートに変換し、時代に合ったエフェクト(雨、ホタル、雪、火の粉)を加えて、短い MP4 または GIF アニメーションにすることもできます。
このスキルには、2 つのスクリプトが含まれています。
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 風のスタイルを求めている場合
- ユーザーが短いループアニメーション(雨の場面、夜空、雪など)を求めている場合
- ポスター、アルバムカバー、ソーシャルメディアの投稿、スプライト、キャラクター、アバター
ワークフロー
生成する前に、ユーザーにスタイルを確認してください。プリセットによって出力が大きく異なり、再生成にも時間がかかります。
Step 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 は省略し、該当するプリセットを直接使用します。
Step 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 を 2 回連続で呼び出さないでください。スタイルに 1 回、アニメーションを検討する場合は場面に 1 回です。ユーザーがメッセージ内で特定のスタイルと場面を明示している場合は、clarify を完全に省略してください。
Step 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 hi-res | 固定 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 | ソフトパステル | パステル 10 色 | 6px | カワイイ/やさしい雰囲気 |
名前付きパレットは scripts/palettes.py にあります(全 28 種類の名前付きパレットについては references/palettes.md を参照)。どのプリセットも上書きできます。
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
out = os.path.expanduser("~/.hermes/cache/scratch")
pixel_art("/path/to/photo.jpg", f"{out}/pixel.png", preset="nes")
# 2. Animate (optional)
pixel_art_video(
f"{out}/pixel.png",
f"{out}/pixel.mp4",
scene="night",
duration=6,
fps=15,
seed=42,
export_gif=True,
)
CLI
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
パイプラインの方針
ピクセル変換:
- コントラスト/色/シャープネスを強めます(パレットが小さいほど強くします)
- 量子化の前にポスタライズして、階調領域を簡略化します
Image.NEARESTを使ってblock単位で縮小します(補間なしのくっきりしたピクセル)- Floyd-Steinberg ディザリングで量子化します。適応型の N 色パレット、またはハードウェア名付きパレットのいずれかを使います
Image.NEARESTを使って元のサイズに拡大します
縮小後に量子化することで、ディザリングを最終的なピクセルグリッドに合わせられます。 縮小前に量子化すると、消えてしまうディテールに誤差拡散を無駄に使うことになります。
動画オーバーレイ:
- 各ティックでベースフレームをコピーします(静的な背景)
- フレームごとに状態を持たないパーティクル描画を重ねます(エフェクトごとに関数を 1 つ使用)
- 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 のキャンバスに合わせて調整されています。非常に大きな画像では、密度を変えるために別のシードで 2 回目の処理を行うとよいでしょう。
mono_green/mono_amberはcolor=0.0(彩度を下げる)を強制します。これを上書きして色差を残すと、滑らかな領域に 2 色パレットの縞模様が生じることがあります。clarifyループは、1 ターンにつき 2 回まで呼び出してください(スタイルを指定してからシーンを指定します)。ユーザーに選択肢を何度も尋ねないでください。
検証
- 出力パスに PNG が作成されていること
- プリセットのブロックサイズに応じた、はっきりした正方形のピクセルブロックが見えること
- 色数がプリセットと一致していること(画像を目視するか、
Image.open(p).getcolors()を実行してください) - 動画が有効な MP4 であり(
ffprobeで開けること)、サイズが 0 でないこと
クレジット
pixel_art_video.py に含まれるハードウェア名付きパレットとプロシージャルアニメーションのループは、pixel-art-studio(MIT)から移植されています。詳細は、このスキルディレクトリ内の ATTRIBUTION.md を参照してください。