mcpField
P
pixel-art

pixel-art

github.com/nousresearchクリエイティブ・メディア258.9k120 回インストール今日更新
リポジトリ

pixel-art について

pixel-art は、画像をレトロなピクセルアートに変換し、短いアニメーションも作成できるクリエイティブスキルです。ポスター、キャラクター、アバターなどの制作向けで、ハードウェア風パレットやシーン効果を Python スクリプトまたはコマンドラインから利用できます。

主な機能

  1. 01画像をピクセルアート PNG に変換
  2. 02ハードウェア風パレットに対応
  3. 03適応型カラー量子化
  4. 04MP4 アニメーションと任意の GIF を作成
  5. 05複数のアニメーションシーンを選択

活用シーン

  1. 01写真をレトロなピクセルアートに変換
  2. 02NES や Game Boy 風の画像を作成
  3. 03夜景や雨のシーンをアニメーション化
  4. 04ポスター、キャラクター、アバター素材を制作

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nousresearch/hermes-agent --skill pixel-art

インストール後、Claude Code で/pixel-artを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

ATTRIBUTION.md
references/
palettes.md
scripts/
__init__.py
palettes.py
pixel_art_video.py
pixel_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() に渡して続けて実行します。

プリセットカタログ

プリセット時代パレットブロック最適な用途
arcade80年代のアーケード適応型 16 色8px大胆なポスター、ヒーローアート
snes16 ビット適応型 32 色4pxキャラクター、精細な場面
nes8 ビットNES(54 色)8px本格的な NES の見た目
gameboyDMG 携帯機緑の 4 階調8pxモノクロの Game Boy
gameboy_pocketPocket 携帯機グレーの 4 階調8pxモノクロの GB Pocket
pico8PICO-8固定 16 色6pxファンタジーコンソール風
c64Commodore 64固定 16 色8px8 ビットの家庭用コンピューター
apple2Apple II hi-res固定 6 色10px極端にレトロな、6 色の見た目
teletextBBC Teletext純色 8 色10px粗い原色
mspaintWindows MS Paint固定 24 色8px懐かしいデスクトップ
mono_greenCRT 蛍光体緑 2 色6pxターミナル/CRT の美学
mono_amberCRT アンバーアンバー 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

パイプラインの方針

ピクセル変換:

  1. コントラスト/色/シャープネスを強めます(パレットが小さいほど強くします)
  2. 量子化の前にポスタライズして、階調領域を簡略化します
  3. Image.NEAREST を使って block 単位で縮小します(補間なしのくっきりしたピクセル)
  4. Floyd-Steinberg ディザリングで量子化します。適応型の N 色パレット、またはハードウェア名付きパレットのいずれかを使います
  5. 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 を参照してください。

コメント