WeChat スタンプパックをビルドする
参考画像からエンドツーエンドの20スタンプ制作ランを実行します。オリジナルを保存し、各スタンプを個別に生成し、WeChat公開アセットを準備、検証、パッケージ化します。
必要なコンパニオンスキルとツール
画像を生成する前に、インストールされている imagegen スキルを完全に読み、それに従ってください。デフォルトでは、その組み込みの画像生成パスを使用します。サイレントに CLI/API フォールバックに切り替えないでください。
以下を使用します:
- キャラクターアンカー、20個の独立したスタンプアートワーク、バナー、カバー、アイコンには組み込みの
image_genを使用。 - 参照検査とビジュアルQAには
view_imageを使用。 - 決定論的な取り込み、テキスト合成、検証、コンタクトシート、パッケージングには
scripts/sticker_pack.pyを使用。 - 時間依存の公開ルールを更新するには、公式の WeChat/Tencent ソースを参照。
<skill-dir> はこの SKILL.md を含むディレクトリに解決します。ワークスペースの作業ディレクトリがスキルディレクトリであると想定しないでください。
非交渉の契約
- 最終的なステッカーはちょうど20個生成し、
01.pngから20.pngまで番号を付けます。 - 20個のステッカーアートワークは、20回の個別の組み込み
image_gen呼び出しで生成します。コラージュ、マルチパネル画像、コンタクトシート、nを使用した1回の呼び出し、または重複したアートワークを代わりに使用しないでください。 - まず、テキストのない別個のキャラクターアンカーを生成します。アンカーは20個のステッカーにはカウントされません。
- 提供された各参照ファイルは、元のファイル名、拡張子、EXIF、サイズ、SHA-256をそのままバイト単位で保存します。アーカイブされたコピーを上書き、トランスコード、トリミング、またはストリップしないでください。
- 受け入れられた高解像度の生成済み生アートワークと、すべての高解像度の最終マスターを保存します。監査に役立つ場合は、拒否された再試行出力をソース
versions/の下に保持しますが、受け入れられたスロットの代わりにそれらを使用しないでください。 - コンタクトシートはプレビュー/レビューの下にのみ保持し、提出パッケージには決して配置しないでください。
- 所有権、著作権、肖像権の同意、AI開示、または承認ステータスをでっち上げないでください。
- すべての20個のステッカー、公開アセット、メタデータ、手動レビューゲート、権利ゲートが合格した場合にのみ、ランを
ready-to-submitとしてマークします。
入力契約と個人デフォルト
通常の自己所有ランには、1枚以上の参照画像のみが必要です。このユーザーの再利用可能なデフォルトについては assets/creator-profile.json をロードします。
copyright_holder が空白の場合は、実際の提出者/著作権名を正確に尋ねる1つのオンボーディング質問をし、プロファイルに保存して続行します。リポジトリメンテナの身元を別のユーザーの代わりに使用しないでください。
保存された著作権保持者と公開選択を適用します。参照を検査した後、現在のランの権利と肖像権のブール値を明示的に設定します。プライベートに提供された自己参照の場合、反対の情報がない場合にのみ、呼び出しをユーザーの証明として扱います。画像が公人、第三者の作品、ダウンロードしたアートワーク、可視のブランドIP、または同意が不明確な人物である場合は、パッケージの提出準備完了を宣言する前に、簡潔な権利に関する質問を1つ行います。
複数の画像が明らかに同じ被写体を示している場合は、それらをアイデンティティ参照として結合します。異なる主要被写体を示しており、意図された被写体が不明確な場合は、被写体選択の質問を1つ行います。
出力レイアウト
output/wechat-sticker-pack/<slug>-<timestamp>/ の下に新しいランディレクトリを作成します:
00-reference-originals/ 未加工のユーザー入力 + ハッシュ
01-plan/ pack.json、計画CSV、キャラクター/スタイルバイブル、プロンプト
02-source-assets/
character-anchor.png
generated-raw/stickers/ imagegenの出力20個(未加工)
generated-raw/assets/ バナー、カバー、アイコンソース
generated-masters/ テキスト合成済みの高解像度マスター20個
03-submission/
stickers/ 01.png ... 20.png
assets/ バナー、透明カバー、透明アイコン
metadata/ 公開用コピー、意味、権利/AI宣言
qa/ QA JSON/TXT とハッシュ
04-preview/contact-sheet.png
archives/<slug>-submission.zip
archives/<slug>-full-archive.zip または <slug>-draft-full-archive.zip
state.json ローカルのみの状態。アーカイブからは除外
ワークフロー
1. プラットフォームルールを更新する
references/wechat-publish-spec.md を読みます。インターネットアクセスが可能な場合は、各制作ランの前に公式のWeChatスタンププラットフォームと現在の公式リソースコードを閲覧します。サポートされている要件が変更された場合は、changed-unsupported を記録し、生成の前に停止し、再開する前にスキルとテストを更新します。ランメタデータのみを変更して互換性を主張しないでください。
現在のルールを検証できない場合は、日付スナップショットを付けてドラフトとしてのみ続行し、rules_status: snapshot-unverified と実際の確認日を記録します。変更が検出された場合は rules_change_details を記録します。スクリプトはスキルが更新されるまで生成をブロックします。
2. 参照を検査し権利を確立する
view_image ですべての参照を検査します。役割を明示的にラベル付けします:アイデンティティ参照、オプションの衣装参照、オプションのスタイル参照。
可視で非機微な特徴のみからキャラクターバイブルを構築します。外見から職業、健康、人間関係、民族性、性格を推測しないでください。
現在のリクエストで上書きしない限り、assets/creator-profile.json の個人デフォルトを使用します。references/rights-and-ai.md に従います。
3. ちょうど20個のステッカーを計画する
計画を書く前に references/content-planning.md を読みます。references/pack-schema.json に一致する frozen な pack.json を作成し、以下を含めます:
- 現在のアルバム名、紹介、著作権、プラットフォーム選択、権利/AIフィールド。
- ちょうど20個の一意のエントリ(ID
01~20)。 - 一意の意図、正確なテキスト、意味の単語、表情、ポーズ/アクション、小道具、フレーミング、テキストゾーン、およびアートプロンプト。
- キャラクターバイブル、スタイルバイブル、共有の回避リスト、1つのアンカープロンプト、および公開アセットプロンプト。
以前のパックの固定フレーズを自動的に再利用しないでください。ユーザー提供のフレーズを最初に優先し、残りのコミュニケーションロールを動的に埋めます。
プロファイルテンプレートをランプランにコピーし、ランを初期化します:
python <skill-dir>/scripts/sticker_pack.py init \
--run-dir <run-dir> \
--spec <prepared-pack.json> \
--reference <reference-image> [--reference <image> ...]
4. キャラクターアンカーを生成して登録する
元の参照を使用して、1つの中立的でテキストのないQ版キャラクターアンカーを生成します。主要な可視のアイデンティティ特徴と1つの簡素化された衣装を保持します。無地のプロダクション背景にし、小道具、言葉、ロゴ、署名、境界線、透かしは付けません。
正確な frozen なアンカープロンプトをUTF-8テキストとして保存し、生成されたファイルを登録します:
python <skill-dir>/scripts/sticker_pack.py import-art \
--run-dir <run-dir> --kind anchor --source <anchor.png> \
--generator builtin-imagegen --prompt-file <anchor-prompt.txt>
5. 20個の独立したテキストなしのステッカーアートワークを生成する
references/prompt-templates.md を読みます。 frozen な計画の各アイテムについて:
- 元の参照と同一のキャラクターアンカーを指定して、組み込みの
image_genを1回呼び出します。 - 共有のアイデンティティとスタイルの不変条件を繰り返します。
- 計画された表情、ポーズ/アクション、小道具、フレーミング、および予約されたテキストゾーンのみを変更します。
- 言葉やテキストのようなマークのない、1つのスタンドアロンの正方形アートワークを生成します。
- アイデンティティ、アクション、クロップ、背景、迷子テキスト、透かし、1画像のみの準拠を検査します。
- 受け入れられた生画像をインポートします:
python <skill-dir>/scripts/sticker_pack.py import-art \
--run-dir <run-dir> --kind sticker --slot <01..20> --source <generated.png> \
--generator builtin-imagegen --prompt-file <slot-prompt.txt>
再試行ポリシー:
- ツール障害は同じプロンプトで1回再試行します。
- アイデンティティのずれ、間違ったアクション、クロップ、迷子テキスト、またはマルチパネル出力に対して、対象を絞ったプロンプト修正を1回実行します。
- 参照 + アンカー + 最良の試行を3回目の対象を絞った試行として使用します。
- 1つのスロットに対して3回の試行が失敗したら停止し、残りの安全な作業を終了し、ランをドラフト/準備未完了としてマークします。重複でギャップを埋めないでください。
6. 正確なテキストと公開用ステッカーファイルを合成する
生成された中国語の文字を信用する代わりに、決定論的レンダラーを使用します:
python <skill-dir>/scripts/sticker_pack.py render-stickers --run-dir <run-dir>
レンダラーは生の imagegen ファイルを保存し、計画された正確なテキストで高解像度マスターを作成し、240×240のアップロードPNGを生成し、派生EXIFを削除し、テキスト、コードポイント、フォント、ソースハッシュ、出力ハッシュ、レイアウトを含むレシートを書き込みます。
レンダラーが正確なテキストを読みやすく収められない場合は、レンダリングの前にその計画アイテムのテキストまたはレイアウトのみを修正します。最小サイズを下回るサイレントな切り詰めや縮小は行わないでください。
7. 公開用アセットを生成する
別々の組み込み呼び出しで3つの異なるアセットを生成します:
- 詳細バナー:カラフルで不透明なストーリーシーン。テキスト/数字なし、白または透明な背景なし。
- アルバムカバー:完全にフラットなクロマキー背景上の認識可能な前半身/全身。テキストや白い輪郭線なし。
- チャットアイコン:同じフラットなクロマキー上の正面を向いた頭部のみ。手、テキスト、装飾、白い輪郭線、枠なし。
被写体に含まれないキーカラーを選択します:デフォルトは #00ff00、被写体/衣装に緑が含まれている場合は #ff00ff。その選択をアセットプロンプトと削除コマンドの両方で固定します。
imagegen スキルで必要なヘルパーを使用して、カバー/アイコンのクロマキーを削除します。アルファ結果を検証します。フリンジが残っている場合のみ、--edge-contract 1 で1回再試行します。
削除前に未加工のクロマ出力をインポートし、受け入れられたバナーと既に透明なカバー/アイコンをインポートします:
python <skill-dir>/scripts/sticker_pack.py import-art --run-dir <run-dir> --kind cover-chroma --source <cover-chroma.png> --generator builtin-imagegen --prompt-file <cover-prompt.txt>
python <skill-dir>/scripts/sticker_pack.py import-art --run-dir <run-dir> --kind icon-chroma --source <icon-chroma.png> --generator builtin-imagegen --prompt-file <icon-prompt.txt>
python <skill-dir>/scripts/sticker_pack.py import-art --run-dir <run-dir> --kind banner --source <banner> --generator builtin-imagegen --prompt-file <banner-prompt.txt>
python <skill-dir>/scripts/sticker_pack.py import-art --run-dir <run-dir> --kind cover --source <cover-alpha.png> --generator local-chroma-removal --chroma-key <#RRGGBB> --edge-contract <0..3>
python <skill-dir>/scripts/sticker_pack.py import-art --run-dir <run-dir> --kind icon --source <icon-alpha.png> --generator local-chroma-removal --chroma-key <#RRGGBB> --edge-contract <0..3>
python <skill-dir>/scripts/sticker_pack.py prepare-assets --run-dir <run-dir>
8. ビジュアルQAと手動ゲート
内部コンタクトシートを作成します:
python <skill-dir>/scripts/sticker_pack.py contact-sheet --run-dir <run-dir>
20個の最終ステッカーを個別に、およびシート内で検査します。キャラクターの一貫性、正確な可視テキスト、ユニークなアクション/シルエット、240×240での読みやすさ、透かし/ロゴ/意味不明テキストがないこと、偶発的なパネルがないことを確認します。
バナー、カバー、アイコンを最終サイズで検査します。次に、01-plan/pack.json 内の該当するすべての manual_review フィールドを true に設定します。実際にレビューしていないフィールドを確認しないでください。
9. 検証とパッケージ化
python <skill-dir>/scripts/sticker_pack.py validate --run-dir <run-dir> --strict
python <skill-dir>/scripts/sticker_pack.py package --run-dir <run-dir>
アップロード専用アーカイブは、スクリプトの固定許可リストを使用し、オリジナル、生アート、マスター、プロンプト、コンタクトシート、状態、追加ファイル、ローカル絶対パスを除外する必要があります。完全アーカイブは、バイト単位で同一のオリジナル、ソース、計画、 frozen なプロンプト、サニタイズされた生成台帳、提出ファイル、QA、および来歴を含める必要がありますが、ローカルのみの状態とアーカイブの再帰は除外します。完全アーカイブは元のEXIF/GPSを保持する可能性があり、公開アップロードパッケージとして共有すべきではないことを警告します。
権利または別の提出ゲートが未解決のままの場合は、明確にマークされたアーカイブドラフトのみを作成します:
python <skill-dir>/scripts/sticker_pack.py package --run-dir <run-dir> --full-only
これにより <slug>-draft-full-archive.zip が生成され、古い提出ZIPを隔離して、現在の準備完了パッケージと誤認されないようにします。
完了ゲート
検証とアーカイブの整合性が合格した場合のみ成功を報告します:
20/20 stickers passedpublication assets passedoriginal references preservedrights profile confirmedAI declaration preparedstatus: ready-to-submit
そうでない場合は、draft/not-ready と正確に失敗したスロットまたはゲートを報告します。常に両方のアーカイブ、提出ディレクトリ、コピー/意味ファイル、およびQAレポートへの絶対パスを提供します。
参考資料ルーティング
- 新しいパックごとに
references/content-planning.mdを読みます。 - 画像生成の前に
references/prompt-templates.mdを読みます。 - プラットフォームアセットの計画または検証の前に
references/wechat-publish-spec.mdを読みます。 - 実在の人物、第三者の画像、著作権、肖像権、またはAI開示が関係する場合はいつでも
references/rights-and-ai.mdを読みます。 pack.jsonを作成または修復するときはreferences/pack-schema.jsonを使用します。