本文へスキップ

AIドット絵の修正 · 生成画像を本物のピクセル格子に

画像生成で作られた絵は、拡大するまではドット絵に見えます。「ピクセル」は大きさの揃わない塊で、色は汚れ、縁はぼけています。Studioの整理パネルは塊の大きさを測って塊ごとにきれいなピクセルを1つ作り、色を減らします。信頼できるグリッドが見つからなければ、はっきりそう伝えます。

画像生成で作られた絵はドット絵をまねているだけで、グリッドの上に描かれていません。「ピクセル」は幅の揃わない塊で、色にノイズがあり、縁はぼけています。直すにはセルの大きさ1つ、セルごとに1色、減らしたパレットが必要ですが、生成画像の多くは絵全体に合うセルの大きさが1つに決まりません。Nerulioの整理パネルはまず測り、信頼できるグリッドだけを適用します。試した実際の生成画像7枚はすべて「不確か」と判定され、自動では何も適用されませんでした。代わりに最良の候補を示すので、大きさを入力して結果を自分で確かめられます。

描くスプライト・フレーム・GIF・.aseprite、または整理する拡大画像をドロップ
空のStudioを開く
ブラウザ内で処理し、ファイルはアップロードされません。
Studio のピクセル作業画面の整理パネル:画像生成で作られたCC0画像を「不確か」と判定し、自動では適用しない
CC0アセット(OpenGameArt)を開いた実際のStudio画面です。
書き出し先
  • Palette files測定確認· read back
  • .aseprite検証済み· Aseprite 1.3.18
  • Engine bundles検証済み· Godot 4.7.2 · Unity 6000.5
  • Frame PNG · .nerulio通常ファイル

生成された「ドット絵」に合わせるグリッドがない理由

本物のドット絵はグリッドの上に描かれるので、拡大してもどこでもブロックの大きさが同じです。画像生成は自分の解像度で描き、見た目だけをまねます。ブロックの幅が少しずつ揺れ(私たちの模擬データは基準の80〜120 %)、隣り合う「ピクセル」の色が数段階ずつ違い、縁はぼけ、JPEGで圧縮されていたり背景にグリッドが描き込まれていたりします。

合わせるツールはセルの大きさを1つ選ばなければなりません。幅が揺れていると、規則的な格子は絵の一部には合っても、別の場所ではブロックの真ん中を切ります。Nerulioはまず規則的な格子を試し、ノイズがあって縁が格子から0.1セル以上ずれている絵なら縁をたどります。セルは代表的な大きさの0.7〜1.35倍、区切りが縁のエネルギーの97 %以上に乗る最大の大きさを選びますが、そうして見つけたセルが3px以上でほぼ正方形のときだけ使います。

どれも成り立たなければ、パネルは「約…pxのグリッドが見つかったが、弱すぎて信頼できない」と伝え、何も適用しません。試した実際の生成画像7枚はすべてそうなりました。630 × 500のプレビューでは、Nerulioの弱い候補は約3.3pxでした。そのうち1枚でunfake.jsは209 × 166(大きさ3)、Pixel Snapperは106 × 84(約6)を出力しました。ツール同士で2倍も違うことこそ、推測を黙って適用してはいけない理由です。

疑似ピクセル
1ピクセルに見えるが、隣と幅・色・縁のくっきりさが違う塊。
ミクセル
1枚の絵の中に大きさの違うピクセルが混ざること。生成画像は仕組み上こうなります。
確実 · おそらく · 不確か
整理パネルが示す確かさ。確実とおそらくだけが、大きさを入力しなくても適用されます。

ベンチマークが生成画像で測ったこと

模擬ケース10件は1倍の元画像がわかっています(セル5〜10px、幅80〜120 %、色の揺れとノイズ、一部はぼかしやJPEG)。実際の画像7枚には正解がありません。

模擬生成画像(10件)
  サイズが完全一致           20 %        1px以内           80 %
  ピクセル完全一致           36.1 %(初期設定)  70.3 %(背景を残す)
  ΔE 0.02以内のピクセル      92.8 %(背景を残す)

実際の生成画像(7枚、正解なし)
  Nerulio      7枚すべて「不確か」:サイズはそのまま、候補を表示
  ほかのツール 必ず推定を返す。例:630 × 500 → 209 × 166(unfake.js)、106 × 84(Pixel Snapper)

サイズが1px以内で合っても、ピクセルが完全に合うとは限りません。列が1つ多いと、その後の区切りが全部ずれるからです。そのため模擬ケースでは色の差が小さいピクセルが92.8 %なのに、完全一致は70.3 %にとどまります。

できること

  • エッジ追跡が幅の不揃いな疑似ピクセルをたどります。ノイズより大きな縁だけを使い、縁のエネルギーの97 %以上に境界が乗る最大のセルサイズを選び、平らな区間は均等に分けます。色にノイズがあり、根拠が一致するときだけ使います。
  • 元画像が分かっている模擬生成画像では、サイズを1px以内で当てたのが80 %(完全一致は20 %)、背景を残すとピクセルの70.3 %が完全一致、92.8 %がΔE 0.02以内でした。
  • 実際の生成画像7枚はすべて「不確か」と判定してサイズを変えず、最良の候補(あるプレビュー群では約3.3px)を表示しました。その値を入力して自分で適用できます。
  • Oklabでの色まとめ、色数の上限、スプライトのパレットへの減色、アンチエイリアスの縁と孤立ピクセルの除去。結果は鉛筆で手直しできる新しいスプライトです。

使い方

  1. 生成画像をこのページにドロップすると、ピクセル作業画面に開きます。
  2. 整理パネルで「測定」を押し、判定と確かさを読みます。
  3. 「不確か」ならグリッドを拡大して見えるドットの大きさを入力し、色数の上限を決めます。
  4. プレビューのあと新しいスプライトとして適用し、まだ気になるピクセルを整えます。

結果の確認

  • まず確かさを読みます。縁をたどったグリッド(「不揃いな疑似ピクセル 約6×6px」、おそらく)は適用され、「弱すぎて信頼できない」は適用されません。
  • 大きさを入力したら「キャンバスにグリッドを表示」をオンにして拡大します。区切りが片隅だけでなく絵全体でブロックの間を通っているはずです。
  • プレビューで2倍か4倍にして前後を比べます。目、輪郭、ハイライトが1ピクセルとして残っているはずです。
  • レポートの色数を見て、多いままなら色数の上限(16〜32)を設定します。

トラブルシューティング

症状考えられる原因確認方法対処
「約3.3pxのグリッドが見つかったが、弱すぎて信頼できない」ブロックの幅が揺れている、またはJPEGノイズや背景に描かれたグリッドが本当のセルの大きさを隠している800 %に拡大していくつかのブロックを測り、1ピクセル以上違うか確認測った大きさを入力。違いが大きすぎれば、一部を切り出して別に整理するか描き直す
結果が小さくぼけたコピーのよう入力した大きさが実際のブロックの半分で、ブロックごとに混ざった2 × 2ピクセルになったキャンバスのグリッドで1つのブロックの中に区切りが2本2倍の大きさを入力
目や1ピクセルのハイライトが消えた入力した大きさが大きすぎる、または色まとめが消したプレビューと、レポートのまとめ・修正の一覧大きさを小さく、色まとめを弱いかオフに、孤立ピクセル除去はオフのまま(既定)
まだ色が数百あるブロックごとに含まれる生成時の色ノイズレポートの色数と「ノイズあり」の表示色数の上限16〜32、またはパレットへの減色(Lospecパレット)
背景や市松模様が残る画像生成が背景や偽の透明模様を描き込んだレポートの検出した背景と縁に占める割合背景の除去は単色の縁の色1つだけを消します。市松模様は自動選択で選んで消してください

ほかの方法

方法こんなときに向いています
ドット絵エディタで1倍に描き直す生成画像がコンセプトのとき。本物のグリッドでなぞれば、どんな自動合わせよりきれいになり、解像度も自分で決められます。
Pixel Snapper、unfake.js、perfectPixel確かさの確認なしにすべての画像で結果がほしいとき、または一括処理のためのコマンドラインやライブラリがほしいとき。模擬生成画像ではperfectPixelのほうがサイズを正確に当てる回数が多くありました(40 %対20 %)。
合わせたあとでピクセルラボ生成したアニメーションの複数フレームに、共通のパレット1つとアンチエイリアスの整理が必要なとき。

エンジン別の書き出しと検証方法

「検証済み」は、実際のCC0アセットから書き出したファイルを本物のエンジン・ツールで読み込み、元データと比較したという意味です。読み込んでいない形式はそのように表示します。

書き出し先ファイル検証
.asepritelayers · blend · opacity · locked · indexed palette · frames · tags検証済み Aseprite 1.3.18実際のAsepriteコマンドラインで、インデックスモード・レイヤー2枚・不透明度160の乗算・編集不可のロックレイヤーのまま開き直し、フレームのピクセルも一致しました。
Palette files.gpl · .pal · .hex · .ase · .act · .json測定確認 read back各形式を書き出して読み戻し、一致を確認。Asepriteが書いた.gpl・.pal・.hex・.actと実際のAdobe .ase(16色)も読み込めました。
Engine bundlesGodot 4 · Unity 6 · Phaser 3/4 · PixiJS 8 … through Pack & Export検証済み Godot 4.7.2 · Unity 6000.5描いたスプライトはパック&書き出しでまとめます。そのエンジン用ファイルは実在のCC0アセットで各エンジンに読み込んで確認済み(49回中47回合格。失敗2回はPhaser 3プリセットで避けられるPhaser 3.90のバグ)。
Frame PNG · .nerulioPNG-8 with the palette when an indexed frame fits it · project file通常ファイルどのツールでも使える通常ファイルで、エンジンでの検証は主張しません。

検証の根拠

整理のベンチマーク(元の1倍画像が分かっているCC0ケース69件):サイズを正確に当てたのは81 %(±1px:90 %)、背景を残すとピクセルの74.0 %が完全一致。最も良い競合ツールはサイズ30 %(perfectPixel)、完全一致ピクセル44.6 %(unfake.js)。Asepriteで作った×4ニアレスト拡大は100 %、×3.78バイリニアは99.7 %一致で戻り、どちらもサイズは自動で判定。1pxのアウトラインとドロップシャドウはAsepriteの結果とピクセル単位で一致(1846px・705px)。ここで書いた.asepriteはAseprite 1.3.18でインデックスモード・レイヤー・合成モード・ロックのまま開きます。

制限

  • 試した生成画像で自動的に合わせられたものはありません。大きさを入力するつもりでいてください。
  • 何も描き直しません。ないディテールはないまま、不揃いな形は1倍でも不揃いなままです。
  • 実際の画像には正解がないので、入力した大きさがどれだけ良いかは目で判断するしかありません。
  • ピクセル作業画面にないもの(Asepriteにはある):レイヤーグループ、リンクセル、タイルマップレイヤー、参照レイヤー、RotSpriteと選択範囲の自由回転・拡縮(反転と90°のみ)、グラデーション・スプレー・輪郭・テキストツール、カスタムブラシ(四角・丸の1〜16px)、タイル状の連続描画、LuaスクリプトとCLI。
  • 対称軸は数値入力で、キャンバス上でドラッグできません。タッチでは右ボタンがないため、背景色は入れ替えボタンかXで使います。
  • 整理:JPEGは近い色で戻りますが(背景を残すと84 %がΔE 0.02以内)、完全一致はまれ(12 %)。模擬的な生成画像でサイズが完全一致したのは20 %(±1px:80 %)、実際の生成画像7枚は1枚も自動では合わせません。パネルが示すピクセルサイズを入力してください。
  • インデックス変換はAsepriteのRGB距離ではなくOklabで最も近い色を選びます。テスト用スプライトでは68 %のピクセルが別の(見た目により近い)色になりました。Lospec検索が唯一の通信で、事前に確認します。

バージョンと出典

2026-09-25のベンチマーク(docs/STUDIO-PIXEL.md §5、docs/pixel-bench/H2H.md):正解のある模擬ケース10件と、OpenGameArtの実際のCC0生成画像7枚。競合ツールはそれぞれの初期設定で実行しました。

よくある質問

大きさの違うピクセル(ミクセル)も直せますか?

多くの場合は直せますが、いつもではありません。幅の不揃いな疑似ピクセルのためにエッジ追跡があり、模擬生成画像では80 %でサイズが1px以内でした。根拠が弱いと「不確か」と伝え、サイズを入力するまで何も変えません。

何かを生成したり描き直したりしますか?

いいえ。出力ピクセルはセル内で最も多い色(またはOklabのメドイド)で、パレットは絵か自分で選んだパレットから来ます。元画像は変わらず、結果は新しいスプライトです。

複数フレームのパレット固定やアンチエイリアス除去は?

整理パネルに色数の上限とパレットへの減色があります。従来のピクセルラボも複数フレームを1つのパレットに固定し、アンチエイリアスの縁を合わせます。下にリンクがあります。

無料ですか?アカウントは必要ですか?

このページの機能はすべて無料で、アカウントなしで使えます。透かしや制限された書き出しはありません。

スプライトはアップロードされますか?

いいえ。Studioはこのブラウザのタブ内でデコード・パック・書き出しを行います。プロジェクトはブラウザ(IndexedDB)に自動保存され、.nerulioファイルとして保存できます。

Asepriteやエンジンのプラグインは必要ですか?

いいえ。.asepriteファイルはブラウザで読み書きします。エンジン別のバンドルには必要なものが入っています(Godotはインポート設定とシーン、UnityとGodotのタイルセットは小さなエディタースクリプト)。