DeepCoreB4 commited on
Commit
44d5071
1 Parent(s): 5123800

Upload 23 files

Browse files
Files changed (22) hide show
  1. .gitignore +35 -0
  2. .pylintrc +3 -0
  3. CODEOWNERS +12 -0
  4. LICENSE.txt +663 -0
  5. README.md +6 -7
  6. cache.json +20 -0
  7. config.json +156 -0
  8. environment-wsl2.yaml +11 -0
  9. model.ckpt +3 -0
  10. params.txt +1 -0
  11. requirements.txt +33 -0
  12. requirements_versions.txt +31 -0
  13. screenshot.png +0 -0
  14. script.js +102 -0
  15. style.css +1040 -0
  16. ui-config.json +657 -0
  17. webui-macos-env.sh +19 -0
  18. webui-user.bat +8 -0
  19. webui-user.sh +46 -0
  20. webui.bat +85 -0
  21. webui.py +337 -0
  22. webui.sh +186 -0
.gitignore ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ __pycache__
2
+ *.ckpt
3
+ *.safetensors
4
+ *.pth
5
+ /ESRGAN/*
6
+ /SwinIR/*
7
+ /repositories
8
+ /venv
9
+ /tmp
10
+ /model.ckpt
11
+ /models/**/*
12
+ /GFPGANv1.3.pth
13
+ /gfpgan/weights/*.pth
14
+ /ui-config.json
15
+ /outputs
16
+ /config.json
17
+ /log
18
+ /webui.settings.bat
19
+ /embeddings
20
+ /styles.csv
21
+ /params.txt
22
+ /styles.csv.bak
23
+ /webui-user.bat
24
+ /webui-user.sh
25
+ /interrogate
26
+ /user.css
27
+ /.idea
28
+ notification.mp3
29
+ /SwinIR
30
+ /textual_inversion
31
+ .vscode
32
+ /extensions
33
+ /test/stdout.txt
34
+ /test/stderr.txt
35
+ /cache.json
.pylintrc ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # See https://pylint.pycqa.org/en/latest/user_guide/messages/message_control.html
2
+ [MESSAGES CONTROL]
3
+ disable=C,R,W,E,I
CODEOWNERS ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ * @AUTOMATIC1111
2
+
3
+ # if you were managing a localization and were removed from this file, this is because
4
+ # the intended way to do localizations now is via extensions. See:
5
+ # https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Developing-extensions
6
+ # Make a repo with your localization and since you are still listed as a collaborator
7
+ # you can add it to the wiki page yourself. This change is because some people complained
8
+ # the git commit log is cluttered with things unrelated to almost everyone and
9
+ # because I believe this is the best overall for the project to handle localizations almost
10
+ # entirely without my oversight.
11
+
12
+
LICENSE.txt ADDED
@@ -0,0 +1,663 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU AFFERO GENERAL PUBLIC LICENSE
2
+ Version 3, 19 November 2007
3
+
4
+ Copyright (c) 2023 AUTOMATIC1111
5
+
6
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
7
+ Everyone is permitted to copy and distribute verbatim copies
8
+ of this license document, but changing it is not allowed.
9
+
10
+ Preamble
11
+
12
+ The GNU Affero General Public License is a free, copyleft license for
13
+ software and other kinds of works, specifically designed to ensure
14
+ cooperation with the community in the case of network server software.
15
+
16
+ The licenses for most software and other practical works are designed
17
+ to take away your freedom to share and change the works. By contrast,
18
+ our General Public Licenses are intended to guarantee your freedom to
19
+ share and change all versions of a program--to make sure it remains free
20
+ software for all its users.
21
+
22
+ When we speak of free software, we are referring to freedom, not
23
+ price. Our General Public Licenses are designed to make sure that you
24
+ have the freedom to distribute copies of free software (and charge for
25
+ them if you wish), that you receive source code or can get it if you
26
+ want it, that you can change the software or use pieces of it in new
27
+ free programs, and that you know you can do these things.
28
+
29
+ Developers that use our General Public Licenses protect your rights
30
+ with two steps: (1) assert copyright on the software, and (2) offer
31
+ you this License which gives you legal permission to copy, distribute
32
+ and/or modify the software.
33
+
34
+ A secondary benefit of defending all users' freedom is that
35
+ improvements made in alternate versions of the program, if they
36
+ receive widespread use, become available for other developers to
37
+ incorporate. Many developers of free software are heartened and
38
+ encouraged by the resulting cooperation. However, in the case of
39
+ software used on network servers, this result may fail to come about.
40
+ The GNU General Public License permits making a modified version and
41
+ letting the public access it on a server without ever releasing its
42
+ source code to the public.
43
+
44
+ The GNU Affero General Public License is designed specifically to
45
+ ensure that, in such cases, the modified source code becomes available
46
+ to the community. It requires the operator of a network server to
47
+ provide the source code of the modified version running there to the
48
+ users of that server. Therefore, public use of a modified version, on
49
+ a publicly accessible server, gives the public access to the source
50
+ code of the modified version.
51
+
52
+ An older license, called the Affero General Public License and
53
+ published by Affero, was designed to accomplish similar goals. This is
54
+ a different license, not a version of the Affero GPL, but Affero has
55
+ released a new version of the Affero GPL which permits relicensing under
56
+ this license.
57
+
58
+ The precise terms and conditions for copying, distribution and
59
+ modification follow.
60
+
61
+ TERMS AND CONDITIONS
62
+
63
+ 0. Definitions.
64
+
65
+ "This License" refers to version 3 of the GNU Affero General Public License.
66
+
67
+ "Copyright" also means copyright-like laws that apply to other kinds of
68
+ works, such as semiconductor masks.
69
+
70
+ "The Program" refers to any copyrightable work licensed under this
71
+ License. Each licensee is addressed as "you". "Licensees" and
72
+ "recipients" may be individuals or organizations.
73
+
74
+ To "modify" a work means to copy from or adapt all or part of the work
75
+ in a fashion requiring copyright permission, other than the making of an
76
+ exact copy. The resulting work is called a "modified version" of the
77
+ earlier work or a work "based on" the earlier work.
78
+
79
+ A "covered work" means either the unmodified Program or a work based
80
+ on the Program.
81
+
82
+ To "propagate" a work means to do anything with it that, without
83
+ permission, would make you directly or secondarily liable for
84
+ infringement under applicable copyright law, except executing it on a
85
+ computer or modifying a private copy. Propagation includes copying,
86
+ distribution (with or without modification), making available to the
87
+ public, and in some countries other activities as well.
88
+
89
+ To "convey" a work means any kind of propagation that enables other
90
+ parties to make or receive copies. Mere interaction with a user through
91
+ a computer network, with no transfer of a copy, is not conveying.
92
+
93
+ An interactive user interface displays "Appropriate Legal Notices"
94
+ to the extent that it includes a convenient and prominently visible
95
+ feature that (1) displays an appropriate copyright notice, and (2)
96
+ tells the user that there is no warranty for the work (except to the
97
+ extent that warranties are provided), that licensees may convey the
98
+ work under this License, and how to view a copy of this License. If
99
+ the interface presents a list of user commands or options, such as a
100
+ menu, a prominent item in the list meets this criterion.
101
+
102
+ 1. Source Code.
103
+
104
+ The "source code" for a work means the preferred form of the work
105
+ for making modifications to it. "Object code" means any non-source
106
+ form of a work.
107
+
108
+ A "Standard Interface" means an interface that either is an official
109
+ standard defined by a recognized standards body, or, in the case of
110
+ interfaces specified for a particular programming language, one that
111
+ is widely used among developers working in that language.
112
+
113
+ The "System Libraries" of an executable work include anything, other
114
+ than the work as a whole, that (a) is included in the normal form of
115
+ packaging a Major Component, but which is not part of that Major
116
+ Component, and (b) serves only to enable use of the work with that
117
+ Major Component, or to implement a Standard Interface for which an
118
+ implementation is available to the public in source code form. A
119
+ "Major Component", in this context, means a major essential component
120
+ (kernel, window system, and so on) of the specific operating system
121
+ (if any) on which the executable work runs, or a compiler used to
122
+ produce the work, or an object code interpreter used to run it.
123
+
124
+ The "Corresponding Source" for a work in object code form means all
125
+ the source code needed to generate, install, and (for an executable
126
+ work) run the object code and to modify the work, including scripts to
127
+ control those activities. However, it does not include the work's
128
+ System Libraries, or general-purpose tools or generally available free
129
+ programs which are used unmodified in performing those activities but
130
+ which are not part of the work. For example, Corresponding Source
131
+ includes interface definition files associated with source files for
132
+ the work, and the source code for shared libraries and dynamically
133
+ linked subprograms that the work is specifically designed to require,
134
+ such as by intimate data communication or control flow between those
135
+ subprograms and other parts of the work.
136
+
137
+ The Corresponding Source need not include anything that users
138
+ can regenerate automatically from other parts of the Corresponding
139
+ Source.
140
+
141
+ The Corresponding Source for a work in source code form is that
142
+ same work.
143
+
144
+ 2. Basic Permissions.
145
+
146
+ All rights granted under this License are granted for the term of
147
+ copyright on the Program, and are irrevocable provided the stated
148
+ conditions are met. This License explicitly affirms your unlimited
149
+ permission to run the unmodified Program. The output from running a
150
+ covered work is covered by this License only if the output, given its
151
+ content, constitutes a covered work. This License acknowledges your
152
+ rights of fair use or other equivalent, as provided by copyright law.
153
+
154
+ You may make, run and propagate covered works that you do not
155
+ convey, without conditions so long as your license otherwise remains
156
+ in force. You may convey covered works to others for the sole purpose
157
+ of having them make modifications exclusively for you, or provide you
158
+ with facilities for running those works, provided that you comply with
159
+ the terms of this License in conveying all material for which you do
160
+ not control copyright. Those thus making or running the covered works
161
+ for you must do so exclusively on your behalf, under your direction
162
+ and control, on terms that prohibit them from making any copies of
163
+ your copyrighted material outside their relationship with you.
164
+
165
+ Conveying under any other circumstances is permitted solely under
166
+ the conditions stated below. Sublicensing is not allowed; section 10
167
+ makes it unnecessary.
168
+
169
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
170
+
171
+ No covered work shall be deemed part of an effective technological
172
+ measure under any applicable law fulfilling obligations under article
173
+ 11 of the WIPO copyright treaty adopted on 20 December 1996, or
174
+ similar laws prohibiting or restricting circumvention of such
175
+ measures.
176
+
177
+ When you convey a covered work, you waive any legal power to forbid
178
+ circumvention of technological measures to the extent such circumvention
179
+ is effected by exercising rights under this License with respect to
180
+ the covered work, and you disclaim any intention to limit operation or
181
+ modification of the work as a means of enforcing, against the work's
182
+ users, your or third parties' legal rights to forbid circumvention of
183
+ technological measures.
184
+
185
+ 4. Conveying Verbatim Copies.
186
+
187
+ You may convey verbatim copies of the Program's source code as you
188
+ receive it, in any medium, provided that you conspicuously and
189
+ appropriately publish on each copy an appropriate copyright notice;
190
+ keep intact all notices stating that this License and any
191
+ non-permissive terms added in accord with section 7 apply to the code;
192
+ keep intact all notices of the absence of any warranty; and give all
193
+ recipients a copy of this License along with the Program.
194
+
195
+ You may charge any price or no price for each copy that you convey,
196
+ and you may offer support or warranty protection for a fee.
197
+
198
+ 5. Conveying Modified Source Versions.
199
+
200
+ You may convey a work based on the Program, or the modifications to
201
+ produce it from the Program, in the form of source code under the
202
+ terms of section 4, provided that you also meet all of these conditions:
203
+
204
+ a) The work must carry prominent notices stating that you modified
205
+ it, and giving a relevant date.
206
+
207
+ b) The work must carry prominent notices stating that it is
208
+ released under this License and any conditions added under section
209
+ 7. This requirement modifies the requirement in section 4 to
210
+ "keep intact all notices".
211
+
212
+ c) You must license the entire work, as a whole, under this
213
+ License to anyone who comes into possession of a copy. This
214
+ License will therefore apply, along with any applicable section 7
215
+ additional terms, to the whole of the work, and all its parts,
216
+ regardless of how they are packaged. This License gives no
217
+ permission to license the work in any other way, but it does not
218
+ invalidate such permission if you have separately received it.
219
+
220
+ d) If the work has interactive user interfaces, each must display
221
+ Appropriate Legal Notices; however, if the Program has interactive
222
+ interfaces that do not display Appropriate Legal Notices, your
223
+ work need not make them do so.
224
+
225
+ A compilation of a covered work with other separate and independent
226
+ works, which are not by their nature extensions of the covered work,
227
+ and which are not combined with it such as to form a larger program,
228
+ in or on a volume of a storage or distribution medium, is called an
229
+ "aggregate" if the compilation and its resulting copyright are not
230
+ used to limit the access or legal rights of the compilation's users
231
+ beyond what the individual works permit. Inclusion of a covered work
232
+ in an aggregate does not cause this License to apply to the other
233
+ parts of the aggregate.
234
+
235
+ 6. Conveying Non-Source Forms.
236
+
237
+ You may convey a covered work in object code form under the terms
238
+ of sections 4 and 5, provided that you also convey the
239
+ machine-readable Corresponding Source under the terms of this License,
240
+ in one of these ways:
241
+
242
+ a) Convey the object code in, or embodied in, a physical product
243
+ (including a physical distribution medium), accompanied by the
244
+ Corresponding Source fixed on a durable physical medium
245
+ customarily used for software interchange.
246
+
247
+ b) Convey the object code in, or embodied in, a physical product
248
+ (including a physical distribution medium), accompanied by a
249
+ written offer, valid for at least three years and valid for as
250
+ long as you offer spare parts or customer support for that product
251
+ model, to give anyone who possesses the object code either (1) a
252
+ copy of the Corresponding Source for all the software in the
253
+ product that is covered by this License, on a durable physical
254
+ medium customarily used for software interchange, for a price no
255
+ more than your reasonable cost of physically performing this
256
+ conveying of source, or (2) access to copy the
257
+ Corresponding Source from a network server at no charge.
258
+
259
+ c) Convey individual copies of the object code with a copy of the
260
+ written offer to provide the Corresponding Source. This
261
+ alternative is allowed only occasionally and noncommercially, and
262
+ only if you received the object code with such an offer, in accord
263
+ with subsection 6b.
264
+
265
+ d) Convey the object code by offering access from a designated
266
+ place (gratis or for a charge), and offer equivalent access to the
267
+ Corresponding Source in the same way through the same place at no
268
+ further charge. You need not require recipients to copy the
269
+ Corresponding Source along with the object code. If the place to
270
+ copy the object code is a network server, the Corresponding Source
271
+ may be on a different server (operated by you or a third party)
272
+ that supports equivalent copying facilities, provided you maintain
273
+ clear directions next to the object code saying where to find the
274
+ Corresponding Source. Regardless of what server hosts the
275
+ Corresponding Source, you remain obligated to ensure that it is
276
+ available for as long as needed to satisfy these requirements.
277
+
278
+ e) Convey the object code using peer-to-peer transmission, provided
279
+ you inform other peers where the object code and Corresponding
280
+ Source of the work are being offered to the general public at no
281
+ charge under subsection 6d.
282
+
283
+ A separable portion of the object code, whose source code is excluded
284
+ from the Corresponding Source as a System Library, need not be
285
+ included in conveying the object code work.
286
+
287
+ A "User Product" is either (1) a "consumer product", which means any
288
+ tangible personal property which is normally used for personal, family,
289
+ or household purposes, or (2) anything designed or sold for incorporation
290
+ into a dwelling. In determining whether a product is a consumer product,
291
+ doubtful cases shall be resolved in favor of coverage. For a particular
292
+ product received by a particular user, "normally used" refers to a
293
+ typical or common use of that class of product, regardless of the status
294
+ of the particular user or of the way in which the particular user
295
+ actually uses, or expects or is expected to use, the product. A product
296
+ is a consumer product regardless of whether the product has substantial
297
+ commercial, industrial or non-consumer uses, unless such uses represent
298
+ the only significant mode of use of the product.
299
+
300
+ "Installation Information" for a User Product means any methods,
301
+ procedures, authorization keys, or other information required to install
302
+ and execute modified versions of a covered work in that User Product from
303
+ a modified version of its Corresponding Source. The information must
304
+ suffice to ensure that the continued functioning of the modified object
305
+ code is in no case prevented or interfered with solely because
306
+ modification has been made.
307
+
308
+ If you convey an object code work under this section in, or with, or
309
+ specifically for use in, a User Product, and the conveying occurs as
310
+ part of a transaction in which the right of possession and use of the
311
+ User Product is transferred to the recipient in perpetuity or for a
312
+ fixed term (regardless of how the transaction is characterized), the
313
+ Corresponding Source conveyed under this section must be accompanied
314
+ by the Installation Information. But this requirement does not apply
315
+ if neither you nor any third party retains the ability to install
316
+ modified object code on the User Product (for example, the work has
317
+ been installed in ROM).
318
+
319
+ The requirement to provide Installation Information does not include a
320
+ requirement to continue to provide support service, warranty, or updates
321
+ for a work that has been modified or installed by the recipient, or for
322
+ the User Product in which it has been modified or installed. Access to a
323
+ network may be denied when the modification itself materially and
324
+ adversely affects the operation of the network or violates the rules and
325
+ protocols for communication across the network.
326
+
327
+ Corresponding Source conveyed, and Installation Information provided,
328
+ in accord with this section must be in a format that is publicly
329
+ documented (and with an implementation available to the public in
330
+ source code form), and must require no special password or key for
331
+ unpacking, reading or copying.
332
+
333
+ 7. Additional Terms.
334
+
335
+ "Additional permissions" are terms that supplement the terms of this
336
+ License by making exceptions from one or more of its conditions.
337
+ Additional permissions that are applicable to the entire Program shall
338
+ be treated as though they were included in this License, to the extent
339
+ that they are valid under applicable law. If additional permissions
340
+ apply only to part of the Program, that part may be used separately
341
+ under those permissions, but the entire Program remains governed by
342
+ this License without regard to the additional permissions.
343
+
344
+ When you convey a copy of a covered work, you may at your option
345
+ remove any additional permissions from that copy, or from any part of
346
+ it. (Additional permissions may be written to require their own
347
+ removal in certain cases when you modify the work.) You may place
348
+ additional permissions on material, added by you to a covered work,
349
+ for which you have or can give appropriate copyright permission.
350
+
351
+ Notwithstanding any other provision of this License, for material you
352
+ add to a covered work, you may (if authorized by the copyright holders of
353
+ that material) supplement the terms of this License with terms:
354
+
355
+ a) Disclaiming warranty or limiting liability differently from the
356
+ terms of sections 15 and 16 of this License; or
357
+
358
+ b) Requiring preservation of specified reasonable legal notices or
359
+ author attributions in that material or in the Appropriate Legal
360
+ Notices displayed by works containing it; or
361
+
362
+ c) Prohibiting misrepresentation of the origin of that material, or
363
+ requiring that modified versions of such material be marked in
364
+ reasonable ways as different from the original version; or
365
+
366
+ d) Limiting the use for publicity purposes of names of licensors or
367
+ authors of the material; or
368
+
369
+ e) Declining to grant rights under trademark law for use of some
370
+ trade names, trademarks, or service marks; or
371
+
372
+ f) Requiring indemnification of licensors and authors of that
373
+ material by anyone who conveys the material (or modified versions of
374
+ it) with contractual assumptions of liability to the recipient, for
375
+ any liability that these contractual assumptions directly impose on
376
+ those licensors and authors.
377
+
378
+ All other non-permissive additional terms are considered "further
379
+ restrictions" within the meaning of section 10. If the Program as you
380
+ received it, or any part of it, contains a notice stating that it is
381
+ governed by this License along with a term that is a further
382
+ restriction, you may remove that term. If a license document contains
383
+ a further restriction but permits relicensing or conveying under this
384
+ License, you may add to a covered work material governed by the terms
385
+ of that license document, provided that the further restriction does
386
+ not survive such relicensing or conveying.
387
+
388
+ If you add terms to a covered work in accord with this section, you
389
+ must place, in the relevant source files, a statement of the
390
+ additional terms that apply to those files, or a notice indicating
391
+ where to find the applicable terms.
392
+
393
+ Additional terms, permissive or non-permissive, may be stated in the
394
+ form of a separately written license, or stated as exceptions;
395
+ the above requirements apply either way.
396
+
397
+ 8. Termination.
398
+
399
+ You may not propagate or modify a covered work except as expressly
400
+ provided under this License. Any attempt otherwise to propagate or
401
+ modify it is void, and will automatically terminate your rights under
402
+ this License (including any patent licenses granted under the third
403
+ paragraph of section 11).
404
+
405
+ However, if you cease all violation of this License, then your
406
+ license from a particular copyright holder is reinstated (a)
407
+ provisionally, unless and until the copyright holder explicitly and
408
+ finally terminates your license, and (b) permanently, if the copyright
409
+ holder fails to notify you of the violation by some reasonable means
410
+ prior to 60 days after the cessation.
411
+
412
+ Moreover, your license from a particular copyright holder is
413
+ reinstated permanently if the copyright holder notifies you of the
414
+ violation by some reasonable means, this is the first time you have
415
+ received notice of violation of this License (for any work) from that
416
+ copyright holder, and you cure the violation prior to 30 days after
417
+ your receipt of the notice.
418
+
419
+ Termination of your rights under this section does not terminate the
420
+ licenses of parties who have received copies or rights from you under
421
+ this License. If your rights have been terminated and not permanently
422
+ reinstated, you do not qualify to receive new licenses for the same
423
+ material under section 10.
424
+
425
+ 9. Acceptance Not Required for Having Copies.
426
+
427
+ You are not required to accept this License in order to receive or
428
+ run a copy of the Program. Ancillary propagation of a covered work
429
+ occurring solely as a consequence of using peer-to-peer transmission
430
+ to receive a copy likewise does not require acceptance. However,
431
+ nothing other than this License grants you permission to propagate or
432
+ modify any covered work. These actions infringe copyright if you do
433
+ not accept this License. Therefore, by modifying or propagating a
434
+ covered work, you indicate your acceptance of this License to do so.
435
+
436
+ 10. Automatic Licensing of Downstream Recipients.
437
+
438
+ Each time you convey a covered work, the recipient automatically
439
+ receives a license from the original licensors, to run, modify and
440
+ propagate that work, subject to this License. You are not responsible
441
+ for enforcing compliance by third parties with this License.
442
+
443
+ An "entity transaction" is a transaction transferring control of an
444
+ organization, or substantially all assets of one, or subdividing an
445
+ organization, or merging organizations. If propagation of a covered
446
+ work results from an entity transaction, each party to that
447
+ transaction who receives a copy of the work also receives whatever
448
+ licenses to the work the party's predecessor in interest had or could
449
+ give under the previous paragraph, plus a right to possession of the
450
+ Corresponding Source of the work from the predecessor in interest, if
451
+ the predecessor has it or can get it with reasonable efforts.
452
+
453
+ You may not impose any further restrictions on the exercise of the
454
+ rights granted or affirmed under this License. For example, you may
455
+ not impose a license fee, royalty, or other charge for exercise of
456
+ rights granted under this License, and you may not initiate litigation
457
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
458
+ any patent claim is infringed by making, using, selling, offering for
459
+ sale, or importing the Program or any portion of it.
460
+
461
+ 11. Patents.
462
+
463
+ A "contributor" is a copyright holder who authorizes use under this
464
+ License of the Program or a work on which the Program is based. The
465
+ work thus licensed is called the contributor's "contributor version".
466
+
467
+ A contributor's "essential patent claims" are all patent claims
468
+ owned or controlled by the contributor, whether already acquired or
469
+ hereafter acquired, that would be infringed by some manner, permitted
470
+ by this License, of making, using, or selling its contributor version,
471
+ but do not include claims that would be infringed only as a
472
+ consequence of further modification of the contributor version. For
473
+ purposes of this definition, "control" includes the right to grant
474
+ patent sublicenses in a manner consistent with the requirements of
475
+ this License.
476
+
477
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
478
+ patent license under the contributor's essential patent claims, to
479
+ make, use, sell, offer for sale, import and otherwise run, modify and
480
+ propagate the contents of its contributor version.
481
+
482
+ In the following three paragraphs, a "patent license" is any express
483
+ agreement or commitment, however denominated, not to enforce a patent
484
+ (such as an express permission to practice a patent or covenant not to
485
+ sue for patent infringement). To "grant" such a patent license to a
486
+ party means to make such an agreement or commitment not to enforce a
487
+ patent against the party.
488
+
489
+ If you convey a covered work, knowingly relying on a patent license,
490
+ and the Corresponding Source of the work is not available for anyone
491
+ to copy, free of charge and under the terms of this License, through a
492
+ publicly available network server or other readily accessible means,
493
+ then you must either (1) cause the Corresponding Source to be so
494
+ available, or (2) arrange to deprive yourself of the benefit of the
495
+ patent license for this particular work, or (3) arrange, in a manner
496
+ consistent with the requirements of this License, to extend the patent
497
+ license to downstream recipients. "Knowingly relying" means you have
498
+ actual knowledge that, but for the patent license, your conveying the
499
+ covered work in a country, or your recipient's use of the covered work
500
+ in a country, would infringe one or more identifiable patents in that
501
+ country that you have reason to believe are valid.
502
+
503
+ If, pursuant to or in connection with a single transaction or
504
+ arrangement, you convey, or propagate by procuring conveyance of, a
505
+ covered work, and grant a patent license to some of the parties
506
+ receiving the covered work authorizing them to use, propagate, modify
507
+ or convey a specific copy of the covered work, then the patent license
508
+ you grant is automatically extended to all recipients of the covered
509
+ work and works based on it.
510
+
511
+ A patent license is "discriminatory" if it does not include within
512
+ the scope of its coverage, prohibits the exercise of, or is
513
+ conditioned on the non-exercise of one or more of the rights that are
514
+ specifically granted under this License. You may not convey a covered
515
+ work if you are a party to an arrangement with a third party that is
516
+ in the business of distributing software, under which you make payment
517
+ to the third party based on the extent of your activity of conveying
518
+ the work, and under which the third party grants, to any of the
519
+ parties who would receive the covered work from you, a discriminatory
520
+ patent license (a) in connection with copies of the covered work
521
+ conveyed by you (or copies made from those copies), or (b) primarily
522
+ for and in connection with specific products or compilations that
523
+ contain the covered work, unless you entered into that arrangement,
524
+ or that patent license was granted, prior to 28 March 2007.
525
+
526
+ Nothing in this License shall be construed as excluding or limiting
527
+ any implied license or other defenses to infringement that may
528
+ otherwise be available to you under applicable patent law.
529
+
530
+ 12. No Surrender of Others' Freedom.
531
+
532
+ If conditions are imposed on you (whether by court order, agreement or
533
+ otherwise) that contradict the conditions of this License, they do not
534
+ excuse you from the conditions of this License. If you cannot convey a
535
+ covered work so as to satisfy simultaneously your obligations under this
536
+ License and any other pertinent obligations, then as a consequence you may
537
+ not convey it at all. For example, if you agree to terms that obligate you
538
+ to collect a royalty for further conveying from those to whom you convey
539
+ the Program, the only way you could satisfy both those terms and this
540
+ License would be to refrain entirely from conveying the Program.
541
+
542
+ 13. Remote Network Interaction; Use with the GNU General Public License.
543
+
544
+ Notwithstanding any other provision of this License, if you modify the
545
+ Program, your modified version must prominently offer all users
546
+ interacting with it remotely through a computer network (if your version
547
+ supports such interaction) an opportunity to receive the Corresponding
548
+ Source of your version by providing access to the Corresponding Source
549
+ from a network server at no charge, through some standard or customary
550
+ means of facilitating copying of software. This Corresponding Source
551
+ shall include the Corresponding Source for any work covered by version 3
552
+ of the GNU General Public License that is incorporated pursuant to the
553
+ following paragraph.
554
+
555
+ Notwithstanding any other provision of this License, you have
556
+ permission to link or combine any covered work with a work licensed
557
+ under version 3 of the GNU General Public License into a single
558
+ combined work, and to convey the resulting work. The terms of this
559
+ License will continue to apply to the part which is the covered work,
560
+ but the work with which it is combined will remain governed by version
561
+ 3 of the GNU General Public License.
562
+
563
+ 14. Revised Versions of this License.
564
+
565
+ The Free Software Foundation may publish revised and/or new versions of
566
+ the GNU Affero General Public License from time to time. Such new versions
567
+ will be similar in spirit to the present version, but may differ in detail to
568
+ address new problems or concerns.
569
+
570
+ Each version is given a distinguishing version number. If the
571
+ Program specifies that a certain numbered version of the GNU Affero General
572
+ Public License "or any later version" applies to it, you have the
573
+ option of following the terms and conditions either of that numbered
574
+ version or of any later version published by the Free Software
575
+ Foundation. If the Program does not specify a version number of the
576
+ GNU Affero General Public License, you may choose any version ever published
577
+ by the Free Software Foundation.
578
+
579
+ If the Program specifies that a proxy can decide which future
580
+ versions of the GNU Affero General Public License can be used, that proxy's
581
+ public statement of acceptance of a version permanently authorizes you
582
+ to choose that version for the Program.
583
+
584
+ Later license versions may give you additional or different
585
+ permissions. However, no additional obligations are imposed on any
586
+ author or copyright holder as a result of your choosing to follow a
587
+ later version.
588
+
589
+ 15. Disclaimer of Warranty.
590
+
591
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597
+ IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598
+ ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599
+
600
+ 16. Limitation of Liability.
601
+
602
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604
+ THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605
+ GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606
+ USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608
+ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609
+ EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610
+ SUCH DAMAGES.
611
+
612
+ 17. Interpretation of Sections 15 and 16.
613
+
614
+ If the disclaimer of warranty and limitation of liability provided
615
+ above cannot be given local legal effect according to their terms,
616
+ reviewing courts shall apply local law that most closely approximates
617
+ an absolute waiver of all civil liability in connection with the
618
+ Program, unless a warranty or assumption of liability accompanies a
619
+ copy of the Program in return for a fee.
620
+
621
+ END OF TERMS AND CONDITIONS
622
+
623
+ How to Apply These Terms to Your New Programs
624
+
625
+ If you develop a new program, and you want it to be of the greatest
626
+ possible use to the public, the best way to achieve this is to make it
627
+ free software which everyone can redistribute and change under these terms.
628
+
629
+ To do so, attach the following notices to the program. It is safest
630
+ to attach them to the start of each source file to most effectively
631
+ state the exclusion of warranty; and each file should have at least
632
+ the "copyright" line and a pointer to where the full notice is found.
633
+
634
+ <one line to give the program's name and a brief idea of what it does.>
635
+ Copyright (C) <year> <name of author>
636
+
637
+ This program is free software: you can redistribute it and/or modify
638
+ it under the terms of the GNU Affero General Public License as published by
639
+ the Free Software Foundation, either version 3 of the License, or
640
+ (at your option) any later version.
641
+
642
+ This program is distributed in the hope that it will be useful,
643
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
644
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645
+ GNU Affero General Public License for more details.
646
+
647
+ You should have received a copy of the GNU Affero General Public License
648
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
649
+
650
+ Also add information on how to contact you by electronic and paper mail.
651
+
652
+ If your software can interact with users remotely through a computer
653
+ network, you should also make sure that it provides a way for users to
654
+ get its source. For example, if your program is a web application, its
655
+ interface could display a "Source" link that leads users to an archive
656
+ of the code. There are many ways you could offer source, and different
657
+ solutions will be better for different programs; see section 13 for the
658
+ specific requirements.
659
+
660
+ You should also get your employer (if you work as a programmer) or school,
661
+ if any, to sign a "copyright disclaimer" for the program, if necessary.
662
+ For more information on this, and how to apply and follow the GNU AGPL, see
663
+ <https://www.gnu.org/licenses/>.
README.md CHANGED
@@ -1,16 +1,15 @@
1
  ---
2
  title: stable-diffusion-webui-master
3
- emoji: 📈
4
- colorFrom: gray
5
- colorTo: gray
6
  sdk: gradio
7
- sdk_version: 3.23.0
8
- app_file: app.py
9
  pinned: false
10
  license: mit
11
  ---
12
 
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
14
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
15
 
16
  # Stable Diffusion web UI
@@ -174,4 +173,4 @@ Licenses for borrowed code can be found in `Settings -> Licenses` screen, and al
174
  - Security advice - RyotaK
175
  - UniPC sampler - Wenliang Zhao - https://github.com/wl-zhao/UniPC
176
  - Initial Gradio script - posted on 4chan by an Anonymous user. Thank you Anonymous user.
177
- - (You)
 
1
  ---
2
  title: stable-diffusion-webui-master
3
+ emoji: 🔥
4
+ colorFrom: purple
5
+ colorTo: purple
6
  sdk: gradio
7
+ sdk_version: 1.17.0
8
+ app_file: launch.py
9
  pinned: false
10
  license: mit
11
  ---
12
 
 
13
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
14
 
15
  # Stable Diffusion web UI
 
173
  - Security advice - RyotaK
174
  - UniPC sampler - Wenliang Zhao - https://github.com/wl-zhao/UniPC
175
  - Initial Gradio script - posted on 4chan by an Anonymous user. Thank you Anonymous user.
176
+ - (You)
cache.json ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "hashes": {
3
+ "checkpoint/model.ckpt": {
4
+ "mtime": 1679342746.017363,
5
+ "sha256": "cc6cb27103417325ff94f52b7a5d2dde45a7515b25c255d8e396c90014281516"
6
+ },
7
+ "checkpoint/v1-5-pruned-emaonly.safetensors": {
8
+ "mtime": 1679344200.2246766,
9
+ "sha256": "6ce0161689b3853acaa03779ec93eafe75a02f4ced659bee03f50797806fa2fa"
10
+ },
11
+ "checkpoint/models\\Stable-diffusion\\v1-5-pruned-emaonly.safetensors": {
12
+ "mtime": 1679344200.2246766,
13
+ "sha256": "6ce0161689b3853acaa03779ec93eafe75a02f4ced659bee03f50797806fa2fa"
14
+ },
15
+ "checkpoint/robo-diffusion-v2-base.ckpt": {
16
+ "mtime": 1679721004.834917,
17
+ "sha256": "60c4ea708f4648e5be9d8b1edadc0784d9fd97281f1bd88b6c92208ec36e312e"
18
+ }
19
+ }
20
+ }
config.json ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "samples_save": true,
3
+ "samples_format": "png",
4
+ "samples_filename_pattern": "",
5
+ "save_images_add_number": true,
6
+ "grid_save": true,
7
+ "grid_format": "png",
8
+ "grid_extended_filename": false,
9
+ "grid_only_if_multiple": true,
10
+ "grid_prevent_empty_spots": false,
11
+ "n_rows": -1,
12
+ "enable_pnginfo": true,
13
+ "save_txt": false,
14
+ "save_images_before_face_restoration": false,
15
+ "save_images_before_highres_fix": false,
16
+ "save_images_before_color_correction": false,
17
+ "jpeg_quality": 80,
18
+ "webp_lossless": false,
19
+ "export_for_4chan": true,
20
+ "img_downscale_threshold": 4.0,
21
+ "target_side_length": 4000,
22
+ "img_max_size_mp": 200,
23
+ "use_original_name_batch": true,
24
+ "use_upscaler_name_as_suffix": false,
25
+ "save_selected_only": true,
26
+ "do_not_add_watermark": true,
27
+ "temp_dir": "",
28
+ "clean_temp_dir_at_start": false,
29
+ "outdir_samples": "",
30
+ "outdir_txt2img_samples": "outputs/txt2img-images",
31
+ "outdir_img2img_samples": "outputs/img2img-images",
32
+ "outdir_extras_samples": "outputs/extras-images",
33
+ "outdir_grids": "",
34
+ "outdir_txt2img_grids": "outputs/txt2img-grids",
35
+ "outdir_img2img_grids": "outputs/img2img-grids",
36
+ "outdir_save": "log/images",
37
+ "save_to_dirs": true,
38
+ "grid_save_to_dirs": true,
39
+ "use_save_to_dirs_for_ui": false,
40
+ "directories_filename_pattern": "[date]",
41
+ "directories_max_prompt_words": 8,
42
+ "ESRGAN_tile": 192,
43
+ "ESRGAN_tile_overlap": 8,
44
+ "realesrgan_enabled_models": [
45
+ "R-ESRGAN 4x+",
46
+ "R-ESRGAN 4x+ Anime6B"
47
+ ],
48
+ "upscaler_for_img2img": null,
49
+ "face_restoration_model": "CodeFormer",
50
+ "code_former_weight": 0.5,
51
+ "face_restoration_unload": false,
52
+ "show_warnings": false,
53
+ "memmon_poll_rate": 12,
54
+ "samples_log_stdout": false,
55
+ "multiple_tqdm": true,
56
+ "print_hypernet_extra": false,
57
+ "unload_models_when_training": false,
58
+ "pin_memory": false,
59
+ "save_optimizer_state": false,
60
+ "save_training_settings_to_txt": true,
61
+ "dataset_filename_word_regex": "",
62
+ "dataset_filename_join_string": " ",
63
+ "training_image_repeats_per_epoch": 1,
64
+ "training_write_csv_every": 500,
65
+ "training_xattention_optimizations": false,
66
+ "training_enable_tensorboard": false,
67
+ "training_tensorboard_save_images": false,
68
+ "training_tensorboard_flush_every": 120,
69
+ "sd_model_checkpoint": "v1-5-pruned-emaonly.safetensors [6ce0161689]",
70
+ "sd_checkpoint_cache": 0,
71
+ "sd_vae_checkpoint_cache": 0,
72
+ "sd_vae": "Automatic",
73
+ "sd_vae_as_default": true,
74
+ "inpainting_mask_weight": 1.0,
75
+ "initial_noise_multiplier": 1.0,
76
+ "img2img_color_correction": false,
77
+ "img2img_fix_steps": false,
78
+ "img2img_background_color": "#ffffff",
79
+ "enable_quantization": false,
80
+ "enable_emphasis": true,
81
+ "enable_batch_seeds": true,
82
+ "comma_padding_backtrack": 20,
83
+ "CLIP_stop_at_last_layers": 1,
84
+ "upcast_attn": false,
85
+ "use_old_emphasis_implementation": false,
86
+ "use_old_karras_scheduler_sigmas": false,
87
+ "no_dpmpp_sde_batch_determinism": false,
88
+ "use_old_hires_fix_width_height": false,
89
+ "interrogate_keep_models_in_memory": false,
90
+ "interrogate_return_ranks": false,
91
+ "interrogate_clip_num_beams": 1,
92
+ "interrogate_clip_min_length": 24,
93
+ "interrogate_clip_max_length": 48,
94
+ "interrogate_clip_dict_limit": 1500,
95
+ "interrogate_clip_skip_categories": [],
96
+ "interrogate_deepbooru_score_threshold": 0.5,
97
+ "deepbooru_sort_alpha": true,
98
+ "deepbooru_use_spaces": false,
99
+ "deepbooru_escape": true,
100
+ "deepbooru_filter_tags": "",
101
+ "extra_networks_default_view": "cards",
102
+ "extra_networks_default_multiplier": 1.0,
103
+ "extra_networks_add_text_separator": " ",
104
+ "sd_hypernetwork": "None",
105
+ "return_grid": true,
106
+ "do_not_show_images": false,
107
+ "add_model_hash_to_info": true,
108
+ "add_model_name_to_info": true,
109
+ "disable_weights_auto_swap": true,
110
+ "send_seed": true,
111
+ "send_size": true,
112
+ "font": "",
113
+ "js_modal_lightbox": true,
114
+ "js_modal_lightbox_initially_zoomed": true,
115
+ "show_progress_in_title": true,
116
+ "samplers_in_dropdown": true,
117
+ "dimensions_and_batch_together": true,
118
+ "keyedit_precision_attention": 0.1,
119
+ "keyedit_precision_extra": 0.05,
120
+ "quicksettings": "sd_model_checkpoint",
121
+ "hidden_tabs": [],
122
+ "ui_reorder": "inpaint, sampler, checkboxes, hires_fix, dimensions, cfg, seed, batch, override_settings, scripts",
123
+ "ui_extra_networks_tab_reorder": "",
124
+ "localization": "None",
125
+ "show_progressbar": true,
126
+ "live_previews_enable": true,
127
+ "show_progress_grid": true,
128
+ "show_progress_every_n_steps": 10,
129
+ "show_progress_type": "Approx NN",
130
+ "live_preview_content": "Prompt",
131
+ "live_preview_refresh_period": 1000,
132
+ "hide_samplers": [],
133
+ "eta_ddim": 0.0,
134
+ "eta_ancestral": 1.0,
135
+ "ddim_discretize": "uniform",
136
+ "s_churn": 0.0,
137
+ "s_tmin": 0.0,
138
+ "s_noise": 1.0,
139
+ "eta_noise_seed_delta": 0,
140
+ "always_discard_next_to_last_sigma": false,
141
+ "uni_pc_variant": "bh1",
142
+ "uni_pc_skip_type": "time_uniform",
143
+ "uni_pc_order": 3,
144
+ "uni_pc_lower_order_final": true,
145
+ "postprocessing_enable_in_main_ui": [],
146
+ "postprocessing_operation_order": [],
147
+ "upscaling_max_images_in_cache": 5,
148
+ "disabled_extensions": [],
149
+ "sd_checkpoint_hash": "6ce0161689b3853acaa03779ec93eafe75a02f4ced659bee03f50797806fa2fa",
150
+ "ldsr_steps": 100,
151
+ "ldsr_cached": false,
152
+ "SWIN_tile": 192,
153
+ "SWIN_tile_overlap": 8,
154
+ "sd_lora": "None",
155
+ "lora_apply_to_outputs": false
156
+ }
environment-wsl2.yaml ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: automatic
2
+ channels:
3
+ - pytorch
4
+ - defaults
5
+ dependencies:
6
+ - python=3.10
7
+ - pip=22.2.2
8
+ - cudatoolkit=11.3
9
+ - pytorch=1.12.1
10
+ - torchvision=0.13.1
11
+ - numpy=1.23.1
model.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cc6cb27103417325ff94f52b7a5d2dde45a7515b25c255d8e396c90014281516
3
+ size 4265380512
params.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 1963504573, Size: 512x512, Model hash: cc6cb27103, Model: model
requirements.txt ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ blendmodes
2
+ accelerate
3
+ basicsr
4
+ fonts
5
+ font-roboto
6
+ gfpgan
7
+ gradio==3.16.2
8
+ invisible-watermark
9
+ numpy
10
+ omegaconf
11
+ opencv-contrib-python
12
+ requests
13
+ piexif
14
+ Pillow
15
+ pytorch_lightning==1.7.7
16
+ realesrgan
17
+ scikit-image>=0.19
18
+ timm==0.4.12
19
+ transformers==4.25.1
20
+ torch
21
+ einops
22
+ jsonmerge
23
+ clean-fid
24
+ resize-right
25
+ torchdiffeq
26
+ kornia
27
+ lark
28
+ inflection
29
+ GitPython
30
+ torchsde
31
+ safetensors
32
+ psutil
33
+ streamlit
requirements_versions.txt ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ blendmodes==2022
2
+ transformers==4.25.1
3
+ accelerate==0.12.0
4
+ basicsr==1.4.2
5
+ gfpgan==1.3.8
6
+ gradio==3.16.2
7
+ numpy==1.23.3
8
+ Pillow==9.4.0
9
+ realesrgan==0.3.0
10
+ torch
11
+ omegaconf==2.2.3
12
+ pytorch_lightning==1.7.6
13
+ scikit-image==0.19.2
14
+ fonts
15
+ font-roboto
16
+ timm==0.6.7
17
+ piexif==1.1.3
18
+ einops==0.4.1
19
+ jsonmerge==1.8.0
20
+ clean-fid==0.1.29
21
+ resize-right==0.0.2
22
+ torchdiffeq==0.2.3
23
+ kornia==0.6.7
24
+ lark==1.1.2
25
+ inflection==0.5.1
26
+ GitPython==3.1.30
27
+ torchsde==0.2.5
28
+ safetensors==0.2.7
29
+ httpcore<=0.15
30
+ fastapi==0.94.0
31
+ streamlit==1.17.0
screenshot.png ADDED
script.js ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function gradioApp() {
2
+ const elems = document.getElementsByTagName('gradio-app')
3
+ const gradioShadowRoot = elems.length == 0 ? null : elems[0].shadowRoot
4
+ return !!gradioShadowRoot ? gradioShadowRoot : document;
5
+ }
6
+
7
+ function get_uiCurrentTab() {
8
+ return gradioApp().querySelector('#tabs button:not(.border-transparent)')
9
+ }
10
+
11
+ function get_uiCurrentTabContent() {
12
+ return gradioApp().querySelector('.tabitem[id^=tab_]:not([style*="display: none"])')
13
+ }
14
+
15
+ uiUpdateCallbacks = []
16
+ uiLoadedCallbacks = []
17
+ uiTabChangeCallbacks = []
18
+ optionsChangedCallbacks = []
19
+ let uiCurrentTab = null
20
+
21
+ function onUiUpdate(callback){
22
+ uiUpdateCallbacks.push(callback)
23
+ }
24
+ function onUiLoaded(callback){
25
+ uiLoadedCallbacks.push(callback)
26
+ }
27
+ function onUiTabChange(callback){
28
+ uiTabChangeCallbacks.push(callback)
29
+ }
30
+ function onOptionsChanged(callback){
31
+ optionsChangedCallbacks.push(callback)
32
+ }
33
+
34
+ function runCallback(x, m){
35
+ try {
36
+ x(m)
37
+ } catch (e) {
38
+ (console.error || console.log).call(console, e.message, e);
39
+ }
40
+ }
41
+ function executeCallbacks(queue, m) {
42
+ queue.forEach(function(x){runCallback(x, m)})
43
+ }
44
+
45
+ var executedOnLoaded = false;
46
+
47
+ document.addEventListener("DOMContentLoaded", function() {
48
+ var mutationObserver = new MutationObserver(function(m){
49
+ if(!executedOnLoaded && gradioApp().querySelector('#txt2img_prompt')){
50
+ executedOnLoaded = true;
51
+ executeCallbacks(uiLoadedCallbacks);
52
+ }
53
+
54
+ executeCallbacks(uiUpdateCallbacks, m);
55
+ const newTab = get_uiCurrentTab();
56
+ if ( newTab && ( newTab !== uiCurrentTab ) ) {
57
+ uiCurrentTab = newTab;
58
+ executeCallbacks(uiTabChangeCallbacks);
59
+ }
60
+ });
61
+ mutationObserver.observe( gradioApp(), { childList:true, subtree:true })
62
+ });
63
+
64
+ /**
65
+ * Add a ctrl+enter as a shortcut to start a generation
66
+ */
67
+ document.addEventListener('keydown', function(e) {
68
+ var handled = false;
69
+ if (e.key !== undefined) {
70
+ if((e.key == "Enter" && (e.metaKey || e.ctrlKey || e.altKey))) handled = true;
71
+ } else if (e.keyCode !== undefined) {
72
+ if((e.keyCode == 13 && (e.metaKey || e.ctrlKey || e.altKey))) handled = true;
73
+ }
74
+ if (handled) {
75
+ button = get_uiCurrentTabContent().querySelector('button[id$=_generate]');
76
+ if (button) {
77
+ button.click();
78
+ }
79
+ e.preventDefault();
80
+ }
81
+ })
82
+
83
+ /**
84
+ * checks that a UI element is not in another hidden element or tab content
85
+ */
86
+ function uiElementIsVisible(el) {
87
+ let isVisible = !el.closest('.\\!hidden');
88
+ if ( ! isVisible ) {
89
+ return false;
90
+ }
91
+
92
+ while( isVisible = el.closest('.tabitem')?.style.display !== 'none' ) {
93
+ if ( ! isVisible ) {
94
+ return false;
95
+ } else if ( el.parentElement ) {
96
+ el = el.parentElement
97
+ } else {
98
+ break;
99
+ }
100
+ }
101
+ return isVisible;
102
+ }
style.css ADDED
@@ -0,0 +1,1040 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .container {
2
+ max-width: 100%;
3
+ }
4
+
5
+ .token-counter{
6
+ position: absolute;
7
+ display: inline-block;
8
+ right: 2em;
9
+ min-width: 0 !important;
10
+ width: auto;
11
+ z-index: 100;
12
+ }
13
+
14
+ .token-counter.error span{
15
+ box-shadow: 0 0 0.0 0.3em rgba(255,0,0,0.15), inset 0 0 0.6em rgba(255,0,0,0.075);
16
+ border: 2px solid rgba(255,0,0,0.4) !important;
17
+ }
18
+
19
+ .token-counter div{
20
+ display: inline;
21
+ }
22
+
23
+ .token-counter span{
24
+ padding: 0.1em 0.75em;
25
+ }
26
+
27
+ #sh{
28
+ min-width: 2em;
29
+ min-height: 2em;
30
+ max-width: 2em;
31
+ max-height: 2em;
32
+ flex-grow: 0;
33
+ padding-left: 0.25em;
34
+ padding-right: 0.25em;
35
+ margin: 0.1em 0;
36
+ opacity: 0%;
37
+ cursor: default;
38
+ }
39
+
40
+ .output-html p {margin: 0 0.5em;}
41
+
42
+ .row > *,
43
+ .row > .gr-form > * {
44
+ min-width: min(120px, 100%);
45
+ flex: 1 1 0%;
46
+ }
47
+
48
+ .performance {
49
+ font-size: 0.85em;
50
+ color: #444;
51
+ }
52
+
53
+ .performance p{
54
+ display: inline-block;
55
+ }
56
+
57
+ .performance .time {
58
+ margin-right: 0;
59
+ }
60
+
61
+ .performance .vram {
62
+ }
63
+
64
+ #txt2img_generate, #img2img_generate {
65
+ min-height: 4.5em;
66
+ }
67
+
68
+ @media screen and (min-width: 2500px) {
69
+ #txt2img_gallery, #img2img_gallery {
70
+ min-height: 768px;
71
+ }
72
+ }
73
+
74
+ #txt2img_gallery img, #img2img_gallery img{
75
+ object-fit: scale-down;
76
+ }
77
+ #txt2img_actions_column, #img2img_actions_column {
78
+ margin: 0.35rem 0.75rem 0.35rem 0;
79
+ }
80
+ #script_list {
81
+ padding: .625rem .75rem 0 .625rem;
82
+ }
83
+ .justify-center.overflow-x-scroll {
84
+ justify-content: left;
85
+ }
86
+
87
+ .justify-center.overflow-x-scroll button:first-of-type {
88
+ margin-left: auto;
89
+ }
90
+
91
+ .justify-center.overflow-x-scroll button:last-of-type {
92
+ margin-right: auto;
93
+ }
94
+
95
+ [id$=_random_seed], [id$=_random_subseed], [id$=_reuse_seed], [id$=_reuse_subseed], #open_folder{
96
+ min-width: 2.3em;
97
+ height: 2.5em;
98
+ flex-grow: 0;
99
+ padding-left: 0.25em;
100
+ padding-right: 0.25em;
101
+ }
102
+
103
+ #hidden_element{
104
+ display: none;
105
+ }
106
+
107
+ [id$=_seed_row], [id$=_subseed_row]{
108
+ gap: 0.5rem;
109
+ padding: 0.6em;
110
+ }
111
+
112
+ [id$=_subseed_show_box]{
113
+ min-width: auto;
114
+ flex-grow: 0;
115
+ }
116
+
117
+ [id$=_subseed_show_box] > div{
118
+ border: 0;
119
+ height: 100%;
120
+ }
121
+
122
+ [id$=_subseed_show]{
123
+ min-width: auto;
124
+ flex-grow: 0;
125
+ padding: 0;
126
+ }
127
+
128
+ [id$=_subseed_show] label{
129
+ height: 100%;
130
+ }
131
+
132
+ #txt2img_actions_column, #img2img_actions_column{
133
+ gap: 0;
134
+ margin-right: .75rem;
135
+ }
136
+
137
+ #txt2img_tools, #img2img_tools{
138
+ gap: 0.4em;
139
+ }
140
+
141
+ #interrogate_col{
142
+ min-width: 0 !important;
143
+ max-width: 8em !important;
144
+ margin-right: 1em;
145
+ gap: 0;
146
+ }
147
+ #interrogate, #deepbooru{
148
+ margin: 0em 0.25em 0.5em 0.25em;
149
+ min-width: 8em;
150
+ max-width: 8em;
151
+ }
152
+
153
+ #style_pos_col, #style_neg_col{
154
+ min-width: 8em !important;
155
+ }
156
+
157
+ #txt2img_styles_row, #img2img_styles_row{
158
+ gap: 0.25em;
159
+ margin-top: 0.3em;
160
+ }
161
+
162
+ #txt2img_styles_row > button, #img2img_styles_row > button{
163
+ margin: 0;
164
+ }
165
+
166
+ #txt2img_styles, #img2img_styles{
167
+ padding: 0;
168
+ }
169
+
170
+ #txt2img_styles > label > div, #img2img_styles > label > div{
171
+ min-height: 3.2em;
172
+ }
173
+
174
+ ul.list-none{
175
+ max-height: 35em;
176
+ z-index: 2000;
177
+ }
178
+
179
+ .gr-form{
180
+ background: transparent;
181
+ }
182
+
183
+ .my-4{
184
+ margin-top: 0;
185
+ margin-bottom: 0;
186
+ }
187
+
188
+ #resize_mode{
189
+ flex: 1.5;
190
+ }
191
+
192
+ button{
193
+ align-self: stretch !important;
194
+ }
195
+
196
+ .overflow-hidden, .gr-panel{
197
+ overflow: visible !important;
198
+ }
199
+
200
+ #x_type, #y_type{
201
+ max-width: 10em;
202
+ }
203
+
204
+ #txt2img_preview, #img2img_preview, #ti_preview{
205
+ position: absolute;
206
+ width: 320px;
207
+ left: 0;
208
+ right: 0;
209
+ margin-left: auto;
210
+ margin-right: auto;
211
+ margin-top: 34px;
212
+ z-index: 100;
213
+ border: none;
214
+ border-top-left-radius: 0;
215
+ border-top-right-radius: 0;
216
+ }
217
+
218
+ @media screen and (min-width: 768px) {
219
+ #txt2img_preview, #img2img_preview, #ti_preview {
220
+ position: absolute;
221
+ }
222
+ }
223
+
224
+ @media screen and (max-width: 767px) {
225
+ #txt2img_preview, #img2img_preview, #ti_preview {
226
+ position: relative;
227
+ }
228
+ }
229
+
230
+ #txt2img_preview div.left-0.top-0, #img2img_preview div.left-0.top-0, #ti_preview div.left-0.top-0{
231
+ display: none;
232
+ }
233
+
234
+ fieldset span.text-gray-500, .gr-block.gr-box span.text-gray-500, label.block span{
235
+ position: absolute;
236
+ top: -0.7em;
237
+ line-height: 1.2em;
238
+ padding: 0;
239
+ margin: 0 0.5em;
240
+
241
+ background-color: white;
242
+ box-shadow: 6px 0 6px 0px white, -6px 0 6px 0px white;
243
+
244
+ z-index: 300;
245
+ }
246
+
247
+ .dark fieldset span.text-gray-500, .dark .gr-block.gr-box span.text-gray-500, .dark label.block span{
248
+ background-color: rgb(31, 41, 55);
249
+ box-shadow: none;
250
+ border: 1px solid rgba(128, 128, 128, 0.1);
251
+ border-radius: 6px;
252
+ padding: 0.1em 0.5em;
253
+ }
254
+
255
+ #txt2img_column_batch, #img2img_column_batch{
256
+ min-width: min(13.5em, 100%) !important;
257
+ }
258
+
259
+ #settings fieldset span.text-gray-500, #settings .gr-block.gr-box span.text-gray-500, #settings label.block span{
260
+ position: relative;
261
+ border: none;
262
+ margin-right: 8em;
263
+ }
264
+
265
+ #settings .gr-panel div.flex-col div.justify-between div{
266
+ position: relative;
267
+ z-index: 200;
268
+ }
269
+
270
+ #settings{
271
+ display: block;
272
+ }
273
+
274
+ #settings > div{
275
+ border: none;
276
+ margin-left: 10em;
277
+ }
278
+
279
+ #settings > div.flex-wrap{
280
+ float: left;
281
+ display: block;
282
+ margin-left: 0;
283
+ width: 10em;
284
+ }
285
+
286
+ #settings > div.flex-wrap button{
287
+ display: block;
288
+ border: none;
289
+ text-align: left;
290
+ }
291
+
292
+ #settings_result{
293
+ height: 1.4em;
294
+ margin: 0 1.2em;
295
+ }
296
+
297
+ input[type="range"]{
298
+ margin: 0.5em 0 -0.3em 0;
299
+ }
300
+
301
+ #mask_bug_info {
302
+ text-align: center;
303
+ display: block;
304
+ margin-top: -0.75em;
305
+ margin-bottom: -0.75em;
306
+ }
307
+
308
+ #txt2img_negative_prompt, #img2img_negative_prompt{
309
+ }
310
+
311
+ /* gradio 3.8 adds opacity to progressbar which makes it blink; disable it here */
312
+ .transition.opacity-20 {
313
+ opacity: 1 !important;
314
+ }
315
+
316
+ /* more gradio's garbage cleanup */
317
+ .min-h-\[4rem\] { min-height: unset !important; }
318
+ .min-h-\[6rem\] { min-height: unset !important; }
319
+
320
+ .progressDiv{
321
+ position: relative;
322
+ height: 20px;
323
+ background: #b4c0cc;
324
+ border-radius: 3px !important;
325
+ margin-bottom: -3px;
326
+ }
327
+
328
+ .dark .progressDiv{
329
+ background: #424c5b;
330
+ }
331
+
332
+ .progressDiv .progress{
333
+ width: 0%;
334
+ height: 20px;
335
+ background: #0060df;
336
+ color: white;
337
+ font-weight: bold;
338
+ line-height: 20px;
339
+ padding: 0 8px 0 0;
340
+ text-align: right;
341
+ border-radius: 3px;
342
+ overflow: visible;
343
+ white-space: nowrap;
344
+ padding: 0 0.5em;
345
+ }
346
+
347
+ .livePreview{
348
+ position: absolute;
349
+ z-index: 300;
350
+ background-color: white;
351
+ margin: -4px;
352
+ }
353
+
354
+ .dark .livePreview{
355
+ background-color: rgb(17 24 39 / var(--tw-bg-opacity));
356
+ }
357
+
358
+ .livePreview img{
359
+ position: absolute;
360
+ object-fit: contain;
361
+ width: 100%;
362
+ height: 100%;
363
+ }
364
+
365
+ .popup-metadata{
366
+ color: black;
367
+ background: white;
368
+ display: inline-block;
369
+ padding: 1em;
370
+ white-space: pre-wrap;
371
+ }
372
+
373
+ .global-popup{
374
+ display: flex;
375
+ position: fixed;
376
+ z-index: 1001;
377
+ left: 0;
378
+ top: 0;
379
+ width: 100%;
380
+ height: 100%;
381
+ overflow: auto;
382
+ background-color: rgba(20, 20, 20, 0.95);
383
+ }
384
+
385
+
386
+ .global-popup-close:before {
387
+ content: "×";
388
+ }
389
+
390
+ .global-popup-close{
391
+ position: fixed;
392
+ right: 0.25em;
393
+ top: 0;
394
+ cursor: pointer;
395
+ color: white;
396
+ font-size: 32pt;
397
+ }
398
+
399
+ .global-popup-inner{
400
+ display: inline-block;
401
+ margin: auto;
402
+ padding: 2em;
403
+ }
404
+
405
+ #lightboxModal{
406
+ display: none;
407
+ position: fixed;
408
+ z-index: 1001;
409
+ padding-top: 100px;
410
+ left: 0;
411
+ top: 0;
412
+ width: 100%;
413
+ height: 100%;
414
+ overflow: auto;
415
+ background-color: rgba(20, 20, 20, 0.95);
416
+ user-select: none;
417
+ -webkit-user-select: none;
418
+ }
419
+
420
+ .modalControls {
421
+ display: grid;
422
+ grid-template-columns: 32px 32px 32px 1fr 32px;
423
+ grid-template-areas: "zoom tile save space close";
424
+ position: absolute;
425
+ top: 0;
426
+ left: 0;
427
+ right: 0;
428
+ padding: 16px;
429
+ gap: 16px;
430
+ background-color: rgba(0,0,0,0.2);
431
+ }
432
+
433
+ .modalClose {
434
+ grid-area: close;
435
+ }
436
+
437
+ .modalZoom {
438
+ grid-area: zoom;
439
+ }
440
+
441
+ .modalSave {
442
+ grid-area: save;
443
+ }
444
+
445
+ .modalTileImage {
446
+ grid-area: tile;
447
+ }
448
+
449
+ .modalClose,
450
+ .modalZoom,
451
+ .modalTileImage {
452
+ color: white;
453
+ font-size: 35px;
454
+ font-weight: bold;
455
+ cursor: pointer;
456
+ }
457
+
458
+ .modalSave {
459
+ color: white;
460
+ font-size: 28px;
461
+ margin-top: 8px;
462
+ font-weight: bold;
463
+ cursor: pointer;
464
+ }
465
+
466
+ .modalClose:hover,
467
+ .modalClose:focus,
468
+ .modalSave:hover,
469
+ .modalSave:focus,
470
+ .modalZoom:hover,
471
+ .modalZoom:focus {
472
+ color: #999;
473
+ text-decoration: none;
474
+ cursor: pointer;
475
+ }
476
+
477
+ #modalImage {
478
+ display: block;
479
+ margin: auto;
480
+ width: auto;
481
+ }
482
+
483
+ .modalImageFullscreen {
484
+ object-fit: contain;
485
+ height: 90%;
486
+ }
487
+
488
+ .modalPrev,
489
+ .modalNext {
490
+ cursor: pointer;
491
+ position: absolute;
492
+ top: 50%;
493
+ width: auto;
494
+ padding: 16px;
495
+ margin-top: -50px;
496
+ color: white;
497
+ font-weight: bold;
498
+ font-size: 20px;
499
+ transition: 0.6s ease;
500
+ border-radius: 0 3px 3px 0;
501
+ user-select: none;
502
+ -webkit-user-select: none;
503
+ }
504
+
505
+ .modalNext {
506
+ right: 0;
507
+ border-radius: 3px 0 0 3px;
508
+ }
509
+
510
+ .modalPrev:hover,
511
+ .modalNext:hover {
512
+ background-color: rgba(0, 0, 0, 0.8);
513
+ }
514
+
515
+ #imageARPreview{
516
+ position:absolute;
517
+ top:0px;
518
+ left:0px;
519
+ border:2px solid red;
520
+ background:rgba(255, 0, 0, 0.3);
521
+ z-index: 900;
522
+ pointer-events:none;
523
+ display:none
524
+ }
525
+
526
+ #txt2img_generate_box, #img2img_generate_box{
527
+ position: relative;
528
+ }
529
+
530
+ #txt2img_interrupt, #img2img_interrupt, #txt2img_skip, #img2img_skip{
531
+ position: absolute;
532
+ width: 50%;
533
+ height: 100%;
534
+ background: #b4c0cc;
535
+ display: none;
536
+ }
537
+
538
+ #txt2img_interrupt, #img2img_interrupt{
539
+ left: 0;
540
+ border-radius: 0.5rem 0 0 0.5rem;
541
+ }
542
+ #txt2img_skip, #img2img_skip{
543
+ right: 0;
544
+ border-radius: 0 0.5rem 0.5rem 0;
545
+ }
546
+
547
+ .red {
548
+ color: red;
549
+ }
550
+
551
+ .gallery-item {
552
+ --tw-bg-opacity: 0 !important;
553
+ }
554
+
555
+ #context-menu{
556
+ z-index:9999;
557
+ position:absolute;
558
+ display:block;
559
+ padding:0px 0;
560
+ border:2px solid #a55000;
561
+ border-radius:8px;
562
+ box-shadow:1px 1px 2px #CE6400;
563
+ width: 200px;
564
+ }
565
+
566
+ .context-menu-items{
567
+ list-style: none;
568
+ margin: 0;
569
+ padding: 0;
570
+ }
571
+
572
+ .context-menu-items a{
573
+ display:block;
574
+ padding:5px;
575
+ cursor:pointer;
576
+ }
577
+
578
+ .context-menu-items a:hover{
579
+ background: #a55000;
580
+ }
581
+
582
+ #quicksettings {
583
+ width: fit-content;
584
+ }
585
+
586
+ #quicksettings > div, #quicksettings > fieldset{
587
+ max-width: 24em;
588
+ min-width: 24em;
589
+ padding: 0;
590
+ border: none;
591
+ box-shadow: none;
592
+ background: none;
593
+ margin-right: 10px;
594
+ }
595
+
596
+ #quicksettings > div > div > div > label > span {
597
+ position: relative;
598
+ margin-right: 9em;
599
+ margin-bottom: -1em;
600
+ }
601
+
602
+ canvas[key="mask"] {
603
+ z-index: 12 !important;
604
+ filter: invert();
605
+ mix-blend-mode: multiply;
606
+ pointer-events: none;
607
+ }
608
+
609
+
610
+ /* gradio 3.4.1 stuff for editable scrollbar values */
611
+ .gr-box > div > div > input.gr-text-input{
612
+ position: absolute;
613
+ right: 0.5em;
614
+ top: -0.6em;
615
+ z-index: 400;
616
+ width: 6em;
617
+ }
618
+ #quicksettings .gr-box > div > div > input.gr-text-input {
619
+ top: -1.12em;
620
+ }
621
+
622
+ .row.gr-compact{
623
+ overflow: visible;
624
+ }
625
+
626
+ #img2img_image, #img2img_image > .h-60, #img2img_image > .h-60 > div, #img2img_image > .h-60 > div > img,
627
+ #img2img_sketch, #img2img_sketch > .h-60, #img2img_sketch > .h-60 > div, #img2img_sketch > .h-60 > div > img,
628
+ #img2maskimg, #img2maskimg > .h-60, #img2maskimg > .h-60 > div, #img2maskimg > .h-60 > div > img,
629
+ #inpaint_sketch, #inpaint_sketch > .h-60, #inpaint_sketch > .h-60 > div, #inpaint_sketch > .h-60 > div > img
630
+ {
631
+ height: 480px !important;
632
+ max-height: 480px !important;
633
+ min-height: 480px !important;
634
+ }
635
+
636
+ /* Extensions */
637
+
638
+ #tab_extensions table{
639
+ border-collapse: collapse;
640
+ }
641
+
642
+ #tab_extensions table td, #tab_extensions table th{
643
+ border: 1px solid #ccc;
644
+ padding: 0.25em 0.5em;
645
+ }
646
+
647
+ #tab_extensions table input[type="checkbox"]{
648
+ margin-right: 0.5em;
649
+ }
650
+
651
+ #tab_extensions button{
652
+ max-width: 16em;
653
+ }
654
+
655
+ #tab_extensions input[disabled="disabled"]{
656
+ opacity: 0.5;
657
+ }
658
+
659
+ .extension-tag{
660
+ font-weight: bold;
661
+ font-size: 95%;
662
+ }
663
+
664
+ #available_extensions .info{
665
+ margin: 0;
666
+ }
667
+
668
+ #available_extensions .date_added{
669
+ opacity: 0.85;
670
+ font-size: 90%;
671
+ }
672
+
673
+ #image_buttons_txt2img button, #image_buttons_img2img button, #image_buttons_extras button{
674
+ min-width: auto;
675
+ padding-left: 0.5em;
676
+ padding-right: 0.5em;
677
+ }
678
+
679
+ .gr-form{
680
+ background-color: white;
681
+ }
682
+
683
+ .dark .gr-form{
684
+ background-color: rgb(31 41 55 / var(--tw-bg-opacity));
685
+ }
686
+
687
+ .gr-button-tool, .gr-button-tool-top{
688
+ max-width: 2.5em;
689
+ min-width: 2.5em !important;
690
+ height: 2.4em;
691
+ }
692
+
693
+ .gr-button-tool{
694
+ margin: 0.6em 0em 0.55em 0;
695
+ }
696
+
697
+ .gr-button-tool-top, #settings .gr-button-tool{
698
+ margin: 1.6em 0.7em 0.55em 0;
699
+ }
700
+
701
+
702
+ #modelmerger_results_container{
703
+ margin-top: 1em;
704
+ overflow: visible;
705
+ }
706
+
707
+ #modelmerger_models{
708
+ gap: 0;
709
+ }
710
+
711
+
712
+ #quicksettings .gr-button-tool{
713
+ margin: 0;
714
+ border-color: unset;
715
+ background-color: unset;
716
+ }
717
+
718
+ #modelmerger_interp_description>p {
719
+ margin: 0!important;
720
+ text-align: center;
721
+ }
722
+ #modelmerger_interp_description {
723
+ margin: 0.35rem 0.75rem 1.23rem;
724
+ }
725
+ #img2img_settings > div.gr-form, #txt2img_settings > div.gr-form {
726
+ padding-top: 0.9em;
727
+ padding-bottom: 0.9em;
728
+ }
729
+ #txt2img_settings {
730
+ padding-top: 1.16em;
731
+ padding-bottom: 0.9em;
732
+ }
733
+ #img2img_settings {
734
+ padding-bottom: 0.9em;
735
+ }
736
+
737
+ #img2img_settings div.gr-form .gr-form, #txt2img_settings div.gr-form .gr-form, #train_tabs div.gr-form .gr-form{
738
+ border: none;
739
+ padding-bottom: 0.5em;
740
+ }
741
+
742
+ footer {
743
+ display: none !important;
744
+ }
745
+
746
+ #footer{
747
+ text-align: center;
748
+ }
749
+
750
+ #footer div{
751
+ display: inline-block;
752
+ image-rendering: auto;
753
+ }
754
+
755
+
756
+ #footer .versions{
757
+ font-size: 85%;
758
+ opacity: 0.85;
759
+ }
760
+
761
+ #styledimg {
762
+ background-image: url(/html/diffusion_banner.gif);
763
+ background-repeat: no-repeat;
764
+ width: 600px;
765
+ height: 300px;
766
+ }
767
+
768
+ #txtimg_hr_finalres{
769
+ min-height: 0 !important;
770
+ padding: .625rem .75rem;
771
+ margin-left: -0.75em
772
+
773
+ }
774
+
775
+ #txtimg_hr_finalres .resolution{
776
+ font-weight: bold;
777
+ }
778
+
779
+ #txt2img_checkboxes, #img2img_checkboxes{
780
+ margin-bottom: 0.5em;
781
+ margin-left: 0em;
782
+ }
783
+ #txt2img_checkboxes > div, #img2img_checkboxes > div{
784
+ flex: 0;
785
+ white-space: nowrap;
786
+ min-width: auto;
787
+ }
788
+
789
+ #img2img_copy_to_img2img, #img2img_copy_to_sketch, #img2img_copy_to_inpaint, #img2img_copy_to_inpaint_sketch{
790
+ margin-left: 0em;
791
+ }
792
+
793
+ #axis_options {
794
+ margin-left: 0em;
795
+ }
796
+
797
+ .inactive{
798
+ opacity: 0.5;
799
+ }
800
+
801
+ [id*='_prompt_container']{
802
+ gap: 0;
803
+ }
804
+
805
+ [id*='_prompt_container'] > div{
806
+ margin: -0.4em 0 0 0;
807
+ }
808
+
809
+ .gr-compact {
810
+ border: none;
811
+ }
812
+
813
+ .dark .gr-compact{
814
+ background-color: rgb(31 41 55 / var(--tw-bg-opacity));
815
+ margin-left: 0;
816
+ }
817
+
818
+ .gr-compact{
819
+ overflow: visible;
820
+ }
821
+
822
+ .gr-compact > *{
823
+ }
824
+
825
+ .gr-compact .gr-block, .gr-compact .gr-form{
826
+ border: none;
827
+ box-shadow: none;
828
+ }
829
+
830
+ .gr-compact .gr-box{
831
+ border-radius: .5rem !important;
832
+ border-width: 1px !important;
833
+ }
834
+
835
+ #mode_img2img > div > div{
836
+ gap: 0 !important;
837
+ }
838
+
839
+ [id*='img2img_copy_to_'] {
840
+ border: none;
841
+ }
842
+
843
+ [id*='img2img_copy_to_'] > button {
844
+ }
845
+
846
+ [id*='img2img_label_copy_to_'] {
847
+ font-size: 1.0em;
848
+ font-weight: bold;
849
+ text-align: center;
850
+ line-height: 2.4em;
851
+ }
852
+
853
+ .extra-networks > div > [id *= '_extra_']{
854
+ margin: 0.3em;
855
+ }
856
+
857
+ .extra-network-subdirs{
858
+ padding: 0.2em 0.35em;
859
+ }
860
+
861
+ .extra-network-subdirs button{
862
+ margin: 0 0.15em;
863
+ }
864
+
865
+ #txt2img_extra_networks .search, #img2img_extra_networks .search{
866
+ display: inline-block;
867
+ max-width: 16em;
868
+ margin: 0.3em;
869
+ align-self: center;
870
+ }
871
+
872
+ #txt2img_extra_view, #img2img_extra_view {
873
+ width: auto;
874
+ }
875
+
876
+ .extra-network-cards .nocards, .extra-network-thumbs .nocards{
877
+ margin: 1.25em 0.5em 0.5em 0.5em;
878
+ }
879
+
880
+ .extra-network-cards .nocards h1, .extra-network-thumbs .nocards h1{
881
+ font-size: 1.5em;
882
+ margin-bottom: 1em;
883
+ }
884
+
885
+ .extra-network-cards .nocards li, .extra-network-thumbs .nocards li{
886
+ margin-left: 0.5em;
887
+ }
888
+
889
+
890
+ .extra-network-cards .card .metadata-button:before, .extra-network-thumbs .card .metadata-button:before{
891
+ content: "🛈";
892
+ }
893
+ .extra-network-cards .card .metadata-button, .extra-network-thumbs .card .metadata-button{
894
+ display: none;
895
+ position: absolute;
896
+ right: 0;
897
+ color: white;
898
+ text-shadow: 2px 2px 3px black;
899
+ padding: 0.25em;
900
+ font-size: 22pt;
901
+ }
902
+ .extra-network-cards .card:hover .metadata-button, .extra-network-thumbs .card:hover .metadata-button{
903
+ display: inline-block;
904
+ }
905
+ .extra-network-cards .card .metadata-button:hover, .extra-network-thumbs .card .metadata-button:hover{
906
+ color: red;
907
+ }
908
+
909
+
910
+ .extra-network-thumbs {
911
+ display: flex;
912
+ flex-flow: row wrap;
913
+ gap: 10px;
914
+ }
915
+
916
+ .extra-network-thumbs .card {
917
+ height: 6em;
918
+ width: 6em;
919
+ cursor: pointer;
920
+ background-image: url('./file=html/card-no-preview.png');
921
+ background-size: cover;
922
+ background-position: center center;
923
+ position: relative;
924
+ }
925
+
926
+ .extra-network-thumbs .card:hover .additional a {
927
+ display: inline-block;
928
+ }
929
+
930
+ .extra-network-thumbs .actions .additional a {
931
+ background-image: url('./file=html/image-update.svg');
932
+ background-repeat: no-repeat;
933
+ background-size: cover;
934
+ background-position: center center;
935
+ position: absolute;
936
+ top: 0;
937
+ left: 0;
938
+ width: 24px;
939
+ height: 24px;
940
+ display: none;
941
+ font-size: 0;
942
+ text-align: -9999;
943
+ }
944
+
945
+ .extra-network-thumbs .actions .name {
946
+ position: absolute;
947
+ bottom: 0;
948
+ font-size: 10px;
949
+ padding: 3px;
950
+ width: 100%;
951
+ overflow: hidden;
952
+ white-space: nowrap;
953
+ text-overflow: ellipsis;
954
+ background: rgba(0,0,0,.5);
955
+ color: white;
956
+ }
957
+
958
+ .extra-network-thumbs .card:hover .actions .name {
959
+ white-space: normal;
960
+ word-break: break-all;
961
+ }
962
+
963
+ .extra-network-cards .card{
964
+ display: inline-block;
965
+ margin: 0.5em;
966
+ width: 16em;
967
+ height: 24em;
968
+ box-shadow: 0 0 5px rgba(128, 128, 128, 0.5);
969
+ border-radius: 0.2em;
970
+ position: relative;
971
+
972
+ background-size: auto 100%;
973
+ background-position: center;
974
+ overflow: hidden;
975
+ cursor: pointer;
976
+
977
+ background-image: url('./file=html/card-no-preview.png')
978
+ }
979
+
980
+ .extra-network-cards .card:hover{
981
+ box-shadow: 0 0 2px 0.3em rgba(0, 128, 255, 0.35);
982
+ }
983
+
984
+ .extra-network-cards .card .actions .additional{
985
+ display: none;
986
+ }
987
+
988
+ .extra-network-cards .card .actions{
989
+ position: absolute;
990
+ bottom: 0;
991
+ left: 0;
992
+ right: 0;
993
+ padding: 0.5em;
994
+ color: white;
995
+ background: rgba(0,0,0,0.5);
996
+ box-shadow: 0 0 0.25em 0.25em rgba(0,0,0,0.5);
997
+ text-shadow: 0 0 0.2em black;
998
+ }
999
+
1000
+ .extra-network-cards .card .actions:hover{
1001
+ box-shadow: 0 0 0.75em 0.75em rgba(0,0,0,0.5) !important;
1002
+ }
1003
+
1004
+ .extra-network-cards .card .actions .name{
1005
+ font-size: 1.7em;
1006
+ font-weight: bold;
1007
+ line-break: anywhere;
1008
+ }
1009
+
1010
+ .extra-network-cards .card .actions .description {
1011
+ display: block;
1012
+ max-height: 3em;
1013
+ white-space: pre-wrap;
1014
+ line-height: 1.1;
1015
+ }
1016
+
1017
+ .extra-network-cards .card .actions .description:hover {
1018
+ max-height: none;
1019
+ }
1020
+
1021
+ .extra-network-cards .card .actions:hover .additional{
1022
+ display: block;
1023
+ }
1024
+
1025
+ .extra-network-cards .card ul{
1026
+ margin: 0.25em 0 0.75em 0.25em;
1027
+ cursor: unset;
1028
+ }
1029
+
1030
+ .extra-network-cards .card ul a{
1031
+ cursor: pointer;
1032
+ }
1033
+
1034
+ .extra-network-cards .card ul a:hover{
1035
+ color: red;
1036
+ }
1037
+
1038
+ [id*='_prompt_container'] > div {
1039
+ margin: 0!important;
1040
+ }
ui-config.json ADDED
@@ -0,0 +1,657 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "txt2img/Prompt/visible": true,
3
+ "txt2img/Prompt/value": "",
4
+ "txt2img/Negative prompt/visible": true,
5
+ "txt2img/Negative prompt/value": "",
6
+ "txt2img/Styles/visible": true,
7
+ "txt2img/Styles/value": [],
8
+ "txt2img/Sampling method/visible": true,
9
+ "txt2img/Sampling method/value": "Euler a",
10
+ "txt2img/Sampling steps/visible": true,
11
+ "txt2img/Sampling steps/value": 20,
12
+ "txt2img/Sampling steps/minimum": 1,
13
+ "txt2img/Sampling steps/maximum": 150,
14
+ "txt2img/Sampling steps/step": 1,
15
+ "txt2img/Restore faces/visible": true,
16
+ "txt2img/Restore faces/value": false,
17
+ "txt2img/Tiling/visible": true,
18
+ "txt2img/Tiling/value": false,
19
+ "txt2img/Hires. fix/visible": true,
20
+ "txt2img/Hires. fix/value": false,
21
+ "txt2img/Upscaler/visible": true,
22
+ "txt2img/Upscaler/value": "Latent",
23
+ "txt2img/Hires steps/visible": true,
24
+ "txt2img/Hires steps/value": 0,
25
+ "txt2img/Hires steps/minimum": 0,
26
+ "txt2img/Hires steps/maximum": 150,
27
+ "txt2img/Hires steps/step": 1,
28
+ "txt2img/Denoising strength/visible": true,
29
+ "txt2img/Denoising strength/value": 0.7,
30
+ "txt2img/Denoising strength/minimum": 0.0,
31
+ "txt2img/Denoising strength/maximum": 1.0,
32
+ "txt2img/Denoising strength/step": 0.01,
33
+ "txt2img/Upscale by/visible": true,
34
+ "txt2img/Upscale by/value": 2.0,
35
+ "txt2img/Upscale by/minimum": 1.0,
36
+ "txt2img/Upscale by/maximum": 4.0,
37
+ "txt2img/Upscale by/step": 0.05,
38
+ "txt2img/Resize width to/visible": true,
39
+ "txt2img/Resize width to/value": 0,
40
+ "txt2img/Resize width to/minimum": 0,
41
+ "txt2img/Resize width to/maximum": 2048,
42
+ "txt2img/Resize width to/step": 8,
43
+ "txt2img/Resize height to/visible": true,
44
+ "txt2img/Resize height to/value": 0,
45
+ "txt2img/Resize height to/minimum": 0,
46
+ "txt2img/Resize height to/maximum": 2048,
47
+ "txt2img/Resize height to/step": 8,
48
+ "txt2img/Width/visible": true,
49
+ "txt2img/Width/value": 512,
50
+ "txt2img/Width/minimum": 64,
51
+ "txt2img/Width/maximum": 2048,
52
+ "txt2img/Width/step": 8,
53
+ "txt2img/Height/visible": true,
54
+ "txt2img/Height/value": 512,
55
+ "txt2img/Height/minimum": 64,
56
+ "txt2img/Height/maximum": 2048,
57
+ "txt2img/Height/step": 8,
58
+ "txt2img/Batch count/visible": true,
59
+ "txt2img/Batch count/value": 1,
60
+ "txt2img/Batch count/minimum": 1,
61
+ "txt2img/Batch count/maximum": 100,
62
+ "txt2img/Batch count/step": 1,
63
+ "txt2img/Batch size/visible": true,
64
+ "txt2img/Batch size/value": 1,
65
+ "txt2img/Batch size/minimum": 1,
66
+ "txt2img/Batch size/maximum": 8,
67
+ "txt2img/Batch size/step": 1,
68
+ "txt2img/CFG Scale/visible": true,
69
+ "txt2img/CFG Scale/value": 7.0,
70
+ "txt2img/CFG Scale/minimum": 1.0,
71
+ "txt2img/CFG Scale/maximum": 30.0,
72
+ "txt2img/CFG Scale/step": 0.5,
73
+ "txt2img/Seed/visible": true,
74
+ "txt2img/Seed/value": -1.0,
75
+ "txt2img/Extra/visible": true,
76
+ "txt2img/Extra/value": false,
77
+ "txt2img/Variation seed/visible": true,
78
+ "txt2img/Variation seed/value": -1.0,
79
+ "txt2img/Variation strength/visible": true,
80
+ "txt2img/Variation strength/value": 0.0,
81
+ "txt2img/Variation strength/minimum": 0,
82
+ "txt2img/Variation strength/maximum": 1,
83
+ "txt2img/Variation strength/step": 0.01,
84
+ "txt2img/Resize seed from width/visible": true,
85
+ "txt2img/Resize seed from width/value": 0,
86
+ "txt2img/Resize seed from width/minimum": 0,
87
+ "txt2img/Resize seed from width/maximum": 2048,
88
+ "txt2img/Resize seed from width/step": 8,
89
+ "txt2img/Resize seed from height/visible": true,
90
+ "txt2img/Resize seed from height/value": 0,
91
+ "txt2img/Resize seed from height/minimum": 0,
92
+ "txt2img/Resize seed from height/maximum": 2048,
93
+ "txt2img/Resize seed from height/step": 8,
94
+ "txt2img/Override settings/value": null,
95
+ "txt2img/Script/visible": true,
96
+ "txt2img/Script/value": "None",
97
+ "customscript/prompt_matrix.py/txt2img/Put variable parts at start of prompt/visible": true,
98
+ "customscript/prompt_matrix.py/txt2img/Put variable parts at start of prompt/value": false,
99
+ "customscript/prompt_matrix.py/txt2img/Use different seed for each picture/visible": true,
100
+ "customscript/prompt_matrix.py/txt2img/Use different seed for each picture/value": false,
101
+ "customscript/prompt_matrix.py/txt2img/Select prompt/visible": true,
102
+ "customscript/prompt_matrix.py/txt2img/Select prompt/value": "positive",
103
+ "customscript/prompt_matrix.py/txt2img/Select joining char/visible": true,
104
+ "customscript/prompt_matrix.py/txt2img/Select joining char/value": "comma",
105
+ "customscript/prompt_matrix.py/txt2img/Grid margins (px)/visible": true,
106
+ "customscript/prompt_matrix.py/txt2img/Grid margins (px)/value": 0,
107
+ "customscript/prompt_matrix.py/txt2img/Grid margins (px)/minimum": 0,
108
+ "customscript/prompt_matrix.py/txt2img/Grid margins (px)/maximum": 500,
109
+ "customscript/prompt_matrix.py/txt2img/Grid margins (px)/step": 2,
110
+ "customscript/prompts_from_file.py/txt2img/Iterate seed every line/visible": true,
111
+ "customscript/prompts_from_file.py/txt2img/Iterate seed every line/value": false,
112
+ "customscript/prompts_from_file.py/txt2img/Use same random seed for all lines/visible": true,
113
+ "customscript/prompts_from_file.py/txt2img/Use same random seed for all lines/value": false,
114
+ "customscript/prompts_from_file.py/txt2img/List of prompt inputs/visible": true,
115
+ "customscript/prompts_from_file.py/txt2img/List of prompt inputs/value": "",
116
+ "customscript/xyz_grid.py/txt2img/X type/visible": true,
117
+ "customscript/xyz_grid.py/txt2img/X type/value": "Seed",
118
+ "customscript/xyz_grid.py/txt2img/X values/visible": true,
119
+ "customscript/xyz_grid.py/txt2img/X values/value": "",
120
+ "customscript/xyz_grid.py/txt2img/Y type/visible": true,
121
+ "customscript/xyz_grid.py/txt2img/Y type/value": "Nothing",
122
+ "customscript/xyz_grid.py/txt2img/Y values/visible": true,
123
+ "customscript/xyz_grid.py/txt2img/Y values/value": "",
124
+ "customscript/xyz_grid.py/txt2img/Z type/visible": true,
125
+ "customscript/xyz_grid.py/txt2img/Z type/value": "Nothing",
126
+ "customscript/xyz_grid.py/txt2img/Z values/visible": true,
127
+ "customscript/xyz_grid.py/txt2img/Z values/value": "",
128
+ "customscript/xyz_grid.py/txt2img/Draw legend/visible": true,
129
+ "customscript/xyz_grid.py/txt2img/Draw legend/value": true,
130
+ "customscript/xyz_grid.py/txt2img/Keep -1 for seeds/visible": true,
131
+ "customscript/xyz_grid.py/txt2img/Keep -1 for seeds/value": false,
132
+ "customscript/xyz_grid.py/txt2img/Include Sub Images/visible": true,
133
+ "customscript/xyz_grid.py/txt2img/Include Sub Images/value": false,
134
+ "customscript/xyz_grid.py/txt2img/Include Sub Grids/visible": true,
135
+ "customscript/xyz_grid.py/txt2img/Include Sub Grids/value": false,
136
+ "customscript/xyz_grid.py/txt2img/Grid margins (px)/visible": true,
137
+ "customscript/xyz_grid.py/txt2img/Grid margins (px)/value": 0,
138
+ "customscript/xyz_grid.py/txt2img/Grid margins (px)/minimum": 0,
139
+ "customscript/xyz_grid.py/txt2img/Grid margins (px)/maximum": 500,
140
+ "customscript/xyz_grid.py/txt2img/Grid margins (px)/step": 2,
141
+ "img2img/Prompt/visible": true,
142
+ "img2img/Prompt/value": "",
143
+ "img2img/Negative prompt/visible": true,
144
+ "img2img/Negative prompt/value": "",
145
+ "img2img/Styles/visible": true,
146
+ "img2img/Styles/value": [],
147
+ "img2img/Input directory/visible": true,
148
+ "img2img/Input directory/value": "",
149
+ "img2img/Output directory/visible": true,
150
+ "img2img/Output directory/value": "",
151
+ "img2img/Inpaint batch mask directory (required for inpaint batch processing only)/visible": true,
152
+ "img2img/Inpaint batch mask directory (required for inpaint batch processing only)/value": "",
153
+ "img2img/Resize mode/visible": true,
154
+ "img2img/Resize mode/value": "Just resize",
155
+ "img2img/Mask blur/visible": true,
156
+ "img2img/Mask blur/value": 4,
157
+ "img2img/Mask blur/minimum": 0,
158
+ "img2img/Mask blur/maximum": 64,
159
+ "img2img/Mask blur/step": 1,
160
+ "img2img/Mask transparency/value": 0,
161
+ "img2img/Mask transparency/minimum": 0,
162
+ "img2img/Mask transparency/maximum": 100,
163
+ "img2img/Mask transparency/step": 1,
164
+ "img2img/Mask mode/visible": true,
165
+ "img2img/Mask mode/value": "Inpaint masked",
166
+ "img2img/Masked content/visible": true,
167
+ "img2img/Masked content/value": "original",
168
+ "img2img/Inpaint area/visible": true,
169
+ "img2img/Inpaint area/value": "Whole picture",
170
+ "img2img/Only masked padding, pixels/visible": true,
171
+ "img2img/Only masked padding, pixels/value": 32,
172
+ "img2img/Only masked padding, pixels/minimum": 0,
173
+ "img2img/Only masked padding, pixels/maximum": 256,
174
+ "img2img/Only masked padding, pixels/step": 4,
175
+ "img2img/Sampling method/visible": true,
176
+ "img2img/Sampling method/value": "Euler a",
177
+ "img2img/Sampling steps/visible": true,
178
+ "img2img/Sampling steps/value": 20,
179
+ "img2img/Sampling steps/minimum": 1,
180
+ "img2img/Sampling steps/maximum": 150,
181
+ "img2img/Sampling steps/step": 1,
182
+ "img2img/Restore faces/visible": true,
183
+ "img2img/Restore faces/value": false,
184
+ "img2img/Tiling/visible": true,
185
+ "img2img/Tiling/value": false,
186
+ "img2img/Width/visible": true,
187
+ "img2img/Width/value": 512,
188
+ "img2img/Width/minimum": 64,
189
+ "img2img/Width/maximum": 2048,
190
+ "img2img/Width/step": 8,
191
+ "img2img/Height/visible": true,
192
+ "img2img/Height/value": 512,
193
+ "img2img/Height/minimum": 64,
194
+ "img2img/Height/maximum": 2048,
195
+ "img2img/Height/step": 8,
196
+ "img2img/Batch count/visible": true,
197
+ "img2img/Batch count/value": 1,
198
+ "img2img/Batch count/minimum": 1,
199
+ "img2img/Batch count/maximum": 100,
200
+ "img2img/Batch count/step": 1,
201
+ "img2img/Batch size/visible": true,
202
+ "img2img/Batch size/value": 1,
203
+ "img2img/Batch size/minimum": 1,
204
+ "img2img/Batch size/maximum": 8,
205
+ "img2img/Batch size/step": 1,
206
+ "img2img/CFG Scale/visible": true,
207
+ "img2img/CFG Scale/value": 7.0,
208
+ "img2img/CFG Scale/minimum": 1.0,
209
+ "img2img/CFG Scale/maximum": 30.0,
210
+ "img2img/CFG Scale/step": 0.5,
211
+ "img2img/Image CFG Scale/value": 1.5,
212
+ "img2img/Image CFG Scale/minimum": 0,
213
+ "img2img/Image CFG Scale/maximum": 3.0,
214
+ "img2img/Image CFG Scale/step": 0.05,
215
+ "img2img/Denoising strength/visible": true,
216
+ "img2img/Denoising strength/value": 0.75,
217
+ "img2img/Denoising strength/minimum": 0.0,
218
+ "img2img/Denoising strength/maximum": 1.0,
219
+ "img2img/Denoising strength/step": 0.01,
220
+ "img2img/Seed/visible": true,
221
+ "img2img/Seed/value": -1.0,
222
+ "img2img/Extra/visible": true,
223
+ "img2img/Extra/value": false,
224
+ "img2img/Variation seed/visible": true,
225
+ "img2img/Variation seed/value": -1.0,
226
+ "img2img/Variation strength/visible": true,
227
+ "img2img/Variation strength/value": 0.0,
228
+ "img2img/Variation strength/minimum": 0,
229
+ "img2img/Variation strength/maximum": 1,
230
+ "img2img/Variation strength/step": 0.01,
231
+ "img2img/Resize seed from width/visible": true,
232
+ "img2img/Resize seed from width/value": 0,
233
+ "img2img/Resize seed from width/minimum": 0,
234
+ "img2img/Resize seed from width/maximum": 2048,
235
+ "img2img/Resize seed from width/step": 8,
236
+ "img2img/Resize seed from height/visible": true,
237
+ "img2img/Resize seed from height/value": 0,
238
+ "img2img/Resize seed from height/minimum": 0,
239
+ "img2img/Resize seed from height/maximum": 2048,
240
+ "img2img/Resize seed from height/step": 8,
241
+ "img2img/Override settings/value": null,
242
+ "img2img/Script/visible": true,
243
+ "img2img/Script/value": "None",
244
+ "customscript/img2imgalt.py/img2img/Override `Sampling method` to Euler?(this method is built for it)/visible": true,
245
+ "customscript/img2imgalt.py/img2img/Override `Sampling method` to Euler?(this method is built for it)/value": true,
246
+ "customscript/img2imgalt.py/img2img/Override `prompt` to the same value as `original prompt`?(and `negative prompt`)/visible": true,
247
+ "customscript/img2imgalt.py/img2img/Override `prompt` to the same value as `original prompt`?(and `negative prompt`)/value": true,
248
+ "customscript/img2imgalt.py/img2img/Original prompt/visible": true,
249
+ "customscript/img2imgalt.py/img2img/Original prompt/value": "",
250
+ "customscript/img2imgalt.py/img2img/Original negative prompt/visible": true,
251
+ "customscript/img2imgalt.py/img2img/Original negative prompt/value": "",
252
+ "customscript/img2imgalt.py/img2img/Override `Sampling Steps` to the same value as `Decode steps`?/visible": true,
253
+ "customscript/img2imgalt.py/img2img/Override `Sampling Steps` to the same value as `Decode steps`?/value": true,
254
+ "customscript/img2imgalt.py/img2img/Decode steps/visible": true,
255
+ "customscript/img2imgalt.py/img2img/Decode steps/value": 50,
256
+ "customscript/img2imgalt.py/img2img/Decode steps/minimum": 1,
257
+ "customscript/img2imgalt.py/img2img/Decode steps/maximum": 150,
258
+ "customscript/img2imgalt.py/img2img/Decode steps/step": 1,
259
+ "customscript/img2imgalt.py/img2img/Override `Denoising strength` to 1?/visible": true,
260
+ "customscript/img2imgalt.py/img2img/Override `Denoising strength` to 1?/value": true,
261
+ "customscript/img2imgalt.py/img2img/Decode CFG scale/visible": true,
262
+ "customscript/img2imgalt.py/img2img/Decode CFG scale/value": 1.0,
263
+ "customscript/img2imgalt.py/img2img/Decode CFG scale/minimum": 0.0,
264
+ "customscript/img2imgalt.py/img2img/Decode CFG scale/maximum": 15.0,
265
+ "customscript/img2imgalt.py/img2img/Decode CFG scale/step": 0.1,
266
+ "customscript/img2imgalt.py/img2img/Randomness/visible": true,
267
+ "customscript/img2imgalt.py/img2img/Randomness/value": 0.0,
268
+ "customscript/img2imgalt.py/img2img/Randomness/minimum": 0.0,
269
+ "customscript/img2imgalt.py/img2img/Randomness/maximum": 1.0,
270
+ "customscript/img2imgalt.py/img2img/Randomness/step": 0.01,
271
+ "customscript/img2imgalt.py/img2img/Sigma adjustment for finding noise for image/visible": true,
272
+ "customscript/img2imgalt.py/img2img/Sigma adjustment for finding noise for image/value": false,
273
+ "customscript/loopback.py/img2img/Loops/visible": true,
274
+ "customscript/loopback.py/img2img/Loops/value": 4,
275
+ "customscript/loopback.py/img2img/Loops/minimum": 1,
276
+ "customscript/loopback.py/img2img/Loops/maximum": 32,
277
+ "customscript/loopback.py/img2img/Loops/step": 1,
278
+ "customscript/loopback.py/img2img/Denoising strength change factor/visible": true,
279
+ "customscript/loopback.py/img2img/Denoising strength change factor/value": 1,
280
+ "customscript/loopback.py/img2img/Denoising strength change factor/minimum": 0.9,
281
+ "customscript/loopback.py/img2img/Denoising strength change factor/maximum": 1.1,
282
+ "customscript/loopback.py/img2img/Denoising strength change factor/step": 0.01,
283
+ "customscript/loopback.py/img2img/Append interrogated prompt at each iteration/visible": true,
284
+ "customscript/loopback.py/img2img/Append interrogated prompt at each iteration/value": "None",
285
+ "customscript/outpainting_mk_2.py/img2img/Pixels to expand/visible": true,
286
+ "customscript/outpainting_mk_2.py/img2img/Pixels to expand/value": 128,
287
+ "customscript/outpainting_mk_2.py/img2img/Pixels to expand/minimum": 8,
288
+ "customscript/outpainting_mk_2.py/img2img/Pixels to expand/maximum": 256,
289
+ "customscript/outpainting_mk_2.py/img2img/Pixels to expand/step": 8,
290
+ "customscript/outpainting_mk_2.py/img2img/Mask blur/visible": true,
291
+ "customscript/outpainting_mk_2.py/img2img/Mask blur/value": 8,
292
+ "customscript/outpainting_mk_2.py/img2img/Mask blur/minimum": 0,
293
+ "customscript/outpainting_mk_2.py/img2img/Mask blur/maximum": 64,
294
+ "customscript/outpainting_mk_2.py/img2img/Mask blur/step": 1,
295
+ "customscript/outpainting_mk_2.py/img2img/Fall-off exponent (lower=higher detail)/visible": true,
296
+ "customscript/outpainting_mk_2.py/img2img/Fall-off exponent (lower=higher detail)/value": 1.0,
297
+ "customscript/outpainting_mk_2.py/img2img/Fall-off exponent (lower=higher detail)/minimum": 0.0,
298
+ "customscript/outpainting_mk_2.py/img2img/Fall-off exponent (lower=higher detail)/maximum": 4.0,
299
+ "customscript/outpainting_mk_2.py/img2img/Fall-off exponent (lower=higher detail)/step": 0.01,
300
+ "customscript/outpainting_mk_2.py/img2img/Color variation/visible": true,
301
+ "customscript/outpainting_mk_2.py/img2img/Color variation/value": 0.05,
302
+ "customscript/outpainting_mk_2.py/img2img/Color variation/minimum": 0.0,
303
+ "customscript/outpainting_mk_2.py/img2img/Color variation/maximum": 1.0,
304
+ "customscript/outpainting_mk_2.py/img2img/Color variation/step": 0.01,
305
+ "customscript/poor_mans_outpainting.py/img2img/Pixels to expand/visible": true,
306
+ "customscript/poor_mans_outpainting.py/img2img/Pixels to expand/value": 128,
307
+ "customscript/poor_mans_outpainting.py/img2img/Pixels to expand/minimum": 8,
308
+ "customscript/poor_mans_outpainting.py/img2img/Pixels to expand/maximum": 256,
309
+ "customscript/poor_mans_outpainting.py/img2img/Pixels to expand/step": 8,
310
+ "customscript/poor_mans_outpainting.py/img2img/Mask blur/visible": true,
311
+ "customscript/poor_mans_outpainting.py/img2img/Mask blur/value": 4,
312
+ "customscript/poor_mans_outpainting.py/img2img/Mask blur/minimum": 0,
313
+ "customscript/poor_mans_outpainting.py/img2img/Mask blur/maximum": 64,
314
+ "customscript/poor_mans_outpainting.py/img2img/Mask blur/step": 1,
315
+ "customscript/poor_mans_outpainting.py/img2img/Masked content/visible": true,
316
+ "customscript/poor_mans_outpainting.py/img2img/Masked content/value": "fill",
317
+ "customscript/prompt_matrix.py/img2img/Put variable parts at start of prompt/visible": true,
318
+ "customscript/prompt_matrix.py/img2img/Put variable parts at start of prompt/value": false,
319
+ "customscript/prompt_matrix.py/img2img/Use different seed for each picture/visible": true,
320
+ "customscript/prompt_matrix.py/img2img/Use different seed for each picture/value": false,
321
+ "customscript/prompt_matrix.py/img2img/Select prompt/visible": true,
322
+ "customscript/prompt_matrix.py/img2img/Select prompt/value": "positive",
323
+ "customscript/prompt_matrix.py/img2img/Select joining char/visible": true,
324
+ "customscript/prompt_matrix.py/img2img/Select joining char/value": "comma",
325
+ "customscript/prompt_matrix.py/img2img/Grid margins (px)/visible": true,
326
+ "customscript/prompt_matrix.py/img2img/Grid margins (px)/value": 0,
327
+ "customscript/prompt_matrix.py/img2img/Grid margins (px)/minimum": 0,
328
+ "customscript/prompt_matrix.py/img2img/Grid margins (px)/maximum": 500,
329
+ "customscript/prompt_matrix.py/img2img/Grid margins (px)/step": 2,
330
+ "customscript/prompts_from_file.py/img2img/Iterate seed every line/visible": true,
331
+ "customscript/prompts_from_file.py/img2img/Iterate seed every line/value": false,
332
+ "customscript/prompts_from_file.py/img2img/Use same random seed for all lines/visible": true,
333
+ "customscript/prompts_from_file.py/img2img/Use same random seed for all lines/value": false,
334
+ "customscript/prompts_from_file.py/img2img/List of prompt inputs/visible": true,
335
+ "customscript/prompts_from_file.py/img2img/List of prompt inputs/value": "",
336
+ "customscript/sd_upscale.py/img2img/Tile overlap/visible": true,
337
+ "customscript/sd_upscale.py/img2img/Tile overlap/value": 64,
338
+ "customscript/sd_upscale.py/img2img/Tile overlap/minimum": 0,
339
+ "customscript/sd_upscale.py/img2img/Tile overlap/maximum": 256,
340
+ "customscript/sd_upscale.py/img2img/Tile overlap/step": 16,
341
+ "customscript/sd_upscale.py/img2img/Scale Factor/visible": true,
342
+ "customscript/sd_upscale.py/img2img/Scale Factor/value": 2.0,
343
+ "customscript/sd_upscale.py/img2img/Scale Factor/minimum": 1.0,
344
+ "customscript/sd_upscale.py/img2img/Scale Factor/maximum": 4.0,
345
+ "customscript/sd_upscale.py/img2img/Scale Factor/step": 0.05,
346
+ "customscript/sd_upscale.py/img2img/Upscaler/visible": true,
347
+ "customscript/sd_upscale.py/img2img/Upscaler/value": "None",
348
+ "customscript/xyz_grid.py/img2img/X type/visible": true,
349
+ "customscript/xyz_grid.py/img2img/X type/value": "Seed",
350
+ "customscript/xyz_grid.py/img2img/X values/visible": true,
351
+ "customscript/xyz_grid.py/img2img/X values/value": "",
352
+ "customscript/xyz_grid.py/img2img/Y type/visible": true,
353
+ "customscript/xyz_grid.py/img2img/Y type/value": "Nothing",
354
+ "customscript/xyz_grid.py/img2img/Y values/visible": true,
355
+ "customscript/xyz_grid.py/img2img/Y values/value": "",
356
+ "customscript/xyz_grid.py/img2img/Z type/visible": true,
357
+ "customscript/xyz_grid.py/img2img/Z type/value": "Nothing",
358
+ "customscript/xyz_grid.py/img2img/Z values/visible": true,
359
+ "customscript/xyz_grid.py/img2img/Z values/value": "",
360
+ "customscript/xyz_grid.py/img2img/Draw legend/visible": true,
361
+ "customscript/xyz_grid.py/img2img/Draw legend/value": true,
362
+ "customscript/xyz_grid.py/img2img/Keep -1 for seeds/visible": true,
363
+ "customscript/xyz_grid.py/img2img/Keep -1 for seeds/value": false,
364
+ "customscript/xyz_grid.py/img2img/Include Sub Images/visible": true,
365
+ "customscript/xyz_grid.py/img2img/Include Sub Images/value": false,
366
+ "customscript/xyz_grid.py/img2img/Include Sub Grids/visible": true,
367
+ "customscript/xyz_grid.py/img2img/Include Sub Grids/value": false,
368
+ "customscript/xyz_grid.py/img2img/Grid margins (px)/visible": true,
369
+ "customscript/xyz_grid.py/img2img/Grid margins (px)/value": 0,
370
+ "customscript/xyz_grid.py/img2img/Grid margins (px)/minimum": 0,
371
+ "customscript/xyz_grid.py/img2img/Grid margins (px)/maximum": 500,
372
+ "customscript/xyz_grid.py/img2img/Grid margins (px)/step": 2,
373
+ "extras/Input directory/visible": true,
374
+ "extras/Input directory/value": "",
375
+ "extras/Output directory/visible": true,
376
+ "extras/Output directory/value": "",
377
+ "extras/Show result images/visible": true,
378
+ "extras/Show result images/value": true,
379
+ "customscript/postprocessing_upscale.py/extras/Resize/visible": true,
380
+ "customscript/postprocessing_upscale.py/extras/Resize/value": 4,
381
+ "customscript/postprocessing_upscale.py/extras/Resize/minimum": 1.0,
382
+ "customscript/postprocessing_upscale.py/extras/Resize/maximum": 8.0,
383
+ "customscript/postprocessing_upscale.py/extras/Resize/step": 0.05,
384
+ "customscript/postprocessing_upscale.py/extras/Width/visible": true,
385
+ "customscript/postprocessing_upscale.py/extras/Width/value": 512,
386
+ "customscript/postprocessing_upscale.py/extras/Height/visible": true,
387
+ "customscript/postprocessing_upscale.py/extras/Height/value": 512,
388
+ "customscript/postprocessing_upscale.py/extras/Crop to fit/visible": true,
389
+ "customscript/postprocessing_upscale.py/extras/Crop to fit/value": true,
390
+ "customscript/postprocessing_upscale.py/extras/Upscaler 1/visible": true,
391
+ "customscript/postprocessing_upscale.py/extras/Upscaler 1/value": "None",
392
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2/visible": true,
393
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2/value": "None",
394
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2 visibility/visible": true,
395
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2 visibility/value": 0.0,
396
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2 visibility/minimum": 0.0,
397
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2 visibility/maximum": 1.0,
398
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2 visibility/step": 0.001,
399
+ "customscript/postprocessing_gfpgan.py/extras/GFPGAN visibility/visible": true,
400
+ "customscript/postprocessing_gfpgan.py/extras/GFPGAN visibility/value": 0,
401
+ "customscript/postprocessing_gfpgan.py/extras/GFPGAN visibility/minimum": 0.0,
402
+ "customscript/postprocessing_gfpgan.py/extras/GFPGAN visibility/maximum": 1.0,
403
+ "customscript/postprocessing_gfpgan.py/extras/GFPGAN visibility/step": 0.001,
404
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer visibility/visible": true,
405
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer visibility/value": 0,
406
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer visibility/minimum": 0.0,
407
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer visibility/maximum": 1.0,
408
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer visibility/step": 0.001,
409
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer weight (0 = maximum effect, 1 = minimum effect)/visible": true,
410
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer weight (0 = maximum effect, 1 = minimum effect)/value": 0,
411
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer weight (0 = maximum effect, 1 = minimum effect)/minimum": 0.0,
412
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer weight (0 = maximum effect, 1 = minimum effect)/maximum": 1.0,
413
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer weight (0 = maximum effect, 1 = minimum effect)/step": 0.001,
414
+ "modelmerger/Primary model (A)/visible": true,
415
+ "modelmerger/Primary model (A)/value": null,
416
+ "modelmerger/Secondary model (B)/visible": true,
417
+ "modelmerger/Secondary model (B)/value": null,
418
+ "modelmerger/Tertiary model (C)/visible": true,
419
+ "modelmerger/Tertiary model (C)/value": null,
420
+ "modelmerger/Custom Name (Optional)/visible": true,
421
+ "modelmerger/Custom Name (Optional)/value": "",
422
+ "modelmerger/Multiplier (M) - set to 0 to get model A/visible": true,
423
+ "modelmerger/Multiplier (M) - set to 0 to get model A/value": 0.3,
424
+ "modelmerger/Multiplier (M) - set to 0 to get model A/minimum": 0.0,
425
+ "modelmerger/Multiplier (M) - set to 0 to get model A/maximum": 1.0,
426
+ "modelmerger/Multiplier (M) - set to 0 to get model A/step": 0.05,
427
+ "modelmerger/Interpolation Method/visible": true,
428
+ "modelmerger/Interpolation Method/value": "Weighted sum",
429
+ "modelmerger/Checkpoint format/visible": true,
430
+ "modelmerger/Checkpoint format/value": "ckpt",
431
+ "modelmerger/Save as float16/visible": true,
432
+ "modelmerger/Save as float16/value": false,
433
+ "modelmerger/Copy config from/visible": true,
434
+ "modelmerger/Copy config from/value": "A, B or C",
435
+ "modelmerger/Bake in VAE/visible": true,
436
+ "modelmerger/Bake in VAE/value": "None",
437
+ "modelmerger/Discard weights with matching name/visible": true,
438
+ "modelmerger/Discard weights with matching name/value": "",
439
+ "train/Name/visible": true,
440
+ "train/Name/value": "",
441
+ "train/Initialization text/visible": true,
442
+ "train/Initialization text/value": "*",
443
+ "train/Number of vectors per token/visible": true,
444
+ "train/Number of vectors per token/value": 1,
445
+ "train/Number of vectors per token/minimum": 1,
446
+ "train/Number of vectors per token/maximum": 75,
447
+ "train/Number of vectors per token/step": 1,
448
+ "train/Overwrite Old Embedding/visible": true,
449
+ "train/Overwrite Old Embedding/value": false,
450
+ "train/Enter hypernetwork layer structure/visible": true,
451
+ "train/Enter hypernetwork layer structure/value": "1, 2, 1",
452
+ "train/Select activation function of hypernetwork. Recommended : Swish / Linear(none)/visible": true,
453
+ "train/Select activation function of hypernetwork. Recommended : Swish / Linear(none)/value": "linear",
454
+ "train/Select Layer weights initialization. Recommended: Kaiming for relu-like, Xavier for sigmoid-like, Normal otherwise/visible": true,
455
+ "train/Select Layer weights initialization. Recommended: Kaiming for relu-like, Xavier for sigmoid-like, Normal otherwise/value": "Normal",
456
+ "train/Add layer normalization/visible": true,
457
+ "train/Add layer normalization/value": false,
458
+ "train/Use dropout/visible": true,
459
+ "train/Use dropout/value": false,
460
+ "train/Enter hypernetwork Dropout structure (or empty). Recommended : 0~0.35 incrementing sequence: 0, 0.05, 0.15/visible": true,
461
+ "train/Enter hypernetwork Dropout structure (or empty). Recommended : 0~0.35 incrementing sequence: 0, 0.05, 0.15/value": "0, 0, 0",
462
+ "train/Overwrite Old Hypernetwork/visible": true,
463
+ "train/Overwrite Old Hypernetwork/value": false,
464
+ "train/Source directory/visible": true,
465
+ "train/Source directory/value": "",
466
+ "train/Destination directory/visible": true,
467
+ "train/Destination directory/value": "",
468
+ "train/Width/visible": true,
469
+ "train/Width/value": 512,
470
+ "train/Width/minimum": 64,
471
+ "train/Width/maximum": 2048,
472
+ "train/Width/step": 8,
473
+ "train/Height/visible": true,
474
+ "train/Height/value": 512,
475
+ "train/Height/minimum": 64,
476
+ "train/Height/maximum": 2048,
477
+ "train/Height/step": 8,
478
+ "train/Existing Caption txt Action/visible": true,
479
+ "train/Existing Caption txt Action/value": "ignore",
480
+ "train/Create flipped copies/visible": true,
481
+ "train/Create flipped copies/value": false,
482
+ "train/Split oversized images/visible": true,
483
+ "train/Split oversized images/value": false,
484
+ "train/Auto focal point crop/visible": true,
485
+ "train/Auto focal point crop/value": false,
486
+ "train/Auto-sized crop/visible": true,
487
+ "train/Auto-sized crop/value": false,
488
+ "train/Use BLIP for caption/visible": true,
489
+ "train/Use BLIP for caption/value": false,
490
+ "train/Use deepbooru for caption/visible": true,
491
+ "train/Use deepbooru for caption/value": false,
492
+ "train/Split image threshold/visible": true,
493
+ "train/Split image threshold/value": 0.5,
494
+ "train/Split image threshold/minimum": 0.0,
495
+ "train/Split image threshold/maximum": 1.0,
496
+ "train/Split image threshold/step": 0.05,
497
+ "train/Split image overlap ratio/visible": true,
498
+ "train/Split image overlap ratio/value": 0.2,
499
+ "train/Split image overlap ratio/minimum": 0.0,
500
+ "train/Split image overlap ratio/maximum": 0.9,
501
+ "train/Split image overlap ratio/step": 0.05,
502
+ "train/Focal point face weight/visible": true,
503
+ "train/Focal point face weight/value": 0.9,
504
+ "train/Focal point face weight/minimum": 0.0,
505
+ "train/Focal point face weight/maximum": 1.0,
506
+ "train/Focal point face weight/step": 0.05,
507
+ "train/Focal point entropy weight/visible": true,
508
+ "train/Focal point entropy weight/value": 0.15,
509
+ "train/Focal point entropy weight/minimum": 0.0,
510
+ "train/Focal point entropy weight/maximum": 1.0,
511
+ "train/Focal point entropy weight/step": 0.05,
512
+ "train/Focal point edges weight/visible": true,
513
+ "train/Focal point edges weight/value": 0.5,
514
+ "train/Focal point edges weight/minimum": 0.0,
515
+ "train/Focal point edges weight/maximum": 1.0,
516
+ "train/Focal point edges weight/step": 0.05,
517
+ "train/Create debug image/visible": true,
518
+ "train/Create debug image/value": false,
519
+ "train/Dimension lower bound/visible": true,
520
+ "train/Dimension lower bound/value": 384,
521
+ "train/Dimension lower bound/minimum": 64,
522
+ "train/Dimension lower bound/maximum": 2048,
523
+ "train/Dimension lower bound/step": 8,
524
+ "train/Dimension upper bound/visible": true,
525
+ "train/Dimension upper bound/value": 768,
526
+ "train/Dimension upper bound/minimum": 64,
527
+ "train/Dimension upper bound/maximum": 2048,
528
+ "train/Dimension upper bound/step": 8,
529
+ "train/Area lower bound/visible": true,
530
+ "train/Area lower bound/value": 4096,
531
+ "train/Area lower bound/minimum": 4096,
532
+ "train/Area lower bound/maximum": 4194304,
533
+ "train/Area lower bound/step": 1,
534
+ "train/Area upper bound/visible": true,
535
+ "train/Area upper bound/value": 409600,
536
+ "train/Area upper bound/minimum": 4096,
537
+ "train/Area upper bound/maximum": 4194304,
538
+ "train/Area upper bound/step": 1,
539
+ "train/Resizing objective/visible": true,
540
+ "train/Resizing objective/value": "Maximize area",
541
+ "train/Error threshold/visible": true,
542
+ "train/Error threshold/value": 0.1,
543
+ "train/Error threshold/minimum": 0,
544
+ "train/Error threshold/maximum": 1,
545
+ "train/Error threshold/step": 0.01,
546
+ "train/Embedding/visible": true,
547
+ "train/Embedding/value": null,
548
+ "train/Hypernetwork/visible": true,
549
+ "train/Hypernetwork/value": null,
550
+ "train/Embedding Learning rate/visible": true,
551
+ "train/Embedding Learning rate/value": "0.005",
552
+ "train/Hypernetwork Learning rate/visible": true,
553
+ "train/Hypernetwork Learning rate/value": "0.00001",
554
+ "train/Gradient Clipping/visible": true,
555
+ "train/Gradient Clipping/value": "disabled",
556
+ "train/Batch size/visible": true,
557
+ "train/Batch size/value": 1,
558
+ "train/Gradient accumulation steps/visible": true,
559
+ "train/Gradient accumulation steps/value": 1,
560
+ "train/Dataset directory/visible": true,
561
+ "train/Dataset directory/value": "",
562
+ "train/Log directory/visible": true,
563
+ "train/Log directory/value": "textual_inversion",
564
+ "train/Prompt template/visible": true,
565
+ "train/Prompt template/value": "style_filewords.txt",
566
+ "train/Do not resize images/visible": true,
567
+ "train/Do not resize images/value": false,
568
+ "train/Max steps/visible": true,
569
+ "train/Max steps/value": 100000,
570
+ "train/Save an image to log directory every N steps, 0 to disable/visible": true,
571
+ "train/Save an image to log directory every N steps, 0 to disable/value": 500,
572
+ "train/Save a copy of embedding to log directory every N steps, 0 to disable/visible": true,
573
+ "train/Save a copy of embedding to log directory every N steps, 0 to disable/value": 500,
574
+ "train/Use PNG alpha channel as loss weight/visible": true,
575
+ "train/Use PNG alpha channel as loss weight/value": false,
576
+ "train/Save images with embedding in PNG chunks/visible": true,
577
+ "train/Save images with embedding in PNG chunks/value": true,
578
+ "train/Read parameters (prompt, etc...) from txt2img tab when making previews/visible": true,
579
+ "train/Read parameters (prompt, etc...) from txt2img tab when making previews/value": false,
580
+ "train/Shuffle tags by ',' when creating prompts./visible": true,
581
+ "train/Shuffle tags by ',' when creating prompts./value": false,
582
+ "train/Drop out tags when creating prompts./visible": true,
583
+ "train/Drop out tags when creating prompts./value": 0,
584
+ "train/Drop out tags when creating prompts./minimum": 0,
585
+ "train/Drop out tags when creating prompts./maximum": 1,
586
+ "train/Drop out tags when creating prompts./step": 0.1,
587
+ "train/Choose latent sampling method/visible": true,
588
+ "train/Choose latent sampling method/value": "once",
589
+ "customscript/custom_code.py/txt2img/Python code/visible": true,
590
+ "customscript/custom_code.py/txt2img/Python code/value": "",
591
+ "customscript/custom_code.py/img2img/Python code/visible": true,
592
+ "customscript/custom_code.py/img2img/Python code/value": "",
593
+ "img2img/Desired FPS/visible": true,
594
+ "img2img/Desired FPS/value": 1,
595
+ "img2img/Desired FPS/minimum": 1,
596
+ "img2img/Desired FPS/maximum": 50,
597
+ "img2img/Desired FPS/step": 1,
598
+ "img2img/Interpolation frames/visible": true,
599
+ "img2img/Interpolation frames/value": 0,
600
+ "img2img/Interpolation frames/minimum": 0,
601
+ "img2img/Interpolation frames/maximum": 100,
602
+ "img2img/Interpolation frames/step": 1,
603
+ "customscript/gif2gif.py/img2img/Resize result back to original dimensions/visible": true,
604
+ "customscript/gif2gif.py/img2img/Resize result back to original dimensions/value": true,
605
+ "customscript/gif2gif.py/img2img/Delete intermediate frames after GIF generation/visible": true,
606
+ "customscript/gif2gif.py/img2img/Delete intermediate frames after GIF generation/value": true,
607
+ "customscript/gif2gif.py/img2img/For -1 seed, all frames in a GIF have common seed/visible": true,
608
+ "customscript/gif2gif.py/img2img/For -1 seed, all frames in a GIF have common seed/value": true,
609
+ "img2img/Actual FPS/visible": true,
610
+ "img2img/Actual FPS/value": "",
611
+ "img2img/Actual total duration/visible": true,
612
+ "img2img/Actual total duration/value": "",
613
+ "img2img/Actual total frames/visible": true,
614
+ "img2img/Actual total frames/value": "",
615
+ "img2img/Original FPS/visible": true,
616
+ "img2img/Original FPS/value": "",
617
+ "img2img/Original total duration/visible": true,
618
+ "img2img/Original total duration/value": "",
619
+ "img2img/Original total frames/visible": true,
620
+ "img2img/Original total frames/value": "",
621
+ "customscript/gif2gif.py/img2img/Generation loopbacks/visible": true,
622
+ "customscript/gif2gif.py/img2img/Generation loopbacks/value": 0,
623
+ "customscript/gif2gif.py/img2img/Generation loopbacks/minimum": 0,
624
+ "customscript/gif2gif.py/img2img/Generation loopbacks/maximum": 50,
625
+ "customscript/gif2gif.py/img2img/Generation loopbacks/step": 1,
626
+ "customscript/gif2gif.py/img2img/Loopback denoise strength/visible": true,
627
+ "customscript/gif2gif.py/img2img/Loopback denoise strength/value": 0.1,
628
+ "customscript/gif2gif.py/img2img/Loopback denoise strength/minimum": 0.01,
629
+ "customscript/gif2gif.py/img2img/Loopback denoise strength/maximum": 1,
630
+ "customscript/gif2gif.py/img2img/Loopback denoise strength/step": 0.01,
631
+ "customscript/gif2gif.py/img2img/Loopback decay/visible": true,
632
+ "customscript/gif2gif.py/img2img/Loopback decay/value": 1.0,
633
+ "customscript/gif2gif.py/img2img/Loopback decay/minimum": 0,
634
+ "customscript/gif2gif.py/img2img/Loopback decay/maximum": 2,
635
+ "customscript/gif2gif.py/img2img/Loopback decay/step": 0.05,
636
+ "customscript/gif2gif.py/img2img/Upscaler/visible": true,
637
+ "customscript/gif2gif.py/img2img/Upscaler/value": "None",
638
+ "customscript/gif2gif.py/img2img/Skip generation, only upscale/visible": true,
639
+ "customscript/gif2gif.py/img2img/Skip generation, only upscale/value": false,
640
+ "customscript/gif2gif.py/img2img/Factor/visible": true,
641
+ "customscript/gif2gif.py/img2img/Factor/value": 2,
642
+ "customscript/gif2gif.py/img2img/Factor/minimum": 1,
643
+ "customscript/gif2gif.py/img2img/Factor/maximum": 8,
644
+ "customscript/gif2gif.py/img2img/Factor/step": 0.1,
645
+ "customscript/gif2gif.py/img2img/Target width/visible": true,
646
+ "customscript/gif2gif.py/img2img/Target width/value": 512,
647
+ "customscript/gif2gif.py/img2img/Target width/minimum": 0,
648
+ "customscript/gif2gif.py/img2img/Target width/maximum": 8000,
649
+ "customscript/gif2gif.py/img2img/Target width/step": 8,
650
+ "customscript/gif2gif.py/img2img/Target height/visible": true,
651
+ "customscript/gif2gif.py/img2img/Target height/value": 512,
652
+ "customscript/gif2gif.py/img2img/Target height/minimum": 0,
653
+ "customscript/gif2gif.py/img2img/Target height/maximum": 8000,
654
+ "customscript/gif2gif.py/img2img/Target height/step": 8,
655
+ "customscript/gif2gif.py/img2img/Crop to fit/visible": true,
656
+ "customscript/gif2gif.py/img2img/Crop to fit/value": false
657
+ }
webui-macos-env.sh ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ ####################################################################
3
+ # macOS defaults #
4
+ # Please modify webui-user.sh to change these instead of this file #
5
+ ####################################################################
6
+
7
+ if [[ -x "$(command -v python3.10)" ]]
8
+ then
9
+ python_cmd="python3.10"
10
+ fi
11
+
12
+ export install_dir="$HOME"
13
+ export COMMANDLINE_ARGS="--skip-torch-cuda-test --upcast-sampling --no-half-vae --use-cpu interrogate"
14
+ export TORCH_COMMAND="pip install torch==1.12.1 torchvision==0.13.1"
15
+ export K_DIFFUSION_REPO="https://github.com/brkirch/k-diffusion.git"
16
+ export K_DIFFUSION_COMMIT_HASH="51c9778f269cedb55a4d88c79c0246d35bdadb71"
17
+ export PYTORCH_ENABLE_MPS_FALLBACK=1
18
+
19
+ ####################################################################
webui-user.bat ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ @echo off
2
+
3
+ set PYTHON=
4
+ set GIT=
5
+ set VENV_DIR=
6
+ set COMMANDLINE_ARGS=--allow-code --xformers --skip-torch-cuda-test --precision full --no-half --share-- ckpt-dir C:\\DeepCore_WebUI-MASTER\\stable-diffusion-webui-master
7
+
8
+ call webui.bat
webui-user.sh ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ #########################################################
3
+ # Uncomment and change the variables below to your need:#
4
+ #########################################################
5
+
6
+ # Install directory without trailing slash
7
+ #install_dir="/home/$(whoami)"
8
+
9
+ # Name of the subdirectory
10
+ #clone_dir="stable-diffusion-webui"
11
+
12
+ # Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention"
13
+ #export COMMANDLINE_ARGS=""
14
+
15
+ # python3 executable
16
+ #python_cmd="python3"
17
+
18
+ # git executable
19
+ #export GIT="git"
20
+
21
+ # python3 venv without trailing slash (defaults to ${install_dir}/${clone_dir}/venv)
22
+ #venv_dir="venv"
23
+
24
+ # script to launch to start the app
25
+ #export LAUNCH_SCRIPT="app.py"
26
+
27
+ # install command for torch
28
+ #export TORCH_COMMAND="pip install torch==1.12.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113"
29
+
30
+ # Requirements file to use for stable-diffusion-webui
31
+ #export REQS_FILE="requirements_versions.txt"
32
+
33
+ # Fixed git repos
34
+ #export K_DIFFUSION_PACKAGE=""
35
+ #export GFPGAN_PACKAGE=""
36
+
37
+ # Fixed git commits
38
+ #export STABLE_DIFFUSION_COMMIT_HASH=""
39
+ #export TAMING_TRANSFORMERS_COMMIT_HASH=""
40
+ #export CODEFORMER_COMMIT_HASH=""
41
+ #export BLIP_COMMIT_HASH=""
42
+
43
+ # Uncomment to enable accelerated launch
44
+ #export ACCELERATE="True"
45
+
46
+ ###########################################
webui.bat ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @echo off
2
+
3
+ if not defined PYTHON (set PYTHON=python)
4
+ if not defined VENV_DIR (set "VENV_DIR=%~dp0%venv")
5
+
6
+
7
+ set ERROR_REPORTING=FALSE
8
+
9
+ mkdir tmp 2>NUL
10
+
11
+ %PYTHON% -c "" >tmp/stdout.txt 2>tmp/stderr.txt
12
+ if %ERRORLEVEL% == 0 goto :check_pip
13
+ echo Couldn't launch python
14
+ goto :show_stdout_stderr
15
+
16
+ :check_pip
17
+ %PYTHON% -mpip --help >tmp/stdout.txt 2>tmp/stderr.txt
18
+ if %ERRORLEVEL% == 0 goto :start_venv
19
+ if "%PIP_INSTALLER_LOCATION%" == "" goto :show_stdout_stderr
20
+ %PYTHON% "%PIP_INSTALLER_LOCATION%" >tmp/stdout.txt 2>tmp/stderr.txt
21
+ if %ERRORLEVEL% == 0 goto :start_venv
22
+ echo Couldn't install pip
23
+ goto :show_stdout_stderr
24
+
25
+ :start_venv
26
+ if ["%VENV_DIR%"] == ["-"] goto :skip_venv
27
+ if ["%SKIP_VENV%"] == ["1"] goto :skip_venv
28
+
29
+ dir "%VENV_DIR%\Scripts\Python.exe" >tmp/stdout.txt 2>tmp/stderr.txt
30
+ if %ERRORLEVEL% == 0 goto :activate_venv
31
+
32
+ for /f "delims=" %%i in ('CALL %PYTHON% -c "import sys; print(sys.executable)"') do set PYTHON_FULLNAME="%%i"
33
+ echo Creating venv in directory %VENV_DIR% using python %PYTHON_FULLNAME%
34
+ %PYTHON_FULLNAME% -m venv "%VENV_DIR%" >tmp/stdout.txt 2>tmp/stderr.txt
35
+ if %ERRORLEVEL% == 0 goto :activate_venv
36
+ echo Unable to create venv in directory "%VENV_DIR%"
37
+ goto :show_stdout_stderr
38
+
39
+ :activate_venv
40
+ set PYTHON="%VENV_DIR%\Scripts\Python.exe"
41
+ echo venv %PYTHON%
42
+
43
+ :skip_venv
44
+ if [%ACCELERATE%] == ["True"] goto :accelerate
45
+ goto :launch
46
+
47
+ :accelerate
48
+ echo Checking for accelerate
49
+ set ACCELERATE="%VENV_DIR%\Scripts\accelerate.exe"
50
+ if EXIST %ACCELERATE% goto :accelerate_launch
51
+
52
+ :launch
53
+ %PYTHON% app.py %*
54
+ pause
55
+ exit /b
56
+
57
+ :accelerate_launch
58
+ echo Accelerating
59
+ %ACCELERATE% launch --num_cpu_threads_per_process=6 app.py
60
+ pause
61
+ exit /b
62
+
63
+ :show_stdout_stderr
64
+
65
+ echo.
66
+ echo exit code: %errorlevel%
67
+
68
+ for /f %%i in ("tmp\stdout.txt") do set size=%%~zi
69
+ if %size% equ 0 goto :show_stderr
70
+ echo.
71
+ echo stdout:
72
+ type tmp\stdout.txt
73
+
74
+ :show_stderr
75
+ for /f %%i in ("tmp\stderr.txt") do set size=%%~zi
76
+ if %size% equ 0 goto :show_stderr
77
+ echo.
78
+ echo stderr:
79
+ type tmp\stderr.txt
80
+
81
+ :endofscript
82
+
83
+ echo.
84
+ echo Launch unsuccessful. Exiting.
85
+ pause
webui.py ADDED
@@ -0,0 +1,337 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+ import time
4
+ import importlib
5
+ import signal
6
+ import re
7
+ from fastapi import FastAPI
8
+ from fastapi.middleware.cors import CORSMiddleware
9
+ from fastapi.middleware.gzip import GZipMiddleware
10
+ from packaging import version
11
+
12
+ import logging
13
+ logging.getLogger("xformers").addFilter(lambda record: 'A matching Triton is not available' not in record.getMessage())
14
+
15
+ from modules import paths, timer, import_hook, errors
16
+
17
+ startup_timer = timer.Timer()
18
+
19
+ import torch
20
+ startup_timer.record("import torch")
21
+
22
+ import gradio
23
+ startup_timer.record("import gradio")
24
+
25
+ import ldm.modules.encoders.modules
26
+ startup_timer.record("import ldm")
27
+
28
+ from modules import extra_networks, ui_extra_networks_checkpoints
29
+ from modules import extra_networks_hypernet, ui_extra_networks_hypernets, ui_extra_networks_textual_inversion
30
+ from modules.call_queue import wrap_queued_call, queue_lock, wrap_gradio_gpu_call
31
+
32
+ # Truncate version number of nightly/local build of PyTorch to not cause exceptions with CodeFormer or Safetensors
33
+ if ".dev" in torch.__version__ or "+git" in torch.__version__:
34
+ torch.__long_version__ = torch.__version__
35
+ torch.__version__ = re.search(r'[\d.]+[\d]', torch.__version__).group(0)
36
+
37
+ from modules import shared, devices, sd_samplers, upscaler, extensions, localization, ui_tempdir, ui_extra_networks
38
+ import modules.codeformer_model as codeformer
39
+ import modules.face_restoration
40
+ import modules.gfpgan_model as gfpgan
41
+ import modules.img2img
42
+
43
+ import modules.lowvram
44
+ import modules.scripts
45
+ import modules.sd_hijack
46
+ import modules.sd_models
47
+ import modules.sd_vae
48
+ import modules.txt2img
49
+ import modules.script_callbacks
50
+ import modules.textual_inversion.textual_inversion
51
+ import modules.progress
52
+
53
+ import modules.ui
54
+ from modules import modelloader
55
+ from modules.shared import cmd_opts
56
+ import modules.hypernetworks.hypernetwork
57
+
58
+ startup_timer.record("other imports")
59
+
60
+
61
+ if cmd_opts.server_name:
62
+ server_name = cmd_opts.server_name
63
+ else:
64
+ server_name = "0.0.0.0" if cmd_opts.listen else None
65
+
66
+
67
+ def check_versions():
68
+ if shared.cmd_opts.skip_version_check:
69
+ return
70
+
71
+ expected_torch_version = "1.13.1"
72
+
73
+ if version.parse(torch.__version__) < version.parse(expected_torch_version):
74
+ errors.print_error_explanation(f"""
75
+ You are running torch {torch.__version__}.
76
+ The program is tested to work with torch {expected_torch_version}.
77
+ To reinstall the desired version, run with commandline flag --reinstall-torch.
78
+ Beware that this will cause a lot of large files to be downloaded, as well as
79
+ there are reports of issues with training tab on the latest version.
80
+
81
+ Use --skip-version-check commandline argument to disable this check.
82
+ """.strip())
83
+
84
+ expected_xformers_version = "0.0.16rc425"
85
+ if shared.xformers_available:
86
+ import xformers
87
+
88
+ if version.parse(xformers.__version__) < version.parse(expected_xformers_version):
89
+ errors.print_error_explanation(f"""
90
+ You are running xformers {xformers.__version__}.
91
+ The program is tested to work with xformers {expected_xformers_version}.
92
+ To reinstall the desired version, run with commandline flag --reinstall-xformers.
93
+
94
+ Use --skip-version-check commandline argument to disable this check.
95
+ """.strip())
96
+
97
+
98
+ def initialize():
99
+ check_versions()
100
+
101
+ extensions.list_extensions()
102
+ localization.list_localizations(cmd_opts.localizations_dir)
103
+ startup_timer.record("list extensions")
104
+
105
+ if cmd_opts.ui_debug_mode:
106
+ shared.sd_upscalers = upscaler.UpscalerLanczos().scalers
107
+ modules.scripts.load_scripts()
108
+ return
109
+
110
+ modelloader.cleanup_models()
111
+ modules.sd_models.setup_model()
112
+ startup_timer.record("list SD models")
113
+
114
+ codeformer.setup_model(cmd_opts.codeformer_models_path)
115
+ startup_timer.record("setup codeformer")
116
+
117
+ gfpgan.setup_model(cmd_opts.gfpgan_models_path)
118
+ startup_timer.record("setup gfpgan")
119
+
120
+ modelloader.list_builtin_upscalers()
121
+ startup_timer.record("list builtin upscalers")
122
+
123
+ modules.scripts.load_scripts()
124
+ startup_timer.record("load scripts")
125
+
126
+ modelloader.load_upscalers()
127
+ startup_timer.record("load upscalers")
128
+
129
+ modules.sd_vae.refresh_vae_list()
130
+ startup_timer.record("refresh VAE")
131
+
132
+ modules.textual_inversion.textual_inversion.list_textual_inversion_templates()
133
+ startup_timer.record("refresh textual inversion templates")
134
+
135
+ try:
136
+ modules.sd_models.load_model()
137
+ except Exception as e:
138
+ errors.display(e, "loading stable diffusion model")
139
+ print("", file=sys.stderr)
140
+ print("Stable diffusion model failed to load, exiting", file=sys.stderr)
141
+ exit(1)
142
+ startup_timer.record("load SD checkpoint")
143
+
144
+ shared.opts.data["sd_model_checkpoint"] = shared.sd_model.sd_checkpoint_info.title
145
+
146
+ shared.opts.onchange("sd_model_checkpoint", wrap_queued_call(lambda: modules.sd_models.reload_model_weights()))
147
+ shared.opts.onchange("sd_vae", wrap_queued_call(lambda: modules.sd_vae.reload_vae_weights()), call=False)
148
+ shared.opts.onchange("sd_vae_as_default", wrap_queued_call(lambda: modules.sd_vae.reload_vae_weights()), call=False)
149
+ shared.opts.onchange("temp_dir", ui_tempdir.on_tmpdir_changed)
150
+ startup_timer.record("opts onchange")
151
+
152
+ shared.reload_hypernetworks()
153
+ startup_timer.record("reload hypernets")
154
+
155
+ ui_extra_networks.intialize()
156
+ ui_extra_networks.register_page(ui_extra_networks_textual_inversion.ExtraNetworksPageTextualInversion())
157
+ ui_extra_networks.register_page(ui_extra_networks_hypernets.ExtraNetworksPageHypernetworks())
158
+ ui_extra_networks.register_page(ui_extra_networks_checkpoints.ExtraNetworksPageCheckpoints())
159
+
160
+ extra_networks.initialize()
161
+ extra_networks.register_extra_network(extra_networks_hypernet.ExtraNetworkHypernet())
162
+ startup_timer.record("extra networks")
163
+
164
+ if cmd_opts.tls_keyfile is not None and cmd_opts.tls_keyfile is not None:
165
+
166
+ try:
167
+ if not os.path.exists(cmd_opts.tls_keyfile):
168
+ print("Invalid path to TLS keyfile given")
169
+ if not os.path.exists(cmd_opts.tls_certfile):
170
+ print(f"Invalid path to TLS certfile: '{cmd_opts.tls_certfile}'")
171
+ except TypeError:
172
+ cmd_opts.tls_keyfile = cmd_opts.tls_certfile = None
173
+ print("TLS setup invalid, running webui without TLS")
174
+ else:
175
+ print("Running with TLS")
176
+ startup_timer.record("TLS")
177
+
178
+ # make the program just exit at ctrl+c without waiting for anything
179
+ def sigint_handler(sig, frame):
180
+ print(f'Interrupted with signal {sig} in {frame}')
181
+ os._exit(0)
182
+
183
+ signal.signal(signal.SIGINT, sigint_handler)
184
+
185
+
186
+ def setup_middleware(app):
187
+ app.middleware_stack = None # reset current middleware to allow modifying user provided list
188
+ app.add_middleware(GZipMiddleware, minimum_size=1000)
189
+ if cmd_opts.cors_allow_origins and cmd_opts.cors_allow_origins_regex:
190
+ app.add_middleware(CORSMiddleware, allow_origins=cmd_opts.cors_allow_origins.split(','), allow_origin_regex=cmd_opts.cors_allow_origins_regex, allow_methods=['*'], allow_credentials=True, allow_headers=['*'])
191
+ elif cmd_opts.cors_allow_origins:
192
+ app.add_middleware(CORSMiddleware, allow_origins=cmd_opts.cors_allow_origins.split(','), allow_methods=['*'], allow_credentials=True, allow_headers=['*'])
193
+ elif cmd_opts.cors_allow_origins_regex:
194
+ app.add_middleware(CORSMiddleware, allow_origin_regex=cmd_opts.cors_allow_origins_regex, allow_methods=['*'], allow_credentials=True, allow_headers=['*'])
195
+ app.build_middleware_stack() # rebuild middleware stack on-the-fly
196
+
197
+
198
+ def create_api(app):
199
+ from modules.api.api import Api
200
+ api = Api(app, queue_lock)
201
+ return api
202
+
203
+
204
+ def wait_on_server(demo=None):
205
+ while 1:
206
+ time.sleep(0.5)
207
+ if shared.state.need_restart:
208
+ shared.state.need_restart = False
209
+ time.sleep(0.5)
210
+ demo.close()
211
+ time.sleep(0.5)
212
+ break
213
+
214
+
215
+ def api_only():
216
+ initialize()
217
+
218
+ app = FastAPI()
219
+ setup_middleware(app)
220
+ api = create_api(app)
221
+
222
+ modules.script_callbacks.app_started_callback(None, app)
223
+
224
+ print(f"Startup time: {startup_timer.summary()}.")
225
+ api.launch(server_name="0.0.0.0" if cmd_opts.listen else "127.0.0.1", port=cmd_opts.port if cmd_opts.port else 7861)
226
+
227
+
228
+ def webui():
229
+ launch_api = cmd_opts.api
230
+ initialize()
231
+
232
+ while 1:
233
+ if shared.opts.clean_temp_dir_at_start:
234
+ ui_tempdir.cleanup_tmpdr()
235
+ startup_timer.record("cleanup temp dir")
236
+
237
+ modules.script_callbacks.before_ui_callback()
238
+ startup_timer.record("scripts before_ui_callback")
239
+
240
+ shared.demo = modules.ui.create_ui()
241
+ startup_timer.record("create ui")
242
+
243
+ if cmd_opts.gradio_queue:
244
+ shared.demo.queue(64)
245
+
246
+ gradio_auth_creds = []
247
+ if cmd_opts.gradio_auth:
248
+ gradio_auth_creds += [x.strip() for x in cmd_opts.gradio_auth.strip('"').replace('\n', '').split(',') if x.strip()]
249
+ if cmd_opts.gradio_auth_path:
250
+ with open(cmd_opts.gradio_auth_path, 'r', encoding="utf8") as file:
251
+ for line in file.readlines():
252
+ gradio_auth_creds += [x.strip() for x in line.split(',') if x.strip()]
253
+
254
+ app, local_url, share_url = shared.demo.launch(
255
+ share=cmd_opts.share,
256
+ server_name=server_name,
257
+ server_port=cmd_opts.port,
258
+ ssl_keyfile=cmd_opts.tls_keyfile,
259
+ ssl_certfile=cmd_opts.tls_certfile,
260
+ debug=cmd_opts.gradio_debug,
261
+ auth=[tuple(cred.split(':')) for cred in gradio_auth_creds] if gradio_auth_creds else None,
262
+ inbrowser=cmd_opts.autolaunch,
263
+ prevent_thread_lock=True
264
+ )
265
+ # after initial launch, disable --autolaunch for subsequent restarts
266
+ cmd_opts.autolaunch = False
267
+
268
+ startup_timer.record("gradio launch")
269
+
270
+ # gradio uses a very open CORS policy via app.user_middleware, which makes it possible for
271
+ # an attacker to trick the user into opening a malicious HTML page, which makes a request to the
272
+ # running web ui and do whatever the attacker wants, including installing an extension and
273
+ # running its code. We disable this here. Suggested by RyotaK.
274
+ app.user_middleware = [x for x in app.user_middleware if x.cls.__name__ != 'CORSMiddleware']
275
+
276
+ setup_middleware(app)
277
+
278
+ modules.progress.setup_progress_api(app)
279
+
280
+ if launch_api:
281
+ create_api(app)
282
+
283
+ ui_extra_networks.add_pages_to_demo(app)
284
+
285
+ modules.script_callbacks.app_started_callback(shared.demo, app)
286
+ startup_timer.record("scripts app_started_callback")
287
+
288
+ print(f"Startup time: {startup_timer.summary()}.")
289
+
290
+ wait_on_server(shared.demo)
291
+ print('Restarting UI...')
292
+
293
+ startup_timer.reset()
294
+
295
+ sd_samplers.set_samplers()
296
+
297
+ modules.script_callbacks.script_unloaded_callback()
298
+ extensions.list_extensions()
299
+ startup_timer.record("list extensions")
300
+
301
+ localization.list_localizations(cmd_opts.localizations_dir)
302
+
303
+ modelloader.forbid_loaded_nonbuiltin_upscalers()
304
+ modules.scripts.reload_scripts()
305
+ startup_timer.record("load scripts")
306
+
307
+ modules.script_callbacks.model_loaded_callback(shared.sd_model)
308
+ startup_timer.record("model loaded callback")
309
+
310
+ modelloader.load_upscalers()
311
+ startup_timer.record("load upscalers")
312
+
313
+ for module in [module for name, module in sys.modules.items() if name.startswith("modules.ui")]:
314
+ importlib.reload(module)
315
+ startup_timer.record("reload script modules")
316
+
317
+ modules.sd_models.list_models()
318
+ startup_timer.record("list SD models")
319
+
320
+ shared.reload_hypernetworks()
321
+ startup_timer.record("reload hypernetworks")
322
+
323
+ ui_extra_networks.intialize()
324
+ ui_extra_networks.register_page(ui_extra_networks_textual_inversion.ExtraNetworksPageTextualInversion())
325
+ ui_extra_networks.register_page(ui_extra_networks_hypernets.ExtraNetworksPageHypernetworks())
326
+ ui_extra_networks.register_page(ui_extra_networks_checkpoints.ExtraNetworksPageCheckpoints())
327
+
328
+ extra_networks.initialize()
329
+ extra_networks.register_extra_network(extra_networks_hypernet.ExtraNetworkHypernet())
330
+ startup_timer.record("initialize extra networks")
331
+
332
+
333
+ if __name__ == "__main__":
334
+ if cmd_opts.nowebui:
335
+ api_only()
336
+ else:
337
+ webui()
webui.sh ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ #################################################
3
+ # Please do not make any changes to this file, #
4
+ # change the variables in webui-user.sh instead #
5
+ #################################################
6
+
7
+ # If run from macOS, load defaults from webui-macos-env.sh
8
+ if [[ "$OSTYPE" == "darwin"* ]]; then
9
+ if [[ -f webui-macos-env.sh ]]
10
+ then
11
+ source ./webui-macos-env.sh
12
+ fi
13
+ fi
14
+
15
+ # Read variables from webui-user.sh
16
+ # shellcheck source=/dev/null
17
+ if [[ -f webui-user.sh ]]
18
+ then
19
+ source ./webui-user.sh
20
+ fi
21
+
22
+ # Set defaults
23
+ # Install directory without trailing slash
24
+ if [[ -z "${install_dir}" ]]
25
+ then
26
+ install_dir="/home/$(whoami)"
27
+ fi
28
+
29
+ # Name of the subdirectory (defaults to stable-diffusion-webui)
30
+ if [[ -z "${clone_dir}" ]]
31
+ then
32
+ clone_dir="stable-diffusion-webui"
33
+ fi
34
+
35
+ # python3 executable
36
+ if [[ -z "${python_cmd}" ]]
37
+ then
38
+ python_cmd="python3"
39
+ fi
40
+
41
+ # git executable
42
+ if [[ -z "${GIT}" ]]
43
+ then
44
+ export GIT="git"
45
+ fi
46
+
47
+ # python3 venv without trailing slash (defaults to ${install_dir}/${clone_dir}/venv)
48
+ if [[ -z "${venv_dir}" ]]
49
+ then
50
+ venv_dir="venv"
51
+ fi
52
+
53
+ if [[ -z "${LAUNCH_SCRIPT}" ]]
54
+ then
55
+ LAUNCH_SCRIPT="app.py"
56
+ fi
57
+
58
+ # this script cannot be run as root by default
59
+ can_run_as_root=0
60
+
61
+ # read any command line flags to the webui.sh script
62
+ while getopts "f" flag > /dev/null 2>&1
63
+ do
64
+ case ${flag} in
65
+ f) can_run_as_root=1;;
66
+ *) break;;
67
+ esac
68
+ done
69
+
70
+ # Disable sentry logging
71
+ export ERROR_REPORTING=FALSE
72
+
73
+ # Do not reinstall existing pip packages on Debian/Ubuntu
74
+ export PIP_IGNORE_INSTALLED=0
75
+
76
+ # Pretty print
77
+ delimiter="################################################################"
78
+
79
+ printf "\n%s\n" "${delimiter}"
80
+ printf "\e[1m\e[32mInstall script for stable-diffusion + Web UI\n"
81
+ printf "\e[1m\e[34mTested on Debian 11 (Bullseye)\e[0m"
82
+ printf "\n%s\n" "${delimiter}"
83
+
84
+ # Do not run as root
85
+ if [[ $(id -u) -eq 0 && can_run_as_root -eq 0 ]]
86
+ then
87
+ printf "\n%s\n" "${delimiter}"
88
+ printf "\e[1m\e[31mERROR: This script must not be launched as root, aborting...\e[0m"
89
+ printf "\n%s\n" "${delimiter}"
90
+ exit 1
91
+ else
92
+ printf "\n%s\n" "${delimiter}"
93
+ printf "Running on \e[1m\e[32m%s\e[0m user" "$(whoami)"
94
+ printf "\n%s\n" "${delimiter}"
95
+ fi
96
+
97
+ if [[ -d .git ]]
98
+ then
99
+ printf "\n%s\n" "${delimiter}"
100
+ printf "Repo already cloned, using it as install directory"
101
+ printf "\n%s\n" "${delimiter}"
102
+ install_dir="${PWD}/../"
103
+ clone_dir="${PWD##*/}"
104
+ fi
105
+
106
+ # Check prerequisites
107
+ gpu_info=$(lspci 2>/dev/null | grep VGA)
108
+ case "$gpu_info" in
109
+ *"Navi 1"*|*"Navi 2"*) export HSA_OVERRIDE_GFX_VERSION=10.3.0
110
+ ;;
111
+ *"Renoir"*) export HSA_OVERRIDE_GFX_VERSION=9.0.0
112
+ printf "\n%s\n" "${delimiter}"
113
+ printf "Experimental support for Renoir: make sure to have at least 4GB of VRAM and 10GB of RAM or enable cpu mode: --use-cpu all --no-half"
114
+ printf "\n%s\n" "${delimiter}"
115
+ ;;
116
+ *)
117
+ ;;
118
+ esac
119
+ if echo "$gpu_info" | grep -q "AMD" && [[ -z "${TORCH_COMMAND}" ]]
120
+ then
121
+ export TORCH_COMMAND="pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/rocm5.2"
122
+ fi
123
+
124
+ for preq in "${GIT}" "${python_cmd}"
125
+ do
126
+ if ! hash "${preq}" &>/dev/null
127
+ then
128
+ printf "\n%s\n" "${delimiter}"
129
+ printf "\e[1m\e[31mERROR: %s is not installed, aborting...\e[0m" "${preq}"
130
+ printf "\n%s\n" "${delimiter}"
131
+ exit 1
132
+ fi
133
+ done
134
+
135
+ if ! "${python_cmd}" -c "import venv" &>/dev/null
136
+ then
137
+ printf "\n%s\n" "${delimiter}"
138
+ printf "\e[1m\e[31mERROR: python3-venv is not installed, aborting...\e[0m"
139
+ printf "\n%s\n" "${delimiter}"
140
+ exit 1
141
+ fi
142
+
143
+ cd "${install_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/, aborting...\e[0m" "${install_dir}"; exit 1; }
144
+ if [[ -d "${clone_dir}" ]]
145
+ then
146
+ cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
147
+ else
148
+ printf "\n%s\n" "${delimiter}"
149
+ printf "Clone stable-diffusion-webui"
150
+ printf "\n%s\n" "${delimiter}"
151
+ "${GIT}" clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git "${clone_dir}"
152
+ cd "${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
153
+ fi
154
+
155
+ printf "\n%s\n" "${delimiter}"
156
+ printf "Create and activate python venv"
157
+ printf "\n%s\n" "${delimiter}"
158
+ cd "${install_dir}"/"${clone_dir}"/ || { printf "\e[1m\e[31mERROR: Can't cd to %s/%s/, aborting...\e[0m" "${install_dir}" "${clone_dir}"; exit 1; }
159
+ if [[ ! -d "${venv_dir}" ]]
160
+ then
161
+ "${python_cmd}" -m venv "${venv_dir}"
162
+ first_launch=1
163
+ fi
164
+ # shellcheck source=/dev/null
165
+ if [[ -f "${venv_dir}"/bin/activate ]]
166
+ then
167
+ source "${venv_dir}"/bin/activate
168
+ else
169
+ printf "\n%s\n" "${delimiter}"
170
+ printf "\e[1m\e[31mERROR: Cannot activate python venv, aborting...\e[0m"
171
+ printf "\n%s\n" "${delimiter}"
172
+ exit 1
173
+ fi
174
+
175
+ if [[ ! -z "${ACCELERATE}" ]] && [ ${ACCELERATE}="True" ] && [ -x "$(command -v accelerate)" ]
176
+ then
177
+ printf "\n%s\n" "${delimiter}"
178
+ printf "Accelerating app.py..."
179
+ printf "\n%s\n" "${delimiter}"
180
+ exec accelerate launch --num_cpu_threads_per_process=6 "${LAUNCH_SCRIPT}" "$@"
181
+ else
182
+ printf "\n%s\n" "${delimiter}"
183
+ printf "Launching app.py..."
184
+ printf "\n%s\n" "${delimiter}"
185
+ exec "${python_cmd}" "${LAUNCH_SCRIPT}" "$@"
186
+ fi