File size: 5,614 Bytes
7ced8ee b972196 7ced8ee 476969d 7ced8ee 476969d 7ced8ee 0120698 7ced8ee 210954c cf47e36 b972196 210954c cf47e36 10e3b88 cf47e36 10e3b88 7ced8ee b972196 7ced8ee 447f123 7ced8ee 447f123 7ced8ee 5da4270 7ced8ee dd428b8 7563673 7ced8ee dd428b8 0f7e40c c5c8ce8 dd428b8 7ced8ee dd428b8 7ced8ee 7563673 7ced8ee 7563673 7ced8ee |
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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
import gradio as gr
import os
import sys
import random
import string
import time
from queue import Queue
from threading import Thread
import requests
import io
from PIL import Image
import base64
from deep_translator import GoogleTranslator
app = FastAPI()
API_URL = "https://api-inference.huggingface.co/models/jayavibhav/anime-dreamlike"
API_TOKEN = os.getenv("HF_READ_TOKEN") # it is free
headers = {"Authorization": f"Bearer {API_TOKEN}"}
text_gen = gr.Interface.load("models/Gustavosta/MagicPrompt-Stable-Diffusion")
queue = Queue()
queue_threshold = 100
def add_random_noise(prompt, noise_level=0.00):
if noise_level == 0:
noise_level = 0.00
percentage_noise = noise_level * 5
num_noise_chars = int(len(prompt) * (percentage_noise / 100))
noise_indices = random.sample(range(len(prompt)), num_noise_chars)
prompt_list = list(prompt)
noise_chars = list(string.ascii_letters + string.punctuation + ' ' + string.digits)
noise_chars.extend(['๐', '๐ฉ', '๐', '๐ค', '๐', '๐ค', '๐ญ', '๐', '๐ท', '๐คฏ', '๐คซ', '๐ฅด', '๐ด', '๐คฉ', '๐ฅณ', '๐', '๐ฉ', '๐คช', '๐', '๐คข', '๐', '๐น', '๐ป', '๐ค', '๐ฝ', '๐', '๐', '๐
', '๐', '๐', '๐', '๐', '๐', '๐', '๐ฎ', 'โค๏ธ', '๐', '๐', '๐', '๐', '๐ถ', '๐ฑ', '๐ญ', '๐น', '๐ฆ', '๐ป', '๐จ', '๐ฏ', '๐ฆ', '๐', '๐ฅ', '๐ง๏ธ', '๐', '๐', '๐ฅ', '๐ด', '๐', '๐บ', '๐ป', '๐ธ', '๐จ', '๐
', '๐', 'โ๏ธ', 'โ๏ธ', 'โ๏ธ', 'โ๏ธ', '๐ค๏ธ', 'โ
๏ธ', '๐ฅ๏ธ', '๐ฆ๏ธ', '๐ง๏ธ', '๐ฉ๏ธ', '๐จ๏ธ', '๐ซ๏ธ', 'โ๏ธ', '๐ฌ๏ธ', '๐จ', '๐ช๏ธ', '๐'])
for index in noise_indices:
prompt_list[index] = random.choice(noise_chars)
return "".join(prompt_list)
# Existing code...
import uuid # Import the UUID library
# Existing code...
# Existing code...
request_counter = 0 # Global counter to track requests
def generate_image(inputs, is_negative, steps, cfg_scale, seed):
try:
global request_counter
request_counter += 1
timestamp = f"{time.time()}_{request_counter}"
# Translate inputs to English
translator_to_en = GoogleTranslator(source='auto', target='english')
english_inputs = translator_to_en.translate(inputs)
prompt_with_noise = add_random_noise(english_inputs) + f" - {timestamp}"
payload = {
"inputs": prompt_with_noise,
"is_negative": is_negative,
"steps": steps,
"cfg_scale": cfg_scale,
"seed": seed if seed is not None else random.randint(-1, 2147483647)
}
response = requests.post(API_URL, headers=headers, json=payload)
response.raise_for_status() # Raise an exception for HTTP errors
image_bytes = response.content
image = Image.open(io.BytesIO(image_bytes))
return image
except requests.exceptions.HTTPError as e:
# Handle any HTTP errors
print(f"HTTP Error: {e}")
return "An unexpected error occurred while generating the image."
except Exception as e:
# Handle other exceptions
print(f"Error generating image: {e}")
return "An unexpected error occurred while generating the image. Please try again later."
def get_prompts(prompt_text):
if not prompt_text:
return "Please enter text before generating prompts."
raise gr.Error("Please enter text before generating prompts.")
else:
global request_counter
request_counter += 1
timestamp = f"{time.time()}_{request_counter}"
options = [
"photo anime, masterpiece, high quality, absurdres, "
# Add other prompt options here...
]
if prompt_text:
chosen_option = random.choice(options)
return text_gen(f"{prompt_text}, {chosen_option} - {timestamp}")
else:
return text_gen("", timestamp)
def initialize_api_connection():
global headers
API_TOKEN = os.getenv("HF_READ_TOKEN") # it is free
headers = {"Authorization": f"Bearer {API_TOKEN}"}
# Run initialization functions on startup
initialize_api_connection()
@app.get("/generate_prompts")
def generate_prompts(prompt_text: str):
return get_prompts(prompt_text)
from fastapi import Query
from fastapi import HTTPException
@app.get("/send_inputs")
def send_inputs(
inputs: str,
noise_level: float,
is_negative: str,
steps: int = 20,
cfg_scale: int = 4.5,
seed: int = None
):
try:
generated_image = generate_image(inputs, is_negative, steps, cfg_scale, seed)
if generated_image is not None:
image_bytes = io.BytesIO()
generated_image.save(image_bytes, format="JPEG")
image_base64 = base64.b64encode(image_bytes.getvalue()).decode("utf-8")
return {"image_base64": image_base64}
else:
# Return an error message if the image couldn't be generated
raise HTTPException(status_code=500, detail="Failed to generate image.")
except Exception as e:
# Log the error and return an error message
print(f"Error generating image: {e}")
raise HTTPException(status_code=500, detail="Failed to generate image.")
app.mount("/", StaticFiles(directory="static", html=True), name="static")
@app.get("/")
def index() -> FileResponse:
return FileResponse(path="/app/static/index.html", media_type="text/html")
|