
既存のGithubリポジトリの修正にNotebookLMを使用してみた話@Deforum
今回、初めてNotebookLMを使用してみました。
※NotebookLMは無料でも使用できます。
有料だとPlusになるようです。

Youtubeなどで「とても便利!」とされていて興味自体はあったのですが、使用用途が思いついていない状態でしたので放置していました。
私の把握しているNotebookLMの内容は、複数の文献や論文などの解説に便利というものでした。
今回のスクリプトの解析みたいなところについては記事が少ない(GPT調べ)ようで、その部分を試してみました。
最初に結論を挙げておきます。
これは凄い便利かも!
※GPTしか使っていない場合
<経緯>
今回、「Deforum」というアプリの修正を行っている際に、これを使うのは便利ではないかと考え、試してみて最初にやっておけば良かったなーと痛感したという話です。
※NotebookLMに行き着く前に3日ほどGPT壁打ちを行い行き詰まりつつあったという中で行った感想になります。
修正を行ったのは、以下のGithubリポジトリに公開されているものです。
複数のスクリプトが配置されており、Importとか、関数の参照とか入り乱れて、どこに修正を加えるのが良いか、専門家でない人間からするとわかりにくいものでした。
そのため、pyファイルをGPTに投げても、投げていないpyファイルが関連している場合はその部分が完全に抜けてしまう問題。また読み込むファイルに上限があり、その部分ではNotebookLMに劣ることがわかりました。
<以下が検討しているGithubリポジトリ>
deforum-art/sd-forge-deforum: Deforum extension for stable-diffusion-webui-forge

※注:NotebookLM自体は、pyファイルは対応していないので、GPTのようにpyファイルを投げ込んで解析とかはできませんでした。
しかし、以下のソースの追加のところで、上のリポジトリのpyファイルのページを指定して読み込むことが出来ました。

注にありますが、ウェブサイトに表示されているテキストがインポートされます。

そうすると、以下のようなページを指定すればスクリプトをインポートしたのとほぼ同じでは?となりますよね。

以下がすべてではないですが、大半のスクリプトのページをインポートした状態です。NotebookLMにもソース上限がありますが、ウェブページであれば、30とかは問題なくいけそうです。この検討では45だった。
これはGPTでは厳しい数(10個以上入れたら「推論の質が落ちます」みたいな表示が出たことがありました)。

<質問してみた>
現在、サンプラーとスケジューラについて修正を検討しているので、以下のような質問をしてみました。

以下が回答です。
Deforumでサンプラーを指定して画像を生成する際のスクリプトの処理について、ご質問ありがとうございます。以下に、①リストから指定した後、②Generateで生成を行う際の処理を分けて、詳細に解説します。
① サンプラーをリストから指定した後
•DeforumのUIでサンプラーを選択する際、sd-forge-deforum/scripts/deforum_helpers/ui_elements.py の create_gr_elem 関数が、Gradioの要素(この場合はドロップダウンリスト)を作成します。
•このドロップダウンリストの選択肢は、Stable Diffusion WebUI Forgeに登録されているサンプラーのリストから取得されます。
•sd-forge-deforum/scripts/deforum_helpers/ui_left.py の setup_deforum_left_side_ui 関数がUIのレイアウトを設定し、get_tab_keyframes 関数内でサンプラーのドロップダウンリストが作成されます。
•sd-forge-deforum/scripts/deforum_helpers/gradio_funcs.py にあるshow_when_ddim関数やshow_when_ancestral_samplers関数は、サンプラーの選択に応じて、UIの表示を切り替えます。例えば、DDIMサンプラーが選択された場合は、DDIM固有の設定項目が表示されます。
•選択されたサンプラーの名前は、GradioのUI要素を通して、Deforumの引数として保存されます。
② Generateで生成を行う際
1.引数の準備:
◦sd-forge-deforum/scripts/deforum_helpers/run_deforum.py の run_deforum 関数が、Generateボタンが押された際に最初に実行される関数です。
◦この関数内で、UIから入力されたすべての設定値が、args_dictという辞書に保存されます。これには、選択されたサンプラーの名前も含まれます。
◦sd-forge-deforum/scripts/deforum_helpers/args.pyで定義された引数(DeforumArgsやDeforumAnimArgsなど)が、この辞書から取り出され、SimpleNamespaceオブジェクトに変換されます。
2.Stable Diffusion Pipelineのセットアップ:
◦sd-forge-deforum/scripts/deforum_helpers/webui_sd_pipeline.py の get_webui_sd_pipeline 関数が、Stable Diffusionの画像生成パイプラインを初期化します。
◦この関数は、modules.processing.StableDiffusionProcessingImg2Img クラスのインスタンスを作成し、その設定にDeforumの引数を適用します。
◦ここで、p.sampler_name = args.sampler という行で、UIで選択されたサンプラーの名前が、Stable Diffusionのパイプラインに設定されます。
3.画像生成:
◦modules.processing.StableDiffusionProcessingImg2Img のインスタンスは、Stable Diffusion WebUI Forgeの内部ロジックを使って、実際に画像を生成します。
◦この時、p.sampler_nameに設定されたサンプラーが使用されます。
◦サンプラーに関する詳細な処理は、Stable Diffusion WebUI Forgeのコア部分で行われ、Deforumのスクリプト内では直接的な処理は行われません。
4.その他の処理:
◦生成された画像は、Deforumの出力設定に従って処理され、必要に応じて動画ファイルとして保存されます。
◦sd-forge-deforum/scripts/deforum_helpers/ui_right.py にある on_ui_tabs 関数で、生成された画像のプレビュー表示や、生成情報の保存などの処理が行われます。
まとめ
DeforumのUIでサンプラーを選択すると、その名前が設定として保存され、Generateボタンを押した際に、Stable Diffusion WebUI Forgeの画像生成パイプラインに渡されます。実際のサンプラーを使用した画像生成処理は、WebUI Forgeの内部で行われます。Deforumのスクリプトは、UIの構築、設定値の管理、および生成パイプラインの初期化を主に担当します。
⇒ これは凄いのでは?
<NotebookLMを併用したGithubリポジトリの修正の可能性>
Deforumなど、複数のスクリプトを含む場合では、修正を加えたい内容があるとして、あらかじめNotebookLMでそれに関連したスクリプトを選別し、この流れについての解説を知識として与えておけば、GPTでの精度が大きく上がることが想定されます。(※この記事を執筆中はまだ完成していない)
まだ、このようなことを試みている方は多くはないかも知れませんが、今回の試みを通じて、個人レベル(プログラマーでなくても)で生成AIを使用してオープンソースのプログラムを自分好みに変えていけるようになりつつあると感じました。