2Dスプライト生成 は何をしますか?
ゲームに必要な最小限のアセットバンドルを、実際の表示サイズ、カメラ、スタイルで作成します。 ゲームロジック(衝突判定、ダメージ、タイミング)はアートから独立したままです。
使用するタイミング
- キャラクター、クリーチャー、小道具、アイテム、アイコン、エフェクトがマスター静止画、シート、またはクリップとして必要な場合。
- フレームがすでに存在し(生成、ペイント、コード描画)、クリップ、パレット、またはエンジン出力が必要な場合。
使用しないタイミング
- マップ、タイル、地形、パララックス、シーンプレート:generate2dmap
- キャラクターのアニメーション:ここで1つのマスターを承認し、次にvideo2dspriteでアクションごとに1つのクリップを作成します(video-handoff.md)。
- ユーザーが要求したコード描画アート:codeart2d
- APIまたはCLI呼び出しのみ:generate2dmedia
機能チェック(セッションごとに1回)
python "<skill-dir>/../generate2dmedia/scripts/forge_doctor.py" --host-tools <tools> --save <output>/doctor.json を実行します。<tools> には自身のツールリスト内のメディアツール(image_gen、image_edit、image_to_video)または none を指定します。ROUTES ブロックには、どのAPIキーが設定されているか(yes/no)、ローカルの準備状態、解決された順序が表示されます。encoding.stdout が失敗する場合は、PYTHONUTF8=1 を設定します。
アートソース
画像生成がキャラクター、クリーチャー、小道具、アイコン、エフェクトのデフォルトアートソースです。art_source(api、host_image、existing、または要求があった場合のみ code)として記録し、回答内でルートを指定します。ユーザーが明示的に指定したルートが優先されます。
- API(キーが設定されている場合):OpenAI(
OPENAI_API_KEY)、Google Gemini(GEMINI_API_KEY)、xAI(XAI_API_KEY)、BytePlus Seedream(ARK_API_KEY)、またはfal.ai(FAL_KEY)を環境変数またはユーザー設定ファイルから使用します(route-media.md)。設定されたキーは所有者の同意とみなされるため、呼び出しごとの確認はありません。 - ローカル:自身の画像ツール(Codex
image_gen、Grokのネイティブツール)がある場合はそれを使用し、ない場合はユーザーのサインイン済みCodex CLI、次いでGrok CLIを使用します。 - codeart2d:ユーザーが明示的にコード描画アートを要求した場合、または
route_media.pyがno-route(終了コード3)を出力した場合のみ使用します。その場合は「コード描画、画像モデルなし」と伝えます。
ハイビットFXは唯一の例外です:fx_pixelfx.py check は、ユーザーがpixelfxをインストールしている場合はそれを(ルートA、サードパーティのコード描画FX、クレジットと開示あり)、そうでない場合は画像ルート(ルートB)に送ります。hibit.mdを参照してください。
すべての画像は1つのコマンドで処理されます:python "<skill-dir>/../generate2dmedia/scripts/route_media.py" image --prompt-file <txt> --reference <png> --size 1024x1024 --out-dir <new>。このコマンドは上記の順序でルートを選択し、route、artifact、sha256、estimateUsd を含む1行のJSONを出力します。resolve --kind image でどのルートが実行されるかを表示します。ユーザーが提供する既存のアートは常に歓迎します。実際に行われていない生成を主張しないでください。プロンプトと契約を保持し、不足している機能を報告してください。
- 仕上げ: HDがデフォルト:フルカラー、クリーンなアルファ、1つのレジストレーション、ゲーム高さへの乗算済みエリアダウンスケール。ピクセル仕上げ(1つの共有パレット、バイナリアルファ、ディザなし)はユーザーがピクセルアートを要求した場合のオプションです。ハイビット仕上げ(モデルからのフラットな線なしアート、次に1つのキャラクターパレット、多数決ダウンスケール、画像から取得した輪郭色)はユーザーがハイビットルックを希望する場合に使用します(hibit.md)。論理的なピクセルグリッドを画像モデルにプロンプトで要求しないでください。ピクセルルックは仕上げから生まれます。
- キャラクター: キャラクターごとに1つのマスター静止画を承認し、次にそれをvideo2dspriteでアニメーション化します(
sprite_set.py)。各アクションに対して1つの画像から動画へのクリップを、すべてそのマスターから作成します。各アクションのボディ高さはマスターの休憩ポーズから維持します。 - シート はエフェクト、アイコン、小道具(およびユーザーが提供するフレーム)用であり、キャラクターアニメーション用ではありません。
マスター静止画(すべてのキャラクターアニメーションはここから始まります)
キャラクターごとに1つの承認済みマスター静止画、次にそこからアクションごとに1つの画像から動画へのクリップを作成します(video2dsprite)。シートはエフェクト、アイコン、小道具用です。文言:prompt-rules.md。コマンド、フレーミング、master.json:master-still.md。
- 仕様(
--spec <json>および/またはフラグ):--name、--subject、--identity(長く正確に)、--facing left|right|front|back、--class hero|mob|boss|prop、--finish hd|pixel|hibit(HDデフォルト。pixelまたはhibitは要求された場合のみ。hibitは静止画をフラットで線なしにします)、--identity-ref(最初の画像、正確にコピー)、--style-ref(2番目:承認済みの同等のスプライト、スタイルとフレーミングのみ)、--key(デフォルト#FF00FF。紫やピンクのデザインには緑または青)。 - 生成:
python "<skill-dir>/scripts/master_still.py" generate --spec <json> --takes 3 --output-dir <new>。各テイクは generate2dmediaroute_media.pyを経由します(APIキーが最初、次にローカルデーモン)。takes.pngに並べて表示されます。終了コード3はルートなしを意味します:そのように伝え、codeart2dがフォールバックです(「コード描画、画像モデルなし」)。ホスト自身の画像ツールを使用する場合:master_still.py promptを実行し、リストされた参照をその順序で添付します。 - 確認して選択:アイデンティティ、向き、エッジに触れていないこと、テキストがないこと。
- ニアミスを編集で修正します。再ロールはしません:
master_still.py edit --run <dir> --take N --change "<1つの変更>" --output-dir <new>(または--master <dir>)。 - 承認:
master_still.py approve --run <dir> --take N --output-dir <new>(別の場所からの静止画:--still <png> --route <作成元>)。静止画にキーを設定し、6ピクセルのマージンでクロップし、LANCZOSでクラスのフレーミング(ヒーロー788px高、トップマージン138px)で1024x1024にスケーリングし、master.png(不透明、純粋キー)、master_rgba.png、master.json(generate2dsprite.master.v1)を書き込みます。 - モーションステップは
master.json(identity_recap、facing、finish、class、framing、key、files、transform、route)を読み取り、静止画を再測定しません。すべてのクリッププロンプトは「同じ <identity_recap>」で始まります。
master.json の route からルートを報告します。FORGE_ROUTE_MEDIA_FAKE 警告は、画像が実際の生成ではないことを意味します。
ホスト別注意事項
- Codex:
image_genは自身の画像ツールです。設定されたキーがない場合はそれを使用し、view_imageで結果を確認します。このセッションで作成されたプロジェクト外の画像:python "<skill-dir>/../generate2dmedia/scripts/cli_media.py" adopt --codex-thread <thread-id> --output-dir <new>を実行し、generated.pngを処理します。codeart2d と generate2dmedia は明示的にのみ使用します。このスキルがそこにルーティングする場合は、それぞれのSKILL.mdを開きます。 - Claude Code: 組み込み画像生成機能はありません。
route_media.pyがAPIまたはローカルCLIを処理します。作成したすべてのPNGをReadで確認し、Bashでツールを実行します。<skill-dir>は${CLAUDE_SKILL_DIR}です。 - Grok: ネイティブの画像・動画ツールが自身のツールです。実際のスキーマを使用してください。
コマンド
各ツールはユーザーのプロジェクトルートから1行で実行します:python "<skill-dir>/scripts/<tool>.py" ...。<skill-dir> はこのスキルのフォルダです。兄弟スキルはその隣にあります(<skill-dir>/../video2dsprite)。入出力はプロジェクト内に保持します。各ツールは新しい --output-dir に書き込みます。既存のディレクトリは拒否し、その隣にステージングし、チェック(--strict-qc / --strict は失敗時に何も公開しません)が完了した後にのみ公開します。成功時は1行のJSONを出力します。エラー時は error: ... を出力し、終了コード1で終了します。使用方法のエラーは終了コード2で終了します。Python 3.10+、numpy、Pillowが必要です(scipy推奨)。--help ですべてのフラグを表示します。
アセットの計画
アイデンティティと参照、カメラと向き、スタイル、ゲーム表示サイズ、仕上げ(HDデフォルト、pixelは要求時)、アクションリストとフェーズ、ループまたはワンショット、モーションエンベロープ、共有ルート、出力形式を記録します。キャラクターごとに1つの承認済みマスターと1つのソースから表示へのスケールを維持します。モブは計画がない限りヒーローより背が高くなりません。グリッドは滑らかさではありません。ポーズ間隔、タイミング、ループシーム、接地の方が重要です。ポーズ、NEAR/FAR脚、タイミング:animation-planning.md。
- アルファ:
native_alphaは実際の透明度を保持します(ペイントされたチェッカーボードはアルファではありません)。chroma_keyは被写体にマゼンタがない場合のみフラットマゼンタを使用します。opaqueは画像全体を保持します(assemble_frames.py)。 - サンプリング:
lanczosまたは生成アート用の乗算済みエリアリサイズ。nearestは検証済みピクセルグリッドにのみ使用します。高解像度のピクセル風ペイントはクリーンな32pxアートではありません。 - 共有ルートはフレームごとのアルファボトムではありません。意図的な浮遊、ジャンプ、上下動、反動を保持します。
生成(画像ルート)
プロンプトは自分で書きます(prompt-rules.md。グリッド、フェーズ、プリセットは action-recipes.md を参照)。参照は --reference(またはツールの実際の画像入力)で添付します。文章内のパスは参照になりません。すべての生成で承認済みマスターを保持し、絶対的なフェーズを記述します。チェーン編集はしません。修正は承認済み静止画の編集で、変更点のみを指定します。アクションファミリーを一度に1つ生成し、ワイドスラッシュ、軌跡、投射物はボディシートの外に保持します。実際のルート、モデル、返されたサイズを確認します。プロンプトからそれらを主張しないでください。
パイプライン
シート(FX、アイコン、小道具):sheet_qc.py spill を未加工シートに実行し、次に generate2dsprite.py process、sheet_qc.py frames、scale_frames.py、build_animation_clips.py、export_engine.py の順に実行します。キャラクターアクションは video2dsprite からパッケージ化されたクリップとして戻ってきます。
| ニーズ | ルート |
|---|---|
| 画像ツール用のシート計画(アスペクト、グリッド、ガイド、プロンプト) | plan_guide.py --frames N --cycle run --output-dir <new>。guide.png を添付し、prompt.txt を貼り付けます。固定スケールと足元ライン:make_anchor_layout.py。空の安全フレーム:make_layout_guide.py |
| スライス前の未加工シート確認 | sheet_qc.py spill --input <sheet> --rows R --cols C --output-dir <new>。交差するパーツがある場合は、より多くのマージンで再生成するか、所有権でスライスします。最大コンポーネントフィルターは使用しません |
| シートのキー設定、スライス、登録 | generate2dsprite.py process --input <sheet> --target asset --mode <mode> --rows R --cols C --output-dir <new> --strict-qc(ジオメトリ v2。processing.md を参照) |
| 1アートpxあたりMソースpxで描画されたピクセルアート | process --resampler nearest --logical-pixel M --pixel-scale N(整数スケールのみ) |
| 1つの登録点でのジャンプ、上下動、反動 | process --scale-strategy registered(または --anchor-px X,Y) |
| アクション間の1キャラクターのスケール | 接地参照で process --write-scale-profile <p.json> を実行し、次に --scale-profile <p.json> --max-profile-scale-drift 0.08 を使用 |
| キャンバスがグリッドで割り切れない、他の行順序 | process --grid-rounding nearest または --pad-to-grid。--direction-order down,up,left,right(modes.md) |
| アイデンティティ、NEAR/FAR交互、ドリフト、ベースライン | sheet_qc.py frames --sheet <sheet> --rows R --cols C --cycle run --output-dir <new>。重複した半サイクルは後半を再生成します。コード描画フレーム(art_source=code)では identity_residual と torso_drift は参考値です |
| 1つのキャンバスとルート上のゲームサイズ、クランプなし | scale_frames.py --frames <pngs> --root-lock torso-x --row-baseline --emit-clips --ticks N --output-dir <new>。後のアクションでは --profile <first>/scale-frames.json --action-padding L,T,R,B を追加 |
| タイミング、イベント、トランジション付きクリップ | build_animation_clips.py --manifest clips.json --output-dir <new>。lintと review/ を読みます(frames-and-clips.md) |
| フレーム全体またはシーンループ(キー設定なし) | assemble_frames.py(--key chroma、--slice ownership。--loop-overlap K --ambient はアンビエントループのみ) |
| 共有パレット、ロック、バリアント、フリッカー(ピクセル仕上げ) | palette_tool.py build、apply、lock、quantize-seq、variants、luts。厳密な論理グリッド:pixel_reduce.py(palette-and-pixels.md) |
| エンジン出力 | export_engine.py --clips <animation-clips.json> --target all --output-dir <new>。Sprite3D:--target godot-sprite3d --world-height <units>(engine-export.md) |
| ゲーム内でクリップを再生(歩行、ヒットストップ、トランジション) | runtime-integration.md |
| コード描画スプライト、リグ、またはFX。要求された場合のみ | codeart2d render_pixelspec.py、rig_animate.py、または fx_build.py を --build-clips 付きで使用(process は不可)。次に export_engine.py。コード描画であることを開示します |
| ハイビットゲーム用FX | fx_pixelfx.py check がルートを選択します(ユーザーが指定したルートが優先)。A、pixelfx インストール済み(推奨):fx_pixelfx.py render --pixelfx <checkout> --id <effect> --ramp ... --snap <palette.json>。pixelfx by Patch(MIT。ユーザーがクローンする別プロジェクト)。CREDITS.txt を同梱し、pixelfxによるコード描画であることを開示します。B、それ以外:画像ルートからの2x2 FXシート、process --scale-strategy registered --cell-size 512、次に hibit_fx.py pixelize --palette <palette.json>(hibit.md) |
承認
- ゲームサイズでレビュー:シルエットとアイデンティティ、接地と浮遊、ループシームまたはワンショット回復、明暗でのアルファ、四肢、アクション間のスケール、ルートとコライダー。
- 品質主張には数値を引用:
pipeline-meta.jsonmatte.qa(key_ring_spill警告:--despill-radius 1または--key-quality softを追加)、sheet-qc.json、クリップビルダーのlint。数値QCは症状を見つけますが、解剖学やモーションを承認することはありません。 - 公開された各QAエンベロープからすべてのWARNまたはFAILチェックをそのまま報告します(id、値、しきい値、ファイル)。公開されたエンベロープに warn がある場合、「すべてのチェックに合格」と言わないでください。
- 承認済みのソースアート、ランタイムフレームまたはクリップ、プレビュー、プロンプトと出所(ルート、モデル、
estimateUsd)、QA、残りの制限を納品します。改訂時は最後に承認されたバンドルを保持します。
参考文献
processing.md(プロセスフラグ、レガシースイッチ)、modes.md、prompt-rules.md、animation-planning.md、master-still.md、video-handoff.md、hamster.md、frames-and-clips.md、palette-and-pixels.md、engine-export.md、runtime-integration.md、hibit.md、action-recipes.md、route-media.md