scenario-chatgpt-pet-create について
scenario-chatgpt-pet-createは、ChatGPTまたはCodex向けのアニメーションペット用スプライトシートと関連ファイルを作るスキルです。Scenario MCP サーバーでポーズ行を生成し、ローカルスクリプトで組み立て、検証、プレビュー、パッケージ化します。
主な機能
- 01v1とv2のスプライトシート作成
- 02参照画像からアニメーション行を生成
- 03アニメーションGIFのプレビュー作成
- 04シートのレイアウトとフレーム検証
- 05ChatGPTまたはCodex向けのパッケージ化
活用シーン
- 01説明文からペットを作成
- 02提供写真をペットに変換
- 03Codex用スプライトパッケージの準備
- 04ChatGPTウェブ用v1ファイルの作成
MCP 対応
すべての画像をScenario MCP サーバー経由で生成します。ローカルのPythonスクリプトがフレーム切り出し、シートの組み立てと検証、GIF作成、パッケージ化を行い、スプライトシートを組み立てるMCPツールはありません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-chatgpt-pet-createインストール後、Claude Code で/scenario-chatgpt-pet-createを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdreferences/sheet-contract.mdscripts/pet_build.pypet_check.pypet_common.pypet_frames.pypet_package.pypet_prepare.pypet_preview.py詳細
シナリオ ChatGPT ペット:作成
概要
ChatGPT ペットは、1 枚の透過スプライトシートです。セルは 192x208、8 列で、アニメーション行が 9 行(v1、1536x1872)、さらに 16 種類の視線方向を示す行が 2 行あります(v2、1536x2288)。各行、フレーム数、各状態で表示すべき内容、視線方向、判定ファイル、パッケージのレイアウトについては、references/sheet-contract.md を参照してください。最初の生成を行う前に、必ずお読みください。
このスキルでは、実行フォルダーに次のファイルを用意します。v2 シート(ユーザーが v1 のみを希望する場合を除く)、ChatGPT のウェブアップロード用 v1 コピー、柔らかな背景の pet.gif と pet-transparent.gif、および Codex の pet.json パッケージです。Codex へのインストールは、ユーザーが許可した場合にのみ行います。画像はすべて Scenario MCP サーバーを通じて生成します。フレームの切り出し、シートの組み立て、検証、GIF の作成、パッケージ化は、同梱スクリプトを使ってローカルで実行します。成果物は ChatGPT または Codex 用のファイルであり、ペットシートを組み立てる MCP ツールはないためです。画像モデルにシート全体を描かせることはありません。モデルは一度に 1 行ずつ描き、すべてのフレームはスクリプトで配置します。
接続、スコープ、基本のループについては、scenario スキルを参照してください。すでにシートがあるペットの変更については、scenario-chatgpt-pet-update を参照してください。ここに記載された関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください(npx skills add scenario-labs/skills --skill <name>)。無人実行の場合は、ツールスキーマに基づいて作業を続け、不足している旨を明記してください。
スクリプトはエージェントが Python 3、Pillow、NumPy を使って実行します(pip install pillow numpy。システムの Python で拒否された場合は、実行フォルダーの外にある仮想環境で実行します)。ユーザーの作業フォルダーから、このスキルの scripts/ フォルダー内にあるスクリプトをパス指定して実行してください(以下のコマンドではパスを省略しています)。各スクリプトは JSON を出力します。エラー時は終了コード 1 で error: ... を出力し、--help で全オプションを確認できます。
- pet_prepare.py:実行フォルダー、背景キー、ジョブごとのプロンプトとリクエストサイズ(
init)、追加のプロンプト文(note)、ピクセルグリッドとパレット(pixel)を設定します。 - pet_frames.py:生成されたストリップをフレームに切り分け、問題を報告します(
extract)。既存のシートを読み込みます(split。update スキルで使用)。 - pet_build.py:ペットの高さ、接地線、各行の接地アンカーを統一してシートを組み立てます。
- pet_check.py:納品する正確なファイルを検証します。
- pet_preview.py:コンタクトシート、ラベル付き視線シート、GIF を作成します。
- pet_package.py:パッケージ化と、必要に応じて Codex へのインストールを行います。
- pet_common.py:他のスクリプトが読み込む、共通のレイアウト情報です。
クイックリファレンス
| 手順 | 実行内容 |
|---|---|
| 概要 | テキスト、参考画像、またはその両方。質問は1回につき最大4つ |
| 準備 | pet_prepare.py init を実行し、ジョブの references に記載された各ファイルを upload_asset でアップロードします |
| モデル(この順) | model_openai-gpt-image-2-5-sunburst、次に model_google-gemini-nano-banana-2-1 を使います。両方とも実行できない場合に限り recommend を使います |
| 各生成 | モデルごとに model_schema_get を1回実行し、dry_run、ジョブの prompt と sizes を使って model_run、jobs_wait、format: "png" を指定して asset_download を実行し、ジョブの output に保存します |
| ピクセル単位で正確に | ベース画像の承認後、どの行にも着手する前に、Pixel Snapper(model_pixel-snapper)をベース画像に1回適用し、その後 pet_prepare.py pixel を実行します |
| 各ストリップ | pet_frames.py extract RUN --job <id> を実行し、JSON を読み込み、frames/<id>/preview.png を確認します |
| 行 0~8 の完了 | pet_build.py RUN --version 1 --out RUN/qa/checkpoint を実行し、その後 pet_preview.py contact と gif を実行します |
| 完了 | pet_build.py RUN、pet_preview.py looks、判定、pet_check.py、pet_preview.py gif、pet_package.py make を実行します |
モデル ID は意図的に選んでいます。どちらも参考画像から、8つのポーズの行を通してキャラクターを一貫させられるため、このジョブに適しています。どちらも実行できないチームは、必要な機能とモデルファミリー(GPT Image、Nano Banana)を指定して recommend に切り替えます。Pixel Snapper は、生成したピクセルアートをきれいなグリッドとパレットに合わせるための、Scenario のツールです。以下のサイズを鵜呑みにせず、すべてのスキーマを確認してください。作成時点では、Sunburst は referenceImages(配列、最大10個)、width と height(16~3840、16刻み)、background(ここでは opaque)、quality(以下の手順に記録されたすべての実行でデフォルト値のまま)を受け付け、極端な縦横比の画像を自動で横に広げました(3584x512 を指定したところ、3584x1200 が返されました)。そのため、init では幅の少なくとも3分の1の高さを指定します。Nano Banana は最大14個の referenceImages と、aspectRatio のプリセット(4:1、8:1)を受け付けました。予算は dry_run の見積もりに基づいてください。料金は各ジョブに課金されます。jobs_wait が報告する cuCost には、プロジェクトの Quality Gate などの追加料金が含まれない場合があり、これを基準に追跡すると支出を過少に見積もることになります。作成時点での見積もりは、ベース画像が13.75 CU、各ストリップが13.75~17.75 CU(幅の広いストリップほど高額)、Snapper の呼び出しが6.75 CUでした。そのため、ピクセル単位で正確な v2 ペットは、running-left をミラーリングした12回の生成と Snapper を合わせて、修正前で約198 CU、running-left の生成が必要な場合は約216 CUでした。2~3行の修正に備えて余裕のある予算を合意してください。無人実行では、すでに使った分と今後必要な分の見積もりを合計すると予算を超えるジョブを、決して開始しないでください。見た目の行だけが残っている場合は、それらを含めずに v1 を納品してください。それ以外の場合は停止して報告してください。
作業例:黄色いレインコートを着たコーギー、ビスケットを写真から作成する
- 概要。 ユーザーから写真と一文が送られてきます。アートに影響する項目だけを一度確認します。名前と一行の説明(デフォルト:推測)、スタイル(
auto、pixel、plush、clay、sticker、flat-vector、3d-toy、painterly、brand-inspired)、ピクセルパーフェクトにするかどうか、ルックの方向を含む v2(デフォルト)か v1 のみかを尋ねます。ブランド名があり、視覚的な手がかりがない場合は、色、形、雰囲気を尋ねます。ロゴや判読できるテキストは決してコピーしません。無人で進める場合は、回答を推測して記録し、以下のすべての承認をブリーフに照らして自分で行い、その理由も記録します。インストールは決して行いません。チームとプロジェクトを解決してから、ペット用のコレクションを 1 つ作成します(scenarioスキルに従い、collection_createの後、保持する出力すべてに対してcollection_add_assetsを実行します)。 - セットアップ。
python3 scripts/pet_prepare.py init --name Biscuit --notes "corgi in a yellow raincoat, red collar" --reference photo.jpg --out pets/biscuit(ピクセルパーフェクトにするには--pixelを追加します。すべてのプロンプトでピクセルスタイルが設定されます。ルックの行を省略するには--version 1を指定します)。このコマンドは、参照画像と対照的な背景キーを選び(またはメモに基づいて選びます。ピンクのペットには緑を使い、マゼンタは決して使いません)、jobs.jsonを作成します。各ジョブにはid、frames、prompt、retry_prompt、references(実行ディレクトリからの相対ファイル)、モデルごとのsizes、depends_on、outputが含まれます。ジョブの実行直前に、references/以下に列挙されている各ローカルファイルについてupload_assetを実行します(ファイルごとに 1 回実行し、ID を記録します)。generated/のファイルはすでにアセットなので、ダウンロードをアップロードするのではなく、そのジョブから返された ID を渡します。 - ベース。
baseジョブを実行します。referenceImagesにはアップロード済みの写真の ID を設定し(テキストのみのペットではなし)、promptはそのまま使い、Sunburst のwidth/heightとbackground: "opaque"を指定します。generated/base.pngにダウンロードし、pet_frames.py extract RUN --job baseを実行します。これにより、クリーンなアイデンティティ参照画像references/base.pngが作成されます。次にasset_displayでベースを表示します。ユーザーが承認するまでは、ほかの処理を開始しません。ペットの色がキーに近いという警告が出た場合は、別のキーを使ってinit --force --chroma-keyを実行し、新しいベースを作成します。 - ピクセルパーフェクトなバリエーション。 承認済みのベースアセットに対して、生成時の背景も含めた状態で
model_pixel-snapperを実行します(image、ユーザーがより少ない色数を希望しない限りcolorsは 24、固定のseedがあればそれも指定)。ダウンロードした後、pet_prepare.py pixel RUN --snapped snapped.png --colors <same>を実行します。このコマンドは、アートの 1 ピクセルあたり 8、4、2、または 1 画面ピクセルのグリッドを選び、パレットを維持し、拡大したピクセル版でreferences/base.pngを書き換えます(この新しいファイルをアップロードします)。これにより、すべての行がクリーンなピクセルから描画され、ビルド時にすべてのフレームが同じグリッドとパレットにスナップされます。スナップするのはベースだけにします。各フレームをスナップするとフレームごとに異なるグリッドになり、フレームごとに 1 回の呼び出しが必要になるためです。 - アニメーションの行。 ベースの後、標準の各行は独立しています。ただし
running-leftはrunning-rightを待ちます。まずidleとrunning-rightを、アイデンティティと歩き方の確認用に開始し、その後、チームの同時実行上限の範囲内で残りを複数回に分けて実行します(wait: falseにして、バッチ全体に対して 1 回jobs_waitを実行します。parallel-custom-jobsを示す 429 エラーから上限を確認します。scenarioスキルを参照してください)。各行では、referenceImagesにアップロード済みのreferences/base.pngとユーザーの写真を設定し、ジョブのpromptとsizesを使用します。ダウンロードのたびにextractを実行し、JSON を読み、プレビューを確認します。エラー(フレーム数の誤り、画像の端に触れるポーズ)やポーズの誤りがあれば、retry_promptを使うか、pet_prepare.py note RUN --jobs <id> --text "..."で文を追加して、すぐにその行を再生成します。ペットを鏡像にしても同じに見える場合(左右の違い、文字、傾きがなく、片側に模様のあるコーギーや葉が傾いたロボットではない場合)は、running-leftの生成を省略し、代わりにすべてのpet_build.py呼び出しに--mirror-leftを渡します。 - チェックポイント。
pet_build.py RUN --version 1 --out RUN/qa/checkpointを実行してから、pet_preview.py contact RUN/qa/checkpoint.png --out RUN/qa/contact.pngとpet_preview.py gif RUN/qa/checkpoint.png --out-dir RUN/qa/checkpoint-previewsを実行します。pet_check.py RUN/qa/checkpoint.png --run RUN --json-out RUN/qa/checkpoint-check.jsonを使うと、ルックの行に費用をかける前に高さとジャンプのエラーを検出できます。GIF を表示します(ローカルファイルを開くか、アップロードしてasset_displayのapp_urlを共有します)。フィードバックは該当する行に反映し、シートには反映しません。 - ルックの行(v2)。 ペットがどのように周囲を見るか(どこを動かさないか、何を先に動かすか、目や耳をどう動かすか)を決め、
note --jobs look-cardinals,look-9,look-10で追加してから、look-cardinals(上、右、下、左の 4 ポーズ)を実行します。抽出したら、ほかの作業に進む前に 4 つすべてを目視で承認します。ペットのサイズで分かりにくい方角があれば、すぐに再生成します。次にlook-9を実行して抽出し、pet_build.py RUN --out RUN/qa/checkpointを実行します(look-10がまだ空だという警告が表示されます)。続いてpet_preview.py looks RUN/qa/checkpoint.png --out RUN/qa/looks.pngを実行して確認します。その後look-10を実行します。このジョブの参照画像にはgenerated/look-9.pngが含まれるため、スイープが続きます。 - 仕上げ。
pet_build.py RUNを実行すると、エッジのクリーンアップを 1 回行い、final/spritesheet.pngとfinal/spritesheet.webpが作成されます。pet_preview.py looks RUN/final/spritesheet.webp --out RUN/qa/looks.pngを実行して確認し、契約書の形式に従ってqa/direction-semantics.jsonを作成します。pet_check.py RUN/final/spritesheet.webp --run RUN --require-v2を実行します(v1 のみのペットでは--require-v2を指定しません)。ok: trueが表示される必要があります。表示された問題を修正して再ビルドします。次にpet_preview.py gif RUN/final/spritesheet.webp --out-dir RUN/previewsを実行し、シートと両方の GIF に対してupload_assetを実行します(kind: "image"は WebP と GIF に対応し、GIF のアニメーションも維持されます)。それらをcollection_add_assetsでコレクションに追加してから、ローカルのpet.gifを表示します(インラインのasset_displayでは 1 フレームだけが表示されることがあります。返されるapp_urlではアニメーションが再生されます)。 - パッケージ化。
pet_package.py make RUNを実行すると、package/biscuit/(pet.json、spritesheet.webp)、package/spritesheet-v1.png、GIF が作成されます。ユーザーには次のように伝えます。ChatGPT のウェブ版では、v1 ファイルを Settings > Personalization > Pet > Select pet > Upload pet からアップロードします。この画面で名前を設定でき、ルックの方向は表示されません(ルックの方向は v2 ファイルにのみ含まれます)。Codex のデスクトップ版ではパッケージフォルダーを使用します。pet_package.py install RUNを実行する前にユーザーに確認します。このコマンドは${CODEX_HOME:-~/.codex}/pets/biscuit/にコピーします。--forceを指定しない限り既存のペットは置き換えず、既存のペットを先に実行ディレクトリへバックアップします。
よくある間違い
- シート全体を1枚の画像として生成したり、帯状の画像を均等な枠に切り分けたりすることです。モデルはピクセル単位で正確なグリッドを描かないため、
extractは形状から各ポーズを見つけ、pet_build.pyが配置します。 - 生成に失敗したときに、コードでフレームを描くことです。その場合は中止して報告してください。スクリプトで行うのは、生成されたピクセルの移動、拡大縮小、反転、クリーンアップだけです。
- 警告を確認せずに行を承認することです。画像の端で切れたポーズ、余分なポーズ、ペットの内部にあるキー色のピクセルは、ビルド後にいずれも壊れたフレームとして検出されます。
- シート全体を再生成して修正しようとすることです。合格した行はすべて残し、失敗した最小の行だけを再生成してください。同じ失敗が2回続いたら、同じプロンプトを再実行するのではなく、アプローチを変えてください(よりシンプルなポーズにする、
noteの文を追加する、小道具を減らすなど)。 - 再生成した1つの向きだけを、承認済みの行に継ぎ足すことです。向きが間違っていた場合は行全体を再生成することで、16個のポーズを同じファミリーに保ちます。
- ラベルがないと判別できない基本方位を承認することです。
000は上向きで、正面ではありません。また、右とは見る人から見て右を指します。 pet_check.pyの実行後にシートを再エンコードしたり編集したりすることです。パッケージ化の手順では SHA-256 を比較し、バイト列が異なる場合は拒否します。再ビルドして、もう一度チェックしてください。- ChatGPT ウェブでアップロードする人に v2 ファイルだけを送ることです。OpenAI のドキュメントでは、そのアップロード用に 1536x1872 が指定されており、これは
spritesheet-v1.pngです。 - 許可を得ずに既存の Codex ペットを上書きしてインストールすることです。その場合、
installには--forceが必要で、ユーザーの許可も必要です。