wybxc's picture
add app.py
6711464 unverified
raw
history blame
2.43 kB
import streamlit as st
import torch
from diffusers import StableDiffusionPipeline
from diffusers.pipelines.stable_diffusion import StableDiffusionPipelineOutput
def void(*args, **kwargs):
pass
st.title("AI 元火娘")
with st.sidebar:
model = st.selectbox("Model Name", [
"wybxc/yanhuo-v1-dreambooth",
"wybxc/yanyuan-v1-dreambooth",
"wybxc/yuanhuo-v1-dreambooth",
"<Custom>"
])
if model == "<Custom>":
model = st.text_input("Model Path", "").strip()
# Caching model
if 'model' not in st.session_state:
st.session_state.model = model
if 'pipeline' not in st.session_state:
st.session_state.pipeline = None
if model != st.session_state.model or st.session_state.pipeline is None:
if model:
with st.spinner("Loading Model..."):
pipeline = StableDiffusionPipeline.from_pretrained(
model,
torch_dtype=torch.float16
)
assert type(pipeline) is StableDiffusionPipeline
if torch.cuda.is_available():
pipeline = pipeline.to("cuda")
st.session_state.model = model
st.session_state.pipeline = pipeline
else:
pipeline = None
else:
pipeline = st.session_state.pipeline
assert type(pipeline) is StableDiffusionPipeline
prompt = st.text_area("Prompt", "(yanhuo), 1girl, masterpiece, best quality, "
"white hair, ahoge, snowy street, [smile], dynamic angle, full body, "
"[blue eyes], flat chest, cinematic light")
negative_prompt = st.text_area("Negative Prompt", "lowres, bad anatomy, bad hands, "
"text, error, missing fingers, extra digit, fewer digits, cropped, "
"worst quality, low quality, normal quality, jpeg artifacts, signature, "
"watermark, username, blurry")
with st.sidebar:
height = st.slider("Height", 256, 1024, 512, 64)
width = st.slider("Width", 256, 1024, 512, 64)
steps = st.slider("Steps", 1, 100, 20, 1)
if pipeline and st.button("Generate"):
progress = st.progress(0)
result = pipeline(
prompt=prompt,
negative_prompt=negative_prompt,
height=height,
width=width,
num_inference_steps=steps,
callback=lambda s, *_: void(progress.progress(s / steps))
)
assert type(result) is StableDiffusionPipelineOutput
image = result.images[0]
progress.progress(1.0)
st.image(image)