File size: 2,413 Bytes
9b7a547
 
dd27f57
9b7a547
dd27f57
9b7a547
f5815bd
9b7a547
dd27f57
 
 
 
9b7a547
 
 
dd27f57
 
9b7a547
dd27f57
9b7a547
 
dd27f57
 
9b7a547
 
 
dd27f57
9b7a547
 
 
dd27f57
 
 
 
 
 
9b7a547
 
 
 
 
 
 
dd27f57
b622977
dd27f57
 
b622977
 
 
 
9b7a547
dd27f57
 
 
 
 
 
 
 
 
9b7a547
dd27f57
 
 
 
 
9b7a547
b622977
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 os
import requests
import gradio as gr

# Hugging Face API
HF_API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-3.5-large"
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")

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

def generate_image(prompt: str):
    """Generates an image using Hugging Face's API"""
    response = requests.post(HF_API_URL, headers=HEADERS, json={"inputs": prompt})
    
    if response.status_code == 200:
        image_data = response.content
        image_path = "/tmp/generated_image.png"

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

        return image_path
    else:
        return f"Error generating image: {response.text}"

def upload_to_chevereto(image_path: str):
    """Uploads the generated image to Chevereto and returns the URL"""
    with open(image_path, "rb") as img_file:
        files = {"source": img_file}
        data = {"key": CHEVERETO_API_KEY, "format": "json", "album": CHEVERETO_ALBUM_ID}
        
        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):
    """Combines image generation + upload and returns both the image path and Chevereto URL"""
    img_path = generate_image(prompt)
    if "Error" in img_path:
        return img_path, ""  # Return error message and empty string for URL
    
    url = upload_to_chevereto(img_path)
    return img_path, url  # Return the image path and the Chevereto URL

# Gradio UI
with gr.Blocks() as app:
    gr.Markdown("<h1 style='text-align: center; color: red;'>🚀 Star Trek AI Image Generator</h1>")
    with gr.Row():
        prompt_input = gr.Textbox(label="Enter a prompt:", placeholder="A futuristic spaceship...")
        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,
        outputs=[image_output, url_output]
    )

app.launch(server_port=7860, share=True)