← Back to スタジオ真榊

Pixiv Fanbox

RTX3060でできた!Kritaで始める「リアルタイムAIお絵かき」

Published 11/22/2023, 11:52:38 PM · Edited 01/18/2026, 04:34:42 PM

RTX3060でできた!Kritaで始める「リアルタイムAIお絵かき」

こんにちは、スタジオ真榊です。今回は、このところSNSを騒がせている「リアルタイムAIお絵かき」の始め方と活用方法についてご報告します。


キャンバスに一筆一筆手書きしていくと、それをもとにリアルタイムでAI画像が生成されていく…というのがリアルタイムAIお絵描き(私が勝手にこう呼んでいます)ですが、今回紹介するのは、無料で使える画像編集ソフト「Krita」にComfyUIの環境を構築してリアルタイム生成できるようにしてしまおう、というもの。リアルタイムと聞くとグラボ性能が追いつくか心配になりますが、少なくとも賢木の環境(RTX3060 12GB)で512x512pxなら問題なく楽しむことができました!


生成ボタンを押してしばらく待つこれまでの画像生成は一体なんだったのか?と思ってしまうほどに面白い機能ですので、まだ体験していない方はこの記事を参考にぜひ試していただければと思います。

こちらのFANBOXではこれまで、基本的にA1111版SDwebUIを使った生成について解説してきましたが、最近はかなりComfyUIに移住しているユーザーさんも多いようです。ただ、今回ご紹介する方法はKritaの中にComfy環境を構築する方法ですので、いまComfyUIを使っていなくても問題なく「リアルタイムAIお絵描き」を楽しむことができます!


インストールにかかる作業時間は、だいたい30分~1時間くらい。ただ、Pythonの知識など難しいことは一切ないので、記事に書いた手順通りにぽちぽちしているだけで終わります。さっそくインストール方法を見ていきましょう。


kritaをインストール

まず、こちらのURLからkritaのセットアップファイルをダウンロードしましょう。自動でお使いの環境に最適なバージョンが表示される仕組みですが、「すべてのダウンロード可能なバージョン」から自分で選ぶこともできます。



さっそくダウンロードしてきたexeファイルを実行します。

セットアップに日本語案内がないので、英語で進めることにしましょう。左下にチェックを入れて「Next」。インストール場所はデフォルトではCドライブになっていますが、あとで画像生成に必要な容量の大きいファイルをどんどん入れていくので、空き容量に余裕があるドライブを選びましょう。(最低10GBは空けておくようあとで要求されます)


私はM.2 SSDに生成AI関連のファイルを置いているので、そちらのドライブに放り込みました。デスクトップにショートカットを作るか聞かれるので、とりあえず作っておきましょう(すぐ起動することになりますので)


Completeしたら「Next▶Finish」でおしまい。デスクトップのショートカットなどからKritaを起動します。


こちらがKritaの起動画面。無事起動できるのを確認したら、いったんこちらは閉じてOKです。


Krita-AI-Diffusionをインストール

次に、こちらのURLからKrita用のプラグイン「Krita-AI-Diffusion」をダウンロードします。



記事執筆時点の最新版である「Download krita_ai_diffusion-1.10.0.zip」をDLしました。



Kritaを起動したら「ツール▶スクリプト▶Pythonプラグインをファイルからインポート」をクリック。さきほどDLしてきたzipを選択します。「今すぐプラグインを有効にしますか?」と聞かれたら「はい」を押します。再起動を求められるので、一度Kritaを閉じてもう一度開きます。



次に、「設定▶Kritaの設定を変更」をクリック。


左のメニュー一覧の最下部にある「Pythonプラグインマネージャ」を選択。こちらの「AI Image Diffusion」にチェック「✓」を入れて「OK」を押します。(バージョンによってはすでにチェックが入っているので、確認するだけでOK)

チェックをいま入れた場合は、プラグインを有効にするため、もう一度Kritaを再起動させてください。


次に、「ファイル▶新しいドキュメント」からキャンバスを開きます。この段階ではまだ生成はしないので、サイズなど特に変更する必要はありません。


上のメニューにある「設定▶ドッキングパネル▶AI Image Generation」にチェック「✓」を入れます。


すると、画面上にこのような「AI Image Generation」パネルが表示されますので「Configure」をクリックします。今後も、Krita上で画像生成をするときはこのドッキングパネルでAI Image Generationを使うことになるので、よく覚えておきましょう。


設定画面の見方

「Configure」をクリックすると、今度はこのようなややこしい画面が表示されます。この画面がリアルタイムAIお絵描きに使う「AI Image Generation」の設定画面です。

左に5つのメニューがありますが、まず操作することになるのは1つ目の「Connection」欄。まだ画像生成(リアルタイム生成)に必要なファイルがKrita内に何一つ揃っていませんので、「Not Installed」が並んでいる状態ですね。ここから、必要なものにチェック「✓」を入れて、画面右側の「Install」を押すことで、ファイルを揃えることができます。


「Server path」がComfy環境がインストールされる場所です。デフォルトでは「C:\Users\ユーザー名\AppData\Roaming\krita\pykrita\ai_diffusion\.server」となっています。「フルインストールする場合は最低10GBは空けておいてね」と書いてあるとおり、空き容量が確保できているかチェックしてからインストールボタンを押しましょう。


それぞれのインストール内容は以下の通り。


・Core components:Comfyなどの主要コンポーネント。リアルタイム生成に不可欠なため、デフォルトでチェックが入っています。

・Workloads:リアルタイム生成を行うSDのバージョンをSD1.5かSDXLから選べます。グラフィックボード性能によりますが、SDXLで生成するのがしんどい環境の場合は1.5を選びましょう。

・Recommended checkpoints:リアルタイム生成におすすめな3つのcheckpointが載っています。とりあえずこれらをインストールしてもよいですし、自分の普段使っているCheckpointをあとで選ぶこともできます。

・Upscalers:アップスケーラーを二種類から選べます。

・Control extentions:リアルタイム生成時に使いたいControlnetを選びます。例えば、Scribbleを使えばトンチキな絵を描いても上手に解釈してくれますし、LineartやSoftedge、Canny edgeを使えば、自分の書いた線に忠実に生成してくれます。(よく知らない方はControlnetが理解る!を参照のこと)おすすめはScribbleとLineartです。


必要なものを選択できたら「Install」を押すと、しばらく掛かりますがインストール作業が始まります。

このように「Server running - connected」と表示されたらインストールは完了。自動でサーバーが「running」状態にならなければ、横の「Launch」ボタンを押せばOKです。


【Comfyが二重環境になる点に注意】

さきほども書きましたが、これはローカル環境に新たにComfyやPython環境を構築するものなので、すでにComfyUIをインストールして使っている方には、二重の環境になることをご理解ください。CheckpointやControlnetモデル、LoRAなどを共有できないため、普段使っているファイルをこちらの環境にコピペする必要があります(後述)


普段使っているComfy環境とKritaを連携させてリアルタイム生成したい場合は、下記を参考に自分で多数のカスタムノードとモデルを揃える必要があり、ややハードルが高いです。知識のある方は試してみてください。

https://github.com/Acly/krita-ai-diffusion/blob/main/doc/comfy-requirements.md


通常生成を試してみよう


リアルタイムAIお絵かきを試す前に、まず普通の画像生成ができるか試しましょう。「ファイル▶新しいドキュメント」からキャンバスを開きます。あまり大きいと生成時間がかかってしまうので、グラボ性能に自信のある方以外はサイズは512x512pxあたりから始めるのがよいでしょう。


「AI Image Generation」パネルにあるプロンプト入力欄にプロンプトを打ち込み、Generate(生成)を押すと、デフォルトのcheckpointで生成が始まります。


通常生成画面はこのような感じ。


「スタイル選択」にデフォルトでDigital ArtworkやCinematic photoといった画像生成スタイルが登録されているので、とりあえずプロンプト欄にテキストを入力して生成ボタンを押せば、4枚同時に画像生成されます。


これはただの画像生成なので、「リアルタイム生成」モードに変更するには、左上のブラシの形をした「モード変更」ボタンを押し、「live」をクリックすればOKです。


「live」モードでリアルタイム生成

こちらがliveモードの画面です。「▶」ボタンを押すと、リアルタイム生成が開始するので、とりあえず押してみましょう。


はい、また「dog」が生成されました。


これはプロンプトとSeed値「1777080736」で生成されたものですので、Seed値をランダム変化させるサイコロ「🎲」ボタンをカチカチと押してみると、下のGIF動画のようにライブで画像が生成されていきます。512x512pxで、一枚あたり2秒ほどでしょうか。非常に早く、また高画質です!


【GIF動画】


これは「LCM-LoRA」という画像生成に必要なステップ数を劇的に減らせる手法によって実現されている高速生成技術です。この生成速度を活かして、自分の絵を一筆ごとにリアルタイムで生成画像に直してもらおう!というのが「リアルタイムAIお絵描き」なわけですね。


さっそくその「一筆ごとに…」をやってみましょう。「Add control layer」という右側のボタンを押すと、こちらのスクリーンショットのようにレイヤーの列が追加されます。この画像では、キャンバス上の「ペイントレイヤー1」というレイヤーを100%の強度で参照していることが示されています。


左の「Image」と書かれたプルダウンメニューを開くと、このようにControlnetの一覧が表示されます。デフォルトで表示される「Image」はimage2imageのことです。上の「Strength」がimage2imageの強度なので、30%くらいに調整すると、キャンバスにある画像を7割くらい残しながらAIクォリティにしてくれるわけです。


たとえばこれは、強度30%で右のトンチキ絵をi2iしてもらったものが左。強度を強めていくと、全然違う「1girl...」の絵になっていき、100%になると全くトンチキ絵と関係のない「1girl...」の絵が生成されるわけです。


こちらは、さっきの生成結果を左上の「→」ボタンで新規レイヤーに保存し、今度はそれを参照元画像にしたものです。このように、ある程度AIにととのえてもらったら、今度はそのラフを新しいラフにして描き進める、というテクニックがあるわけですね。

「Image」となっていたところが「Scribble」になっていることがおわかりでしょうか。今度は雑にお絵描きしたものの文脈をほどよくAIに理解して清書してもらいたいので、「Scribble」で作業を進めます。(Scribbleモデルをインストールしていない方は、右上の歯車"⚙"ボタンからインストールしてください)


Scribbleのやり方


「Live」モードを使うときは、このように白いキャンバスとAI Image Generationパネルを同じくらいの大きさに表示しておくと見やすいのでオススメです。デフォルトならマウスホイールをドラッグでキャンバス位置を調整、ホイールで大きさを調整することができます。


何も描いていない段階でも左側に自動で「dog」が生成されていますが、右側のキャンバスに適当なブラシを選んで絵を描いていきますと…

「ペイントレイヤー1」に描かれたものをリアルタイムにScribble参照しながら、およそ2秒毎に犬の姿が更新されていきます。これが「Image」(image2image)だと、白黒になってしまうのですよね。一旦描き終えたあとで、さきほどのように、サイコロボタンを押してSeed値をランダム変更して「好みの犬」を探すこともできます。


生成結果は一筆ごとに変わっていってしまいますので、ここ!という満足できる結果ができたら、こちらのボタンで「Copy the current result to the image as a new layer」(現在の生成結果を新規レイヤーにコピー)できます。一旦保存しておけば、さらに筆を入れて行っても安心ですね。


「いつもの」生成をできるようにするには?

さて、ひととおりリアル犬の生成は楽しんだので、さきほどの女の子イラストのように「いつもの」生成をできるように環境整備をしていきましょう。AI Image Generationパネル右上の歯車「⚙」ボタンを押すと、下図のような設定画面が表示されます。左メニュー上から二番目の「Styles」の欄です。


やや煩雑ですが、いつもどおり簡単に説明書きを入れるとこのようになります。拡大してご覧ください。


ここをいじる前に、普段使っている「checkpoint」「VAE」「LoRA」をKritaのmodelフォルダに保存しておく必要があります。保存先は「C:\Users\ユーザー名\AppData\Roaming\krita\pykrita\ai_diffusion\.server\ComfyUI\models」の中。これからよく開くことになるので、ショートカットを作っておくとよいでしょう。

該当フォルダの中はこのようになっているので、「checkpoints」にモデルを、「vae」にVAEを、「loras」にLoRAを保存しておきましょう。既に手元にcontrolnetモデル各種がある方は、ここで「controlnet」にまるまるコピペしておいても良いと思います。


配置が済んだら、右上の「+」ボタンを押し、すぐ下のName欄に好きな名前を入れましょう。このスタイルを選べば、常にこれより下に入力した生成設定を呼び出すことができるという寸法(古い)です。一つだけでなく、いくつか自分がやりそうなパターンの生成設定を作っておくとよいでしょう。

例えば、キャンバスに描いたラフを線画にしたいのであれば、線画LoRAを適用して「monochrome,lineart,black and white」などのタグをクォリティタグ欄に入れておき、「lineart style」みたいな名前で保存しておけば、いつでもまた呼び出すことができます。ControlnetやCheckpointとの組み合わせで、これまでにできなかった活用方法が生まれていきそうですね。



さきほど保存しておいたものの中から、checkpoint、LoRA、VAEを選択していきます。LoRAの保存欄はこのようになっており、何も保存していなくてもデフォルト状態で「lcm-lora-sdv1-5.safetensors」というものが選べるようになっています。

これが先程少し触れた「LCM-LoRA」です。通常、STEP数は20くらいはないとまともな画像に収束してこないところを、必要なステップ数を4~8程度まで削減できるという画期的な技術ですね。Liveモードではこれが既に効いていると思われるので、ここではONにしなくて大丈夫です(低劣になってしまいます)


ここではこのような感じに設定してみました。LiveモードではLCMを使って高速生成しますので、サンプラーは専用の「LCM」を使用。スケールは1~2、ステップは4~8程度が良いようです。クォリティに不満があれば、さらに増やしても良いでしょう(反応が遅くなるのでやり過ぎは禁物)


Scribble使用例

設定が済んだら、プロンプト欄に「1girl」を入れてみます。さきほどと同様、キャンパスが白紙でも一応画像は生成されていますね。


レイヤーに「Scribble」が適用されていることを確認したら、どんどん描いていきましょう。(※このGIFは倍速再生です)

このように、髪型やおおむねの位置などをきちんと参照しながら、下手っぴな線には引っ張られずに上手に絵を生成してくれました。ちなみに、Controlnetの強さは「100%」とあるところを弱めていけば調整できます。


Lineartを使ってみよう

ScribbleではなくLineartを適用すると、このように線画をできるだけ守って画像を生成してくれます。これは70%で適用していますが、これ以上強めるとイラストがもっと低劣になり、弱めると目がこの形にならないという絶妙なバランス。こういうバランスを確かめるとき、これまでは何度も生成をやりなおさなくてはならなかったわけですが、生成結果をリアルタイムに見ながらつまみを動かせるのが大変ありがたいですね。


これはLineartを100%で適用した例ですが、見事に私の下手な線に引っ張られて生成結果も低劣になってしまっています。


このように40%程度にまで落としていくと、意図と希望する画質がちょうど折り合ってくる感じですね。色はプロンプトで指示しないところころ変わってしまいます。


「Pose」は使うのが難しい

こちらは「Pose」を適用したところ。「100%」とある横のボタンを押すと、このようにカラフル棒人間が現れ、このポーズを参照してリアルタイム生成が行われます。

要するにOpenposeを使って姿勢制御をリアルタイムでできるというもので、目鼻耳や四肢を示すドットをドラッグして動かすことが可能です。ただ、このとき使っていたcheckpointと相性が悪かったのか、生成画像はこのように低劣化してしまいました(引きの絵だと顔が崩壊してしまうというのもありますが)。デフォルトのリアル系モデルなど、低劣化せずに問題なく生成できるモデルもありますので、いろいろと試してみたいと思います。


ちなみに、さきほどのレイヤー追加ボタンを押すことで複数のControlnetを効かせることももちろん可能です。レイヤーAのPoseを維持しながら、レイヤーBに描いたラフをScribbleして…といったことが理論上はできるということです。




こちらはキャラクターLoRAの利用実験です。さきほどの設定画面でONにすれば、問題なく適用することができます。



注意点としては、プロンプトがあまり長くなりすぎると、入力欄がバグったような挙動になることが多いと感じました。また、生成環境が新たに作られるということもあり、同時にSDwebUIなどVRAMを食うプログラムを動かしていると、挙動がおかしくなって画像生成ができなくなることもたびたびありました(恐らく内部的にCUDA Out of memoryエラーを起こしていると思われる)

こんな感じで意味不明な画像が出るようになったら、恐らくエラー状態になっています。基本的に挙動がおかしくなったらVRAMの空きを確保した上で再起動すれば直りますが、やはりこのあたりはグラボと相談しながらの作業になろうかと思います。4090、値上がりする前に買えばよかった…!


終わりに~リアルタイムAIお絵描きで何ができる?~

やや駆け足でしたが、このような感じで、私のRTX3060(12GB)でも無事「リアルタイムAIお絵描き」を楽しむことができました。まず「圧倒的に楽しい」のはご覧になっていてよく伝わることと思いますが、普段のワークフローとは全く違う生成のやり方なので、これは具体的にどんな作業に使えるか考えてみました。


これまで、FANBOXではさまざまな技術を検証してきましたが、その中で得られたのが「下手くそでも頑張って描いたほうが楽しいし、結局早くない?」という知見です。その代表格が「雑塗りi2i」や「AI清書」、そして「AIリファイン」だったわけですね。


「リアルタイムAIお絵描き」は、当然もともと画力を持っている方が使えば鬼に金棒でさまざまな用途に使えるわけですが、例えば「トンチキカラーラフ」をリアルタイム生成しながら描けば、AIが誤解しない「トンチキではないカラーラフ」を楽に仕上げることが可能になりそうです。また、ポーズ指定や細部の形の指定がより簡単になるので、「どうしてもそのポーズでなければならない」漫画のワンシーンに使えたりもするでしょう。さきほどのLineartの例のように、小さいコマにデフォルメされたギャグキャラを入れたりするときにはもってこいの機能ですね。


絵が描ける方にとっては、まず線画化作業に活かせたり、特に思った通りの背景を作るときに使えるのではないかと考えています。今回はご紹介しませんでしたが、今回の技術はこれまであまり使ってこなかったControlnet「Segmentation」にも対応しているので、例えば「ここにソファ」「ここにテレビ」などと雑に塗っていくだけで、指定したとおりの背景がどんどん出来上がっていく…というような使い方もできるかもしれません。


Segmentationをご存知のない方に説明しますと、この技術はさまざまなカラーに「この色は人」「この色はソファ」などと意味をもたせることで、色分けした塗り絵から正確な構図で画像生成ができるようになるというものです。ご興味のある方はこちらの記事をご参照ください。


さっそくやってみましたが、この位置に人物、ここに天井…というように雑に色を置いていくだけで、このような画像が生成できました。Segmentationの色対応表からぱっとカラーピックする方法が分からなかったので実験程度しかできませんでしたが、Kritaのカラーピックに詳しい方ぜひ情報をお寄せください(笑)


そんなわけで、今日はここまで!背景指定、線画化、清書、デッサン練習などさまざまな用途が考えられる「リアルタイムAIお絵描き」、良いアイデアがあったらぜひコメントなどで教えて下さいね。


それではまた、近いうちに。スタジオ真榊でした。







Attachments (42)

OFM387r9ZgDDH41qffXUqFjX.png

OFM387r9ZgDDH41qffXUqFjX.png

yA6j6wSKZ2FffFLYUT5b4WwL.png

yA6j6wSKZ2FffFLYUT5b4WwL.png

IFKTWuOG0jYJEChigrTGoQWU.png

IFKTWuOG0jYJEChigrTGoQWU.png

iMIIm0qvZJpJVbQwNjmYOWbg.png

iMIIm0qvZJpJVbQwNjmYOWbg.png

ub0lEDIT2UgXKtwUDW26AyKL.png

ub0lEDIT2UgXKtwUDW26AyKL.png

lFxou3NUnf4sOrqIWekAuwIK.png

lFxou3NUnf4sOrqIWekAuwIK.png

HTCqqq9AMztL91w8aZ2skRBc.png

HTCqqq9AMztL91w8aZ2skRBc.png

qwVIi5iC4ZrNK89aS7aeXwHP.png

qwVIi5iC4ZrNK89aS7aeXwHP.png

dsY7ZQInWjpyRZZjjhs3jNLb.png

dsY7ZQInWjpyRZZjjhs3jNLb.png

EEj5N3SOSSL4C6fkk9NJdIRB.png

EEj5N3SOSSL4C6fkk9NJdIRB.png

B7q43g3LCro5Fg6Fgr7haejB.png

B7q43g3LCro5Fg6Fgr7haejB.png

cgALV9VPECycu7kYKAFlDzsg.png

cgALV9VPECycu7kYKAFlDzsg.png

JDMBDxqp9N94YS8hNk7eJfn7.png

JDMBDxqp9N94YS8hNk7eJfn7.png

UsTaX9F3POFwy9IzTb3zkjcG.png

UsTaX9F3POFwy9IzTb3zkjcG.png

Sy5P1AgJBcHFAZfkY1pQbXyv.png

Sy5P1AgJBcHFAZfkY1pQbXyv.png

FMPn8bOtcDAN47pFGvGAptON.jpeg

FMPn8bOtcDAN47pFGvGAptON.jpeg

e5zBCXRrfxNXUeDjX8Lj8Cn5.png

e5zBCXRrfxNXUeDjX8Lj8Cn5.png

W5Y8hBQWfPusp28hCYm5YoWj.png

W5Y8hBQWfPusp28hCYm5YoWj.png

aDCBcnGI4cmay3EcwsYXgADO.gif

aDCBcnGI4cmay3EcwsYXgADO.gif

GgM0ouKMJKccCLCkdEJb9fk3.png

GgM0ouKMJKccCLCkdEJb9fk3.png

lkzt8JZTT2YRXFzV0FyMSdqd.png

lkzt8JZTT2YRXFzV0FyMSdqd.png

jb8wMfsXjWA2KdALUbKSTDbT.png

jb8wMfsXjWA2KdALUbKSTDbT.png

w1gouVo3usB6NUeVAMOLAKNV.png

w1gouVo3usB6NUeVAMOLAKNV.png

GPIdf3QFaF3C9gVAXK28rrdW.png

GPIdf3QFaF3C9gVAXK28rrdW.png

i1jXYPUlEJPTnsSKLkvZJM43.gif

i1jXYPUlEJPTnsSKLkvZJM43.gif

jOLot3HoTa2ba2epJjs96qXc.png

jOLot3HoTa2ba2epJjs96qXc.png

8AkpIoXe4vlmam7xEh5QzG9w.png

8AkpIoXe4vlmam7xEh5QzG9w.png

aQPcVhfRNzqUEcXlg0sasGiT.jpeg

aQPcVhfRNzqUEcXlg0sasGiT.jpeg

NQ9SJxGGDNrpemCwzip3TtNx.png

NQ9SJxGGDNrpemCwzip3TtNx.png

fAyahwTi1mrs9ClWR4q25CNY.png

fAyahwTi1mrs9ClWR4q25CNY.png

i4dL11QVCTrG1BgwRmgt44ZO.png

i4dL11QVCTrG1BgwRmgt44ZO.png

uMnM0mgCRnRO3eN9YIeayqKa.png

uMnM0mgCRnRO3eN9YIeayqKa.png

TmZgv3qwgIqSFbuvn1NsRbJy.png

TmZgv3qwgIqSFbuvn1NsRbJy.png

b75QsbEAwSKixx4aLPOSKl1F.gif

b75QsbEAwSKixx4aLPOSKl1F.gif

FpfYsueTLR2QTCXTcLpVmxo8.png

FpfYsueTLR2QTCXTcLpVmxo8.png

iwtCy09KJHgdxaKuW1Iopp2n.png

iwtCy09KJHgdxaKuW1Iopp2n.png

uXPWApgb2Z3HtCFU4sJ5ymbF.png

uXPWApgb2Z3HtCFU4sJ5ymbF.png

7HO17J6jmYKABkj3CNA2kIAN.png

7HO17J6jmYKABkj3CNA2kIAN.png

JEPTCvupJbTTArN520sZqcSN.png

JEPTCvupJbTTArN520sZqcSN.png

SHfQEe0qb9zDAK5bz5mx1U99.png

SHfQEe0qb9zDAK5bz5mx1U99.png

Nap66caq6Mbo47Pmtj1g13cr.png

Nap66caq6Mbo47Pmtj1g13cr.png

Sgh666MgCJglK1KPFsPuDoGG.png

Sgh666MgCJglK1KPFsPuDoGG.png