use_prompt - use prompt from data['prompt']

use ; in prompt as delimiter
bugfix gen
readme
This commit is contained in:
Mikhail Guseletov 2023-07-04 12:19:51 +07:00
parent 71f2bdceca
commit dd9b8aa4fd
2 changed files with 116 additions and 85 deletions

View File

@ -13,6 +13,8 @@ cd C:\stable-diffusion-webui\extensions\sd_telegram\
python bot.py python bot.py
`````` ``````
use ; in prompt as delimiter to be divided into several separate parts, like ```cat;dog;car```
Commands Commands
**start** **start**
_**SD** _**SD**
@ -24,6 +26,8 @@ change JSON parameters
img_thumb/img_tg/img_real - little/original from tg/real size from doc img_thumb/img_tg/img_real - little/original from tg/real size from doc
___**reset_param** ___**reset_param**
reset to default reset to default
___**fast_param**
reset to my default params
__**scrpts** __**scrpts**
___**get_lora** ___**get_lora**
get list LORA`s from stable-diffusion-webui/models/Lora get list LORA`s from stable-diffusion-webui/models/Lora

83
bot.py
View File

@ -64,7 +64,8 @@ data['sampler_name'] = 'Euler a'
dataParams = {"img_thumb": "true", dataParams = {"img_thumb": "true",
"img_tg": "true", "img_tg": "true",
"img_real": "true", "img_real": "true",
"stop_sd": "true"} "stop_sd": "true",
"use_prompt": "true"}
dataOld = data.copy() dataOld = data.copy()
dataOldParams = dataParams.copy() dataOldParams = dataParams.copy()
dataOrig = data.copy() dataOrig = data.copy()
@ -410,12 +411,14 @@ async def rnd_script(message, typeScript):
elements = api.get_samplers() elements = api.get_samplers()
numbers = list(range(len(elements))) numbers = list(range(len(elements)))
random.shuffle(numbers) random.shuffle(numbers)
dataPromptOld = data['prompt']
await bot.send_message( await bot.send_message(
chat_id=chatId, chat_id=chatId,
text='Цикл по '+str(len(elements)) + (' моделям' if typeScript == 'models' else ' семплерам') text='Цикл по '+str(len(elements)) + (' моделям' if typeScript == 'models' else ' семплерам') + ', ' + dataPromptOld
) )
for i, number in enumerate(numbers): for i, number in enumerate(numbers):
time.sleep(2)
for itemTxt in data['prompt'].split(';'):
if typeScript == 'models': if typeScript == 'models':
api.util_wait_for_ready() api.util_wait_for_ready()
api.util_set_model(elements[number]) api.util_set_model(elements[number])
@ -424,16 +427,18 @@ async def rnd_script(message, typeScript):
options['sampler_name'] = elements[number]['name'] options['sampler_name'] = elements[number]['name']
api.set_options(options) api.set_options(options)
data['sampler_name'] = elements[number]['name'] # Ý data['sampler_name'] = elements[number]['name'] # Ý
data["use_async"] = False data["use_async"] = "False"
res = api.txt2img(**data) data['prompt'] = itemTxt
res = await api.txt2img(**data)
await show_thumbs(chatId, res) await show_thumbs(chatId, res)
await bot.send_message( await bot.send_message(
chat_id=chatId, chat_id=chatId,
text=elements[number] if typeScript == 'models' else elements[number]['name'] text=elements[number] if typeScript == 'models' else elements[number]['name']
) )
data['prompt'] = dataPromptOld
await bot.send_message( await bot.send_message(
chat_id=chatId, chat_id=chatId,
text="Готово \n"+str(data['prompt']) + text="Готово \n"+str(dataPromptOld) +
"\n cfg_scale = " + str(data['cfg_scale']) + "\n cfg_scale = " + str(data['cfg_scale']) +
"\n width = " + str(data['width']) + "\n width = " + str(data['width']) +
"\n height = " + str(data['height']) + "\n height = " + str(data['height']) +
@ -598,14 +603,16 @@ async def inl_gen(message: Union[types.Message, types.CallbackQuery]) -> None:
else: else:
chatId = message.message.chat.id chatId = message.message.chat.id
global sd global sd
dataPromptOld = data['prompt']
if sd == '': if sd == '':
keyboard = InlineKeyboardMarkup(inline_keyboard=[getSet(0), getOpt(0), getStart(0)]) for itemTxt in data['prompt'].split(';'):
msgTime = await bot.send_message( msgTime = await bot.send_message(
chat_id=chatId, chat_id=chatId,
text='Начали' text='Начали'
) )
# Включаем асинхрон, чтоб заработал await api.txt2img # Включаем асинхрон, чтоб заработал await api.txt2img
data["use_async"] = "True" data["use_async"] = "True"
data["prompt"] = itemTxt # только для **data
asyncio.create_task(getProgress(msgTime)) asyncio.create_task(getProgress(msgTime))
# TODO try catch if wrong data # TODO try catch if wrong data
res = await api.txt2img(**data) res = await api.txt2img(**data)
@ -624,12 +631,17 @@ async def inl_gen(message: Union[types.Message, types.CallbackQuery]) -> None:
) )
await bot.send_message( await bot.send_message(
chat_id=chatId, chat_id=chatId,
text=data["prompt"] + "\n" + str(res.info["all_seeds"]), text=data["prompt"] + "\n" + str(res.info["all_seeds"])
reply_markup=keyboard,
parse_mode="Markdown",
) )
# Удаляем сообщение с прогрессом # Удаляем сообщение с прогрессом
await bot.delete_message(chat_id=msgTime.chat.id, message_id=msgTime.message_id) await bot.delete_message(chat_id=msgTime.chat.id, message_id=msgTime.message_id)
keyboard = InlineKeyboardMarkup(inline_keyboard=[getSet(0), getOpt(0), getStart(0)])
await bot.send_message(
chat_id=chatId,
text=f"`{dataPromptOld}`",
reply_markup=keyboard,
parse_mode="Markdown",
)
else: else:
keyboard = InlineKeyboardMarkup(inline_keyboard=[getSet(0), getOpt(0), getStart(0)]) keyboard = InlineKeyboardMarkup(inline_keyboard=[getSet(0), getOpt(0), getStart(0)])
await getKeyboardUnion("Turn on SD"+sd, message, keyboard) await getKeyboardUnion("Turn on SD"+sd, message, keyboard)
@ -732,7 +744,6 @@ async def inl_rnd_mdl(message: Union[types.Message, types.CallbackQuery]) -> Non
print('inl_rnd_mdl') print('inl_rnd_mdl')
await rnd_script(message, 'models') await rnd_script(message, 'models')
# script random gen from models # script random gen from models
@dp.message_handler(commands=["rnd_smp"]) @dp.message_handler(commands=["rnd_smp"])
@dp.callback_query_handler(text='rnd_smp') @dp.callback_query_handler(text='rnd_smp')
@ -740,23 +751,9 @@ async def inl_rnd_smp(message: Union[types.Message, types.CallbackQuery]) -> Non
print('inl_rnd_smp') print('inl_rnd_smp')
await rnd_script(message, 'samplers') await rnd_script(message, 'samplers')
# script random infinity gen from https://random-word-api.herokuapp.com/word?lang=en # inf function
@dp.message_handler(commands=["inf"]) async def inf_func(chatId):
@dp.callback_query_handler(text='inf') print('inf_func')
async def inl_rnd_inf(message: Union[types.Message, types.CallbackQuery]) -> None:
print('inl_rnd_inf')
if hasattr(message, "content_type"):
chatId = message.chat.id
else:
chatId = message.message.chat.id
while True:
time.sleep(2)
# PROMPT
t = requests.get('https://random-word-api.herokuapp.com/word?lang=en').text
text = json.loads(t)[0] # data["prompt"] # from JSON
prompt = get_random_prompt(text, 20)
prompt_lxc = random.choice(submit_get('https://lexica.art/api/v1/search?q=' + prompt, '').json()['images'])['prompt']
data['prompt'] = prompt + ', ' + prompt_lxc
# SCALE # SCALE
data['cfg_scale'] = round(random.uniform(4.7, 15), 1) data['cfg_scale'] = round(random.uniform(4.7, 15), 1)
# STEPS # STEPS
@ -793,6 +790,36 @@ async def inl_rnd_inf(message: Union[types.Message, types.CallbackQuery]) -> Non
parse_mode=types.ParseMode.HTML parse_mode=types.ParseMode.HTML
) )
# script random infinity gen from https://random-word-api.herokuapp.com/word?lang=en
@dp.message_handler(commands=["inf"])
@dp.callback_query_handler(text='inf')
async def inl_rnd_inf(message: Union[types.Message, types.CallbackQuery]) -> None:
print('inl_rnd_inf')
if hasattr(message, "content_type"):
chatId = message.chat.id
else:
chatId = message.message.chat.id
if str(dataParams['use_prompt']).lower() == 'true':
await bot.send_message(
chat_id=chatId,
text='use_prompt включен, будет использоваться промпт ' + data['prompt']
)
while True:
# PROMPT
if str(dataParams['use_prompt']).lower() == 'false':
t = requests.get('https://random-word-api.herokuapp.com/word?lang=en').text
text = json.loads(t)[0] # data["prompt"] # from JSON
prompt = get_random_prompt(text, 20)
prompt_lxc = random.choice(submit_get('https://lexica.art/api/v1/search?q=' + prompt, '').json()['images'])['prompt']
data['prompt'] = prompt + ', ' + prompt_lxc
await inf_func(chatId)
else:
dataPromptOld = data['prompt']
for itemTxt in data['prompt'].split(';'):
data['prompt'] = itemTxt
await inf_func(chatId)
data['prompt'] = dataPromptOld
# Получить LORA # Получить LORA
@dp.message_handler(commands=["get_lora"]) @dp.message_handler(commands=["get_lora"])
@dp.callback_query_handler(text="get_lora") @dp.callback_query_handler(text="get_lora")