Spaces:
Sleeping
Sleeping
File size: 3,230 Bytes
9b7a547 dd27f57 568361d 9b7a547 dd27f57 9b7a547 f5815bd 9b7a547 dd27f57 568361d 9b7a547 568361d dd27f57 9b7a547 dd27f57 9b7a547 568361d dd27f57 9b7a547 dd27f57 9b7a547 dd27f57 9b7a547 568361d dd27f57 b622977 9b7a547 dd27f57 568361d dd27f57 9b7a547 dd27f57 568361d 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
import os
import requests
import gradio as gr
import uuid
import ps
# 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")
def generate_random_filename(extension: str) -> str:
"""Generates a random filename with the given extension"""
return str(uuid.uuid4()) + extension # Example: 'b3d50c6d-bfdb-4c4b-b8c4-3a2e3c3c07d9.png'
# Set your app's secret API key here (you can also load it from the environment)
EXPECTED_API_KEY = os.getenv("API_PASS") # or use a hardcoded key for now
HEADERS = {"Authorization": f"Bearer {HF_API_KEY}"}
def validate_api_key(api_key: str) -> bool:
"""Validates the provided API key"""
return api_key == EXPECTED_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
random_filename = generate_random_filename(".png")
image_path = f"/tmp/{random_filename}"
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, api_key: str):
"""Validates API key, generates image, and uploads it to Chevereto"""
if not validate_api_key(api_key):
return "Invalid or missing API key", "" # Return an error message
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...")
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, api_key_input],
outputs=[image_output, url_output]
)
app.launch(server_port=7860, share=True)
|