見出し画像

ComfyUIのカスタムノードを作成してみた話@GPT&paperspace

ここ数日、画像のアスキーアート化についてスクリプトをいじりつつ色々と遊んでいました。
その中でComfyUIのカスタムノードにしてみたくなって、色々試してみました。
これはかなり手ごわかったですが、GPTとやり取りしながらなんとかカスタムノードとして動かすことが出来ました。
※私自身はパイソンスクリプトは基本GPTまかせで、アプリ開発などはしたことがない中での話なので、ご了承ください。また、安定したらGithubなどで公開とかまで行きたいですが、今回は自作のプログラムを実装するという内容の記事になります。

結論は以下です。

そこそこ時間がかかったけど、上手くいった時の達成感はとても大きい!!

参考までにこんな感じのノードが出来ました。。。。
これが出来上がるまで、およそ3日程度かかりました。。。
前に記事にした、画像をアスキーアート化するというものです。

カラー化したアスキーアート:まだ色の調整がいまいちな感じ

<実際にやってみて、つまずきやすいと感じたところ>

①カスタムノードのインストール問題
元々あるGPTsを使用すると、ここは回避できる可能性がありますが、自分で知識ファイルを上げてみたGPTsだといきなり躓きました。。。

⇒解決方法は、「知識ファイルを確認して解決して」を繰り返す
10回ぐらいすると上手くいきました(※既存のGPTsだと一発で成功しましたので、色々だと思います)

init.pyとノードで使用するスクリプトの最初のところがうまく認識されない場合に、インストールが上手くいかない模様

ComfyUIのGithubにある、node.pyや、カスタムノードのところにある例を知識ファイルとして使用しました、

②入出力に関するエラー
これが厄介でした。今後、別にカスタムノードを作成する際の参考に備忘録的に記載しておきます。

例えば、元画像として上の画像を使用しましたが、これは1024x1024のカラー画像です。

これがload imageから入力として受け取った torch.Tensor の形状は [1, 1024, 1024, 3]になります。
最初の1は「バッチ数」、途中の二つは解像度、最後の3は「チャンネル数」でRGBだと3になります。

今回のスクリプトだと、これをPIL.Imageに変換して、画像処理をするようにしていたので、この型の特定と修正に時間がかかりました。
GPTに指示を出す際は、適切に4項目の内容を認識するように指定しないと、適当に扱ったりします。
また、出力は、入力と逆にtorch.Tensor に直す必要があります。
そのため、入力でエラーを吐いた場合、それを直したら、出力のエラーになります。

⇒今回は、上のフローにもあるように、ComfyUIのデフォルトノードの「Load image」と「Save image」を使用していますので、Githubのnode.pyからそのコードだけコピーして、「この型に合わせるようにして」みたいな感じで指示を出しました。

エラー文をはりつけるだけの作業だと、同じようなエラーが繰り返されてこのあたりがなかなかスムーズにいかない可能性があります。

一応、コントロールネットのプリプロセッサーのノードのスクリプトを知識ファイルとして追加し、参照させていましたが、これの効果については良く分かりません。

また、パスの設定がうまく行かないパターンにハマると沼る可能性があります。今回は、ノードから入力してしていする形にしました。

<カスタムノードの壁打ち方法的なもの>

今回はpaperspaceで行いました。
カスタムノード自体は一つのフォルダ内で完結していますので、実行してエラーが出たら書き直すという繰り返しになりました。

Paperspaceだと、スクリプトを書き換えてから更新され保存されるまで少し時間がかかります。
そのタイミングを見つつ、ComfyUIを再起動してカスタムノードを実行し、エラー文を確認するというやりとりになりました。

目安?
カスタムノードのインストールのエラーの改善 ⇒ 10回程度
カスタムノードの入力に関するエラーの改善 ⇒ 10-20回
カスタムノードの出力に関するエラーの改善 ⇒ 5回

ちなみに、Githubサイトを見ると、高機能なものを作成されている方がおられることが分かりましたので、参考まで。




この記事が気に入ったらサポートをしてみませんか?