import gradio as gr import requests import io import random import os import time import numpy as np import subprocess import torch import json from transformers import AutoProcessor, AutoModelForCausalLM from PIL import Image from deep_translator import GoogleTranslator from datetime import datetime from fastapi import FastAPI app = FastAPI() #----------Start of theme---------- theme = gr.themes.Ocean( primary_hue="zinc", secondary_hue="slate", neutral_hue="neutral", font=[gr.themes.GoogleFont('Kavivanar'), gr.themes.GoogleFont('Kavivanar'), 'system-ui', 'sans-serif'], font_mono=[gr.themes.GoogleFont('Source Code Pro'), gr.themes.GoogleFont('Inconsolata'), gr.themes.GoogleFont('Inconsolata'), 'monospace'], ).set( #Body Settings body_background_fill='linear-gradient(10deg, *primary_200, *secondary_50)', body_text_color='secondary_600', body_text_color_subdued='*primary_500', body_text_weight='500', #Background Settings background_fill_primary='*primary_100', background_fill_secondary='*secondary_200', color_accent='*primary_300', #Border Settings border_color_accent_subdued='*primary_400', border_color_primary='*primary_400', #Block Settings block_radius='*radius_md', block_background_fill='*primary_200', block_border_color='*primary_500', block_border_width='*panel_border_width', block_info_text_color='*primary_700', block_info_text_size='*text_md', container_radius='*radius_xl', panel_background_fill='*primary_200', accordion_text_color='*primary_600', checkbox_border_radius='*radius_xl', slider_color='*primary_500', table_text_color='*primary_600', input_background_fill='*primary_50', input_background_fill_focus='*primary_100', #Button Settings button_border_width='1px', button_transform_hover='scale(1.01)', button_transition='all 0.1s ease-in-out', button_transform_active='Scale(0.9)', button_large_radius='*radius_xl', button_small_radius='*radius_xl', button_primary_border_color='*primary_500', button_secondary_border_color='*primary_400', button_primary_background_fill_hover='linear-gradient(90deg, *primary_400, *secondary_200, *primary_400)', button_primary_background_fill='linear-gradient(90deg,*secondary_300 , *primary_500, *secondary_300)', button_primary_text_color='*primary_100', button_primary_text_color_hover='*primary_700', button_cancel_background_fill='*primary_500', button_cancel_background_fill_hover='*primary_400' ) #----------End of theme---------- API_TOKEN = os.getenv("HF_READ_TOKEN") headers = {"Authorization": f"Bearer {API_TOKEN}"} timeout = 100 def flip_image(x): return np.fliplr(x) def clear(): return None def query(lora_id, prompt, is_negative=False, steps=28, cfg_scale=3.5, sampler="DPM++ 2M Karras", seed=-1, strength=100, width=896, height=1152): if prompt == "" or prompt == None: return None if lora_id.strip() == "" or lora_id == None: lora_id = "black-forest-labs/FLUX.1-dev" key = random.randint(0, 999) API_URL = "https://api-inference.huggingface.co/models/"+ lora_id.strip() API_TOKEN = random.choice([os.getenv("HF_READ_TOKEN")]) headers = {"Authorization": f"Bearer {API_TOKEN}"} # prompt = GoogleTranslator(source='ru', target='en').translate(prompt) # print(f'\033[1mGeneration {key} translation:\033[0m {prompt}') prompt = GoogleTranslator(source='ru', target='en').translate(prompt) print(f'\033[1mGeneration {key} translation:\033[0m {prompt}') prompt = f"{prompt} | ultra detail, ultra elaboration, ultra quality, perfect." print(f'\033[1mGeneration {key}:\033[0m {prompt}') # If seed is -1, generate a random seed and use it if seed == -1: seed = random.randint(1, 1000000000) # Prepare the payload for the API call, including width and height payload = { "inputs": prompt, "is_negative": is_negative, "steps": steps, "cfg_scale": cfg_scale, "seed": seed if seed != -1 else random.randint(1, 1000000000), "strength": strength, "parameters": { "width": width, # Pass the width to the API "height": height # Pass the height to the API } } response = requests.post(API_URL, headers=headers, json=payload, timeout=timeout) if response.status_code != 200: print(f"Error: Failed to get image. Response status: {response.status_code}") print(f"Response content: {response.text}") if response.status_code == 503: raise gr.Error(f"{response.status_code} : The model is being loaded") raise gr.Error(f"{response.status_code}") try: image_bytes = response.content image = Image.open(io.BytesIO(image_bytes)) print(f'\033[1mGeneration {key} completed!\033[0m ({prompt})') return image, seed except Exception as e: print(f"Error when trying to open the image: {e}") return None examples = [ "a beautiful woman with blonde hair and blue eyes", "a beautiful woman with brown hair and grey eyes", "a beautiful woman with black hair and brown eyes", ] css = """ #app-container { max-width: 930px; margin-left: auto; margin-right: auto; } ".gradio-container {background: url('file=abstract.jpg')} """ with gr.Blocks(theme=theme, css=css, elem_id="app-container") as app: gr.HTML("