File size: 2,523 Bytes
110b988
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2a28f67
110b988
69bbb68
 
110b988
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import gradio as gr
import requests
import base64
from PIL import Image, ImageDraw
import io
import random

url = "http://73.255.78.150:7909/sdapi/v1/img2img"
session_seed, last_session_seed = None, None

def generate_image(prompt, steps, reset_seed, increment_seed, image_file=None):
    global session_seed, last_session_seed

    if reset_seed:
        last_session_seed, session_seed = session_seed, -1 if session_seed != -1 else None
    elif not reset_seed and last_session_seed is not None:
        session_seed = last_session_seed
    elif session_seed is None:
        session_seed = random.randint(0, 10000)

    if increment_seed and session_seed != -1:
        session_seed += 1

    init_image_value = ""
    if image_file:
        image_data = image_file.read()
        encoded_image = base64.b64encode(image_data).decode("utf-8")
        init_image_value = "data:image/jpeg;base64," + encoded_image

    payload = {
        "init_image": init_image_value,
        "prompt": prompt,
        "steps": steps,
        # ... rest of the predefined parameters ...
    }

    response = requests.post(url, json=payload)
    response_data = response.json()

    try:
        image = Image.open(io.BytesIO(base64.b64decode(response_data['images'][0])))
        return image
    except KeyError:
        error_message = response_data.get('error', 'Unknown error')
        error_image = Image.new('RGB', (512, 512), color=(73, 109, 137))
        d = ImageDraw.Draw(error_image)
        d.text((10, 10), f"Error: {error_message}", fill=(255, 255, 0))
        return error_image

def main_interface():
    with gr.Blocks() as main_blocks:
        with gr.Row():
            img_output = gr.Image(label="Generated Image")
        with gr.Row():
            with gr.Column():
                prompt_input = gr.Textbox(lines=2, placeholder="Imagine something...", label="Prompt")
                steps_input = gr.Slider(minimum=15, maximum=50, step=15, default=5, label="Steps")
                image_input = gr.File(label="Upload Image")
            with gr.Column():
                reset_seed_input = gr.Checkbox(label="Randomize Composition")
                increment_seed_input = gr.Checkbox(label="New Composition")

    iface = gr.Interface(
        fn=generate_image,
        inputs=[prompt_input, steps_input, reset_seed_input, increment_seed_input, image_input],
        outputs=[img_output],
        live=False,
        layout=main_blocks
    )
    iface.launch()

if __name__ == "__main__":
    main_interface()