# ピクセル作例を手元で再現する

掲載した19種類・62点を、同じ入力・seed・設定・ソースから作り直すNodeスクリプトです。画像生成モデルは使いません。追加のnpmパッケージ、APIキー、課金は不要です。

## 用意するもの

- Node.js 22以上。今回の再現確認はNode 24.18.0 / Windows x64で実施しました。
- このフォルダー一式。`vendor/` は指定コミットから抜き出した実行用ソースで、npmの開発用依存は含みません。
- GitHubから取り直す場合だけインターネット接続が必要です。

## まず2点を作る

```sh
node reproduce.mjs --out ./first-results
```

炎の輪（元の色・seed 1）と、小さな島（seed 1）を出力します。同梱ソースの全ファイルをSHA-256で検査してから実行します。すでに存在する出力フォルダーは上書きしません。再度試す場合は別の名前を指定します。

```sh
node reproduce.mjs --sample fire-fire-ring --variant ice --out ./ice-results
node reproduce.mjs --sample wfc-islands --variant 7 --out ./island-seven
node reproduce.mjs --all --out ./all-results
```

`npm run reproduce -- --all --out ./all-results` でも同じ処理です。`npm install` は不要です。`--list` で作例IDと設定名を確認できます。

## 固定コミットからソースを取り直す

```sh
node reproduce.mjs --fetch --sources ./sources --all --out ./fresh-results
```

PixelFX `a84159688af3ca37a4be05a0d422b94451b2e24e`、WaveFunctionCollapse `f1374ee2c04d197afe6d01652f87663a68cbf6a5` の必要ファイルを、GitHubの固定URLから取得します。取得内容を `source-lock.json` と照合します。globalの設定やインストールは変更しません。取得済みソースがある場合は `--fetch` を省けます。

```sh
node reproduce.mjs --sources ./sources --verify-only
node reproduce.mjs --sources ./sources --sample wfc-islands --variant 1 --out ./another-island
```

`--sources` 直下には `pixelfx/` と `wavefunctioncollapse/` を置きます。別途gitで取得したリポジトリも使用できます。指定コミットにチェックアウトし、改行変換を行わないことが必要です。ソースを編集すると検証で止まります。

## 入力と設定を確認する

- `recipes.json`: 全62出力のseed、fps、配色、左右反転、キャラクター表示、書き出し寸法、コマ数、期待するPNG/画素/ポスター/コマ情報のhash。
- `inputs/wfc-islands.json`: 島の元入力16×16。記号とRGBA配色を定義しています。外部画像ではありません。
- PixelFXは既成エフェクトのコードが入力です。元の絵をAIに生成させた実験ではありません。
- WFCはN=3、96×64、入力の周期あり・出力の周期なし、対称変換8種類、Mulberry32のseed 1〜8。矛盾時の再試行はありません。
- 攻撃3種は初回の身体非表示・左右反転による欠けを直し、キャラクター表示あり・反転なしを採用しています。再現するのは掲載中の修正版です。

## 何を照合するか

出力先の `verification.json` に、Node/V8/zlib/OS、ソースSHA、各出力の実測hashと照合結果を記録します。PNGバイトとRGBA画素を分けて照合します。zlibの版によってPNGバイトだけが変わる場合は `same-pixels-different-encoding` とし、画素が一致したことを示します。画素やコマ情報が変わった場合は一致扱いにせず、終了コード1を返します。

元の制作は72回、採用出力は62点です。再現確認は別に数え、元の72回へ加算しません。`historical-attempts.json` は初回54回、修正9回、保存後の記録失敗1回、WFC8回を記録しています。過去の失敗1回は元ログに時刻がないため、推測で補っていません。

元の制作補助モデルは `gpt-6.1-sol / xhigh`。これはコードの選択・調整に使った記録であり、画像生成モデル名ではありません。今後の再現実行はNodeだけで動き、LLMを呼び出しません。元制作時のNode/OS全情報は未保存のため、今回の検証環境と区別します。

## 出典とライセンス

- [PixelFX](https://github.com/patch-gg/pixelfx/tree/a84159688af3ca37a4be05a0d422b94451b2e24e): MIT。`vendor/pixelfx/LICENSE` と `NOTICE.md` を同梱。
- [WaveFunctionCollapse](https://github.com/kchapelier/wavefunctioncollapse/tree/f1374ee2c04d197afe6d01652f87663a68cbf6a5): MIT。`vendor/wavefunctioncollapse/LICENSE` を同梱。

再配布する際は各著作権表示を維持してください。ゲームへの組み込みや地形の通行可能性は、この再現検証の対象外です。

## 今回の再現確認

同梱snapshotで2点、固定SHAから再取得したソースで全62点を実行しました。合計66回すべてでPNGバイト・RGBA画素・ポスター・コマ情報が一致しました。ZIPの展開後に行った追加確認は `archive-smoke` に分けています。今回の追試は元の制作72回と別です。詳細は `verification/summary.json` と各実行記録にあります。
