Spaces:
Sleeping
Sleeping
| import base64 | |
| import re | |
| import os | |
| import random | |
| import requests | |
| import time | |
| from PIL import Image | |
| from io import BytesIO | |
| from typing import Tuple | |
| from diffusers import DiffusionPipeline | |
| import torch | |
| from flask import Flask, request, jsonify | |
| from fastapi import FastAPI, Request, HTTPException | |
| import json | |
| #app = Flask(__name__) | |
| app=FastAPI() | |
| style_list = [ | |
| { | |
| "name": "(No style)", | |
| "prompt": "{prompt}", | |
| "negative_prompt": "", | |
| }, | |
| { | |
| "name": "Cinematic", | |
| "prompt": "cinematic still {prompt} . emotional, harmonious, vignette, highly detailed, high budget, bokeh, cinemascope, moody, epic, gorgeous, film grain, grainy", | |
| "negative_prompt": "anime, cartoon, graphic, text, painting, crayon, graphite, abstract, glitch, deformed, mutated, ugly, disfigured", | |
| }, | |
| { | |
| "name": "Photographic", | |
| "prompt": "cinematic photo {prompt} . 35mm photograph, film, bokeh, professional, 4k, highly detailed", | |
| "negative_prompt": "drawing, painting, crayon, sketch, graphite, impressionist, noisy, blurry, soft, deformed, ugly", | |
| }, | |
| { | |
| "name": "Anime", | |
| "prompt": "anime artwork {prompt} . anime style, key visual, vibrant, studio anime, highly detailed", | |
| "negative_prompt": "photo, deformed, black and white, realism, disfigured, low contrast", | |
| }, | |
| { | |
| "name": "Manga", | |
| "prompt": "manga style {prompt} . vibrant, high-energy, detailed, iconic, Japanese comic style", | |
| "negative_prompt": "ugly, deformed, noisy, blurry, low contrast, realism, photorealistic, Western comic style", | |
| }, | |
| { | |
| "name": "Digital Art", | |
| "prompt": "concept art {prompt} . digital artwork, illustrative, painterly, matte painting, highly detailed", | |
| "negative_prompt": "photo, photorealistic, realism, ugly", | |
| }, | |
| { | |
| "name": "Pixel art", | |
| "prompt": "pixel-art {prompt} . low-res, blocky, pixel art style, 8-bit graphics", | |
| "negative_prompt": "sloppy, messy, blurry, noisy, highly detailed, ultra textured, photo, realistic", | |
| }, | |
| { | |
| "name": "Fantasy art", | |
| "prompt": "ethereal fantasy concept art of {prompt} . magnificent, celestial, ethereal, painterly, epic, majestic, magical, fantasy art, cover art, dreamy", | |
| "negative_prompt": "photographic, realistic, realism, 35mm film, dslr, cropped, frame, text, deformed, glitch, noise, noisy, off-center, deformed, cross-eyed, closed eyes, bad anatomy, ugly, disfigured, sloppy, duplicate, mutated, black and white", | |
| }, | |
| { | |
| "name": "Neonpunk", | |
| "prompt": "neonpunk style {prompt} . cyberpunk, vaporwave, neon, vibes, vibrant, stunningly beautiful, crisp, detailed, sleek, ultramodern, magenta highlights, dark purple shadows, high contrast, cinematic, ultra detailed, intricate, professional", | |
| "negative_prompt": "painting, drawing, illustration, glitch, deformed, mutated, cross-eyed, ugly, disfigured", | |
| }, | |
| { | |
| "name": "3D Model", | |
| "prompt": "professional 3d model {prompt} . octane render, highly detailed, volumetric, dramatic lighting", | |
| "negative_prompt": "ugly, deformed, noisy, low poly, blurry, painting", | |
| }, | |
| ] | |
| def infer(prompt, negative="low_quality", style_name=None, guidance_scale=None): | |
| seed = random.randint(0,4294967295) | |
| prompt, negative = apply_style(style_name, prompt, negative) | |
| print(prompt) | |
| print(negative) | |
| # Load the Stable Diffusion model | |
| pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, use_safetensors=True,variant="fp16") | |
| pipe.to("cuda") | |
| # Generate the images | |
| images = pipe(prompt=prompt, negative_prompt=negative, guidance_scale=guidance_scale, seed=seed).images | |
| # Convert the images to base64-encoded strings | |
| image_urls = [] | |
| for i, image in enumerate(images): | |
| buffered = BytesIO() | |
| image.save(buffered, format="JPEG") | |
| image_b64 = base64.b64encode(buffered.getvalue()).decode("utf-8") | |
| #image_url = f"data:image/jpeg;base64,{image_b64}" | |
| #image_urls.append(image_url) | |
| return image_b64 | |
| def generate_image(data: dict): | |
| if 'prompt' in data and 'style_name' in data and 'guidance_scale' in data: | |
| prompt = data['prompt'] | |
| style_name = data['style_name'] | |
| guidance_scale = data['guidance_scale'] | |
| image_urls = infer(prompt, style_name=style_name, guidance_scale=guidance_scale) | |
| # Convert the first generated image to base64 | |
| image_b64 = image_urls[0].split(",")[1] | |
| return {"image_base64": image_b64} | |
| else: | |
| raise HTTPException(status_code=400, detail="Missing required parameters") | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=7860) |