技術 約16分で読めます

WAI-Animaの自作キャラLoRA2個を1枚に、並べるのはできても重なる絡みポーズは設計を保てない

いけさん目次

かなちゃんとケイちゃん、WAI-Anima向けのオリキャラLoRAが2個できた。 かなちゃんケイちゃん はそれぞれ単体では安定して出る。 次にやりたくなるのは「2人を1枚に出す」。

M1 Max 64GB の ComfyUI で、WAI-Anima v1.0 にキャラLoRAを2個同時に当てて 2girls で生成すると、髪型の構造は左右にタグを振れば分離できるが、髪色がにじむ。 かなの茶髪に加えてAnimaの既定も茶髪寄りなので、ケイの金髪がくすんだ薄茶に寄る。 そこで各キャラをきれいに単体生成して、画像編集モデルで1枚にまとめる路線に切り替えた。 Qwen-Image-Editの合成はレイアウトもポーズも作れるが、両キャラを描き直すのでかなのサイドポニーが崩れて設計を保てない。 最終的に設計を保てたのは、片方をきれいな単体で固定し、残りの空白をそのLoRAでinpaintで足す逐次合成だった。 かなを再描画しないのでサイドポニーがズレず、色のにじみも起きない。 体が重なる絡みポーズはControlNetの担当で、Anima向けにはControlNet-LLLiteが使える。
単体のポーズ制御は通ったが、重なった2体は骨格抽出で分離できない。各キャラを別々に焼いてQIEで重ねる多段で構図までは作れたものの、QIEが描き直すのでかなのサイドポニーは最後まで安定しなかった。

加速LoRAは Anima Turbo LoRA v0.1(8 step・CFG 1.0)を併用。LightningはQwen-Image-Edit側の4 step版が別にあるが、Anima生成側はTurboで回している。

単体ベースライン(あたりLoRA+固定衣装)

混ざったかどうかを判定するには、各キャラの衣装を固定して、互いに別系統にしておく必要がある。 同系統の制服だと、混ざったときに気づけない。

キャラ固定衣装
かな白いワイシャツ+赤ネクタイ+濃紺プリーツスカート+黒ソックス+黒い靴
ケイ白い半袖シャツ+青緑のリボンタイ+濃紺のピナフォア(金ボタン)+青い髪リボン

スイートスポットは過去記事で詰めた値をそのまま使う。

キャラLoRAスイートスポット重み
かなkanachan-waianima-rework-v4ep150model 1.0 / clip 0.8
ケイkeichan-waianima-v1ep20model 1.0 / clip 0.8

ケイがep20で済むのは、学習素材を全部WAI-Anima自家生成にして分布のズレをほぼゼロにしたため(前作かなのep150比で7.5倍速収束)。

ポジティブ先頭は Anima 公式寄りの masterpiece, best quality, score_7, safe、ネガティブは 短い公式ネガ+NSFWガード を使う。Googleに弾かれたくないので、ポジに safe、ネガに nsfw, explicit, nipples, pubic hair を必ず入れて露出を抑える。

ケイは「トリガー一語」では髪型が出ない

最初にやらかした。ケイを keichan トリガー+衣装だけで生成したら、金髪・青目・顔は出るのに、髪型がただのツーサイドアップになった。 ケイの識別キーである「ぱっつん前髪+長い側毛(インテーク)+後ろのハーフブレイドアップ+青リボン」が一切出ない。

これは ケイLoRAの学習記事 の結論そのままで、keichan トリガーは髪色・顔・体型までは焼けるが、髪型の構造は焼けない。 1girl, keichan だけだと、無個性な金髪碧眼ギャル+ベース既定の髪型が出る。 構造タグを明示する必要がある。

keichan, blonde hair, long hair, blunt bangs, long sidelocks, half updo, braid, blue ribbon

さらに自然文で「Her long, thick hair intakes hang down past her shoulders on both sides of her face below her blunt bangs, and the half-up braid wraps around the back of her head, tied with a blue ribbon.」を添える。 hair intakes をタグに足すとアホ毛が漏れる(インテークとアホ毛がタグ有無で二値的に結合している)ので、タグには置かず自然文で焼く。 ネガに ahoge, antenna hair, hime cut, twintails, two side up, side ponytail を足して誤発火を抑える。

これで、かな・ケイとも単体では識別子・固定衣装が崩れず出るようになった。Animaの癖として upper body 指定が全身に流れることはあるが、キャラ崩れではない。

かな単体ベースライン。茶髪サイドポニー+青シュシュ+アホ毛、白シャツ+赤ネクタイ+濃紺プリーツスカート+黒ソックス

ケイ単体ベースライン。金髪+ぱっつん前髪+顔脇の長い側毛+片側青リボンのハーフアップ、白半袖シャツ+青緑のリボンタイ+濃紺ベスト

2個のLoRAを同時に当てる(text2img)

単体で出るプロンプトをベースに、2girls にして左右へ振り、LoRAを2個直列につないで生成する。 Turboも併用。重みは単体と同じ model 1.0 / clip 0.8。

最初の版(髪型構造タグを省略)では、ケイの枠にかなのサイドポニーとアホ毛が乗り移った。 左右それぞれに髪型構造タグを明示した版では、この構造の混ざりは消えた。 ケイはぱっつん前髪+長い側毛+片側青リボンのハーフアップを保ち、ツインテ化もしない。

残るのは色のにじみ。ケイ本来の鮮やかな金髪が、くすんだ薄茶やダークブロンドに転ぶ。 かなの茶髪に加えて、Animaの「a young girl」既定が茶髪なので、ep20で軽く焼いたケイの金髪が負ける。 かなの色にじみ検証記事 の「形状の学習と色の学習は別レイヤーで、色のほうがにじみやすい」と一致する。

2個のキャラLoRAを同時に当てた全身2体。左のかなは識別子・衣装とも正確だが、右のケイの髪色が本来の金髪からくすんだ薄茶に寄っている

つまり text2img で2個当てる限り、構造は分離できても色は混ざる。 重みを振る・名前トークンで締める・リージョナル分割でマスクを切る、といった対処はあるが、いずれも構成が重くなる。 ここで方針を変える。各キャラをきれいに単体生成して、画像編集モデルで1枚に合成する。

Qwen-Image-Editで2枚を合成する(並ぶがかなの髪型が変わる)

混在の原因は「1回の拡散で2キャラ分のLoRAが同じ潜在空間に乗ること」なので、生成を分ければ消える。 かなとケイを別々にきれいに焼いて、その2枚を画像編集モデルに渡して1枚にまとめる。 ローカルに入っている編集モデルは Qwen-Image-Edit 2511。MODEL/CLIP/VAE が1ファイルに入った Qwen-Rapid-AIO(QIE AIO、4 step lightning内蔵)を使う。

ワークフローは TextEncodeQwenImageEditPlus に参照画像を image1 image2 として渡す。 このノードはQwen2.5-VLを通すので、プロンプトは日本語でそのまま通る。 サンプラーは 4 step・CFG 1.0・sa_solverbeta、出力サイズは EmptyLatentImage

2人の女の子を1枚のアニメ調イラストにまとめる。
1枚目の女の子が左、2枚目の女の子が右に並んで立っている。
全身、白背景。それぞれの髪型・髪色・目の色・服装は元画像のまま一切変えない。

Qwen-Image-Editで左かな・右ケイを並べて合成した全身イラスト

並びのレイアウトは出る。ケイの金髪も保たれる(別々に焼いた画像を参照するので色のにじみが起きない)。 絡みポーズもプロンプト次第で作れて、向かい合いの手つなぎ・ハグだけでなく、背中合わせも背中側を合わせて立たせられた。 おんぶは脚が宙に浮いて絵そのものが破綻したが、正面〜背面の立ちポーズの範囲ならQIEは構図を作れる。

QIEで背中合わせを指示した出力。2人とも外を向いて背中側を合わせている

問題はかなの髪型。QIEは2枚を組み直すとき両方のキャラを描き直すので、かなのサイドポニーの位置と結び方が変わる。 かなの識別キーは「頭の右側で青いゴムで結んだサイドポニー1本+アホ毛」だが、合成後はこれが安定しない。

指定を強めても直らない。「サイドポニーの側・位置・本数を元画像から動かすな」と日本語で強く指示しても、出力ではサイドポニーが三つ編みに化けた。 画像を読ませたcodexにも「位置は右側だが三つ編みで別の結び方」と返ってきた。

指定を強めても、かなのサイドポニーが三つ編みに変わってしまったQIE合成

つまりQIEの合成は、レイアウトとポーズは作れて出来も良く見えるが、かなの髪型を設計通りに保てない。 出来が良くてもサイドポニーがズレるなら、キャラ絵としては許容できない。 そもそも合成ステップは完成画像2枚を編集しているだけで、かな・ケイのLoRAは関与していない。 LoRAで作ったキャラを1枚にする、という本筋からは外れた手段になっている。

編集モデルを変えると保てる場合がある(Flux Kontext)

QIEがダメなら別の編集モデルはどうか。Flux.1 Kontext dev を試した。 M1 Max(MPS)はfp8を実行できないので、GGUF(Q4_K_M)を UnetLoaderGGUF で読み込み、t5xxl+clip_lのデュアルCLIP、参照画像2枚を ReferenceLatent で連鎖注入する構成にした。

Flux Kontextで単体2枚を並べて合成した出力。左かな・右ケイとも識別子が保たれている

髪に関してはQIEより良かった。かなのサイドポニーは頭の右側に1本+アホ毛で残り、ケイの金髪・青リボンも保たれて、QIEが三つ編みに化けさせた識別子はFluxKontextだと崩れない。

ただし等身が落ちた。元の単体は7頭身くらいだが、合成後は頭が大きくなって5〜6頭身の幼児体型寄りになる。 髪型・髪色は保てても、体のプロポーションがFlux寄りになって設計から外れる。 両キャラを描き直している点はQIEと同じで、元画素そのままではない。GGUFでもM1 Maxでは1枚に数分かかる。 髪は保つが等身が変わる、という別の崩れ方をする。設計を1ピクセルも動かしたくないなら、次の逐次inpaintのほうが確実だ。

片方を固定して、もう片方をそのLoRAでinpaintする

LoRAを使ったまま、かなの設計を一切崩さない方法はある。 かなのきれいな単体を広いキャンバスの左に貼り、その画素には手を付けず、右の空白だけを kei LoRA で inpaint する。

効果理由
かなのサイドポニーがズレないかなの領域は再描画しないので元の画素のまま
色のにじみが起きない1パスでかかるLoRAは kei だけ

ワークフローは waiANIMA + kei LoRA + Turbo に、SetLatentNoiseMask で右領域だけをマスクして KSampler を回す(denoise 1.0、左のかな領域はマスク外なので保持される)。

最初に右領域を広く取りすぎたら、ケイが2体出て計3人になった。

inpaint領域が広すぎてケイが2体出てしまった失敗例

ネガティブに 2girls, multiple girls, crowd, duplicate を足し、inpaint領域を1体ぶんの幅に狭めたら、ケイが1体で収まった。

かなを左に固定し、右の空白をkei LoRAでinpaintした2キャラ。かなのサイドポニーが元のまま保たれている

codexに確認させた結果は、女の子2人、左のかなはサイドポニー右側+アホ毛にズレも崩れもなし、右のケイはロング+ぱっつん前髪+ハーフアップ。 かなの設計を崩さずに2キャラを1枚に置けた。これがQIE合成との決定的な差だ。

ただしこれは2人が重ならない並びだから成立する。 体が前後に重なるポーズ(おんぶ・抱き合い)は、空白領域のinpaintでは作れない。 そこからはControlNetで骨格を渡す。

重なる絡みポーズはControlNet(Anima-LLLite)の領分

並びは逐次inpaintで出せても、おんぶや抱き合いのように体が前後に重なるポーズは、空白領域のinpaintでは作れない。 こういうポーズを強制するなら、ControlNetでOpenPose骨格を渡すのが筋だ。

最初にローカルの qwen_controlnet_union を waiANIMA に当てようとしたが、ControlNetApplySD3 でも ControlNetApplyAdvanced でも、KSamplerで normalized_shape=[3584] ... got [1, 512, 1024] の形状不一致で落ちた。
これはベースのQwen-Image向けで、隠れ次元3584のwaiANIMAには噛み合わない。

Anima系には専用のものがある。kohya-ssの ControlNet-LLLite for Anima重みはHugging Face、pose・depth・lineart・scribble・inpaint のサンプル重み)だ。 LLLiteはDiTのattention/MLPに低ランク補正を差すControlNet亜種で、AnimaLLLiteApply ノードで waiANIMA のMODELにパッチして使う。qwen_controlnet_union と違って形状エラーは出ず、KSamplerも通る。

レシピを外すとポーズが入らない

LLLiteは設定がシビアで、外すと「動いてはいるがポーズが入らない」状態になる。
通すための条件はこうなる。

  • ベースは anima-base-v1.0(LLLiteの学習元)。waiANIMA_v10 ではない
  • ModelSamplingAuraFlow shift 3.0 を AnimaLLLiteApply の後に挟む(Animaはflowモデルで、無いと崩れる)
  • Turbo LoRAは併用しない。KSamplerは euler / cfg 3.5 / steps 30 前後
  • 用途別の重みには、その用途の制御画像を渡す

最後を取り違えると一番ハマる。ポーズ重み(anima-lllite-pose-1)に生画像を渡すと、画面が2分割に割れて崩れた。ポーズ重みに渡すべきは骨格であって写真ではない。 汎用の any 系重みは逆に生画像を丸ごと写す。キャラLoRAを外して生画像だけ渡したら、参照画像がグレーに焼き直されたコピーが出た。any 系はOpenPose制御ではなく、参照画像をまるごと転写するアダプタとして動く。

単体ならポーズ制御は通る

正しい対応で組み直すと、ポーズ制御は素直に通った。
かなを両腕を真横に広げた立ち姿で1枚出し、DWPreprocessor でOpenPose骨格を取る。

両腕を真横に広げたT-poseから抽出したOpenPose骨格

この骨格をポーズ重みに渡し、プロンプト側はポーズを指定せずに生成すると、強度1.5でかなが骨格どおり両腕を真横に広げた。

ポーズ重みとT-pose骨格で、かなが骨格どおり腕を真横に広げた出力

効き方は緩い。
強度1.0や、プロンプトで「腕を下げて立つ」と明示した版では、骨格よりプロンプトが勝って腕が下がる。
強度3.0まで上げると腕は広がるが関節が溶ける。
プロンプトでポーズを指定せず骨格に任せ、強度1.5前後に置いたときが一番安定した。 前バージョンで「Animaにポーズが入らない」と書いていたのは、ベースを waiANIMA_v10 にして ModelSamplingAuraFlow を抜き、骨格も正面向きの立ち姿(プロンプトと一致して制御の有無が分からない)で生成していたためで、Anima側の限界ではなかった。

重なる絡みポーズは骨格抽出で詰まる

単体のポーズは通る。だが目的の「2人が重なる絡みポーズ」はもう一段手前で詰まる。 お姫様抱っこの参照画像を DWPreprocessor に通すと、抱える側と抱えられる側が重なっているせいで骨格が分離できず、四肢がもつれた塊になった。

お姫様抱っこ(体が重なる)から抽出に失敗し、四肢がもつれたOpenPose骨格

このゴミ骨格をポーズ重みに渡しても、ポーズの情報が無いので2人がただ立つだけになる。
DWPoseは実写の人体で学習した推定器で、体が重なると前後の人物を分離できない。
立ち姿やT-poseのように体が離れていれば綺麗に取れるが、がっちり絡んだポーズは骨格を取る段で詰まる。
重なる絡みポーズが出ないのは「Animaが無理」なのではなく、「重なった2体から骨格が取れない」という抽出側の壁だった。

2キャラのアイデンティティは混ざる

体が離れた非重複ポーズなら骨格は取れる。正面で並んだ2体の骨格を取り、ポーズ重みとかな・ケイのLoRA2個で生成したのがこれだ。

2体の立ち骨格にポーズ重みと2キャラLoRAを当てた出力。配置は骨格どおりだが、かながケイのピナフォアを着て髪型も混ざっている

配置は骨格どおり2体並び、色も左が金髪・右が茶髪に分かれた。 ただしアイデンティティは混ざる。茶髪サイドポニーのかなが、自分のプリーツスカートではなくケイの濃紺ピナフォアを着ていて、ケイ側もぱっつん前髪のハーフアップが崩れている。 LoRA2個をモデル全体にグローバルに当てているので、どちらの特徴も画面全体に乗る。LLLiteはポーズを制御するが、「左の骨格はかな、右はケイ」という領域ごとのアイデンティティ指定は持たない。 分けるには、リージョナルプロンプトで領域を切るか、各キャラを別々に焼いてから重ねるか、v1.0向けに学習し直したポーズ重みを待つことになる。

重なるポーズは半分ずつ焼いてQIEで重ねる

LLLiteは重なった体の骨格を取れず、QIEに2枚渡して一発で重ねると両キャラを描き直して髪型を崩す。 どちらも「重なった2人を一度に作る」ところで詰まっている。そこで、最初から重ねるのをやめた。 各キャラを別々に「その役のポーズ」で単体生成して、最後にQIEで重ねる。

お姫様抱っこなら、かなを「抱える側」、ケイを「抱えられる側」として1人ずつ焼く。 かなは抱える腕を大きく広げた立ち姿、ケイは抱えられる姿。 単体生成なのでLoRAは1個ずつで、各キャラらしさはきれいなまま固められる。

抱える側のかな。抱える腕を大きく広げた立ち姿

抱えられる側として単体生成したケイ

この2枚をQIEに渡して1枚に重ねる。
構図は作れた。かなが腕を広げてケイを横抱きにする、お姫様抱っこのレイアウトはちゃんと出る。

問題はかなの髪型で、QIEは合成のたびに両キャラを描き直すので、ここが保てない。
日本語でプロンプトを書くと、かなの結び目が左右反転したり、ツインテに割れたり、シュシュが青から青緑に化けたりする。
英語にすると、左右の反転やツインテ化や色化けは多少減った。QIEのテキストエンコーダはbooruタグで学習したQwen2.5-VLなので、英語のタグ寄りの書き方のほうが通りやすい。

ただし肝心のところが直らない。
かなは medium hair のミディアムで、後ろ髪を下ろしたまま横の一部だけを結ぶ髪型なのに、QIEは髪を長く伸ばして高い位置でまとめてしまう。
学習データのタグそのもの(left side ponytail, medium hair, double parted bangs, ahoge +青いシュシュ)を渡しても、medium hair が効かずロングの高ポニーになる。

left side ponytail, left side up, medium hair, double parted bangs, ahoge, blue scrunchie, do NOT make a high ponytail

QIEで重ねたお姫様抱っこ。構図は出るが、かなのミディアムが長く伸びて高い位置でまとまり、元の髪型にならない

これは QIE単体でもかなの髪が長くなった のと同じ症状だ。
プロンプトの言語もタグも変えたが、QIEが描き直す限り、かなのミディアムのサイドポニーは保てなかった。

他の絡みポーズでも試した

同じ手順をハグとおんぶでも回した。ポーズのカテゴリ自体はどちらも組める。 おんぶは、かなを前傾の背負い姿勢、ケイを腕を回す姿勢で別々に焼いてから重ねると、ケイがちゃんと背中に乗った。

おんぶ。半ポーズを真面目に作るとケイは背中に乗る

ただし再配置が大きいポーズほど、かなのサイドポニーの崩れも大きい。
ハグでは反対側に移り、おんぶでは頭頂に上がる。
背中合わせだけは崩れないが、体がほとんど重ならずQIEが描き直す部分が少ないからで、絡みポーズの検証にはならない。

構図までは多段で作れた。
設計を1ピクセルも崩したくないなら、結局は重ならない並びにして逐次inpaintするしかない。

結論

手法2キャラかなの設計保持色のにじみポーズ自由度
text2imgで2 LoRA同時△ 構造はタグで分離✗ 金髪が茶に寄る並びのみ
編集合成(QIE AIO)✗ サイドポニーが崩れる並び+正面・背面ポーズ
編集合成(Flux Kontext)◯ サイドポニー保持並び+正面ポーズ
片方固定+もう片方をinpaint◯ 再描画しないので無傷重ならない並びのみ
ControlNet (Anima-LLLite)△ 並ぶが混ざる✗ 衣装が混ざる△ 色は分離単体は◯、重なりは骨格不可
半分ずつ焼いてQIEで重ねる✗ サイドポニーが崩れる重なる絡みも構図は可(多段)

qwen_controlnet_union はwaiANIMAに非互換だったが、Anima-LLLiteは乗って動く。

「2個のLoRAを1枚に」は、text2imgの1パスでは色のにじみで無理。
別々に焼いて編集合成する路線はモデル次第で、QIEは曖昧な指示だとかなのサイドポニーを崩したが、Flux Kontextは保てた。
ただしどちらも両キャラを描き直すので元画素そのままではなく、LoRA自体も合成には関与しない。
設計を1ピクセルも動かしたくないなら、片方をきれいな単体で固定し、残りの空白をそのLoRAでinpaintで足すのが一番確実だった。これは体が重ならない並びに限る。

体が重なる絡みポーズはAnima-LLLite(ControlNet)の担当で、ポーズ重みに骨格を渡せば単体のポーズ制御はAnimaでも通った。
ただし重なった2体は骨格抽出の段で分離できず、2個のLoRAをグローバルに当てるとアイデンティティも混ざる。

各キャラを別々にそのポーズで単体生成してQIEで重ねる多段なら、お姫様抱っこの構図までは作れた。
プロンプトを英語にすると左右やツインテ化の崩れは減るが、QIEはかなのミディアムを長く伸ばして高い位置でまとめる癖が残り、学習タグの medium hair を渡しても直らなかった。
次世代のQwen-Image 2.0(QI2.0)で描き直しが弱まっているかは未確認。

重なるポーズで設計を1ピクセルも崩したくないなら、結局は重ならない並びにして逐次inpaintするしかない。