課題
このブログの案内役のキャラクター、PAGEを、1枚の絵のまま瞬きさせたり口パクさせたりする仕組みを作った。PAGEで手応えが出たので、同じ仕組みをSNSを担当しているLEAFと、ほかの2人にも広げることにした。
仕組みはそのまま流用できる。足りない素材は画像生成AIで補う。自動のチェックも全員合格した。
ところが、実際に動いている顔を見ると、どこか変だった。
解決できるようにすること
1枚の絵を、画像生成AIとコードで動かそうとしている人が、自動チェックが通ったあとに目で確認するべき場所と、違和感が見つかったときの直し方の選択肢を持ち帰れるようにする。
先に結論
違和感は大きく3か所に出た。
- 閉じた目の画像を生成AIで作ると、線の端が元の目の角とずれる。無理に角へ合わせると、まぶたが蝶番のような変な閉じ方になった
- 表情を変える口をコードで描くと、元の絵の唇の色と立体感が消えた。元の絵から唇を切り出して当て直したら戻った
- 生成AIは、元の絵では隠れていた部分を勝手に描き足していた。それが半開きの目で、まぶたの上に浮かぶ髪の切れ端として出てきた
どれも、自動チェックでは0件だった。チェックが確かめていたのは「壊れていないか」で、「自然に見えるか」ではなかった。
この記事でわかること
- 1枚絵を動かすときに、生成AIで作った素材のどこがずれやすいか
- 自動チェックが合格でも残る違和感を、どの状態で、どこを見れば見つけられるか
- 見つけた違和感を、作り直さずに直す方法と、作り直しても直らなかった例
1枚の絵を動かす仕組み
まず、前提の仕組みをざっくり。
元の絵は1枚だけ。目は、上まぶたと下まぶたにそれぞれ48個の点を置いて、開いた目から閉じた目まで点を少しずつ動かしていく。閉じた目の見た目は、元の絵を入力にして画像生成AIで「目を閉じた版」を作り、それを使う。口は絵ではなく、コードで形を描く。
1枚の絵を動かす方法は、Xなどでいろいろな手法を調べて、一つずつ試していた。この作り方は、その中の一つでようやく手応えが出たもの。
PAGEでは、瞬き・口パク・8種類の表情までできていた。あとは座標をキャラごとに合わせれば、ほかの3人も動くはず、という見込みだった。
自動チェックは、4人とも0件だった
広げた直後に、AIが自動のチェックを回した。
- 動かした部分に透明な穴が空いていないか
- 目を開いている部分で、瞳の絵が変わっていないか
- 瞬きの途中で、まつ毛が途切れていないか
4人とも、どれも0件。瞬きは1人あたり213の時刻で確かめている。
ところが、AIは画像も目で確認していて、閉じる直前に白目の細い筋が残ることや、まつ毛のつながりの不自然さを、AI自身が記録に残していた。数字は合格、見た目は未合格。この時点で、もう少し丁寧に見る必要がありそうだった。
違和感1: 閉じるとき、目頭が固定されたままだった
自分が実際に動かして見て、一番気になったのは瞬きだった。PAGEと比べると、閉じるときのまつ毛の動きが違う。目頭のあたりが動かずに、片側だけがパタンと閉じるように見えた。
「目頭が固定されているのが原因かな」と思って、AIに調べてもらった。

原因は半分当たっていた。固定されていたのは目頭だけでなく、目頭と目尻の両方。
生成AIが作った閉じた目の線は、元の開いた目の角から、片側の端で14〜26pxずれていた。それなのに仕組みのほうは「閉じた目の両端は、開いた目の角と同じ位置」と決めつけて、生成した線を無理やり角へ引っ張っていた。その結果、線の片側だけが大きく動き、蝶番のような閉じ方になっていた。

一方、うまくいっていたPAGEはどうだったのか。調べると、PAGEは生成した線そのものを閉じた目の形として使っていて、閉じるときに目の片側の端が20px前後下がっていた。角は最初から固定していなかった。
そこで、ほかのキャラもPAGEと同じく、生成した線をそのまま閉じた目の形として使うように直した。目の角も一緒に下がるようになり、蝶番のような動きは消えた。
ここで、こう思う人もいるかもしれない。
「角がずれるなら、角に合わせて画像を作り直せばいいのでは?」
実際に、ほかの1人の分は作り直してみた。その結果は後半に書く。
違和感2: 表情を変えると、唇の色と立体感が消えた
次は口。普段の顔では元の絵の唇がそのまま見えている。でも、笑顔やジト目に表情を変えると、口をコードで描き直すので、唇の色も艶も消えて1本の線だけになっていた。

最初は、唇をしっかり描き込んでいたキャラで、線の下に唇の色を塗る方法を試した。色は戻った。でも自分が見ると、元の絵に比べて立体感が足りなかった。
そこで、元の絵から唇を切り出す方法に切り替えた。元の口の線を1列ずつ探し、その線を境に上唇と下唇に分けて、表情ごとの口の縁に1列ずつ当て直す。陰影もハイライトも元の絵のものなので、立体感が残った。
ただ、今度は「元の絵より唇が濃い」と感じた。AIに数えてもらうと、口のまわりの暗い画素の割合が、元の絵の6.6%に対して9.4〜9.8%あった。切り出した唇にはもともと口の線が入っているのに、その上からコードでも線を描いていて、線が二重になっていた。
二重の線を消し、あわせて下唇に艶のハイライトを足した。それでもまだ少し濃く見えたので、唇を少し透けさせて、明るさを元の絵とほぼ同じ(明るさの中央値で196に対して194〜195)にそろえた。
ほかのキャラにも広げる前に、元の絵に唇の色があるかをキャラごとに確かめた。PAGEは口が線だけで、唇の色を塗っていない絵だった。なのでPAGEには使わず、もともとの線の口のままにしている。全員に同じ処理をかければいい、という話ではなかった。
違和感3: 半開きの目の上に、髪の切れ端が浮いた
3つ目は、PAGEの「ねむい」表情で見つけた。半分閉じた目の上に、短い髪の切れ端のような線が浮いていた。同じ半目でも、ジト目では出ていない。

調べると、出どころは閉じた目の画像だった。元の絵では、髪の房の先は開いた目のまつ毛に重なっていて見えない。ところが、生成AIで「目を閉じた版」を作ったとき、まつ毛がなくなった場所に、AIが房の先を描き足していた。
開いた目では、その部分は使わない。完全に閉じた目では、まつ毛に隠れる。半分閉じた状態で長く止まる「ねむい」でだけ、まぶたの上に描き足された房の先が見えていた。ジト目ではこの画像をほとんど使っていなかったので、出なかった。
AIが描き足された房の先を肌の色で埋めて、直ったと思った。でも、自分がもう一度見ると、反対側の目にもう1か所残っていた。こちらは、目の部分を差し替える枠の境目に房がまたがっていて、枠の外は元の絵、枠の中は閉じた目の画像になるせいで、房がちょうど枠の縁で切れて見えていた。枠を広げて房の先まで覆い、同じように埋めて解消した。
似たことはLEAFでも起きた。目を閉じても、目頭にまつ毛のかけらが残る。

最初に作業していたAIも消そうとしていたけど、残っていた。原因は目ではなく、前髪のほうだった。揺らすために切り抜いた前髪の範囲が上まつ毛に少し重なっていて、元の絵のまつ毛のかけらが、動かない前髪側に混ざっていた。目を閉じても、そのかけらだけは前髪と一緒に残る。白い髪のキャラなので、「前髪に残すのは明るい画素だけ」という条件を足して消した。
角に合わせて作り直しても、合わなかった
違和感1の話に戻る。ほかの2人のうち1人は、生成した閉じた目の線が、目の向きよりずっと斜めになっていた。生成した線をそのまま使っても、閉じた目が斜めに見えてしまう。
そこで、閉じた目の画像を作り直すことにした。ただ、このとき作業していたAIには画像生成の機能がなかった。代わりに、片目9か所ずつの目標の座標と、生成AIへの指示文の全文、合格の条件(目標から±4px以内)を依頼書にまとめて、画像生成ができる別のAIに作り直しだけを頼んだ。
結果は3回作り直して、一番よかった版でも18か所中10か所しか条件に入らなかった。ずれは最大24px。指示文に座標を書いても、生成AIはその通りには描いてくれなかった。
それでも、線の形は斜めの帯から、下まぶたに沿う自然な曲線に変わっていた。端は12〜24px下がっているものの、ほかの2人で受け入れた端の下がり方と同じ程度に収まっていた。全部の条件を満たすまで作り直し続けるより、この版を暫定で採用する、と自分で決めた。閉じる途中で目尻側に細い明るい筋が出る課題は、まだ残っている。
こんな人に向いている
1枚のキャラクター絵を、画像生成AIで素材を補いながらコードで動かしてみたい人に向いている。
特に、AIが「チェックは全部合格です」と言ったあとに何を見ればいいか分からない人や、同じ仕組みを複数のキャラに広げようとしている人には、確認の順番として使えるはず。
まとめ
自動チェックの0件は、絵が壊れていないことの確認にはなる。でも、自然に見えるかどうかは別の話だった。今回の違和感は、どれも開いた目や普段の顔のように止まった状態ではなく、閉じかけ・半開き・表情の切り替えといった「途中の状態」に出ていた。
| 項目 | 内容 |
|---|---|
| 結論 | 自動チェックが合格でも、生成AIで補った素材のずれは目頭の動き・唇の立体感・隠れていた部分の描き足しとして残った |
| 教訓 | 生成した素材は元の絵とぴったり合わない前提で、合わないところを無理に合わせず、元の絵から使える部分を切り出す。確認は途中の状態で止めて見る |
| 対象読者 | 画像生成AIとコードで1枚絵のキャラクターを動かしたい人、同じ仕組みを複数キャラへ広げたい人 |
同じ状況に陥ったときの回避策
- 生成AIで作った閉じた目の線の端が、開いた目の目頭・目尻とどれだけずれているかを測る。ずれが大きければ、角に無理やり合わせず、生成した線をそのまま閉じた目の形として使う
- 瞬きは閉じる途中で止めて、表情は半目のまま止めて、1コマずつ見る。開いた目だけで判断しない
- 半開きの状態で、まぶたの上や髪の生え際に、元の絵には無い線が描き足されていないか見る
- コードで描く口に切り替えたとき、元の絵の唇の色と艶が消えていないか確かめる。消えるなら色を塗るより、元の絵から切り出して当て直す。そもそも唇の色があるかはキャラごとに確かめる
- 揺らす部分(前髪など)の切り抜き範囲に、目やまつ毛が混ざっていないか、目を閉じた状態で確認する
- 生成AIに座標を指定しても、その通りに描かれるとは限らない。何回まで作り直すか、どこまでずれたら暫定で採用するかを先に決めておく
次に読むなら
キャラごとに素材の確かめ方が変わると分かったら、動画生成AIで同じ設定を複数のキャラに使ったときにどう結果が分かれるかも見ておくと、広げる前の見積もりがしやすい。
- 同じPrompt・同じ設定で動画を作ったのに、3体とも結果が違った話 — 設定をそろえても、キャラによって動きの出方が変わった比較の記録
この記事は、筆者が運営しているブログのキャラクターを動かす検証の作業記録(2026年10月6日〜7日)を基に、独自調整したAIが下書きを作成し、筆者が事実確認・編集を行った上で公開しています。閉じた目や肌の下地など一部の素材は、元の絵を入力に画像生成AIで作成しています。

