Communitygithub.com

diorama-pixel

ドット絵のミニチュアアニメーションを生成します。等角投影の低解像度シーンを、すべての表面に秩序あるディザリング、プロシージャルなテクスチャ、ソフトな影、ループする小さな人々とともに描画します。依存関係のない単一のHTMLファイル(約50KB)です。

diorama-pixel とは?

Diorama Pixelは、ピクセルアートスタイルのミニチュアアニメーションシーンを生成するAIエージェントスキルです。固定された等角投影カメラで描かれた320x240の低解像度フレームを、ニアレストネイバー補間で拡大し、すべての表面に8x8 Bayer行列による秩序あるディザリングを適用します。プロシージャルなテクスチャ(木板、わら、石畳、草、水など)を持ち、地面の端は白いページに溶け込み、ソフトな影とループ動作をする小さな人物が特徴です。Three.jsやWebGLに依存せず、2D Canvas上でソフトウェアレンダリングを行う単一の自己完結型HTMLファイル(約50KB)として出力されます。このスキルは、ピクセルアート、16ビット風の等角投影ビネット、ディザリングを用いたイラスト、ランディングページやブログ記事用のピクセルアートシーンを求められたときに使用します。ベクターUIイラストには `diorama` スキル、詳細なThree.jsワールドには `diorama-worlds` スキルを使用します。

対応✓Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/educlopez/diorama/tree/HEAD/skills/diorama-pixel

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Diorama Pixel: 動くピクセルアートのミニチュア

あなたは小さな場所——屋台、桟橋、庭の区画、あるいは戸口——を、固定された等角投影カメラから見て、ピクセルアートとして描きます。フレーム全体は320x240でレンダリングされ、ニアレストネイバー方式で拡大されます。すべての表面は8x8 Bayer行列によって短い控えめな色のランプに量子化され、マテリアルはプロシージャルなテクスチャ(板目、わらの筋、石、点描の草、まだらな水)を持ちます。地面の端は白いページに溶け込み、太陽はソフトな影を落とし、1~2人の小さな人々がループの中でひとつの明確な動作を繰り返します。examples/ にある3つのシーンが基準であり、あなたが書く形式もこれに従います。

このスキルは3つのうちの1つです。diorama はベクターSVGイラスト(UIシーン、線画、空の状態、テーマ)を描きます。diorama-worlds は関節を持つ人物と4つの仕上げを持つ詳細なThree.jsワールドをレンダリングします。このスキルは、ユーザーがピクセル、ディザリング、レトロまたは16ビット風の表現、あるいは小さく依存関係のないピクセルシーンを求めるときに使用します。

あなたが書くのはひとつだけ:シーン、すなわち .js ファイルです。カーネル(kit/pixel.js)とページ(kit/page.html)は固定です。これらを決して編集せず、変更したコピーを貼り付けず、カーネルが提供するもの(カメラ、ライト、影、テクスチャ、ディザリング、地面、人物のリグ、木や茂み、画面外で動作する時計、ポインター)を再び書いてはいけません。

以下に記載されるすべてのファイルはこのスキルのフォルダにあります。シーンとビルド済みページはユーザーの作業ディレクトリに書き、スクリプトはこのフォルダ内のパスを指定してそこから実行します。

1. コンセプト

コードの前に、コンセプトを一行で書きます:

名前。 場所とその中にあるもの。人物が行う一つの動作、そして他に動くもの。ポインターとタップが行うこと。

ストーリーと用途のある場所を選びます:市場の屋台、桟橋、パン屋のドア、区画菜園、バス停、屋上庭園。一つの動作がシーンを動かします(花束を結ぶ、釣りをする、水をやる、こねる)。その前後に予備動作と間があり、その周りに2~3の静かなループ(布、水、葉、旗)があります。それからパーツリストを4行で書きます:地面(ゾーン:草、舗装、水、砂、土、道)、構造物(立っているもの:屋台、小屋、フェンス)、人物(誰が、どこで、どこを向いて、何をしているか)、生命(揺れたり、浮いたり、きらめくもの)。シーンは10~25オブジェクトに収まります。リストが薄いと、シーンも薄くなります。

誰かに尋ねる相手がいる場合は、2~3のコンセプトを提案して待ちます。尋ねる相手がいない場合は、最もフレームが強いものを選び、その旨を伝えます。

2. ビルド

  1. references/art-direction.md を読む:パレット、マテリアル、ディザリング、地面の端、人物のスケール、何がフレームをピクセルミニチュアとして読ませるのか。
  2. references/scene-api.md を読む:すべてのプリミティブ、マテリアル、ヘルパー、tick契約。kit/pixel.js はインデックスコメントより下は読まない。
  3. 最も近い例を読む:examples/flower-stall.js(舗装と草地、ストライプの日よけ、2人の人物、ペナント)、examples/pier.js(水と岸、座った人物と釣り竿、ボート、わらぶきの小屋)、または examples/allotment.js(土、レンガ道、 raised beds、水をやる庭師、かかし)。
  4. <name>.js を書く:Pixel.scene({ … }) に name、title、means(一文、最大140文字)、hint(ホバーとタップのヒント)、duration、still、ground、オプションで materials、build(P) が parts を返す(parts.hot はホットなグループごとに名前をつける)、tick(ctx) が ctx.t / ctx.q からすべてをポーズする。
  5. ビルド:node <skill>/scripts/build.mjs <name>.js が pixel-<name>.html を書き出す。ネットワークリクエストのない自己完結型のページ。

3. チェック

  1. node <skill>/scripts/validate.mjs <name>.js pixel-<name>.html:宣言、クロック、自己完結性、URLなし、カーネルのバイト単位の一致、サイズ予算、ポインター。すべての FAIL を修正する。
  2. npm ci --ignore-scripts --prefix <skill> を一度実行し、その後 node <skill>/scripts/look.mjs <name>.js <outdir> を実行する。ネットワークをブロックしたヘッドレスChromiumでページを開き、<name>-look.json、静止画、ループの4つの瞬間、ホバー、プレス、モバイルビューを書き出し、塗りつぶし、モーション、ループの継ぎ目、ピッキング、ホバー、プレス、モーション削減、フレームコスト、モバイルオーバーフローをチェックする。フレームコストはシーンのフレーム予算(24fpsで41.7ms)に対して評価される。--throttle 4 はCIランナーや電話のように4倍遅いCPUでの見え方を確認する。CHROME_PATH でブラウザを選択可能。指定がない場合はインストール済みのChromeまたはChromiumを使用する。
  3. PNGを開いて見る。 チェック通過は絵の良さを保証しない。静止画に対して問う:このサイズで動作が読めるか(手、道具、作業対象)?人物が柱や屋根の後ろに隠れていないか?すべての表面がそのマテリアルを示しているか?地面がすべての側面でページに溶け込み、フレームで切れていないか?影は太陽の位置に応じて地面に落ちているか?その後、カーネルではなくシーンを修正し、再度確認する。

バリデーターが拒否するページを引き渡さない。画像を開いていないのにルックが完了したと主張しない。ブラウザがない場合は、その旨を明記し、ルック未確認で引き渡す。

4. 引き渡し

pixel-<name>.html をユーザーが要求した方法(ファイル、またはアーティファクトとして公開可能ならそれ)で提供する。その後、以下の各項目を一行ずつ:コンセプト;静止画の秒数とその理由;サイズ(約50KB、依存関係なし);埋め込み方法(references/scene-api.md の「埋め込み」:<canvas>、カーネルとシーンを2つの <script> タグと Pixel.mount で、またはReactコンポーネント);確認できなかったこと。

5. 調整

ユーザーが変更を要求した場合、<name>.js のみを編集し、ビルド、バリデーション、ルックを再度実行する。

問題が発生した場合

もしこうなったら代わりにこうする
three.js、WebGL、または画像ファイルを使おうとするそれらは存在しない:カーネルは2Dキャンバス上でソリッドをラスタライズする。P.box、P.cyl、P.ball、P.wedge、P.line を使用する
requestAnimationFrame、setTimeout、Math.random を書くtick 内で ctx.t / ctx.q からすべてをポーズする。バリエーションには P.hash(i, j) を使用する(固定される)
position.x += speed * dtP.phase(t, period) からの位置を使用する。静止フレームとループの継ぎ目が正確になる
人物がカウンター、柱、屋根の後ろに隠れる彼らを移動させる、カウンターを低くする、屋根を高くする:カメラは固定であり、彼らがストーリーである
腕が体とひとつの塊に見える前腕を出すポーズ(P.pose(p, 'work' / 'hold'))を取り、手に固有の色の何かを持たせる
木がひとつの大きな球P.tree と P.bush:丸い陰影のある葉の塊のクラスター
大きな表面がフラットな色テクスチャマテリアル:'wood'、'thatch'、'stone'、'paving'、'leaf'、'cloth'、または tex を使ったランプ
地面の端が硬いエッジ地面は ground: { rx, rz, wobble, fade }:すでに溶け込んでいる。スラブや台座を決して追加しない
シーンが地面より広いすべてを rx と rz の中に収める。フレームは地面に合わせる
内部幅が480pxを超える320x240がルック。それ以上のピクセルはレンダリングのように見え、ピクセルアートではない
シーンを動作させるために kit/pixel.js を編集するシーンが間違っている。シーンを変更する

リファレンス

  • references/scene-api.md:宣言、P(プリミティブ、マテリアル、人物、ポーズ、木、ノイズ)、tickコンテキストとポインター、ランタイムと埋め込み。
  • references/art-direction.md:パレットとランプ、マテリアルとテクスチャ、ディザリング、地面の端、光と影、ピクセルスケールの人物、構図。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

diorama

Build small animated 3D worlds for the web (isometric camera, blocks on a rounded base, soft shadows, little vehicles and people that move) in one of six themes you can tune: toy (pastel blocks, warm sun), soft, mono (one accent, the rest tints of ink), line (a hairline drawing, white fills and ink edges, by hand if asked), print (flat tones and ink, a printed illustration) and night. A hero scene for a landing page, a card-sized illustration for docs or a blog, or a mini figure for any small spot (an empty state, a feature in a list, a 404). Use this whenever someone asks for a 3D illustration, an isometric scene, a low-poly or "toy town" animation, a monochrome or line-art 3D figure, a hand-drawn or sketched figure of an object with a bit of life in it, a blank/empty-state illustration, an illustration that answers a hover or a tap, a little game-like SVG world, even if they never say "3D" or "isometric". Ships one self-contained HTML file that draws SVG with no dependency (no th...

diorama-worlds

Build narrative miniature worlds with a fixed orthographic camera, textured terrain, articulated people and coordinated looping actions. Use for detailed low-poly 3D dioramas or pixel-finish animated vignettes: sports grounds, street performers, gardens or other small places with a story. Four finishes, miniature, pixel, halftone and blueprint, use the same Three.js scene. This is a separate skill from the diorama SVG illustrations; prefer the diorama skill for lightweight UI illustrations, line art and empty states, and diorama-pixel for dependency-free dithered pixel-art miniatures.

関連スキル