File size: 3,146 Bytes
9b7a547
e5df579
9b7a547
dd27f57
568361d
9b7a547
dd27f57
f5815bd
9b7a547
dd27f57
 
 
 
e5df579
9b7a547
 
 
e5df579
 
 
568361d
 
 
e5df579
 
 
dd27f57
9b7a547
 
568361d
 
dd27f57
9b7a547
 
 
179bebc
dd27f57
9b7a547
 
 
dd27f57
 
 
e5df579
dd27f57
9b7a547
 
 
 
 
 
 
e5df579
568361d
e5df579
568361d
e5df579
dd27f57
e5df579
b622977
 
e5df579
9b7a547
dd27f57
c1039cb
6303e29
179bebc
05115bb
 
 
179bebc
 
 
dd27f57
 
e5df579
568361d
dd27f57
 
 
 
9b7a547
dd27f57
 
e5df579
dd27f57
 
179bebc
 
 
 
05115bb
179bebc
05115bb
179bebc
 
 
7f17f6f
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import os
import time
import requests
import gradio as gr
import uuid

# Hugging Face API
HF_API_KEY = os.getenv("HF_TOKEN")

# Chevereto API
CHEVERETO_API_URL = os.getenv("API_URL")
CHEVERETO_API_KEY = os.getenv("API_KEY")
CHEVERETO_ALBUM_ID = os.getenv("ALBUM_ID")
EXPECTED_API_KEY = os.getenv("API_PASS")

HEADERS = {"Authorization": f"Bearer {HF_API_KEY}"}

def generate_random_filename(extension: str) -> str:
    return str(uuid.uuid4()) + extension

def validate_api_key(api_key: str) -> bool:
    return api_key == EXPECTED_API_KEY

def generate_image(prompt: str, model_name: str):
    hf_api_url = f"https://api-inference.huggingface.co/models/{model_name}"
    response = requests.post(hf_api_url, headers=HEADERS, json={"inputs": prompt})
    
    if response.status_code == 200:
        image_data = response.content
        random_filename = generate_random_filename(".png")
        image_path = f"/tmp/{random_filename}"

        with open(image_path, "wb") as f:
            f.write(image_data)

        time.sleep(10)  # 10-second delay
        return image_path
    else:
        return f"Error generating image: {response.text}"

def upload_to_chevereto(image_path: str):
    with open(image_path, "rb") as img_file:
        files = {"source": img_file}
        data = {"key": CHEVERETO_API_KEY, "format": "json", "album_id": CHEVERETO_ALBUM_ID, "expiration": "PT10M"}
        
        response = requests.post(CHEVERETO_API_URL, files=files, data=data)
    
    if response.status_code == 200:
        return response.json().get("image", {}).get("url")
    else:
        return f"Error uploading image: {response.text}"

def generate_and_upload(prompt: str, model_name: str, api_key: str):
    if not validate_api_key(api_key):
        return "Invalid or missing API key", ""
    
    img_path = generate_image(prompt, model_name)
    if "Error" in img_path:
        return img_path, ""
    
    url = upload_to_chevereto(img_path)
    return img_path, url

# Gradio UI
with gr.Blocks(theme='NoCrypt/miku') as app:
    gr.HTML(
        """
        
        <h1 style='text-align: center; color: red; font-size: 20px; font-weight: bold;'>♥ Tasia API on Marty Space ♥</h1>
        
        """
    )

    with gr.Row():
        prompt_input = gr.Textbox(label="Enter a prompt:", placeholder="A futuristic spaceship...")
        model_input = gr.Textbox(label="Enter model name:", placeholder="stabilityai/stable-diffusion-3.5-large")
        api_key_input = gr.Textbox(label="Enter your API key:", type="password", placeholder="Your secret API key")
        generate_button = gr.Button("Generate & Upload")
    
    image_output = gr.Image(label="Generated Image")
    url_output = gr.Textbox(label="Image URL", interactive=False)

    generate_button.click(
        fn=generate_and_upload,
        inputs=[prompt_input, model_input, api_key_input],
        outputs=[image_output, url_output]
    )

    # Footer
    gr.HTML(
        """
        
        <h1 style='text-align: center; color: red; font-size: 20px; font-weight: bold;'>♥ Made by Tasia with ♥</h1>
        
        """
    )

app.launch(server_port=7860)