動くPNGTuber(MotionPNGTuber)コードをGitHubに公開するまでの思考回路の垂れ流し
今回は「動くPNGTuber」のプログラムを作り、GitHubに公開するまでの思考なんかも合わせて垂れ流していきます。公開したリポジトリはこちら。
記録としてXにて時系列で呟いていましたのでその時に思っていた事など思い出しつつ、コメントも添えて振り返っていこうと思います。
まず、以前から「PNGTuber」と言う存在は認識はしており、画像数枚から作れるのでAI画像との相性は良さそうだなというのが頭の片隅にありました。そんな中、11月に革命的な「Nano Banana Pro」が発表されました。
ここからはほぼ思いつく限りの画像を作れる状態になりましたね。AI画像を活用した「PNGTuber」ってのはAITuberでオリジナルキャラを作る1つの選択肢としてアリだな。時は満ちた。そんな中、ふとYouTubeで目に入ってきたのがこの動画。
ちな私が急にPNGTuberを作りたくなった動画はこちら。口の形状が何種類もあると画像も滑らかにお喋りしている感じに見えて良いですね。
— ろてじん (@rotejin) December 15, 2025
【Twitter】オタクのマニアックな性癖募集したらエグイの来た…… #vtuber #shorts #animation 【ラプラス・ダークネ... https://t.co/zUCyzFqjOy @YouTubeより
口がパクパクして少しのポージングの変化でここまで楽しい画が作れるなら、制作コストを考えるとショート動画などのコンテンツを作るのに最適だなと(もちろんこの動画は演者さんの面白さあってこそのクオリティですけどね)。
思いついたら直ぐに作りましょう。口パク部分やモーションを変えた画像をAIで出力してPNGTuberを作っていきます。基本的にはポーズと口の差分を作って切り替えていく単純なものです。
リアルタイムPNGTuberは画像を全てpngに書き出し直し。腕の差分を3枚だけ作って、3~5秒毎にランダムに切り替えてみた。少しポーズが変わるだけでリッチさアップね。 https://t.co/TSDFRqhW7G pic.twitter.com/bsWZcKqo93
— ろてじん (@rotejin) December 17, 2025
PNGTuberは画像を切り替えているだけなので、これならリアルタイムに複数同時に動かしてもPCの負荷も殆ど無いし良いのではと、試しに3つほど作って試してみました。全く問題なしですね。軽い動作が最高だ。
PNGTuberの進捗。軽量な利点を活かし同時に10とか20とか同時リップシンクさせて切り替えるとショート動画を見てる感じにリアルタイム配信させられるのかなって。配信に映してる1つだけ動く様にすれば負荷も軽減できるし100とか200とかシーン作れるよね。
— ろてじん (@rotejin) December 17, 2025
トマリちゃんボイスモデル CV:村瀬未帆様 https://t.co/5FUUfCcbL2 pic.twitter.com/p9PnPcRNK9
せっかくなのでもう少し増やしてテスト。9つのPNGTuber同時起動とリアルタイムのリップシンクでも全然大丈夫でした。これが出来ると、ショート動画制作なんかで複数カメラで撮影して素材を一気に取れる感じなので、動画編集ソフトで美味しいところを摘まめば良さそうだななんて妄想しつつ。
PNGTuberの進捗。同時に9枚にリップシンクも余裕だった。画像の手直しもちょいちょいで1つ作るのに10分くらい。モーションを入れるともうちょいかかる。なんだかAI動画にはない楽しさを感じ始めました。もっと自動化できそうだけど自分で細かい部分を作るのも楽しいのよね。 https://t.co/3LcfJesvr4 pic.twitter.com/tGYvgLJYMi
— ろてじん (@rotejin) December 18, 2025
PNGTuberはピコピコと動いて可愛いなと思います。が、人間と言うものは欲が出てくるものです。これだと従来のものと変わらないし、せっかくならもう少しだけリッチな画にしたいなと。そこでAI動画を使う事を思いつきました。
ちょうどニケさんが先鋭的な「生成AI動画を使ったAITuber」にトライされていたので、AI動画を使うのも面白いなと頭の片隅にあったんですね。
そこからは「従来のPNGTuberからは外れる」けれどもAI動画を使う演出を考え始めました。顔の位置が固定されて居れば、口の部分だけ動かせば大丈夫かなと言うのが初期段階の発想です。
これに関しては従来のPNGTuberより少しだけリッチに見せられるし、コードも簡単(Pythonのモジュール1つ)に実装も出来るのでなかなか良さそうだなと感じています。なのでnoteにまとめてみました。
違う絵柄のキャラクターで試しましたが、同じように再現できたので皆さんのオリジナルキャラでも同様に動かせると思います。
前置きが長くなりましたが、ここからが「沼」の始まりです。もう少しキャラクターも動いて欲しいなと。私は特にLive2Dモデル特有の髪がフワフワして、プルンとした瞳なんかが好きなのでキャラには有機的に動いて欲しかったんですね。
これは動画の中での口の位置を検出して、そのトラッキング情報を渡すことで比較的簡単に実装が出来ました。実はここが落とし穴で、この動画素材の「口が小さく」「動きがゆっくり」だったので簡単だっただけでした。
ベースとなるループ動画の口の位置をトラッキングして位置情報さえ用意して置けばリアルタイムで動画上でもパクパク出来る。 https://t.co/sttbCgPkAf pic.twitter.com/dp2Y0dKuAs
— ろてじん (@rotejin) December 20, 2025
早い動きになったらこれまでのアルゴリズムでは上手く検出できずにブレるブレる。ここで口の部分の検出のプログラムをガラッと変えた記憶があります。なんとか上手くいったようです。
結構な激しい動きでも口部分を検出できるようになりました。多分これが追えれば会話しながらのゆったり目のモーション素材なら殆ど大丈夫かな。リアルな人間とアニメ系の検出モデルってかなり違うのね。勉強になった。 pic.twitter.com/B57eNLb7nP
— ろてじん (@rotejin) December 21, 2025
口の部分の検出のプログラムの精度を更にチューニングして、かなり正確にトラッキングできるようになりました。動画スピードに対してスムージングを変えるパラメータを追加したと思います。
動くPNGTuber進捗。精度を向上させて機能をGUIにまとめた。今は事前に口の軌道を解析してそれにPNG画像を追従させる形。解析済み動画に対してはリアルタイムにリップシンク出来る。動きの追従の解析もリアルタイムにして音声に合わせられるようにしたいな。
— ろてじん (@rotejin) December 23, 2025
トマリちゃんボイスモデル CV:村瀬未帆様 https://t.co/Dy2xnn6aPo pic.twitter.com/CWoEECsPYO
Xでリアルタイム動画にリップシンクを合わせたいななんて戯言を呟いていますね。実は、またここで横道に逸れて「リアルタイムのリップシンク」のリポジトリを探して試したりしていました。思い付きで動いている。
厳選した結果「MuseTalk」と言うリポジトリを試して、AIを使い高速化や軽量化の改造にもトライしましたが上手くいかず。4秒の動画を処理するのに7秒かかったり、口元が溶けたようになりキャラが可愛くならなかったので諦めました。リアルタイム処理って難しいですな。
ここで、ふと思いついたのですが今までは口のPNG画像は「唇とその周りの肌の塗り足し」で作っていました。ただ、この仕様だと動画毎に口を作る必要がありますし、いちいち口部分を切り取る手間はあるのに資産性が無いなと。と言う事で動画内の口部分を消すことにしました。
これなら口まわりの肌の部分は不要ですしPNGの使い回しが出来る。
Xではサラッと書いていますが実は少し苦労しています。と言うのも、口部分の検出をした後に、周りの肌の色と上手くなじませる「良い塩梅」の仕様がAIに伝わりにくく画像のスクショを何枚かAIに見せて直しました。
動くPNGTuber進捗。動画毎に差分PNG画像の口パーツを作るのが面倒なので口部分を消しちゃえと言う結論に。これなら口の周りの塗り足し不要なので色々な口パーツを使い回しできる。もっと早めに気付きたかった。そもそも検出できるなら消せるって話ですよね。 https://t.co/GyxpmwLDCK pic.twitter.com/v2C1zAjEgU
— ろてじん (@rotejin) December 23, 2025
なんだかここまで来ると口の開閉パターンがワンパターンだと少し物足りなくなってきます。従来のPNGTuberでも感情表現として喜怒哀楽を切り替えたりもするので、ボタンを押すと口の形が切り替わる機能を入れました。
動くPNGTuber進捗。口の形状もずっと同じよりリアルタイムに変えられた方が面白いかなと思い実装。生配信でも使えるけど、動画を作る際にも便利かもしれない。これなら口の形プリセットは何度も使い回しも出来るね。実質、動画を解析するだけで作れるようになった。
— ろてじん (@rotejin) December 24, 2025
ボイスモデルCV:村瀬未帆様 https://t.co/a9IajVqmhY pic.twitter.com/IwL35Aoodt
ここまではオリジナルキャラの「トマリちゃん」の画像、1~2枚で試していたものの、もっと汎用的にするために色々な種類の絵柄やキャラと角度でパラメータ調節を入れていきます。これはその口元を消す調節の際に出来た画像の口けしアプリ。GitHubにて「mouth_erase_tuner_gui.py」として同梱しています。
実のところ色々な画像で試しましたが、自動的になんでも上手くいくような汎用的と言うのは難しく、パーフェクトにはならないものだなと実感しました。ただ、最終的にはかなり良い感じに消せるようには調整できた。この部分からのフィードバックで自動再計算・部分修復により精度を上げる機能なんかも公開したものには盛り込んでいます。
アニメ絵の口だけを消すプログラム部分を煮詰めるために、そこだけ切り離してパラメータ調節してました。横顔はNGだしボケが強いものも苦手。汎用的に作るのって難しいのね。AIからはハイブリッド方式を勧められているのでそれを導入してみるか。 pic.twitter.com/s5aJyUIL6R
— ろてじん (@rotejin) December 25, 2025
せっかくなら手動ではなく「感情によって自動で口の形も変えちゃえ」と言う事で実装しました。感情分析は深層学習(PyTorch、TensorFlow等)や音声処理ライブラリ(librosa等)をAIにおススメされましたが、どれも動作が重いので拒否しまくっていたらnumpyのみでシンプルにしましょうと言う結論に。
実際の所、実写の動画の口元だと複雑な感情表現の形状がある方が良いかもしれませんが、アニメ系の場合は少し形状変化するだけでも大きく印象が変わるので、オマケ的に実装できて良かったかなと。
AITuberのみの場合はテキストからの感情分析が出来ますが、今回は人間がアバターとしてもリアルタイムにリップシンクする事を考えて簡易的にすることにしました。ここはAITuberではプログラム部分を書き換えて、より正確な感情から形状変化させても良いかもですね。
動くPNGTuber進捗。音声入力から感情を振り分ける仕組みを導入。口の形状が自動でリアルタイムに変わるようにした。軽量動作にしたかったのでnumpyのみで音量・ピッチ・明るさなどの特徴量を抽出し5つの感情に分類。分析の精度は高くないけどPNG画像のリップシンクには良さそうな気がしている。 https://t.co/Da40FXyNaV pic.twitter.com/4z1vFibERu
— ろてじん (@rotejin) December 26, 2025
そんなこんなで、やっとこ出来たのでプログラムの公開に至ると言う感じです。Xでのツイートで興味を持ってくださった方も居るようですので参考になれば嬉しいです。
バイブコーディングのみでここまでプログラムを組める時代。本当にAIのコーディング能力の向上には驚くばかりです。
ちなみに私は実装計画に関してはGPT-5.2 賢いモデル。計画の精査&実装はClaudecode の Opus 4.5に行ってもらっています。このダブルチェックで殆どミスすることなく進みました。ドキュメントも全てClaudecodeだよ。
また自作のAIキャラ関連のツールは色々と公開していこうと思っています。かなりニッチな独自ツールを溜め込んでいるので整理も兼ねてですね。
コツコツ作っていた「動くPNGTuber」GitHubにアップしてみました。初めてのこと尽くしで公開方法も合ってるのかハテナだがとりまチャレンジ。私の環境では動いてるコードです(他では動作確認していないのでわからぬが)。
— ろてじん (@rotejin) December 27, 2025
MotionPNGTuberhttps://t.co/6PfkaH5Ome https://t.co/sGsjxdDl15
製作過程の振り返り、お読みいただきありがとうございました!



コメント