dwgx@blog:~$dwgx
> cd ../posts

Live2DPet を魔改:画面を覗くデスクトップペットを常駐させる

// created

Live2DPet は Electron 製のデスクトップペットだ。デスクトップにキャラを常駐させ、定期的にスクリーンショットを撮ってアクティブウィンドウを読み、今何をしているかを把握したうえで、LLM に対話を生成させて雑談する。クリックもドラッグも拡縮もでき、音声入力・音声返答にも対応する。これは x380kkm/Live2DPet から fork して魔改を続けている俺のブランチだ。選んだ理由は、俺が長く弄ってきたいくつかのポイントに刺さったから。Live2D デスクトップペット、ローカル音声、LLM をデスクトップに詰め込むこと、そしてついでに VOICEVOX という日本語 TTS のスタックで手を動かして練習することだ。

最大の特徴は、ローカルの機能を一本のチェーンに繋いでいる点だ。STT に Whisper、日本語合成に VOICEVOX Core、さらにローカル永続化されたメモリを加え、チェーン全体がクラウドに頼らず動く。キャラは Live2D モデルでも画像フォルダでもよく、実行時に自動で切り替わる。

オリジナルに対して主に手を入れたのは数か所。メモリをローカルファイルに落として再起動しても消えないようにし、関連度でコンテキストを呼び戻す。Live2D はウィンドウに自適応して自動センタリング。ローカル Whisper は tiny から large まで複数段で、自動の連続認識に対応。加えて多言語のテキストと、重複コードの一括整理。正直に断っておくと、v2.0 のあの「スマート強化テキストパイプライン」は一時停止した。骨組みは残してあるが、コスパが見合わず、無理に押し通すよりまず止めるほうがマシだった。

技術スタックは Live2D Cubism SDK に PixiJS、そして pixi-live2d-display。ウィンドウは透明・ボーダーレス・最前面固定で、目はマウスを追う。音声合成は VOICEVOX Core を通し、koffi という Node の FFI でローカルの dll を直接叩き、GPU は DirectML に載せる。ここが一番厄介で、VVM のパスや ONNX Runtime のディレクトリを一つ間違えると起動しない。モデルはホットインポートに対応していて、.model3.json を含むディレクトリを選べば自動でスキャンする。手書きの設定は要らない。

ひとつ注意。デフォルトでは一定間隔でスクリーンショットを撮り、設定した API に送って解析する。スクショはディスクには落ちないが、サードパーティのエンドポイントは通る。画面に機微な情報があるなら、まずウィンドウを閉じること。ビジョンモデルも金がかかるので、間隔を詰めすぎないように。動かしたいなら Releases から Live2DPet.exe を取ってダブルクリック、あるいはソースから npm install して node launch.jsnpx electron . は使うな、ELECTRON_RUN_AS_NODE とぶつかる。オリジナルは MIT で、土台は @x380kkm のもの。このブランチはそれを俺が引き継いで弄っている。