import gradio as gr from gradio_client import Client import os import logging import sqlite3 import requests # Initialize the client for image generation client_image = Client("mukaist/DALLE-4K") # Define resolutions resolutions = { "896x1152": (896, 1152), "1024x1024": (1024, 1024), "1216x832": (1216, 832) } # Define the default style DEFAULT_STYLE = "3840 x 2160" # Set up logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) # Initialize database db_path = 'C:/Users/Administrator/Desktop/TGBoot/photo2prompt_db/users.db' def generate_image(prompt, resolution_key, style=DEFAULT_STYLE): resolution = resolutions.get(resolution_key, (1024, 1024)) width, height = resolution full_prompt = f"{prompt}, Canon EOS R5, 4K, Photo-Realistic, appearing photorealistic with super fine details, high resolution, natural look, hyper realistic photography, cinematic lighting, --ar 64:37, --v 6.0, --style raw, --stylize 750" try: result = client_image.predict( prompt=full_prompt, negative_prompt="(deformed, distorted, disfigured:1.3), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation", use_negative_prompt=True, style=style, seed=0, width=width, height=height, guidance_scale=5, randomize_seed=True, api_name="/run" ) logger.info("Image generation successful.") return result except Exception as e: logger.error(f"Error generating image: {e}") return None def update_user_points(username, points): """Updates the user's points in the database.""" with sqlite3.connect(db_path) as conn: cursor = conn.cursor() cursor.execute(''' INSERT INTO users (username, points) VALUES (?, ?) ON CONFLICT(username) DO UPDATE SET points = points + ? ''', (username, points, points)) conn.commit() logger.info(f"User with username {username} had their points updated by {points}.") def notify_webhook(username): """Notify the webhook server about the points update.""" webhook_url = "http://65.108.76.174:5000/update_points" payload = {'username': username, 'points': 10} # Adjust payload as necessary try: response = requests.post(webhook_url, json=payload) response.raise_for_status() logger.info(f"Webhook notification sent successfully. Response: {response.status_code}") except requests.RequestException as e: logger.error(f"Error sending webhook notification: {e}") def get_user_points(username): """Retrieve user points from the Flask server.""" webhook_url = "http://65.108.76.174:5000/get_points" params = {'username': username} try: response = requests.get(webhook_url, params=params) response.raise_for_status() return response.json() except requests.RequestException as e: logger.error(f"Error fetching user points: {e}") return {"error": "Failed to retrieve user points"} def gradio_interface(prompt, resolution_key, username): result = generate_image(prompt, resolution_key) if result and result[0]: file_path = result[0][0].get('image') if file_path and os.path.exists(file_path): update_user_points(username, 10) # Award 10 points for each image generated notify_webhook(username) # Notify the webhook server return file_path, "The image was generated successfully." else: return None, "The image file is not available. Please try again later." else: return None, "There was an error processing your photo. Please try again later." def create_gradio_interface(username): with gr.Blocks() as interface: # Personalized HTML content gr.HTML(f"""