|
import os |
|
import requests |
|
import gradio as gr |
|
|
|
|
|
HF_API_URL = "https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-3.5-large" |
|
HF_API_KEY = os.getenv("HF_API_KEY") |
|
|
|
|
|
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 Chevereto URL""" |
|
img_path = generate_image(prompt) |
|
if "Error" in img_path: |
|
return img_path |
|
return upload_to_chevereto(img_path) |
|
|
|
|
|
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) |
|
|