File size: 2,350 Bytes
dddb041
 
 
 
 
 
 
 
 
 
 
 
 
 
c49f67b
dddb041
c49f67b
 
 
 
 
dddb041
ab14713
c49f67b
1b088a5
 
 
 
 
 
 
 
 
 
c49f67b
 
 
1b088a5
ab14713
06fd0d1
bf71179
8669462
c49f67b
538d554
057bc07
 
 
 
 
 
 
 
a200bb2
 
1b088a5
057bc07
c133494
057bc07
c49f67b
 
057bc07
a200bb2
057bc07
c49f67b
057bc07
 
c03b3ba
057bc07
 
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
import gradio as gr
import requests
import io
from PIL import Image
import json
import os

# Load LoRAs from JSON
with open('loras.json', 'r') as f:
    loras = json.load(f)

# API call function
def query(payload, api_url, token):
    headers = {"Authorization": f"Bearer {token}"}
    print(f"Sending API request with payload: {payload}")
    response = requests.post(api_url, headers=headers, json=payload)
    if response.status_code == 200:
        return io.BytesIO(response.content)
    else:
        print(f"API Error: {response.text}")
        return None

# Define the function to run when the button is clicked
def run_lora(prompt, selected_lora_index):
    if selected_lora_index is not None:  # Check if selected_lora_index is not None
        selected_lora = loras[selected_lora_index]
        api_url = f"https://api-inference.huggingface.co/models/{selected_lora['repo']}"
        trigger_word = selected_lora["trigger_word"]
        token = os.getenv("API_TOKEN")
        payload = {"inputs": f"{prompt} {trigger_word}"}
        image_bytes = query(payload, api_url, token)
        if image_bytes:
            return Image.open(image_bytes)
    return "API Error or No LoRA selected"

# Placeholder for gallery.select function
def update_selection(selected):
    return selected,  # Return as a tuple

# Gradio UI
with gr.Blocks(css="custom.css") as app:
    title = gr.HTML("<h1>LoRA the Explorer</h1>")
    selected_state = gr.State(0)  # Initialize with the index of the first LoRA
    with gr.Row():
        gallery = gr.Gallery(
            [(item["image"], item["title"]) for item in loras],
            label="LoRA Gallery",
            allow_preview=False,
            columns=3
        )
        with gr.Column():
            prompt_title = gr.Markdown("### Click on a LoRA in the gallery to select it")
            with gr.Row():
                prompt = gr.Textbox(label="Prompt", show_label=False, lines=1, max_lines=1, placeholder="Type a prompt after selecting a LoRA")
                button = gr.Button("Run")
            result = gr.Image(interactive=False, label="Generated Image")

    gallery.select(
        update_selection,
        outputs=[selected_state]
    )
    button.click(
        fn=run_lora,
        inputs=[prompt, selected_state],
        outputs=[result]
    )

app.queue(max_size=20)
app.launch()