iohanngrig commited on
Commit
f4ee239
1 Parent(s): 3de8bab

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +99 -0
app.py ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from io import BytesIO
3
+ from typing import Literal
4
+ from diffusers import StableDiffusionPipeline
5
+ import torch
6
+ import time
7
+
8
+ seed = 42
9
+ generator = torch.manual_seed(seed)
10
+
11
+ NUM_ITERS_TO_RUN = 5
12
+ NUM_INFERENCE_STEPS = 50
13
+ NUM_IMAGES_PER_PROMPT = 2
14
+
15
+
16
+ def text2image(
17
+ prompt: str,
18
+ repo_id: Literal[
19
+ "dreamlike-art/dreamlike-photoreal-2.0",
20
+ "hakurei/waifu-diffusion",
21
+ "prompthero/openjourney",
22
+ "stabilityai/stable-diffusion-2-1",
23
+ "runwayml/stable-diffusion-v1-5",
24
+ "nota-ai/bk-sdm-small",
25
+ "CompVis/stable-diffusion-v1-4",
26
+ ],
27
+ ):
28
+ start = time.time()
29
+ if torch.cuda.is_available():
30
+ print("Using GPU")
31
+ pipeline = StableDiffusionPipeline.from_pretrained(
32
+ repo_id,
33
+ torch_dtype=torch.float16,
34
+ use_safetensors=True,
35
+ ).to("cuda")
36
+ else:
37
+ print("Using CPU")
38
+ pipeline = StableDiffusionPipeline.from_pretrained(
39
+ repo_id,
40
+ torch_dtype=torch.float32,
41
+ use_safetensors=True,
42
+ )
43
+
44
+ for _ in range(NUM_ITERS_TO_RUN):
45
+ images = pipeline(
46
+ prompt,
47
+ num_inference_steps=NUM_INFERENCE_STEPS,
48
+ generator=generator,
49
+ num_images_per_prompt=NUM_IMAGES_PER_PROMPT,
50
+ ).images
51
+ end = time.time()
52
+ return images[0], start, end
53
+
54
+ def app():
55
+ st.header("Text-to-image Web App")
56
+ st.subheader("Powered by Hugging Face")
57
+ user_input = st.text_area(
58
+ "Enter your text prompt below and click the button to submit."
59
+ )
60
+
61
+ option = st.selectbox(
62
+ "Select model (in order of processing time)",
63
+ (
64
+ "nota-ai/bk-sdm-small",
65
+ "CompVis/stable-diffusion-v1-4",
66
+ "runwayml/stable-diffusion-v1-5",
67
+ "prompthero/openjourney",
68
+ "hakurei/waifu-diffusion",
69
+ "stabilityai/stable-diffusion-2-1",
70
+ "dreamlike-art/dreamlike-photoreal-2.0",
71
+ ),
72
+ )
73
+
74
+ with st.form("my_form"):
75
+ submit = st.form_submit_button(label="Submit text prompt")
76
+
77
+ if submit:
78
+ with st.spinner(text="Generating image ... It may take up to 20 minutes."):
79
+ im, start, end = text2image(prompt=user_input, repo_id=option)
80
+ buf = BytesIO()
81
+ im.save(buf, format="PNG")
82
+ byte_im = buf.getvalue()
83
+ hours, rem = divmod(end - start, 3600)
84
+ minutes, seconds = divmod(rem, 60)
85
+ st.success(
86
+ "Processing time: {:0>2}:{:0>2}:{:05.2f}.".format(
87
+ int(hours), int(minutes), seconds
88
+ )
89
+ )
90
+ st.image(im)
91
+ st.download_button(
92
+ label="Click here to download",
93
+ data=byte_im,
94
+ file_name="generated_image.png",
95
+ mime="image/png",
96
+ )
97
+
98
+ if __name__ == "__main__":
99
+ app()