Spaces:
Sleeping
Sleeping
File size: 3,251 Bytes
9b7a547 e5df579 9b7a547 dd27f57 568361d 9b7a547 dd27f57 f5815bd 9b7a547 dd27f57 e5df579 9b7a547 e5df579 568361d e5df579 dd27f57 9b7a547 568361d dd27f57 9b7a547 e5df579 dd27f57 9b7a547 dd27f57 e5df579 dd27f57 9b7a547 e5df579 568361d e5df579 568361d e5df579 dd27f57 e5df579 b622977 e5df579 9b7a547 dd27f57 c1039cb f5c7c60 b347769 f5c7c60 dd27f57 e5df579 568361d dd27f57 9b7a547 dd27f57 e5df579 dd27f57 f5c7c60 b347769 f5c7c60 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 |
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-sekundowa przerwa
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.Markdown("<hr style='color: red;'>")
gr.Markdown("<div style='display: flex; justify-content: center; width: 100%;'><h1 style='color: red;'> ♥ Tasia API on Marty Space ♥</h1></div>")
gr.Markdown("<hr style='color: red;'>")
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]
)
gr.Markdown("<hr style='color: red;'>")
gr.Markdown("<div style='display: flex; justify-content: center; width: 100%;'><h1 style='color: red;'> ♥ Made by Tasia with Heart ♥</h1></div>")
gr.Markdown("<hr style='color: red;'>")
app.launch(server_port=7860)
|