nohat / app.py
Nima nazari
Update app.py
8f70b42 verified
import json
import os
import time
import random
import gradio as gr
import numpy as np
import requests
from PIL import Image
print ("1")
URL = "http://0.0.0.0:8188/prompt"
INPUT_DIR = "input"
OUTPUT_DIR = "output"
cached_seed = 0
def get_latest_image(folder):
files = os.listdir(folder)
image_files = [f for f in files if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
image_files.sort(key=lambda x: os.path.getmtime(os.path.join(folder, x)))
latest_image = os.path.join(folder, image_files[-1]) if image_files else None
return latest_image
print ("2")
def start_queue(prompt_workflow):
p = {"prompt": prompt_workflow}
data = json.dumps(p).encode('utf-8')
requests.post(URL, data=data)
print ("3")
def generate_image(input_image):
with open("workflow.json", "r") as file_json:
prompt = json.load(file_json)
print ("4")
prompt["3"]["inputs"]["seed"] = random.randint(1, 1500000)
global cached_seed
if cached_seed == prompt["3"]["inputs"]["seed"]:
return get_latest_image(OUTPUT_DIR)
cached_seed = prompt["3"]["inputs"]["seed"]
print ("5")
image = Image.fromarray(input_image)
min_side = min(image.size)
scale_factor = 512 / min_side
new_size = (round(image.size[0] * scale_factor), round(image.size[1] * scale_factor))
resized_image = image.resize(new_size)
print ("6")
resized_image.save(os.path.join(INPUT_DIR, "test_api.jpg"))
previous_image = get_latest_image(OUTPUT_DIR)
start_queue(prompt)
print ("7")
while True:
print ("8")
latest_image = get_latest_image(OUTPUT_DIR)
if latest_image != previous_image:
return latest_image
print ("9")
time.sleep(1)
demo = gr.Interface(fn=generate_image, inputs=["image"], outputs=["image"])
demo.launch(share=True)
print ("10")