File size: 5,164 Bytes
c03bb65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import torch
import streamlit as st
from diffusers import DiffusionPipeline

# Cache resource to load the pipeline
@st.cache_resource
def load_pipeline():
    device = "cuda" if torch.cuda.is_available() else "cpu"
    pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0",
                                             torch_dtype=torch.float16 if device == "cuda" else torch.float32,
                                             use_safetensors=True,
                                             variant="fp16" if device == "cuda" else None)
    return pipe

# Image generation function
def image_generation(pipe, prompt, negative_prompt):
    try:
        image = pipe(
            prompt=prompt,
            negative_prompt="blurred, ugly, watermark, low resolution" + negative_prompt,
            num_inference_steps=20,
            guidance_scale=9.0
        ).images[0]
        return image
    except Exception as e:
        st.error(f"Error generating image: {str(e)}")
        return None

# Define the table as a list of dictionaries with more artistic styles
table = [
    {
        "name": "sai-neonpunk",
        "prompt": "neonpunk style . 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": "futuristic-retro cyberpunk",
        "prompt": "retro cyberpunk. 80's inspired, synthwave, neon, vibrant, detailed, retro futurism",
        "negative_prompt": "modern, desaturated, black and white, realism, low contrast"
    },
    {
        "name": "Dark Fantasy",
        "prompt": "Dark Fantasy Art, dark, moody, dark fantasy style",
        "negative_prompt": "ugly, deformed, noisy, blurry, low contrast, bright, sunny"
    },
    {
        "name": "Double Exposure",
        "prompt": "Double Exposure Style, double image ghost effect, image combination, double exposure style",
        "negative_prompt": "ugly, deformed, noisy, blurry, low contrast"
    },
    {
        "name": "Vintage Retro",
        "prompt": "vintage retro style, old-school, warm colors, nostalgic, retro textures, faded colors, cozy atmosphere, worn, classic film",
        "negative_prompt": "modern, bright, high definition, sharp"
    },
    {
        "name": "Sci-Fi Futuristic",
        "prompt": "Sci-Fi futuristic, cybernetic, sleek metallic designs, neon, artificial intelligence, high-tech, future cities, robots, alien landscapes",
        "negative_prompt": "low-tech, blurry, old-fashioned, dull, dark"
    },
    {
        "name": "Surrealism",
        "prompt": "Surrealism, dreamlike, abstract, bizarre, imaginative, fantastical, magical realism, melting objects, floating landscapes",
        "negative_prompt": "realistic, plain, dull, conventional"
    },
    {
        "name": "Pop Art",
        "prompt": "Pop Art, bold colors, comic book style, strong lines, graphic, playful, contemporary, inspired by Andy Warhol and Roy Lichtenstein",
        "negative_prompt": "minimalistic, muted colors, traditional, abstract"
    },
    {
        "name": "Gothic Horror",
        "prompt": "Gothic horror, dark, eerie, vintage horror, Victorian architecture, spooky ambiance, haunted, gothic castles, fog, grim landscapes",
        "negative_prompt": "light, cheerful, happy, bright"
    },
    {
        "name": "Minimalism",
        "prompt": "Minimalism, clean lines, simple forms, neutral tones, white space, simple color palette, elegant, modern design",
        "negative_prompt": "cluttered, bright, complex, busy"
    },
    {
        "name": "Steampunk",
        "prompt": "Steampunk, Victorian industrial, brass gears, steam-powered machinery, fantasy airships, retro-futuristic, adventure, mechanical details",
        "negative_prompt": "futuristic, modern, minimalistic, digital"
    }
]

# Convert to dictionary for easy lookup
styles_dict = {entry["name"]: entry for entry in table}

# Streamlit UI
st.title("Image Generation")

# User input for the custom prompt
prompt = st.text_input("Enter your Prompt")

# Load the pre-trained model
pipeline = load_pipeline()

# Dropdown for selecting a style
style_name = st.selectbox("Select a Style", options=list(styles_dict.keys()))

# Display the selected style's prompt and negative prompt
if style_name:
    selected_entry = styles_dict[style_name]
    selected_style_prompt = selected_entry["prompt"]
    selected_style_negative_prompt = selected_entry["negative_prompt"]

# Button to trigger image generation
if st.button("Generate Awesome Image"):
    with st.spinner("Generating your awesome image..."):
        image = image_generation(pipeline, prompt + selected_style_prompt, selected_style_negative_prompt)
        if image:
            st.image(image)

# Credit section
st.sidebar.markdown("### Made by Taizun")
st.sidebar.markdown("A creative AI-powered image generator app.")
st.sidebar.markdown("Explore various styles and generate unique artworks!")