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( """

♥ Tasia API on Marty Space ♥

""" ) 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( """

♥ Made by Tasia with ♥

""" ) app.launch(server_port=7860)