はじめに
LINEスタンプのキャラクター1枚から、同じキャラのまま表情だけを差し替える。mflux 版 Flux Kontext で試したところ、パラメータの調整では抜けられない壁に当たった。Qwen-Image-Edit-2511 に切り替え、中立ベースをタイル配置して img2img する方式で、同一性と表情の描き換えが両立した。
要点だけをここに置く。実機の出力と、そこに至るまでの経緯は本編にある。
要点だけ
-
Kontext では原理的に両立しなかった。 seed を固定すると表情が変わらず、seed を変えると体の輪郭・頭身まで一緒にズレる。表情を出すための操作が、そのまま同一性を壊す操作と同じだった。Kontext は参照画像に似せて全身を毎回レンダリングし直すため、入力の微妙な揺れが体の細部に伝播する。クライアントの判定はこう。
pukuに似てはいるが、pukuではない。シードを変えた時点で決定的。
-
隣の手段も同じ場所で詰まった。 既存の表情パーツを貼り替える福笑い方式は、手持ちに無い表情を作れない。mflux Fill(マスク編集)は VAE が画像全体を再デコードするため、マスクの外側の画素もわずかに動く。合成すれば体は固定できるが、継ぎ目の黒縁の太さがブレる。量産には耐えない。3つ試して3つとも「identity 保持そのものを目的にした編集モデルが要る」という同じ結論に着いた。
-
Qwen-Image-Edit-2511(Apache 2.0・商用可)で解決した。 ComfyUI + ComfyUI-GGUF(city96)の Q4 量子化版。同一性・表情の描き換え・クチバシと手の解剖、いずれも正常に出た。
- Apple Silicon の MPS では、生成が成功ステータスを返しながら全ピクセル真っ黒になる。UNet 側の fp8 混合精度パスが MPS 上で NaN 化するのが原因で、
--force-fp32で解消する。
- Apple Silicon の MPS では、生成が成功ステータスを返しながら全ピクセル真っ黒になる。UNet 側の fp8 混合精度パスが MPS 上で NaN 化するのが原因で、
-
量産の鍵は「中立ベースをタイル配置してから img2img」。 プロンプトだけで 3×3 の9マスを生成すると、同一性がドリフトし内部に仕切り線が出る。中立(口閉じ・腕下げ・小物なし)のベースを 341px(1024px ÷ 3)四方のセルとして 3×3 に並べた画像を作り、それを入力に denoise 0.8 で img2img する。1.0 だとドリフトする。各セルが同じ中立潜在から出発するため、輪郭がロックされたまま表情だけが動く。
- 24分で9表情、実効158秒/表情。 クライアントの評価は「50枚ガチャよりベース画像付き3×3のほうが当たり率が上がる」。
-
プロンプト側の詰めも要った。 初回シートの欠陥は、内部の黒線・セル間の仕切り線・クチバシが飾り化してその下に別の口が生える・線の途切れ。
ONE single clean continuous black outline only around the outer silhouette; no lines inside; no gutters between cells- ネガティブに
inner black lines, double outline, broken outline - クチバシの解剖は
beak IS its only mouthの一文で安定した
-
限界もある。 1プロンプトで9セルを同時に制御すると、頬の赤みや涙といった属性が隣のセルへわずかに滲む。量産はグリッドで稼ぎ、精度を詰めたいコマだけ中立ベースから1枚ずつ img2img で当て直す。
-
Kontext が使えない技術というわけではない。 絵柄を保ったままのポーズ変更や 2D→3D の変換には有効に働く。向かなかったのは「同一キャラを保ったまま表情という細部だけを差し替える」用途で、そこは設計目標が違うモデルの領分だった。
▶ 鼻の位置にクチバシが取り残された実際の出力、象で同じ失敗をしていた話、九羽が一枚に並ぶまでの経緯は本編に:
ぷくトリ 〜クチバシで笑うまで〜(kuroto-blog)
シードを変えれば表情は変わる。変えなければ変わらない。
当たり前のことに、2枚を並べて見せてもらうまで気づけなかった。