Stable Diffusion Web UIの解像度をSDXLにあわせたドロップダウンにする

Stable Diffusionの新しいバージョン、SDXLが出ています。
ただ、SDXLは大きい画像で学習しているためか、ちゃんとした画像を生成するにはそれなりの解像度を設定する必要があります。
ということで、Stable Diffusion Web UIの解像度設定をスライダーからドロップダウンにしてよさげな値を指定しやすくしてみました。

SDXLでは512x512で画像を生成すると、こういうパターンが生成されることが多くなります。

まともなものが生成されても、ちょっと画力低くないですかと言いたくなるものになってしまいます。

ということで、SDXLを使うときのオススメ解像度がいくつか出てきていますね。

https://www.reddit.com/r/StableDiffusion/comments/15c3rf6/sdxl_resolution_cheat_sheet/

アニメ画風のファインチューンモデル、Animagine XLでは次のような解像度がオススメされています。
https://huggingface.co/Linaqruf/animagine-xl

それで1344x768で生成されたのがこちら。SDXLらしさ!

プロンプトはこんな感じ

positive
twin tail, library, face focus, cute, masterpiece, best quality, 1girl, looking at viewer, upper body

negative
lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry

ただ、この解像度を覚えて指定するのが割と面倒ですね。
ということでStable Diffusion Web UIの解像度指定をドロップダウンに変更してみます。
modules/ui.py の442行目

width = gr.Slider(minimum=64, maximum=2048, step=8, label="Width", value=512, elem_id="txt2img_width")
height = gr.Slider(minimum=64, maximum=2048, step=8, label="Height", value=512, elem_id="txt2img_height")

↓ SliderをDropdownに。

width = gr.Dropdown(label = "Width", elem_id="txt2img_width", value="512", allow_custom_value=True, choices = [448,512,768,886,915,1024,1144,1182,1254,1344,1354,1564])
height = gr.Dropdown(label = "Height", elem_id="txt2img_height", value="512", allow_custom_value=True, choices = [448,512,768,886,915,1024,1144,1182,1254,1344,1354,1564])

ただ、そうすると解像度が文字列で渡ってしまってエラーになるので、intへ変換

modules/txt2img.py の33行目を修正

width=width,
height=height,

↓ intをつけます

width=int(width),
height=int(height),

これで指定がドロップダウンになります。