だいたい長期休暇ごとになにか趣味開発をしていることが多いのですけど、今回はStable diffusion web uiのランダム解像度出力のスクリプトを組んでみました。
ランダムといっても、完全にどんな解像度が出るか分からないというわけではなく、指定されている中のどのサイズになるかは分からないというようなものです。
GitHub - IkariOkuto/sd-webui-RandomResolution: random resolution for stable diffusion web ui
random resolution for stable diffusion web ui . Contribute to IkariOkuto/sd-webui-RandomResolution development by creating an account on GitHub.
初めはExtensionで実装する予定だったのですが、batch_preprocessでの解像度変更は想定されていないというか、暗黙の了解として変更できないような状態だったため、Scriptの作成という形になりました。そもそものbatchという意味を考えれば、画像サイズを変更できないのは道理ではあります。
batchカウント分の処理を行うのではありますが、実質的にはrunを複数回実行しているようなものなので、単純にbatch countを増やした出力に比べるとおそらく遅い処理になります。そのため、単純に効率で言えば、個々に出力したほうがいいわけですが、ものぐさな感じで大量生成したい場合には役立つかもしれません。
作り始めてからGradioが動的で可変な数のスライダー生成等に対応していないことを知り、なんやかんやpythonやGradioやwebuiのscriptの仕様を調べていった結果、コード量のわりにやたらと製作時間がかかってしまいました。しっかり学んだ人には当然のことだったのかもしれないですけど、pythonの複数変数returnってカラムと同値なんですね。リストに関数を入れ込んだりして、pythonって無茶苦茶な言語だなと思ったりなんたり。