ピクセルラボ

複数フレームを1つのパレットに固定し、整理・検査して書き出します。

別々のツールから書き出したり、サイズを変えて保存し直したりしたフレームは、色が少しずつずれます。同じ陰影が微妙に違う3色になり、アニメがちらつきます。ロックはこれを直します。全フレームを合わせて1つのパレットを作り(2〜256色、既定16色、またはPICO-8などのプリセット)、全フレームの全ピクセルをそこへ対応づけ、ディザはオフか組織的ディザにして止まっている部分がちらつかないようにします。ピクセルラボはこれをブラウザで行い、フレームを1×〜8×のPNG、パレットを.gpl、概要をpixel-lab.jsonで書き出し、書き出した全色がパレット内にあることを確認します。

画像をここにドロップ複数のファイルをまとめて処理できます
アップロードなし · この端末で処理

フレームの色がずれる理由と、1つのパレットと適切なディザで防ぐ方法

フレームを通るツールはどれも色を少し動かし得ます。リサンプリングは隣のピクセルを混ぜ、JPEGや非可逆WebPはノイズを加え、色をアルファで乗算して保持するキャンバスは半透明のピクセルをずらします。そうしたフレームを1枚ずつ減色すると、フレームごとに違うパレットになります。ラボは代わりに全フレームをアルファで重み付けした1つのヒストグラムに入れ、Oklabでメディアンカットして(頻度と見た目の差の両方を反映)整え、全フレームが共有する1つのパレットを作ります。

ちらつくかどうかはディザ次第です。組織的(Bayer)ディザはピクセルの位置だけで決まる偏りを加えるので、変わらない部分はどのフレームでも同じピクセルになります。誤差拡散(Floyd–Steinberg、Atkinson)は丸めの誤差をフレーム全体へ運ぶため、1ピクセル動くだけでその後の全ピクセルの判定が変わり、止まっている壁までちらつくことがあります。ラボの既定は「なし」で、複数フレームで誤差拡散を選ぶと警告します。

ラボはキャンバスを通さず、RGBAの値から直接PNGを書きます。キャンバスは半透明の色を乗算済みアルファで丸めてしまうからです。この変更の前は、16色にロックしたパレットの外に書き出した84色のうち68色がはみ出していましたが、変更後は1色もはみ出しません。

パレットロック
全フレームの全ピクセルを、決まった1つのパレットに対応づけること。
メディアンカット
目標の色数になるまで、色のヒストグラムを最も広い軸の中央値で分け続ける方法。
組織的(Bayer)ディザ
ピクセルの位置で決まる固定のしきい値パターン。フレーム間でちらつかない。
誤差拡散
各ピクセルの丸め誤差を隣へ広げるディザ。アニメではちらつくことがある。

例:アンチエイリアスのかかった8フレームを16色にロック

ラボのブラウザテストで、書き出したファイルは別のデコーダーで読み直しています。

入力        8フレーム × 48×48 px = 18,432 px、アンチエイリアスの縁
抽出        8フレーム全体から16色のパレットを1つ
ロック      全ピクセル → Oklabで16色中最も近い色、ディザなし
確認        書き出した全PNGの色:16色、パレット外:0色
ちらつき    変化しない帯:8フレームで1通りだけ(なし、Bayer 4×4とも)
色数の計数  全フレーム面積4MPまで正確、ここでは0.018MP
サイズ上限  1フレームあたり最大4096 × 4096 px

ゲームにとって大事なのは最後の確認です。プレビューではなく書き出したPNGを開いて色を数えてください。ラボのテストもPillowでまさにそうしています。

ロックしたフレームを確認する

  • ← →でフレームを移ります。同じ陰影はどのフレームでもパレットの同じ見本として表示されるはずです。
  • 書き出したPNGを2枚、任意の画像エディタで開き、止まっている部分の同じ位置の色を調べます。値は完全に一致するはずです。
  • 書き出した1フレームの色数を別のツールで数えます。パレットの色数を超えてはいけません。
  • 書き出した.gplをGIMPかAsepriteで読み込みます。同じ色が同じ順で並ぶはずです。

トラブルシューティング

症状考えられる原因確認方法対処
ロック後にアニメがちらつく誤差拡散のディザ(Floyd–SteinbergかAtkinson)がオン変換の工程にちらつきの警告が出る「なし」かBayerに切り替え、ディザ比較のグリッドで並べて見る
小さなディテールの色が消えたメディアンカットは使われるピクセル数で色を重み付けするので、2ピクセルの目のハイライトは広い面に負ける抽出後、パレットの工程にその色があるか確認その色をロックして「もう一度抽出」するか、色数を増やす
ドロップしたスプライトシートが1フレームになったラボは1枚の画像を1フレームとして扱い、シートは分割しないフレームの列が1つだけ先にスプライトスライサーで分割してからフレームをドロップ
ラボが画像を受け付けない4096 × 4096pxを超えるフレームはタブを固めるので拒否するメッセージにサイズと上限が表示される先に縮小・トリミングするか、フレームに分割する
色数が1フレーム分しか数えられていない全フレーム面積が4MPを超えると、表示中のフレームだけを数える数値の横のパネルにその旨が出る正確な合計が必要なら一度に読み込むフレームを減らす

ほかの方法

方法こんなときに向いています
Studioのピクセル作業画面で変換フレームがタイムライン付きのレイヤースプライトなら、カラーモード…がレイヤーとタグを保ったままインデックスにします。パレットエディタを参照。
抽出ではなく公開パレットを使うPICO-8やEndesga 32など決まったパレットに合わせるならLospecパレットの適用。
アンチエイリアスの縁と孤立ピクセルの整理ロック後も変な縁のピクセルや点が残るなら、ラボの整理の工程。ドット絵の整理を参照。

この方法の限界

  • アニメーションの再生はなく、フレームは1枚ずつ送って確認します。
  • 処理はすべてメインスレッドで動き、キャンセルボタンがないため、とても大きな一括処理は終わるまでタブが止まります。
  • 確認はChromiumのみです。

バージョンと出典

Nerulio:docs/PIXEL-LAB.md。ビルドしたサイトでPlaywrightによりChromiumを動かして測定し、すべての数値はダウンロードしたファイルを読み直して(Pillow、zipfile、json)確認しました。単体テストはtests/game-palette.test.mjsです。書き出す.gplはGIMPのパレット形式に従います。

参照した公式ドキュメント

ピクセルラボ

複数フレームを1つのパレットに固定し、整理・検査して書き出します。

使い方

  1. 画像を追加
  2. 設定を調整して結果を確認
  3. 新しいファイルを保存

対応形式

PNG / JPG / WebP / AVIF / HEIC → PNG + JSON (ZIP) — 入力のデコードはブラウザ対応と追加エンジンに依存します。

このツールでできること

複数フレームを1つのパレットに統一し、整理・検査まで一か所で。

処理方式と検証状況

advanced · shared Oklab histogram / locked palette indices / ordered and error-diffusion dithers / indexed recolour. 品質検証中です。Pro・Flagship水準はまだ実証されていません。

書き出す前に

ピクセルを整えますが、新しい描き込みはしません。誤差拡散ディザはフレームごとに結果が変わるため、アニメーションには不向きです。

よくある質問

このツールにはどのような制限がありますか?

ピクセルを整えますが、新しい描き込みはしません。誤差拡散ディザはフレームごとに結果が変わるため、アニメーションには不向きです。

ファイルはアップロードされますか?

このツールで開いたファイルはアップロードせず端末で処理します。コミュニティの投稿に明示的に添付する画像は別途アップロードされます。一部のエンジンやモデルは外部から取得するため、IPアドレスなどの接続情報は配信元に伝わります。

作業は自動保存されますか?

いいえ。画像と編集状態はこのタブに保持され、メディア出力は端末の一時保存を利用する場合があります。言語を変えても作業は残りますが、再読み込み、タブを閉じる操作、別のページへの移動で失われることがあります。