| from prodiapy import Custom |
| from prodiapy.util import load |
| from PIL import Image |
| from threading import Thread |
| from utils import image_to_base64 |
| import gradio as gr |
| import gradio_user_history as gr_user_history |
| import os |
|
|
| pipe = Custom(os.getenv("PRODIA_API_KEY")) |
|
|
|
|
| def txt2img(prompt, negative_prompt, model, steps, sampler, cfg_scale, width, height, seed, batch_count, profile: gr.OAuthProfile | None): |
| total_images = [] |
| threads = [] |
|
|
| def generate_one_image(): |
| result = pipe.create( |
| "/sd/generate", |
| prompt=prompt, |
| negative_prompt=negative_prompt, |
| model=model, |
| steps=steps, |
| cfg_scale=cfg_scale, |
| sampler=sampler, |
| width=width, |
| height=height, |
| seed=seed |
| ) |
| job = pipe.wait_for(result) |
| total_images.append(job['imageUrl']) |
|
|
| for x in range(batch_count): |
| t = Thread(target=generate_one_image) |
| threads.append(t) |
| t.start() |
|
|
| for t in threads: |
| t.join() |
|
|
| for image in total_images: |
| gr_user_history.save_image(label=prompt, image=Image.open(load(image)), profile=profile) |
|
|
| return gr.update(value=total_images, preview=False) |
|
|
|
|
| def img2img(input_image, denoising, prompt, negative_prompt, model, steps, sampler, cfg_scale, width, height, seed, |
| batch_count): |
| if input_image is None: |
| return |
|
|
| total_images = [] |
| threads = [] |
|
|
| def generate_one_image(): |
| result = pipe.create( |
| "/sd/transform", |
| imageData=image_to_base64(input_image), |
| denoising_strength=denoising, |
| prompt=prompt, |
| negative_prompt=negative_prompt, |
| model=model, |
| steps=steps, |
| cfg_scale=cfg_scale, |
| sampler=sampler, |
| width=width, |
| height=height, |
| seed=seed |
|
|
| ) |
| job = pipe.wait_for(result) |
| total_images.append(job['imageUrl']) |
|
|
| for x in range(batch_count): |
| t = Thread(target=generate_one_image) |
| threads.append(t) |
| t.start() |
|
|
| for t in threads: |
| t.join() |
|
|
| return gr.update(value=total_images, preview=False) |
|
|
|
|
| def upscale(image, scale, profile: gr.OAuthProfile | None): |
| if image is None: |
| return |
|
|
| job = pipe.create( |
| '/upscale', |
| imageData=image_to_base64(image), |
| resize=scale |
| ) |
| image = pipe.wait_for(job)['imageUrl'] |
| gr_user_history.save_image(label=f'upscale by {scale}', image=Image.open(load(image)), profile=profile) |
|
|
| return image |
|
|