xsigus24's picture
Upload folder using huggingface_hub
1d777c4
import base64
import io
import json
import logging
import os
import random
import requests
from PIL import Image, PngImagePlugin
try:
import extensions.telegram_bot.source.utils as utils
except ImportError:
import source.utils as utils
class SdApi:
def __init__(self, url="", sd_config_file_path=""):
if url.startswith("http"):
self.url = url
else:
self.url = "http://127.0.0.1:7860"
if os.path.exists(sd_config_file_path):
with open(sd_config_file_path, "r") as sd_config_file:
self.payload = json.loads(sd_config_file.read())
else:
self.payload = {"prompt": "", "steps": 15}
logging.info(f"### SdApi INIT DONE ###")
async def get_image(self, prompt: str):
return await self.txt_to_image(prompt)
@utils.async_wrap
def txt_to_image(self, prompt: str):
payload = self.payload.copy()
payload["prompt"] = prompt
response = requests.post(url=f"{self.url}/sdapi/v1/txt2img", json=payload)
response_json = response.json()
output_files = []
for i in response_json["images"]:
image = Image.open(io.BytesIO(base64.b64decode(i.split(",", 1)[0])))
png_payload = {"image": "data:image/png;base64," + i}
response2 = requests.post(url=f"{self.url}/sdapi/v1/png-info", json=png_payload)
output_file = str(random.random()) + ".png"
png_info = PngImagePlugin.PngInfo()
png_info.add_text("parameters", response2.json().get("info"))
image.save(output_file, pnginfo=png_info)
output_files.append(output_file)
return output_files