Spaces:
Sleeping
Sleeping
import gradio as gr | |
from typing import Tuple | |
# Load the model | |
model = gr.load("models/strangerzonehf/Flux-Midjourney-Mix2-LoRA") | |
# List of styles | |
style_list = [ | |
{"name": "D&D Art", "prompt": "dungeons & dragons style artwork {prompt}. d&d style, key visual, vibrant, studio anime, highly detailed", | |
"negative_prompt": "photo, deformed, black and white, realism, disfigured, low contrast"}, | |
{"name": "2560 x 1440", "prompt": "hyper-realistic 4K image of {prompt}. ultra-detailed, lifelike, high-resolution, sharp, vibrant colors, photorealistic, fantastical environments, epic scenery, rich textures", | |
"negative_prompt": "cartoonish, low resolution, blurry, simplistic, abstract, sci-fi, modern cityscapes, deformed, ugly"}, | |
{"name": "Character Portrait", "prompt": "dungeons & dragons character portrait of {prompt}. intricate details, expressive faces, heroic poses, rich textures, elaborate costumes, iconic weapons, fantasy aesthetic, studio-quality rendering", | |
"negative_prompt": "generic, overly stylized, blurry, simplistic, futuristic, deformed"}, | |
{"name": "Epic Battle", "prompt": "dynamic dungeons & dragons artwork of {prompt}. epic battle scene, legendary heroes, fierce monsters, intense action, dramatic lighting, high-detail environment, magical effects, vibrant colors", | |
"negative_prompt": "peaceful, mundane, low energy, modern, sci-fi, simplistic, cartoonish, low contrast"}, | |
{"name": "(No style)", "prompt": "{prompt}", "negative_prompt": ""} | |
] | |
styles = {k["name"]: (k["prompt"], k["negative_prompt"]) for k in style_list} | |
STYLE_NAMES = list(styles.keys()) | |
DEFAULT_STYLE_NAME = "(No style)" | |
def apply_style(style_name: str, positive: str, negative: str = "") -> Tuple[str, str]: | |
p, n = styles.get(style_name, styles[DEFAULT_STYLE_NAME]) | |
if not negative: | |
negative = "" | |
return p.replace("{prompt}", positive), n + negative | |
def generate_image(style: str, positive_prompt: str): | |
styled_prompt, styled_negative = apply_style(style, positive_prompt) | |
result = model( | |
inputs={ | |
"prompt": styled_prompt, | |
"negative_prompt": styled_negative, | |
} | |
) | |
return result | |
# Enhanced D&D-themed CSS with previously used styles and new additions | |
custom_css = """ | |
body { | |
background-color: #1b1b1b; /* Dungeon-like backdrop */ | |
color: #f5f5f5; | |
font-family: 'Palatino Linotype', serif; /* Fantasy-themed font */ | |
margin: 0; | |
padding: 0; | |
display: flex; | |
flex-direction: column; | |
align-items: center; | |
justify-content: flex-start; | |
height: 100vh; | |
} | |
.gradio-container { | |
max-width: 950px; | |
margin: auto; | |
padding: 30px; | |
background: linear-gradient(145deg, #2e2b2a, #3a3433); /* Mystic gradient for depth */ | |
border: 4px solid #8b4513; | |
border-radius: 15px; | |
box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); | |
} | |
h1, h2 { | |
color: #ffd700; | |
text-align: center; | |
text-shadow: 2px 2px #7c5200; /* Gold shine effect */ | |
} | |
.description { | |
margin-top: 15px; | |
color: #d4af37; /* Lighter gold for elegance */ | |
font-size: 18px; | |
line-height: 1.6; | |
text-align: center; | |
} | |
a { | |
color: #ffd700; | |
text-decoration: none; | |
font-weight: bold; | |
} | |
a:hover { | |
color: #ffcc33; /* Brighter gold for interactivity */ | |
} | |
textarea, input[type="text"] { | |
background-color: #292828; | |
color: #f5e6ca; | |
border: 2px solid #8b4513; | |
border-radius: 5px; | |
padding: 10px; | |
font-family: 'Palatino Linotype', serif; | |
font-size: 16px; | |
} | |
textarea:focus, input[type="text"]:focus { | |
outline: none; | |
border-color: #ffd700; | |
box-shadow: 0 0 8px #ffd700; | |
} | |
button { | |
background: #8b4513; | |
color: #f0e6d2; | |
font-size: 18px; | |
font-family: 'Palatino Linotype', serif; | |
border: none; | |
border-radius: 8px; | |
padding: 12px 30px; | |
cursor: pointer; | |
transition: 0.3s ease-in-out; | |
box-shadow: 0 0 15px rgba(0, 0, 0, 0.6); | |
} | |
button:hover { | |
background: #a0522d; | |
box-shadow: 0 0 15px #ffd700; | |
} | |
.gradio-output { | |
background: #2f2f2f; | |
color: #ffd700; | |
border: 2px solid #8b4513; | |
border-radius: 8px; | |
padding: 20px; | |
text-align: center; | |
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); | |
} | |
.gradio-output img { | |
max-width: 100%; | |
border: 2px solid #a0522d; | |
border-radius: 8px; | |
box-shadow: 0 0 10px rgba(0, 0, 0, 0.8); | |
} | |
.footer { | |
text-align: center; | |
margin-top: 30px; | |
color: #ffd700; | |
font-size: 14px; | |
text-shadow: 1px 1px #7c5200; | |
} | |
.footer a { | |
color: #ffd700; | |
text-decoration: none; | |
margin: 0 10px; | |
} | |
.footer a:hover { | |
color: #ffcc33; | |
text-shadow: 2px 2px #ff9900; | |
} | |
""" | |
# Define Gradio interface | |
iface = gr.Interface( | |
fn=generate_image, | |
inputs=[ | |
gr.Dropdown(label="🎨 Choose Style", choices=STYLE_NAMES, value=DEFAULT_STYLE_NAME), | |
gr.Textbox(label="🎲 Enter Your Quest:", placeholder="Describe your scene, hero, or epic landscape..."), | |
], | |
outputs=gr.Image(type="pil", label="🖼️ Your Legendary Vision"), | |
title="🛡️ Dungeons & Dragons Image Generator ⚔️", | |
description="**Unleash Your Imagination!** Create heroes, maps, quests, and epic scenes to bring your campaigns to life. " | |
"Tailored for adventurers seeking inspiration or Dungeon Masters constructing their next grand story. <br>" | |
"[Visit Our Website](https://chatdnd.net) | [Support Us](https://buymeacoffee.com/watchoutformike)", | |
css=custom_css | |
) | |
# Launch the Gradio interface | |
iface.launch() | |