2
2
< head >
3
3
< title > Stable Diffusion Dream Server</ title >
4
4
< link rel ="icon " href ="data:, ">
5
- < style >
6
- * {
7
- font-family : 'Arial' ;
8
- }
9
- # header {
10
- text-decoration : dotted underline;
11
- }
12
- # search {
13
- margin-top : 20vh ;
14
- text-align : center;
15
- }
16
- fieldset {
17
- border : none;
18
- }
19
- # prompt {
20
- width : 500px ;
21
- border-radius : 20px 0px 0px 20px ;
22
- padding : 5px 10px 5px 10px ;
23
- border : 1px solid black;
24
- outline : none;
25
- }
26
- # submit {
27
- border-radius : 0px 20px 20px 0px ;
28
- padding : 5px 10px 5px 10px ;
29
- border : 1px solid black;
30
- }
31
- # results {
32
- text-align : center;
33
- padding-left : 20vw ;
34
- padding-right : 20vw ;
35
- padding-top : 10px ;
36
- }
37
- img {
38
- cursor : pointer;
39
- height : 30vh ;
40
- border-radius : 5px ;
41
- margin : 10px ;
42
- }
43
- # generate-config {
44
- line-height : 2em ;
45
- }
46
- input [type = "number" ] {
47
- width : 60px ;
48
- }
49
- # seed {
50
- width : 150px ;
51
- }
52
- </ style >
53
- < script >
54
- function toBase64 ( file ) {
55
- return new Promise ( ( resolve , reject ) => {
56
- const r = new FileReader ( ) ;
57
- r . readAsDataURL ( file ) ;
58
- r . onload = ( ) => resolve ( r . result ) ;
59
- r . onerror = ( error ) => reject ( error ) ;
60
- } ) ;
61
- }
5
+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
62
6
63
- function appendOutput ( output ) {
64
- let outputNode = document . createElement ( "img" ) ;
65
- outputNode . src = output [ 0 ] ;
66
-
67
- let outputConfig = output [ 2 ] ;
68
- let altText = output [ 1 ] . toString ( ) + " | " + outputConfig . prompt ;
69
- outputNode . alt = altText ;
70
- outputNode . title = altText ;
71
-
72
- // Reload image config
73
- outputNode . addEventListener ( 'click' , ( ) => {
74
- let form = document . querySelector ( "#generate-form" ) ;
75
- for ( const [ k , v ] of new FormData ( form ) ) {
76
- form . querySelector ( `*[name=${ k } ]` ) . value = outputConfig [ k ] ;
77
- }
78
- document . querySelector ( "#seed" ) . value = output [ 1 ] ;
79
-
80
- saveFields ( document . querySelector ( "#generate-form" ) ) ;
81
- } ) ;
82
-
83
- document . querySelector ( "#results" ) . prepend ( outputNode ) ;
84
- }
85
-
86
- function appendOutputs ( outputs ) {
87
- for ( const output of outputs ) {
88
- appendOutput ( output ) ;
89
- }
90
- }
91
-
92
- function saveFields ( form ) {
93
- for ( const [ k , v ] of new FormData ( form ) ) {
94
- if ( typeof v !== 'object' ) { // Don't save 'file' type
95
- localStorage . setItem ( k , v ) ;
96
- }
97
- }
98
- }
99
- function loadFields ( form ) {
100
- for ( const [ k , v ] of new FormData ( form ) ) {
101
- const item = localStorage . getItem ( k ) ;
102
- if ( item != null ) {
103
- form . querySelector ( `*[name=${ k } ]` ) . value = item ;
104
- }
105
- }
106
- }
107
-
108
- async function generateSubmit ( form ) {
109
- const prompt = document . querySelector ( "#prompt" ) . value ;
110
-
111
- // Convert file data to base64
112
- let formData = Object . fromEntries ( new FormData ( form ) ) ;
113
- formData . initimg = formData . initimg . name !== '' ? await toBase64 ( formData . initimg ) : null ;
114
-
115
- // Post as JSON
116
- fetch ( form . action , {
117
- method : form . method ,
118
- body : JSON . stringify ( formData ) ,
119
- } ) . then ( async ( result ) => {
120
- let data = await result . json ( ) ;
121
-
122
- // Re-enable form, remove no-results-message
123
- form . querySelector ( 'fieldset' ) . removeAttribute ( 'disabled' ) ;
124
- document . querySelector ( "#prompt" ) . value = prompt ;
125
-
126
- if ( data . outputs . length != 0 ) {
127
- document . querySelector ( "#no-results-message" ) ?. remove ( ) ;
128
- appendOutputs ( data . outputs ) ;
129
- } else {
130
- alert ( "Error occurred while generating." ) ;
131
- }
132
- } ) ;
133
-
134
- // Disable form while generating
135
- form . querySelector ( 'fieldset' ) . setAttribute ( 'disabled' , '' ) ;
136
- document . querySelector ( "#prompt" ) . value = `Generating: "${ prompt } "` ;
137
- }
138
-
139
- window . onload = ( ) => {
140
- document . querySelector ( "#generate-form" ) . addEventListener ( 'submit' , ( e ) => {
141
- e . preventDefault ( ) ;
142
- const form = e . target ;
143
-
144
- generateSubmit ( form ) ;
145
- } ) ;
146
- document . querySelector ( "#generate-form" ) . addEventListener ( 'change' , ( e ) => {
147
- saveFields ( e . target . form ) ;
148
- } ) ;
149
- document . querySelector ( "#reset" ) . addEventListener ( 'click' , ( e ) => {
150
- document . querySelector ( "#seed" ) . value = - 1 ;
151
- saveFields ( e . target . form ) ;
152
- } ) ;
153
- loadFields ( document . querySelector ( "#generate-form" ) ) ;
154
- } ;
155
- </ script >
7
+ < link rel ="stylesheet " href ="scripts/static/index.css ">
8
+ < script src ="scripts/static/index.js "> </ script >
156
9
</ head >
157
10
< body >
158
11
< div id ="search ">
159
12
< h2 id ="header "> Stable Diffusion Dream Server</ h2 >
160
13
161
14
< form id ="generate-form " method ="post " action ="# ">
162
- < fieldset >
15
+ < fieldset id =" fieldset-search " >
163
16
< input type ="text " id ="prompt " name ="prompt ">
164
17
< input type ="submit " id ="submit " value ="Generate ">
165
18
</ fieldset >
166
- < fieldset id ="generate -config ">
19
+ < fieldset id ="fieldset -config ">
167
20
< label for ="iterations "> Images to generate:</ label >
168
- < input value ="1 " type ="number " id ="iterations " name ="iterations ">
21
+ < input value ="1 " type ="number " id ="batch " name ="batch ">
169
22
< label for ="steps "> Steps:</ label >
170
23
< input value ="50 " type ="number " id ="steps " name ="steps ">
171
24
< label for ="cfgscale "> Cfg Scale:</ label >
@@ -185,7 +38,7 @@ <h2 id="header">Stable Diffusion Dream Server</h2>
185
38
</ form >
186
39
< div id ="about "> For news and support for this web service, visit our < a href ="http://github.com/lstein/stable-diffusion "> GitHub site</ a > </ div >
187
40
</ div >
188
- < hr style =" width: 200px " >
41
+ < hr >
189
42
< div id ="results ">
190
43
< div id ="no-results-message ">
191
44
< i > < p > No results...</ p > </ i >
0 commit comments