前回に引き続きWebuiをブラウザから使うと切り替えが面倒な処理をバッチ処理にしてみました。
今回はサンプリングメソッドの効果を確認するためのバッチ処理です
前提条件とか使い方のイメージは前回の記事を見てください
サンプルコード
画像の出力枚数は モデル数 x サンプリングメソッド数 x batchCount
TODOの個所を好みで変更してください。
# Stable diffusion Web UI をPythonから実行
# 注意点:エラー処理をまったく入れていないのでGUIで出力可能な設定を調べてから設定してください
import webuiapi
import datetime
import os
# -------------------------------------------------------------------------------------------------------------
#
# - 生成条件 -
# TODO:ベースプロンプト:よく使うプロンプトを入れてください
myBasePrompt = "(masterpiece, best quality:1.2)"
#TODO:追加プロンプト:よく切り替える部分を入れてください。プロンプトはベース+追加で指定されます
myPrompt="pretty face:1.3, glasses, anime, (makeup,lipstick,eyeliner,mascara,eyeshadow:1.1),dark skin,maid, maid apron, maid headdress,nipples, small boobs,spread legs,cum in mouth,cryingtears,facial,cum in pussy,excessive cum"
# サンプリングメソッドの違いを見るにはseed固定がよいのではないか
mySeed = 65535
myNegativePrompt ="worst quality, low quality, normal quality, ugly, out of focus, blurry, bad anatomy, missing arms, deformed mutated disfigured, mutated hands, missing fingers, inaccurate limb, deformed eyes, disconnected limbs, animal ear, multiple legs, malformation, multiple arm, EasyNagative"
myHeight = 768
# TODO:インストール済みのモデルのうちどれを出すか定義する
executeModels=[
'yabalMix_v5.safetensors [a21055baa2]',
'AOM3.safetensors [d124fc18f0]',
'anything-v4.0-pruned.safetensors [69528490df]',
'bra_v5.safetensors [ac68270450]',
'majicmixRealistic_v4.safetensors [d819c8be6b]',
'xeroxrealmix_v35.safetensors [d7700eac56]'
]
# TODO:好きな出力先フォルダを指定
outputPath="./"
# TODO:1つのモデルに対して出力するファイル数
batchCount = 3
# -------------------------------------------------------------------------------------------------------------
api = webuiapi.WebUIApi()
#現在のモデル取得→後で元に戻す
restoreModel = api.util_get_current_model()
print(restoreModel)
# 入っているモデルを調べるときにプリントしてみる
#myModels = api.util_get_model_names()
# print( executeModels )
# sampling methodは使えるものすべて試す
mySamplers = api.get_samplers()
# 全体スタート
#フォルダ作成
startTime = datetime.datetime.now()
imageFolder = outputPath + startTime.strftime("%Y%m%d_%H%M%S")
print( "Create Folder:" + imageFolder )
os.mkdir( imageFolder )
# モデルぶん回す
for currentModel in executeModels:
# set model (use exact name)
api.util_set_model( currentModel )
# sampler数ぶん回す
for mySampler in mySamplers:
# バッチ数ぶん回す
seqNo = 0
# print("sampler=" + mySampler["name"])
for outputCount in range( batchCount ):
resultApi = api.txt2img( prompt= myBasePrompt + myPrompt,seed = mySeed, negative_prompt = myNegativePrompt, sampler_index = mySampler["name"], height=myHeight )
# ファイル名はモデル名+日時+連番→自由に
curTime = datetime.datetime.now()
imageName = imageFolder + "/" + currentModel + "_" + mySampler["name"] + "-" + str(seqNo) + ".png"
seqNo = seqNo + 1
print("Create File:" + imageName)
resultApi.image.save( imageName.replace(' ','') )
# モデルを元に戻す
api.util_set_model( restoreModel )