ai-qrcode / app.py
ciaochaos's picture
Update app.py
66a68b8
import asyncio
import io
import json
import os
import aiohttp
from PIL import Image
from dotenv import load_dotenv
load_dotenv()
import PIL
API_URL = os.getenv("API_URL")
API_KEY = os.getenv("API_KEY")
import gradio as gr
showDetailsBool = False
showSeedBool = False
anchor_styles = [
{
"value": 0,
"label": "Square",
},
{
"value": 1,
"label": "Circle",
},
{
"value": 2,
"label": "Minimal",
},
]
sizes = [
{
"label": "1152 × 1152",
"value": 768
},
{
"label": "1536 × 1536",
"value": 1024
},
]
correct_levels = [
{
"value": 1,
"label": "L (7%)",
},
{
"value": 0,
"label": "M (15%)",
},
{
"value": 3,
"label": "Q (25%)",
},
{
"value": 2,
"label": "H (30%)",
},
]
async def clean_block():
return gr.update(value='')
async def change_seed_block():
global showSeedBool
if not showSeedBool:
showSeedBool = not showSeedBool
return gr.update(visible=True)
else:
showSeedBool = not showSeedBool
return gr.update(value='-1', visible=False)
async def load_image_from_url(url):
async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session:
async with session.get(url) as response:
image_data = await response.read()
return Image.open(io.BytesIO(image_data))
async def greet(my_prompt, control_weight, correct_level, padding_ratio, hires_rate, point_style, my_seed, size):
url = API_URL
headers = {
'x-qrbtf-key': f'{API_KEY}',
}
full_response: str = ""
correct_level_value = correct_levels[correct_level]['value']
size_value = sizes[size]['value']
point_style_value = anchor_styles[point_style]['value']
is_hires = not (hires_rate < 0.01)
payload = {
'url': 'https://qrbtf.com/',
'prompt': my_prompt,
'controlnet_weight': control_weight,
'correct_level': correct_level_value,
'padding_ratio': padding_ratio,
'point_style': point_style_value,
'seed': my_seed,
'size': size_value,
'is_hires': is_hires,
'hires_rate': hires_rate,
}
async with aiohttp.ClientSession(headers=headers) as session:
async with session.post(url, json=payload, ssl=False) as response:
await asyncio.sleep(0)
async for (chunk, _) in response.content.iter_chunks():
chunk = json.loads(chunk.decode("utf-8"))
if chunk["type"] == "result":
data = chunk["data"]
url = data["download_url"]
print(url)
return await load_image_from_url(url)
return full_response
with gr.Blocks() as demo:
gr.Markdown("""
# QRBTF.AI API Demo
- [Join Discord](https://discord.gg/V9CNuqYfte)
- [Official website](https://qrbtf.com/)
""")
with gr.Row():
with gr.Column():
url = gr.Textbox(
label="URL",
placeholder="https://",
value="https://qrbtf.com/",
interactive=False
)
prompt = gr.Textbox(
label="Prompt",
placeholder="Enter a prompt here",
value="1girl, flowers, birds",
interactive=True
)
with gr.Accordion("More options", open=False):
with gr.Row():
seed = gr.Slider(
label="Seed",
minimum=-1,
maximum=9999,
step=1,
value=-1,
interactive=True,
)
ControlWeight = gr.Slider(0.5, 1.5, value=1.0, label="ControlNet weight", info="", interactive=True)
with gr.Row():
marginScale = gr.Slider(0, 0.5, value=0.2, label="Padding ratio", info="", interactive=True)
hiresRate = gr.Slider(0, 0.5, value=0, label="Image restoration rate", info="", interactive=True)
with gr.Row():
SizeSelection = gr.Dropdown(
[size['label'] for size in sizes], value=sizes[0]['label'], label="Size", type="index", interactive=True)
errorRate = gr.Dropdown(
[level['label'] for level in correct_levels], value=correct_levels[1]['label'], label="Error correction", type="index",
interactive=True)
with gr.Row():
promptsTuning = gr.Checkbox(label="Prompts tuning", value=True, interactive=True)
anchorStyle = gr.Dropdown(
[anchor['label'] for anchor in anchor_styles], value=anchor_styles[0]['label'], label="Anchor style", type="index", interactive=True)
with gr.Column():
with gr.Row():
btn = gr.Button(
"Call API",
variant="primary"
)
with gr.Row():
out = gr.Image(shape=(1, 1))
btn.click(greet, [prompt, ControlWeight, errorRate, marginScale, hiresRate, anchorStyle, seed, SizeSelection], out)
demo.launch()