
Macで複数人のセミリアル:10人でも混ざらない描き方
画像生成で、複数人の絵をセミリアルの画風のまま描く方法を探しました。前回の記事で比べたモデルのうち、構図が得意なZ-Imageと、塗りが得意なAnimaを組み合わせて描いています。そのうえで、人数を2人から10人まで増やして確かめました。
先に結論を書きます。
- いつもの描き方(全員を1枚に描く)では、人数が増えるほど、眼鏡やひげなどの特徴が隣の人へ移りました。10人では、確かめた3回すべてで、眼鏡が別の人に付いていました
- 1人ずつ描いてから並べる方法に変えると、10人の絵を3回描いて、隣へ移った特徴は0でした
- 人物ごとの見本(その人だけを描いた絵)を一度描いておけば、背景が無地の集合の絵は1枚約13秒で描けます。背景も描くと約38秒です
- 4人がお弁当を囲んで話すような、からみのある場面も描けました。いつもの描き方に3つの条件を足すと、4人と5人の組で服を取り違えませんでした(6人以上はまだ試していません)
自分のことですが、前回の最後に「構図が得意なモデルと塗りが得意なモデルを組み合わせて、両方の良さを取れないか試してみます」と書きました。組み合わせた描き方は、1〜2人が動作をしている絵ではうまくいきました。ところが、人数を増やしたとたんに人物が混ざり始めます。今回は、その問題をどう解いたかの記録です。
全体像:2つのモデルを組み合わせて描く
構図はZ-Image、塗りはAnima
前回、9つのモデルを同じキャラクターで比べました。その中で、Z-Image Turboは構図が場面に合わせて自然に変わり、Animaは人物の顔立ちと塗りがきれいでした。弱点もありました。Z-Imageだけだと写真に近すぎます。Animaだけだと顔に寄った構図が多く、場面の動きが出にくいのです。
そこで、2つを順番に使います。
- Z-Image Turboで、人物と構図を描く。人物は文章で書く。たとえば、このブログのキャラクター「ルニ」なら「銀髪のポニーテールで、紺のスーツの若い女性」のように書く
- Anima turboで、その絵を塗り替える。構図と人物はそのままに、画風だけをAnimaの塗りにする。Animaへの指示は「silver hair, ponytail」のように単語(タグ)を並べて書く
塗り替えと「強さ」
2段目の塗り替えは、元の絵を下敷きにして描き直すやり方です。英語ではimage-to-image(i2i)と呼ばれます。
塗り替えには「強さ」の値があります(ComfyUIではdenoise)。0に近いほど元の絵が残り、1に近いほど元の絵から離れます。今回は、画風を塗り替える段で0.6を使いました。
もう1つ、「種」(seed)という値も出てきます。絵を描き始めるときの乱数の元です。ほかの設定が同じなら、同じ種で同じ絵になります。種を変えて何回か描くと、偶然うまくいったのか、いつでもうまくいくのかを見分けられます。
私の環境
- Mac:Apple M5 Max(GPU 40コア)・メモリ128GB
- 道具:ComfyUI 0.39.2(画像生成の操作を、部品をつないで組み立てる無料の道具)・PyTorch 2.14.0。人物を並べる段と、顔の周りを戻す段は、Pythonの台本で動かしました
- 費用:0円(すべて手元で動かしました)
いまの問題:人数が増えると、特徴が隣へ移る
10人で、眼鏡が別の人に付く
いつもの描き方では、全員の特徴を1つの指示に並べて、1枚の絵を描きます。10人を描いた結果が、次の図です。
左から2人目の黒髪の男性は、眼鏡をかけているはずの人物です。ところが、眼鏡は隣の3人目(灰色の髪の50代の男性)に付いています。3人目は口ひげがあるはずなのに、ありません。
種を変えて3回描くと、3回とも眼鏡が3人目へ移りました。3回とも同じ崩れ方なので、偶然ではなさそうです。
2人の「集合写真」で、同じ人が2組
人数が少なければよいかというと、そうでもありません。「2人の集合写真」と頼むと、同じ2人を2組描くことがありました。3回のうち2回で、4人と3人の絵になっています。
なぜ混ざるのか
指示の中で、「眼鏡」という語がどの人物のものかを、モデルが結び付けきれないためと考えられます。人数が増えるほど、語と人物の組み合わせが増え、取り違えも起きやすくなるはずです。2人の集合写真で人が増えるのも、人物の説明と人数の結び付きが崩れた形だと考えています。
試したこと:うまくいかなかった方法
答えにたどり着くまでに、いくつか試しました。うまくいかなかった方法も書きます。
| 方法 | 中身 | 結果 |
|---|---|---|
| 人物ごとに描き直す | 描いた絵から人物を1人ずつ切り出し、その人の特徴だけで描き直す | 描き直しても、口ひげが消えた |
| 場所ごとの指示 | 絵を縦の帯に分け、帯ごとに人物の指示を文章で書く(ComfyUIのConditioningSetArea) |
5人までは少し良くなった(種1つ)。6人からは、細い帯に横縞の崩れが出た |
| 外れを検査して直す | 画像を読めるモデルが外れた人を見つけ、その人の枠を描き直す | 枠が広いと隣の人ごと描き変わり、狭いと胴に顔が描かれた。服の語だけで直すと、無い眼鏡は足せたが、付いた眼鏡は消えなかった |
分かったのは、混ざってから直すのは「足す」はできても「消す」は難しい、ということです。直し方を工夫するより、混ざらない作り方に変える必要があります。
答え:1人ずつ描いてから並べる
処理の流れ
混ざる原因は、全員を一度に1枚の絵へ描くことにあると考えました。そこで、1人ずつ別の絵に描き、あとから並べます。1枚の絵に1人しかいなければ、特徴を取り違えようがありません。
段ごとに説明します。
- 見本を描く。人物ごとに、その人だけの絵をZ-Imageで描きます。膝から上で、背景は無地です
- 画風を塗り替える。見本をAnimaで塗り替えます(強さ0.6)。ここでも、その人の特徴だけを書きます
- 見本を確かめる。決めた特徴が見本に出ていなければ、種を変えて描き直します。見本の段で外れた特徴は、あとの段では直りません。試しでは、画像を読めるモデルに見本を確かめさせ、外れたら2回まで描き直しました
- 背景を外す。BiRefNetで人物の形を取り、背景を外します。ComfyUIに組み込みの部品(
RemoveBackground)で動きます - 顔でそろえて並べる。YuNetで顔を見つけ、全員の顔の高さをほぼそろえます(1人おきに少しずらします)。さらに、全員の体が絵の下端まで届く大きさを自動で選び、左から順に並べます。真ん中の人が手前に来るよう、外側の人から貼ります
- 軽くなじませる。並べた絵全体を、Animaの強さ0.3で塗り替えます。切り貼りの境目と光をなじませるためです。このとき、人物の特徴の語は書きません。人数・場面・画風だけです
- 顔の周りを戻す。なじませると、細い口ひげが薄れたり、隣の人の眼鏡が写ったりすることがありました。そこで最後に、顔の周りだけを並べた絵(見本そのもの)から、ぼかした楕円で貼り戻します
6の強さには理由があります。特徴の語を書かずに強さ0.45で塗り替えると、Animaが勝手に眼鏡やサングラスを足し、ひげを消しました。0.3なら、見本の特徴が残ります。
背景を使うときは、先に背景だけを描き、5の段で無地の灰色の代わりに使います。人物の明るさと色味は、人物の後ろの背景へ少し寄せてから貼ります(詳しくはお花見の節)。
見本は、一度描けば何枚でも使い回せます。人物と種が同じなら、描き直す必要はありません。
途中の絵
下の段は、あとのお花見の節で紹介する絵(背景あり)を描いたときの途中です。
結果:10人まで混ざらなかった
安定する人数
人数を2人から10人まで1人ずつ増やし、それぞれ種を3つ変えて描きました。人物ごとに、髪の色・眼鏡・ひげ・年代・上着の色の5つが合っているかを数えています。数えたのは、画像を読めるモデル(gemma4 26B)です。下の表は、2・3・5・7・10人を抜き出しています。
| 人数 | いつもの描き方 | 1人ずつ描いて並べる |
|---|---|---|
| 2人 | 3回のうち2回、人数が増えた(残る1回は10/10) | 3回とも10/10 |
| 3人 | 13/15・13/15・13/15 | 14/15・14/15・14/15 |
| 5人 | 21/25・21/25・23/25 | 23/25・25/25・23/25 |
| 7人 | 31/35・30/35・28/35 | 32/35・33/35・32/35 |
| 10人 | 41/50・43/50・42/50 | 45/50・46/50・47/50 |
数えたモデルにも癖がありました。見本を確かめる段では、40代の男性を9回とも「若い」と答えています。また、1人ずつ描いた絵は顔を大きく並べるので、1人分を切り出す枠に隣の人の眼鏡や服が入り、移ったと数えられることがありました。そこで10人の絵は、1枚ずつ見て確かめました。
見比べると、違いははっきりしていました。
- いつもの描き方では、3回とも眼鏡が隣の人へ移り、口ひげが消えました
- 1人ずつ描いて並べると、3回とも、隣の人へ移った特徴は0でした。外れたのは、見本の段で描けなかった細い口ひげだけです(1回は無く、1回は薄かった)
まとめると、全員を1枚に描くいつもの描き方では、3人から特徴が移り始め、2人でも「集合写真」と頼むと人数が崩れました。1人ずつ描いて並べる方法では、試した10人まで特徴が移りませんでした。ただし、目で確かめたのは10人の3回で、4〜9人は数えたモデルの点数だけです。
速さ
| 描き方 | 1枚 | 備考 |
|---|---|---|
| いつもの描き方 | 47.4秒(27枚の中央値) | 人数にかかわらず、毎回すべてを描く |
| 1人ずつ描いて並べる | 12.6秒(27枚の中央値) | 背景が無地のとき。見本は別に、1人あたり約31秒(最初の1回だけ) |
1人ずつ描くほうが手間は多そうに見えますが、見本を使い回すので、集合の絵1枚はかえって速くなりました。初めて描く10人なら、先に見本で約5分かかります。どちらの値も、手元のLLMが裏で動いていた時間を含みます。
使ったモデルと道具
| 役割 | モデル | ライセンス |
|---|---|---|
| 見本の1段目・背景 | Z-Image Turbo(文章を読む部分はQwen3 4B) | Apache 2.0 |
| 塗り替え・なじませ | Anima turbo v1.1 | モデルは非商用。描いた絵は商用に使ってよいと作者が明記 |
| 背景を外す | BiRefNet(ComfyUI組み込みのRemoveBackground) |
MIT |
| 顔を見つける | YuNet(OpenCVの公式のモデル集) | MIT |
ライセンスは、Z-Image Turbo・BiRefNet・YuNetを2026年10月12日に配布元の表示で確かめました。Animaは前回の記事で確かめた内容です。
ワークフローが読むファイルは、次の7つです。
- Z-Image Turbo:
z_image_turbo_bf16.safetensors・qwen_3_4b.safetensors・ae.safetensors - Anima turbo:
anima-turbo-v1.1.safetensors・qwen_3_06b_base.safetensors・qwen_image_vae.safetensors - BiRefNet:
birefnet.safetensors
顔の検出には、はじめinsightfaceのモデルを使っていました。ただ、配布されているモデルは非商用の研究用に限られます。そこで、MITライセンスのYuNetに切り替えました。2つを見本10枚で比べると、顔の枠の差は数画素で、集合の絵6枚でも見つけた顔の数は同じでした。
サンプルのワークフロー
試したい方のために、ComfyUIのワークフローと、並べる段の台本を置いておきます。ワークフローはComfyUIのAPI形式で、画面にドラッグすると開けます。
| ファイル | 中身 |
|---|---|
| 1-sheet-zimage.json | 見本を描く(Z-Image Turbo・576×1152・4ステップ) |
| 2-sheet-anima.json | 見本を塗り替える(Anima turbo・強さ0.6・6ステップ・CFG 1.3) |
| 3-cutout-birefnet.json | 背景を外す(BiRefNet) |
| lineup.py | 顔でそろえて並べる・顔の周りを戻す(Python) |
| 4-blend-anima.json | 軽くなじませる(Anima turbo・強さ0.3) |
CFGは、指示にどれだけ従わせるかの値です。切り抜きの面は、人物を白、背景を黒にした白黒の絵です。
使う順番は、次のとおりです。
- 人物ごとに、1と2で見本を描き、目で確かめる。3で切り抜きの面を作る
lineup.py composeで並べる(見本と面を左から順に渡す)- 4でなじませる
lineup.py lockで顔の周りを戻す
python lineup.py compose --size 1536x864 --out lineup.png \
runi.png runi_mask.png wafuku.png wafuku_mask.png aoi.png aoi_mask.png akane.png akane_mask.png
# ComfyUI で 4-blend-anima.json に lineup.png を読み込ませて、blended.png を作る
python lineup.py lock --lineup lineup.png --blended blended.png --faces faces.json --out final.png
背景の上に並べるときは、--background bg.pngを付けます。色味を寄せる量は--tone、顔の大きさの上限は--face、顔の上端の位置は--topで変えられます。お花見の夜の絵は、--tone 0.75 --face 0.11 --top 0.36で並べました。人数を変えたら、4-blend-anima.jsonの「4girls」も人数に合わせて書き換えます。
見本の1段目の指示は、次の形です。実際には、前に画風の文が付きます(全文は1-sheet-zimage.jsonを見てください)。人物の文だけを入れ替えます。
A photo of <人物の文>, an adult, fully clothed with a shirt or top under any jacket, standing and facing forward, shown from the knees up with space above the head, in front of a plain light grey studio backdrop, nobody else in the image.
なじませる段の指示は、人数と場面と画風だけです。人物の特徴は書きません。
4girls, group photo, standing in a row under cherry blossom trees, hanami, cherry blossoms, falling petals, smiling, looking at viewer, <画風の語>
限界
この方法にも、できないことがあります。
- 正面を向いて立つ「並び」の絵だけです。物を手渡す、向き合って話すといった、人物どうしのからみは描けません。食べながら話す場面は、あとの節の描き方で描けました(物の受け渡しは、まだ試していません)
- 見本の体つきがそのまま出ます。図5の下の段の左から2人目は、見本の指示に「young man」と書いたため、少年のような体つきになりました。別の試しでは、年齢を「in his twenties」のように数字で書くほうが安定しました
- 見本の背景は無地なので、そのまま並べると灰色の背景になります
- 2〜3人だと、人と人の間が空きすぎます
- 混ざらないかを数えた人物は1組(10人)で、種は3つです。お花見の4人でも描きましたが、数えてはいません
背景が無地になる点は、次の節のお花見の絵で広げました。背景を先に描き、その上に並べる形です。
背景を付ける:桜の下のお花見を、朝・昼・夜で
1人ずつ描いて並べる方法で、背景のあるお花見の絵を描きました。4人は、ルニ(銀髪のポニーテール)、前回の記事の和装の女性、青い髪のロングヘアの女性、赤い髪の女性です。
背景は、桜の並木の公園をZ-ImageとAnimaで描き、時間帯ごとに朝・昼・夜の光を変えました。人物の明るさと色味は、並べる前に、人物の後ろの背景へ寄せています。0なら寄せず、1なら背景と同じ色味にする値で、朝は0.5、昼は0.4、夜は0.75にしました。
3枚とも、4人の見本は同じものを使っています。見本を描いたのは最初の1回だけで、4人で77秒でした(1人あたり約19秒)。速さの表の約31秒より短いのは、このときは手元のLLMが裏で動いていなかったためです。あとは1枚ごとに、背景が約27秒、なじませる段が約11秒で、合わせて約38秒です。
お花見の絵では、2つの調整をしました。1つ目は、背景の画風です。背景の指示を「manga background」という言い方で書くと、アニメ寄りの平たい絵になり、セミリアルの人物と合いませんでした。そこで、セミリアルの絵の言い方に変え、Animaで塗り替える強さも0.25まで弱めています。
2つ目は、人物の大きさです。最初は4人の肩幅で横幅が埋まり、桜がほとんど見えませんでした。そこで、人物を半分ほどの大きさにし、頭の位置も下げて、頭の上と人の間に背景が見えるようにしました。
からみのある場面:4人でお弁当を囲む
限界の節で書いたとおり、並べる方法ではからみを描けません。そこで、4人が桜の下でお弁当を囲み、おしゃべりしながら食べる場面を、いつもの描き方(全員を1枚に描く)で試しました。人物は、前の節のお花見と同じ4人(ルニ・和装の女性・青い長い髪の女性・赤い巻き毛の女性)です。
写真の言い方にすると、セミリアルになる
結果から書くと、4人の見た目も、からみも、いつもの描き方で描けました。ただ、1段目の指示の頭に毎回付けている画風の文(いつもの決まり文)のままだと、アニメ寄りの絵になりました。
原因は、この画風の文でした。「アニメ寄りの大きめの目」と書いた画風の文のままだと、銀髪・青い髪・赤い髪の人物が並ぶ場面では、1段目からテレビアニメのような絵になりました。Animaで塗り替える強さを0.6から0.5に弱めても、画風はほとんど変わりません。画風は、ほぼ1段目で決まるようです。
そこで、画風の文を写真の言い方(「A realistic candid photograph」で始まる文)に変えました。1段目は写真のような絵になり、Animaで塗り替えると、セミリアルの絵になります。
描けた条件
種を5つ変えて描くと、5枚とも4人の服が合い、顔を向け合って食べながら話す絵になりました。髪は、5枚のうち2枚で外れました(和装の女性のまとめ髪がほどけ、赤い髪は茶色になった)。効いたのは、次の3つだと考えています。
- 人物の見分けを、色と形ではっきり付ける(髪の色・髪型・服の色が全員違う)
- 場面の文に、人物ごとの位置(左・奥の左・奥の右・右)と動作(箸を持って笑う・おにぎりを持つ)を書く
- 1段目の画風の文を、写真の言い方にする
1と2で人物を取り違えずに描け、3でセミリアルの画風になった、という分担です。1と2は、外して描く試しはしていません。
前半の表では、いつもの描き方は3人から特徴が移り始めていました。ここで服の取り違えが出なかったのは、4人の髪の色と服の色が全員違うことと、場面の文に人物ごとの位置を書いたことが効いたためと考えています。ただし、ここで確かめたのは髪と服(男女5人では眼鏡も)で、前半の表のように年代やひげまでは数えていません。
続けて、もっと難しい2つの組も試しました。1つは、似た見た目の4人です。全員20代の日本人女性で、髪は黒2人・茶色2人にしました。もう1つは、4人に眼鏡の男性を足した男女5人です。
どちらも5枚とも、服と髪型の取り違えはありませんでした。5人の場面でも、眼鏡は男性にだけ付いています。
1枚の時間は、3つの組の15枚で約27〜37秒でした。速さの表のいつもの描き方(47.4秒)より短いのは、手元のLLMが裏で動いていなかったためと考えられます。
崩れも残りました。
- 小物の色が、服の色に引っぱられた(似た見た目の4人で、「赤いかんざし」が5枚ともピンクの花になった)
- 目の色が隣の人へ移ることがある
- 物の持ち方が、ときどきおかしくなる
- 男女5人の1枚で、男性の肌の色だけがほかと変わった
- 黒髪が焦げ茶に見え、黒と茶の見分けが弱い
- お弁当の箱に、意味のない文字がときどき出る
なお、6人以上のからみは、まだ確かめていません。
並べる方法と、からみの場面の描き方は、使い分けになります。正面を向いた集合の絵なら並べる方法(10人まで確かめました)、人物どうしが関わる場面なら、いつもの描き方に3つの条件を足す形です(4〜5人まで確かめました)。
まとめ:並びは並べて、からみは条件をそろえて
全員を1枚に描くいつもの描き方では、人数が増えるほど特徴が隣へ移りました。混ざってから直す方法では、移った特徴を消せませんでした。正面を向いた集合の絵は、1人ずつ描いて並べる方法で、10人まで移らずに描けました。背景が無地なら1枚約13秒です。
人物どうしが関わる場面は、いつもの描き方に3つの条件(色と形の見分け・人物ごとの位置と動作・写真の言い方の画風の文)を足すと、4人と5人の組で描けました。6人以上はまだ試していません。どちらの描き方が合うかは描きたい絵によるので、ひとつの参考として見ていただければうれしいです。
次回は、人数を増やすのではなく、喜怒哀楽などのいろいろな感情表現を、同じ人物でどこまで描き分けられるか試してみます。