WatchOutForMike's picture
css
b188af7
raw
history blame
5.53 kB
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()