Yabin commited on
Commit
4df1f3a
·
1 Parent(s): 3a68c3b

Upload 25 files

Browse files
Files changed (25) hide show
  1. .gitignore +35 -0
  2. .pylintrc +3 -0
  3. CODEOWNERS +12 -0
  4. LICENSE.txt +663 -0
  5. README.md +161 -13
  6. cache.json +56 -0
  7. config.json +182 -0
  8. environment-wsl2.yaml +11 -0
  9. hashes.json +3 -0
  10. launch.py +356 -0
  11. params.txt +2 -0
  12. requirements.txt +33 -0
  13. requirements_versions.txt +30 -0
  14. screenshot.png +0 -0
  15. script.js +104 -0
  16. style.css +832 -0
  17. styles.csv +6 -0
  18. styles.csv.bak +5 -0
  19. ui-config.json +945 -0
  20. webui-macos-env.sh +19 -0
  21. webui-user.bat +8 -0
  22. webui-user.sh +46 -0
  23. webui.bat +85 -0
  24. webui.py +340 -0
  25. 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,13 +1,161 @@
1
- ---
2
- title: ARCHDIFFUSION
3
- emoji: 👁
4
- colorFrom: red
5
- colorTo: red
6
- sdk: gradio
7
- sdk_version: 3.29.0
8
- app_file: app.py
9
- pinned: false
10
- license: artistic-2.0
11
- ---
12
-
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Stable Diffusion web UI
2
+ A browser interface based on Gradio library for Stable Diffusion.
3
+
4
+ ![](screenshot.png)
5
+
6
+ ## Features
7
+ [Detailed feature showcase with images](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features):
8
+ - Original txt2img and img2img modes
9
+ - One click install and run script (but you still must install python and git)
10
+ - Outpainting
11
+ - Inpainting
12
+ - Color Sketch
13
+ - Prompt Matrix
14
+ - Stable Diffusion Upscale
15
+ - Attention, specify parts of text that the model should pay more attention to
16
+ - a man in a `((tuxedo))` - will pay more attention to tuxedo
17
+ - a man in a `(tuxedo:1.21)` - alternative syntax
18
+ - select text and press `Ctrl+Up` or `Ctrl+Down` to automatically adjust attention to selected text (code contributed by anonymous user)
19
+ - Loopback, run img2img processing multiple times
20
+ - X/Y/Z plot, a way to draw a 3 dimensional plot of images with different parameters
21
+ - Textual Inversion
22
+ - have as many embeddings as you want and use any names you like for them
23
+ - use multiple embeddings with different numbers of vectors per token
24
+ - works with half precision floating point numbers
25
+ - train embeddings on 8GB (also reports of 6GB working)
26
+ - Extras tab with:
27
+ - GFPGAN, neural network that fixes faces
28
+ - CodeFormer, face restoration tool as an alternative to GFPGAN
29
+ - RealESRGAN, neural network upscaler
30
+ - ESRGAN, neural network upscaler with a lot of third party models
31
+ - SwinIR and Swin2SR ([see here](https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/2092)), neural network upscalers
32
+ - LDSR, Latent diffusion super resolution upscaling
33
+ - Resizing aspect ratio options
34
+ - Sampling method selection
35
+ - Adjust sampler eta values (noise multiplier)
36
+ - More advanced noise setting options
37
+ - Interrupt processing at any time
38
+ - 4GB video card support (also reports of 2GB working)
39
+ - Correct seeds for batches
40
+ - Live prompt token length validation
41
+ - Generation parameters
42
+ - parameters you used to generate images are saved with that image
43
+ - in PNG chunks for PNG, in EXIF for JPEG
44
+ - can drag the image to PNG info tab to restore generation parameters and automatically copy them into UI
45
+ - can be disabled in settings
46
+ - drag and drop an image/text-parameters to promptbox
47
+ - Read Generation Parameters Button, loads parameters in promptbox to UI
48
+ - Settings page
49
+ - Running arbitrary python code from UI (must run with `--allow-code` to enable)
50
+ - Mouseover hints for most UI elements
51
+ - Possible to change defaults/mix/max/step values for UI elements via text config
52
+ - Tiling support, a checkbox to create images that can be tiled like textures
53
+ - Progress bar and live image generation preview
54
+ - Can use a separate neural network to produce previews with almost none VRAM or compute requirement
55
+ - Negative prompt, an extra text field that allows you to list what you don't want to see in generated image
56
+ - Styles, a way to save part of prompt and easily apply them via dropdown later
57
+ - Variations, a way to generate same image but with tiny differences
58
+ - Seed resizing, a way to generate same image but at slightly different resolution
59
+ - CLIP interrogator, a button that tries to guess prompt from an image
60
+ - Prompt Editing, a way to change prompt mid-generation, say to start making a watermelon and switch to anime girl midway
61
+ - Batch Processing, process a group of files using img2img
62
+ - Img2img Alternative, reverse Euler method of cross attention control
63
+ - Highres Fix, a convenience option to produce high resolution pictures in one click without usual distortions
64
+ - Reloading checkpoints on the fly
65
+ - Checkpoint Merger, a tab that allows you to merge up to 3 checkpoints into one
66
+ - [Custom scripts](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Custom-Scripts) with many extensions from community
67
+ - [Composable-Diffusion](https://energy-based-model.github.io/Compositional-Visual-Generation-with-Composable-Diffusion-Models/), a way to use multiple prompts at once
68
+ - separate prompts using uppercase `AND`
69
+ - also supports weights for prompts: `a cat :1.2 AND a dog AND a penguin :2.2`
70
+ - No token limit for prompts (original stable diffusion lets you use up to 75 tokens)
71
+ - DeepDanbooru integration, creates danbooru style tags for anime prompts
72
+ - [xformers](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Xformers), major speed increase for select cards: (add `--xformers` to commandline args)
73
+ - via extension: [History tab](https://github.com/yfszzx/stable-diffusion-webui-images-browser): view, direct and delete images conveniently within the UI
74
+ - Generate forever option
75
+ - Training tab
76
+ - hypernetworks and embeddings options
77
+ - Preprocessing images: cropping, mirroring, autotagging using BLIP or deepdanbooru (for anime)
78
+ - Clip skip
79
+ - Hypernetworks
80
+ - Loras (same as Hypernetworks but more pretty)
81
+ - A sparate UI where you can choose, with preview, which embeddings, hypernetworks or Loras to add to your prompt
82
+ - Can select to load a different VAE from settings screen
83
+ - Estimated completion time in progress bar
84
+ - API
85
+ - Support for dedicated [inpainting model](https://github.com/runwayml/stable-diffusion#inpainting-with-stable-diffusion) by RunwayML
86
+ - via extension: [Aesthetic Gradients](https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients), a way to generate images with a specific aesthetic by using clip images embeds (implementation of [https://github.com/vicgalle/stable-diffusion-aesthetic-gradients](https://github.com/vicgalle/stable-diffusion-aesthetic-gradients))
87
+ - [Stable Diffusion 2.0](https://github.com/Stability-AI/stablediffusion) support - see [wiki](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features#stable-diffusion-20) for instructions
88
+ - [Alt-Diffusion](https://arxiv.org/abs/2211.06679) support - see [wiki](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features#alt-diffusion) for instructions
89
+ - Now without any bad letters!
90
+ - Load checkpoints in safetensors format
91
+ - Eased resolution restriction: generated image's domension must be a multiple of 8 rather than 64
92
+ - Now with a license!
93
+ - Reorder elements in the UI from settings screen
94
+
95
+ ## Installation and Running
96
+ Make sure the required [dependencies](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Dependencies) are met and follow the instructions available for both [NVidia](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Install-and-Run-on-NVidia-GPUs) (recommended) and [AMD](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Install-and-Run-on-AMD-GPUs) GPUs.
97
+
98
+ Alternatively, use online services (like Google Colab):
99
+
100
+ - [List of Online Services](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Online-Services)
101
+
102
+ ### Automatic Installation on Windows
103
+ 1. Install [Python 3.10.6](https://www.python.org/downloads/windows/), checking "Add Python to PATH".
104
+ 2. Install [git](https://git-scm.com/download/win).
105
+ 3. Download the stable-diffusion-webui repository, for example by running `git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git`.
106
+ 4. Run `webui-user.bat` from Windows Explorer as normal, non-administrator, user.
107
+
108
+ ### Automatic Installation on Linux
109
+ 1. Install the dependencies:
110
+ ```bash
111
+ # Debian-based:
112
+ sudo apt install wget git python3 python3-venv
113
+ # Red Hat-based:
114
+ sudo dnf install wget git python3
115
+ # Arch-based:
116
+ sudo pacman -S wget git python3
117
+ ```
118
+ 2. To install in `/home/$(whoami)/stable-diffusion-webui/`, run:
119
+ ```bash
120
+ bash <(wget -qO- https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh)
121
+ ```
122
+ 3. Run `webui.sh`.
123
+ ### Installation on Apple Silicon
124
+
125
+ Find the instructions [here](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Installation-on-Apple-Silicon).
126
+
127
+ ## Contributing
128
+ Here's how to add code to this repo: [Contributing](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Contributing)
129
+
130
+ ## Documentation
131
+ The documentation was moved from this README over to the project's [wiki](https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki).
132
+
133
+ ## Credits
134
+ Licenses for borrowed code can be found in `Settings -> Licenses` screen, and also in `html/licenses.html` file.
135
+
136
+ - Stable Diffusion - https://github.com/CompVis/stable-diffusion, https://github.com/CompVis/taming-transformers
137
+ - k-diffusion - https://github.com/crowsonkb/k-diffusion.git
138
+ - GFPGAN - https://github.com/TencentARC/GFPGAN.git
139
+ - CodeFormer - https://github.com/sczhou/CodeFormer
140
+ - ESRGAN - https://github.com/xinntao/ESRGAN
141
+ - SwinIR - https://github.com/JingyunLiang/SwinIR
142
+ - Swin2SR - https://github.com/mv-lab/swin2sr
143
+ - LDSR - https://github.com/Hafiidz/latent-diffusion
144
+ - MiDaS - https://github.com/isl-org/MiDaS
145
+ - Ideas for optimizations - https://github.com/basujindal/stable-diffusion
146
+ - Cross Attention layer optimization - Doggettx - https://github.com/Doggettx/stable-diffusion, original idea for prompt editing.
147
+ - Cross Attention layer optimization - InvokeAI, lstein - https://github.com/invoke-ai/InvokeAI (originally http://github.com/lstein/stable-diffusion)
148
+ - Sub-quadratic Cross Attention layer optimization - Alex Birch (https://github.com/Birch-san/diffusers/pull/1), Amin Rezaei (https://github.com/AminRezaei0x443/memory-efficient-attention)
149
+ - Textual Inversion - Rinon Gal - https://github.com/rinongal/textual_inversion (we're not using his code, but we are using his ideas).
150
+ - Idea for SD upscale - https://github.com/jquesnelle/txt2imghd
151
+ - Noise generation for outpainting mk2 - https://github.com/parlance-zz/g-diffuser-bot
152
+ - CLIP interrogator idea and borrowing some code - https://github.com/pharmapsychotic/clip-interrogator
153
+ - Idea for Composable Diffusion - https://github.com/energy-based-model/Compositional-Visual-Generation-with-Composable-Diffusion-Models-PyTorch
154
+ - xformers - https://github.com/facebookresearch/xformers
155
+ - DeepDanbooru - interrogator for anime diffusers https://github.com/KichangKim/DeepDanbooru
156
+ - Sampling in float32 precision from a float16 UNet - marunine for the idea, Birch-san for the example Diffusers implementation (https://github.com/Birch-san/diffusers-play/tree/92feee6)
157
+ - Instruct pix2pix - Tim Brooks (star), Aleksander Holynski (star), Alexei A. Efros (no star) - https://github.com/timothybrooks/instruct-pix2pix
158
+ - Security advice - RyotaK
159
+ - UniPC sampler - Wenliang Zhao - https://github.com/wl-zhao/UniPC
160
+ - Initial Gradio script - posted on 4chan by an Anonymous user. Thank you Anonymous user.
161
+ - (You)
cache.json ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "hashes": {
3
+ "checkpoint/dvarchMultiPrompt_dvarchExterior.safetensors": {
4
+ "mtime": 1681296635.3313398,
5
+ "sha256": "481bdbda71ecbe20f60dcafa78b69842ac786ea1eee79d0f647ec6a799b984f6"
6
+ },
7
+ "checkpoint/Realistic_Vision_V1.4.ckpt": {
8
+ "mtime": 1681297354.0398285,
9
+ "sha256": "660d4d07d66718c17d5ebe022a0f41582b9c5643be9ce4a5e42cef9d29676e97"
10
+ },
11
+ "checkpoint/epicrealism_newEra.safetensors": {
12
+ "mtime": 1684006334.4282038,
13
+ "sha256": "aa78bfa99c84d7c1275f1aed64b40b943e2cb74088296d54d6c10f55556a941a"
14
+ },
15
+ "checkpoint/XSarchitectural_33WoodenluxurystyleV2.safetensors": {
16
+ "mtime": 1684007245.5300763,
17
+ "sha256": "5becfe04d913e31d08a992ce69a8923d0e612bd93bf50a4137bee22b5ef13f87"
18
+ },
19
+ "checkpoint/xsarchitectural-8japanwabisabi.safetensors": {
20
+ "mtime": 1684016281.1298962,
21
+ "sha256": "17e193306361946275036bb53e9c706ca077ba18a0680fa2f5378a578a35b0b5"
22
+ },
23
+ "checkpoint/xsarchitecturalv2_v20.ckpt": {
24
+ "mtime": 1684015936.4391088,
25
+ "sha256": "42825333b2422774716cfb569b505d79cef1d63baec3477be2ddea403a16eb38"
26
+ },
27
+ "checkpoint/xs interior all.ckpt": {
28
+ "mtime": 1684052987.8265657,
29
+ "sha256": "631eea1a0e4053163aa5a4d4cf9e8dbfb657debb3aba05d9610b4ed22cdda11a"
30
+ },
31
+ "checkpoint/XSarchitectural-22Mangastyle.safetensors": {
32
+ "mtime": 1684143655.8876832,
33
+ "sha256": "a9ee5081accb5cb998a5ebefb987097d982697545442ef5ef2e6f4dda5b8c7a6"
34
+ },
35
+ "checkpoint/russianebenya_v2.safetensors": {
36
+ "mtime": 1684143268.6061099,
37
+ "sha256": "163c1f6f8d7f6f49f6b39e18886d3a3be7949089d6ae087722b35137978bc270"
38
+ },
39
+ "checkpoint/xsarchitectural-9Science fiction.safetensors": {
40
+ "mtime": 1684015748.3887148,
41
+ "sha256": "7b8a0e890059281ec15588f82ad125c0cf1f1a4e081e68bf8924ca14a09d7248"
42
+ },
43
+ "checkpoint/CounterfeitV30_v30.safetensors": {
44
+ "mtime": 1684151102.030792,
45
+ "sha256": "cbfba64e662370f59d4aa2aa69bf16749fce93846ccce20506aee5df01169859"
46
+ },
47
+ "checkpoint/xsarchitectural-19Houseplan.safetensors": {
48
+ "mtime": 1684159551.3310747,
49
+ "sha256": "13d0d58edd1bd5212f97a0734c770b27e6e997dc0397e89e446c8453e3694b9a"
50
+ },
51
+ "checkpoint/COMMERCIAL.ckpt": {
52
+ "mtime": 1684143485.101468,
53
+ "sha256": "7bf72c55d31349751f1f764e59fcefcf1abef45fdd0f8017387189ce68cafd96"
54
+ }
55
+ }
56
+ }
config.json ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ "save_mask": false,
18
+ "save_mask_composite": false,
19
+ "jpeg_quality": 80,
20
+ "webp_lossless": false,
21
+ "export_for_4chan": true,
22
+ "img_downscale_threshold": 4.0,
23
+ "target_side_length": 4000,
24
+ "img_max_size_mp": 200,
25
+ "use_original_name_batch": true,
26
+ "use_upscaler_name_as_suffix": false,
27
+ "save_selected_only": true,
28
+ "do_not_add_watermark": false,
29
+ "temp_dir": "",
30
+ "clean_temp_dir_at_start": false,
31
+ "outdir_samples": "",
32
+ "outdir_txt2img_samples": "outputs/txt2img-images",
33
+ "outdir_img2img_samples": "outputs/img2img-images",
34
+ "outdir_extras_samples": "outputs/extras-images",
35
+ "outdir_grids": "",
36
+ "outdir_txt2img_grids": "outputs/txt2img-grids",
37
+ "outdir_img2img_grids": "outputs/img2img-grids",
38
+ "outdir_save": "log/images",
39
+ "save_to_dirs": true,
40
+ "grid_save_to_dirs": true,
41
+ "use_save_to_dirs_for_ui": false,
42
+ "directories_filename_pattern": "[date]",
43
+ "directories_max_prompt_words": 8,
44
+ "ESRGAN_tile": 192,
45
+ "ESRGAN_tile_overlap": 8,
46
+ "realesrgan_enabled_models": [
47
+ "R-ESRGAN 4x+",
48
+ "R-ESRGAN 4x+ Anime6B"
49
+ ],
50
+ "upscaler_for_img2img": null,
51
+ "face_restoration_model": "CodeFormer",
52
+ "code_former_weight": 0.5,
53
+ "face_restoration_unload": false,
54
+ "show_warnings": false,
55
+ "memmon_poll_rate": 8,
56
+ "samples_log_stdout": false,
57
+ "multiple_tqdm": true,
58
+ "print_hypernet_extra": false,
59
+ "unload_models_when_training": false,
60
+ "pin_memory": false,
61
+ "save_optimizer_state": false,
62
+ "save_training_settings_to_txt": true,
63
+ "dataset_filename_word_regex": "",
64
+ "dataset_filename_join_string": " ",
65
+ "training_image_repeats_per_epoch": 1,
66
+ "training_write_csv_every": 500,
67
+ "training_xattention_optimizations": false,
68
+ "training_enable_tensorboard": false,
69
+ "training_tensorboard_save_images": false,
70
+ "training_tensorboard_flush_every": 120,
71
+ "sd_model_checkpoint": "COMMERCIAL.ckpt [7bf72c55d3]",
72
+ "sd_checkpoint_cache": 0,
73
+ "sd_vae_checkpoint_cache": 0,
74
+ "sd_vae": "Automatic",
75
+ "sd_vae_as_default": true,
76
+ "inpainting_mask_weight": 1.0,
77
+ "initial_noise_multiplier": 1.0,
78
+ "img2img_color_correction": false,
79
+ "img2img_fix_steps": false,
80
+ "img2img_background_color": "#ffffff",
81
+ "enable_quantization": false,
82
+ "enable_emphasis": true,
83
+ "enable_batch_seeds": true,
84
+ "comma_padding_backtrack": 20,
85
+ "CLIP_stop_at_last_layers": 1,
86
+ "upcast_attn": false,
87
+ "use_old_emphasis_implementation": false,
88
+ "use_old_karras_scheduler_sigmas": false,
89
+ "no_dpmpp_sde_batch_determinism": false,
90
+ "use_old_hires_fix_width_height": false,
91
+ "interrogate_keep_models_in_memory": false,
92
+ "interrogate_return_ranks": false,
93
+ "interrogate_clip_num_beams": 1,
94
+ "interrogate_clip_min_length": 24,
95
+ "interrogate_clip_max_length": 48,
96
+ "interrogate_clip_dict_limit": 1500,
97
+ "interrogate_clip_skip_categories": [],
98
+ "interrogate_deepbooru_score_threshold": 0.5,
99
+ "deepbooru_sort_alpha": true,
100
+ "deepbooru_use_spaces": false,
101
+ "deepbooru_escape": true,
102
+ "deepbooru_filter_tags": "",
103
+ "extra_networks_default_view": "cards",
104
+ "extra_networks_default_multiplier": 1.0,
105
+ "extra_networks_card_width": 0,
106
+ "extra_networks_card_height": 0,
107
+ "extra_networks_add_text_separator": " ",
108
+ "sd_hypernetwork": "None",
109
+ "return_grid": true,
110
+ "return_mask": false,
111
+ "return_mask_composite": false,
112
+ "do_not_show_images": false,
113
+ "add_model_hash_to_info": true,
114
+ "add_model_name_to_info": true,
115
+ "disable_weights_auto_swap": true,
116
+ "send_seed": true,
117
+ "send_size": true,
118
+ "font": "",
119
+ "js_modal_lightbox": true,
120
+ "js_modal_lightbox_initially_zoomed": true,
121
+ "show_progress_in_title": true,
122
+ "samplers_in_dropdown": true,
123
+ "dimensions_and_batch_together": true,
124
+ "keyedit_precision_attention": 0.1,
125
+ "keyedit_precision_extra": 0.05,
126
+ "quicksettings": "sd_model_checkpoint",
127
+ "hidden_tabs": [],
128
+ "ui_reorder": "inpaint, sampler, checkboxes, hires_fix, dimensions, cfg, seed, batch, override_settings, scripts",
129
+ "ui_extra_networks_tab_reorder": "",
130
+ "localization": "None",
131
+ "show_progressbar": true,
132
+ "live_previews_enable": true,
133
+ "show_progress_grid": true,
134
+ "show_progress_every_n_steps": 10,
135
+ "show_progress_type": "Approx NN",
136
+ "live_preview_content": "Prompt",
137
+ "live_preview_refresh_period": 1000,
138
+ "hide_samplers": [],
139
+ "eta_ddim": 0.0,
140
+ "eta_ancestral": 1.0,
141
+ "ddim_discretize": "uniform",
142
+ "s_churn": 0.0,
143
+ "s_tmin": 0.0,
144
+ "s_noise": 1.0,
145
+ "eta_noise_seed_delta": 0,
146
+ "always_discard_next_to_last_sigma": false,
147
+ "uni_pc_variant": "bh1",
148
+ "uni_pc_skip_type": "time_uniform",
149
+ "uni_pc_order": 3,
150
+ "uni_pc_lower_order_final": true,
151
+ "postprocessing_enable_in_main_ui": [],
152
+ "postprocessing_operation_order": [],
153
+ "upscaling_max_images_in_cache": 5,
154
+ "disabled_extensions": [
155
+ "sd-model-preview-xd",
156
+ "sd-webui-additional-networks",
157
+ "sd_smartprocess"
158
+ ],
159
+ "disable_all_extensions": "none",
160
+ "sd_checkpoint_hash": "7bf72c55d31349751f1f764e59fcefcf1abef45fdd0f8017387189ce68cafd96",
161
+ "ldsr_steps": 100,
162
+ "ldsr_cached": false,
163
+ "SWIN_tile": 192,
164
+ "SWIN_tile_overlap": 8,
165
+ "sd_lora": "None",
166
+ "control_net_model_config": "models\\cldm_v15.yaml",
167
+ "control_net_model_adapter_config": "models\\sketch_adapter_v14.yaml",
168
+ "control_net_detectedmap_dir": "detected_maps",
169
+ "control_net_models_path": "",
170
+ "control_net_max_models_num": 4,
171
+ "control_net_model_cache_size": 1,
172
+ "control_net_control_transfer": false,
173
+ "control_net_no_detectmap": false,
174
+ "control_net_detectmap_autosaving": false,
175
+ "control_net_only_midctrl_hires": true,
176
+ "control_net_allow_script_control": false,
177
+ "control_net_skip_img2img_processing": false,
178
+ "control_net_monocular_depth_optim": false,
179
+ "control_net_only_mid_control": false,
180
+ "control_net_cfg_based_guidance": false,
181
+ "control_net_sync_field_args": false
182
+ }
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
hashes.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "hashes": {}
3
+ }
launch.py ADDED
@@ -0,0 +1,356 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # this scripts installs necessary requirements and launches main program in webui.py
2
+ import subprocess
3
+ import os
4
+ import sys
5
+ import importlib.util
6
+ import shlex
7
+ import platform
8
+ import json
9
+
10
+ from modules import cmd_args
11
+ from modules.paths_internal import script_path, extensions_dir
12
+
13
+ commandline_args = os.environ.get('COMMANDLINE_ARGS', "")
14
+ sys.argv += shlex.split(commandline_args)
15
+
16
+ args, _ = cmd_args.parser.parse_known_args()
17
+
18
+ python = sys.executable
19
+ git = os.environ.get('GIT', "git")
20
+ index_url = os.environ.get('INDEX_URL', "")
21
+ stored_commit_hash = None
22
+ skip_install = False
23
+ dir_repos = "repositories"
24
+
25
+ if 'GRADIO_ANALYTICS_ENABLED' not in os.environ:
26
+ os.environ['GRADIO_ANALYTICS_ENABLED'] = 'False'
27
+
28
+
29
+ def check_python_version():
30
+ is_windows = platform.system() == "Windows"
31
+ major = sys.version_info.major
32
+ minor = sys.version_info.minor
33
+ micro = sys.version_info.micro
34
+
35
+ if is_windows:
36
+ supported_minors = [10]
37
+ else:
38
+ supported_minors = [7, 8, 9, 10, 11]
39
+
40
+ if not (major == 3 and minor in supported_minors):
41
+ import modules.errors
42
+
43
+ modules.errors.print_error_explanation(f"""
44
+ INCOMPATIBLE PYTHON VERSION
45
+
46
+ This program is tested with 3.10.6 Python, but you have {major}.{minor}.{micro}.
47
+ If you encounter an error with "RuntimeError: Couldn't install torch." message,
48
+ or any other error regarding unsuccessful package (library) installation,
49
+ please downgrade (or upgrade) to the latest version of 3.10 Python
50
+ and delete current Python and "venv" folder in WebUI's directory.
51
+
52
+ You can download 3.10 Python from here: https://www.python.org/downloads/release/python-3109/
53
+
54
+ {"Alternatively, use a binary release of WebUI: https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases" if is_windows else ""}
55
+
56
+ Use --skip-python-version-check to suppress this warning.
57
+ """)
58
+
59
+
60
+ def commit_hash():
61
+ global stored_commit_hash
62
+
63
+ if stored_commit_hash is not None:
64
+ return stored_commit_hash
65
+
66
+ try:
67
+ stored_commit_hash = run(f"{git} rev-parse HEAD").strip()
68
+ except Exception:
69
+ stored_commit_hash = "<none>"
70
+
71
+ return stored_commit_hash
72
+
73
+
74
+ def run(command, desc=None, errdesc=None, custom_env=None, live=False):
75
+ if desc is not None:
76
+ print(desc)
77
+
78
+ if live:
79
+ result = subprocess.run(command, shell=True, env=os.environ if custom_env is None else custom_env)
80
+ if result.returncode != 0:
81
+ raise RuntimeError(f"""{errdesc or 'Error running command'}.
82
+ Command: {command}
83
+ Error code: {result.returncode}""")
84
+
85
+ return ""
86
+
87
+ result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, env=os.environ if custom_env is None else custom_env)
88
+
89
+ if result.returncode != 0:
90
+
91
+ message = f"""{errdesc or 'Error running command'}.
92
+ Command: {command}
93
+ Error code: {result.returncode}
94
+ stdout: {result.stdout.decode(encoding="utf8", errors="ignore") if len(result.stdout)>0 else '<empty>'}
95
+ stderr: {result.stderr.decode(encoding="utf8", errors="ignore") if len(result.stderr)>0 else '<empty>'}
96
+ """
97
+ raise RuntimeError(message)
98
+
99
+ return result.stdout.decode(encoding="utf8", errors="ignore")
100
+
101
+
102
+ def check_run(command):
103
+ result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
104
+ return result.returncode == 0
105
+
106
+
107
+ def is_installed(package):
108
+ try:
109
+ spec = importlib.util.find_spec(package)
110
+ except ModuleNotFoundError:
111
+ return False
112
+
113
+ return spec is not None
114
+
115
+
116
+ def repo_dir(name):
117
+ return os.path.join(script_path, dir_repos, name)
118
+
119
+
120
+ def run_python(code, desc=None, errdesc=None):
121
+ return run(f'"{python}" -c "{code}"', desc, errdesc)
122
+
123
+
124
+ def run_pip(args, desc=None):
125
+ if skip_install:
126
+ return
127
+
128
+ index_url_line = f' --index-url {index_url}' if index_url != '' else ''
129
+ return run(f'"{python}" -m pip {args} --prefer-binary{index_url_line}', desc=f"Installing {desc}", errdesc=f"Couldn't install {desc}")
130
+
131
+
132
+ def check_run_python(code):
133
+ return check_run(f'"{python}" -c "{code}"')
134
+
135
+
136
+ def git_clone(url, dir, name, commithash=None):
137
+ # TODO clone into temporary dir and move if successful
138
+
139
+ if os.path.exists(dir):
140
+ if commithash is None:
141
+ return
142
+
143
+ current_hash = run(f'"{git}" -C "{dir}" rev-parse HEAD', None, f"Couldn't determine {name}'s hash: {commithash}").strip()
144
+ if current_hash == commithash:
145
+ return
146
+
147
+ run(f'"{git}" -C "{dir}" fetch', f"Fetching updates for {name}...", f"Couldn't fetch {name}")
148
+ run(f'"{git}" -C "{dir}" checkout {commithash}', f"Checking out commit for {name} with hash: {commithash}...", f"Couldn't checkout commit {commithash} for {name}")
149
+ return
150
+
151
+ run(f'"{git}" clone "{url}" "{dir}"', f"Cloning {name} into {dir}...", f"Couldn't clone {name}")
152
+
153
+ if commithash is not None:
154
+ run(f'"{git}" -C "{dir}" checkout {commithash}', None, "Couldn't checkout {name}'s hash: {commithash}")
155
+
156
+
157
+ def git_pull_recursive(dir):
158
+ for subdir, _, _ in os.walk(dir):
159
+ if os.path.exists(os.path.join(subdir, '.git')):
160
+ try:
161
+ output = subprocess.check_output([git, '-C', subdir, 'pull', '--autostash'])
162
+ print(f"Pulled changes for repository in '{subdir}':\n{output.decode('utf-8').strip()}\n")
163
+ except subprocess.CalledProcessError as e:
164
+ print(f"Couldn't perform 'git pull' on repository in '{subdir}':\n{e.output.decode('utf-8').strip()}\n")
165
+
166
+
167
+ def version_check(commit):
168
+ try:
169
+ import requests
170
+ commits = requests.get('https://api.github.com/repos/AUTOMATIC1111/stable-diffusion-webui/branches/master').json()
171
+ if commit != "<none>" and commits['commit']['sha'] != commit:
172
+ print("--------------------------------------------------------")
173
+ print("| You are not up to date with the most recent release. |")
174
+ print("| Consider running `git pull` to update. |")
175
+ print("--------------------------------------------------------")
176
+ elif commits['commit']['sha'] == commit:
177
+ print("You are up to date with the most recent release.")
178
+ else:
179
+ print("Not a git clone, can't perform version check.")
180
+ except Exception as e:
181
+ print("version check failed", e)
182
+
183
+
184
+ def run_extension_installer(extension_dir):
185
+ path_installer = os.path.join(extension_dir, "install.py")
186
+ if not os.path.isfile(path_installer):
187
+ return
188
+
189
+ try:
190
+ env = os.environ.copy()
191
+ env['PYTHONPATH'] = os.path.abspath(".")
192
+
193
+ print(run(f'"{python}" "{path_installer}"', errdesc=f"Error running install.py for extension {extension_dir}", custom_env=env))
194
+ except Exception as e:
195
+ print(e, file=sys.stderr)
196
+
197
+
198
+ def list_extensions(settings_file):
199
+ settings = {}
200
+
201
+ try:
202
+ if os.path.isfile(settings_file):
203
+ with open(settings_file, "r", encoding="utf8") as file:
204
+ settings = json.load(file)
205
+ except Exception as e:
206
+ print(e, file=sys.stderr)
207
+
208
+ disabled_extensions = set(settings.get('disabled_extensions', []))
209
+ disable_all_extensions = settings.get('disable_all_extensions', 'none')
210
+
211
+ if disable_all_extensions != 'none':
212
+ return []
213
+
214
+ return [x for x in os.listdir(extensions_dir) if x not in disabled_extensions]
215
+
216
+
217
+ def run_extensions_installers(settings_file):
218
+ if not os.path.isdir(extensions_dir):
219
+ return
220
+
221
+ for dirname_extension in list_extensions(settings_file):
222
+ run_extension_installer(os.path.join(extensions_dir, dirname_extension))
223
+
224
+
225
+ def prepare_environment():
226
+ global skip_install
227
+
228
+ torch_command = os.environ.get('TORCH_COMMAND', "pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117")
229
+ requirements_file = os.environ.get('REQS_FILE', "requirements_versions.txt")
230
+
231
+ xformers_package = os.environ.get('XFORMERS_PACKAGE', 'xformers==0.0.16rc425')
232
+ gfpgan_package = os.environ.get('GFPGAN_PACKAGE', "git+https://github.com/TencentARC/GFPGAN.git@8d2447a2d918f8eba5a4a01463fd48e45126a379")
233
+ clip_package = os.environ.get('CLIP_PACKAGE', "git+https://github.com/openai/CLIP.git@d50d76daa670286dd6cacf3bcd80b5e4823fc8e1")
234
+ openclip_package = os.environ.get('OPENCLIP_PACKAGE', "git+https://github.com/mlfoundations/open_clip.git@bb6e834e9c70d9c27d0dc3ecedeebeaeb1ffad6b")
235
+
236
+ stable_diffusion_repo = os.environ.get('STABLE_DIFFUSION_REPO', "https://github.com/Stability-AI/stablediffusion.git")
237
+ taming_transformers_repo = os.environ.get('TAMING_TRANSFORMERS_REPO', "https://github.com/CompVis/taming-transformers.git")
238
+ k_diffusion_repo = os.environ.get('K_DIFFUSION_REPO', 'https://github.com/crowsonkb/k-diffusion.git')
239
+ codeformer_repo = os.environ.get('CODEFORMER_REPO', 'https://github.com/sczhou/CodeFormer.git')
240
+ blip_repo = os.environ.get('BLIP_REPO', 'https://github.com/salesforce/BLIP.git')
241
+
242
+ stable_diffusion_commit_hash = os.environ.get('STABLE_DIFFUSION_COMMIT_HASH', "cf1d67a6fd5ea1aa600c4df58e5b47da45f6bdbf")
243
+ taming_transformers_commit_hash = os.environ.get('TAMING_TRANSFORMERS_COMMIT_HASH', "24268930bf1dce879235a7fddd0b2355b84d7ea6")
244
+ k_diffusion_commit_hash = os.environ.get('K_DIFFUSION_COMMIT_HASH', "5b3af030dd83e0297272d861c19477735d0317ec")
245
+ codeformer_commit_hash = os.environ.get('CODEFORMER_COMMIT_HASH', "c5b4593074ba6214284d6acd5f1719b6c5d739af")
246
+ blip_commit_hash = os.environ.get('BLIP_COMMIT_HASH', "48211a1594f1321b00f14c9f7a5b4813144b2fb9")
247
+
248
+ if not args.skip_python_version_check:
249
+ check_python_version()
250
+
251
+ commit = commit_hash()
252
+
253
+ print(f"Python {sys.version}")
254
+ print(f"Commit hash: {commit}")
255
+
256
+ if args.reinstall_torch or not is_installed("torch") or not is_installed("torchvision"):
257
+ run(f'"{python}" -m {torch_command}', "Installing torch and torchvision", "Couldn't install torch", live=True)
258
+
259
+ if not args.skip_torch_cuda_test:
260
+ run_python("import torch; assert torch.cuda.is_available(), 'Torch is not able to use GPU; add --skip-torch-cuda-test to COMMANDLINE_ARGS variable to disable this check'")
261
+
262
+ if not is_installed("gfpgan"):
263
+ run_pip(f"install {gfpgan_package}", "gfpgan")
264
+
265
+ if not is_installed("clip"):
266
+ run_pip(f"install {clip_package}", "clip")
267
+
268
+ if not is_installed("open_clip"):
269
+ run_pip(f"install {openclip_package}", "open_clip")
270
+
271
+ if (not is_installed("xformers") or args.reinstall_xformers) and args.xformers:
272
+ if platform.system() == "Windows":
273
+ if platform.python_version().startswith("3.10"):
274
+ run_pip(f"install -U -I --no-deps {xformers_package}", "xformers")
275
+ else:
276
+ print("Installation of xformers is not supported in this version of Python.")
277
+ print("You can also check this and build manually: https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Xformers#building-xformers-on-windows-by-duckness")
278
+ if not is_installed("xformers"):
279
+ exit(0)
280
+ elif platform.system() == "Linux":
281
+ run_pip(f"install {xformers_package}", "xformers")
282
+
283
+ if not is_installed("pyngrok") and args.ngrok:
284
+ run_pip("install pyngrok", "ngrok")
285
+
286
+ os.makedirs(os.path.join(script_path, dir_repos), exist_ok=True)
287
+
288
+ git_clone(stable_diffusion_repo, repo_dir('stable-diffusion-stability-ai'), "Stable Diffusion", stable_diffusion_commit_hash)
289
+ git_clone(taming_transformers_repo, repo_dir('taming-transformers'), "Taming Transformers", taming_transformers_commit_hash)
290
+ git_clone(k_diffusion_repo, repo_dir('k-diffusion'), "K-diffusion", k_diffusion_commit_hash)
291
+ git_clone(codeformer_repo, repo_dir('CodeFormer'), "CodeFormer", codeformer_commit_hash)
292
+ git_clone(blip_repo, repo_dir('BLIP'), "BLIP", blip_commit_hash)
293
+
294
+ if not is_installed("lpips"):
295
+ run_pip(f"install -r \"{os.path.join(repo_dir('CodeFormer'), 'requirements.txt')}\"", "requirements for CodeFormer")
296
+
297
+ if not os.path.isfile(requirements_file):
298
+ requirements_file = os.path.join(script_path, requirements_file)
299
+ run_pip(f"install -r \"{requirements_file}\"", "requirements for Web UI")
300
+
301
+ run_extensions_installers(settings_file=args.ui_settings_file)
302
+
303
+ if args.update_check:
304
+ version_check(commit)
305
+
306
+ if args.update_all_extensions:
307
+ git_pull_recursive(extensions_dir)
308
+
309
+ if "--exit" in sys.argv:
310
+ print("Exiting because of --exit argument")
311
+ exit(0)
312
+
313
+ if args.tests and not args.no_tests:
314
+ exitcode = tests(args.tests)
315
+ exit(exitcode)
316
+
317
+
318
+ def tests(test_dir):
319
+ if "--api" not in sys.argv:
320
+ sys.argv.append("--api")
321
+ if "--ckpt" not in sys.argv:
322
+ sys.argv.append("--ckpt")
323
+ sys.argv.append(os.path.join(script_path, "test/test_files/empty.pt"))
324
+ if "--skip-torch-cuda-test" not in sys.argv:
325
+ sys.argv.append("--skip-torch-cuda-test")
326
+ if "--disable-nan-check" not in sys.argv:
327
+ sys.argv.append("--disable-nan-check")
328
+ if "--no-tests" not in sys.argv:
329
+ sys.argv.append("--no-tests")
330
+
331
+ print(f"Launching Web UI in another process for testing with arguments: {' '.join(sys.argv[1:])}")
332
+
333
+ os.environ['COMMANDLINE_ARGS'] = ""
334
+ with open(os.path.join(script_path, 'test/stdout.txt'), "w", encoding="utf8") as stdout, open(os.path.join(script_path, 'test/stderr.txt'), "w", encoding="utf8") as stderr:
335
+ proc = subprocess.Popen([sys.executable, *sys.argv], stdout=stdout, stderr=stderr)
336
+
337
+ import test.server_poll
338
+ exitcode = test.server_poll.run_tests(proc, test_dir)
339
+
340
+ print(f"Stopping Web UI process with id {proc.pid}")
341
+ proc.kill()
342
+ return exitcode
343
+
344
+
345
+ def start():
346
+ print(f"Launching {'API server' if '--nowebui' in sys.argv else 'Web UI'} with arguments: {' '.join(sys.argv[1:])}")
347
+ import webui
348
+ if '--nowebui' in sys.argv:
349
+ webui.api_only()
350
+ else:
351
+ webui.webui()
352
+
353
+
354
+ if __name__ == "__main__":
355
+ prepare_environment()
356
+ start()
params.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ An airport with big skylights, greenery, battens
2
+ Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 2795848427, Size: 512x512, Model hash: 7bf72c55d3, Model: COMMERCIAL
requirements.txt ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ blendmodes
2
+ accelerate
3
+ basicsr
4
+ fonts
5
+ font-roboto
6
+ gfpgan
7
+ gradio==3.23
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
+ rich
requirements_versions.txt ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.23
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.9.4
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.3.0
29
+ httpcore<=0.15
30
+ fastapi==0.94.0
screenshot.png ADDED
script.js ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function gradioApp() {
2
+ const elems = document.getElementsByTagName('gradio-app')
3
+ const elem = elems.length == 0 ? document : elems[0]
4
+
5
+ if (elem !== document) elem.getElementById = function(id){ return document.getElementById(id) }
6
+ return elem.shadowRoot ? elem.shadowRoot : elem
7
+ }
8
+
9
+ function get_uiCurrentTab() {
10
+ return gradioApp().querySelector('#tabs button:not(.border-transparent)')
11
+ }
12
+
13
+ function get_uiCurrentTabContent() {
14
+ return gradioApp().querySelector('.tabitem[id^=tab_]:not([style*="display: none"])')
15
+ }
16
+
17
+ uiUpdateCallbacks = []
18
+ uiLoadedCallbacks = []
19
+ uiTabChangeCallbacks = []
20
+ optionsChangedCallbacks = []
21
+ let uiCurrentTab = null
22
+
23
+ function onUiUpdate(callback){
24
+ uiUpdateCallbacks.push(callback)
25
+ }
26
+ function onUiLoaded(callback){
27
+ uiLoadedCallbacks.push(callback)
28
+ }
29
+ function onUiTabChange(callback){
30
+ uiTabChangeCallbacks.push(callback)
31
+ }
32
+ function onOptionsChanged(callback){
33
+ optionsChangedCallbacks.push(callback)
34
+ }
35
+
36
+ function runCallback(x, m){
37
+ try {
38
+ x(m)
39
+ } catch (e) {
40
+ (console.error || console.log).call(console, e.message, e);
41
+ }
42
+ }
43
+ function executeCallbacks(queue, m) {
44
+ queue.forEach(function(x){runCallback(x, m)})
45
+ }
46
+
47
+ var executedOnLoaded = false;
48
+
49
+ document.addEventListener("DOMContentLoaded", function() {
50
+ var mutationObserver = new MutationObserver(function(m){
51
+ if(!executedOnLoaded && gradioApp().querySelector('#txt2img_prompt')){
52
+ executedOnLoaded = true;
53
+ executeCallbacks(uiLoadedCallbacks);
54
+ }
55
+
56
+ executeCallbacks(uiUpdateCallbacks, m);
57
+ const newTab = get_uiCurrentTab();
58
+ if ( newTab && ( newTab !== uiCurrentTab ) ) {
59
+ uiCurrentTab = newTab;
60
+ executeCallbacks(uiTabChangeCallbacks);
61
+ }
62
+ });
63
+ mutationObserver.observe( gradioApp(), { childList:true, subtree:true })
64
+ });
65
+
66
+ /**
67
+ * Add a ctrl+enter as a shortcut to start a generation
68
+ */
69
+ document.addEventListener('keydown', function(e) {
70
+ var handled = false;
71
+ if (e.key !== undefined) {
72
+ if((e.key == "Enter" && (e.metaKey || e.ctrlKey || e.altKey))) handled = true;
73
+ } else if (e.keyCode !== undefined) {
74
+ if((e.keyCode == 13 && (e.metaKey || e.ctrlKey || e.altKey))) handled = true;
75
+ }
76
+ if (handled) {
77
+ button = get_uiCurrentTabContent().querySelector('button[id$=_generate]');
78
+ if (button) {
79
+ button.click();
80
+ }
81
+ e.preventDefault();
82
+ }
83
+ })
84
+
85
+ /**
86
+ * checks that a UI element is not in another hidden element or tab content
87
+ */
88
+ function uiElementIsVisible(el) {
89
+ let isVisible = !el.closest('.\\!hidden');
90
+ if ( ! isVisible ) {
91
+ return false;
92
+ }
93
+
94
+ while( isVisible = el.closest('.tabitem')?.style.display !== 'none' ) {
95
+ if ( ! isVisible ) {
96
+ return false;
97
+ } else if ( el.parentElement ) {
98
+ el = el.parentElement
99
+ } else {
100
+ break;
101
+ }
102
+ }
103
+ return isVisible;
104
+ }
style.css ADDED
@@ -0,0 +1,832 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ /* general gradio fixes */
3
+
4
+ :root, .dark{
5
+ --checkbox-label-gap: 0.25em 0.1em;
6
+ --section-header-text-size: 12pt;
7
+ --block-background-fill: transparent;
8
+ }
9
+
10
+ .block.padded:not(.gradio-accordion) {
11
+ padding: 0 !important;
12
+ }
13
+
14
+ div.gradio-container{
15
+ max-width: unset !important;
16
+ }
17
+
18
+ .hidden{
19
+ display: none;
20
+ }
21
+
22
+ .compact{
23
+ background: transparent !important;
24
+ padding: 0 !important;
25
+ }
26
+
27
+ div.form{
28
+ border-width: 0;
29
+ box-shadow: none;
30
+ background: transparent;
31
+ overflow: visible;
32
+ gap: 0.5em;
33
+ }
34
+
35
+ .block.gradio-dropdown,
36
+ .block.gradio-slider,
37
+ .block.gradio-checkbox,
38
+ .block.gradio-textbox,
39
+ .block.gradio-radio,
40
+ .block.gradio-checkboxgroup,
41
+ .block.gradio-number,
42
+ .block.gradio-colorpicker
43
+ {
44
+ border-width: 0 !important;
45
+ box-shadow: none !important;
46
+ }
47
+
48
+ .gap.compact{
49
+ padding: 0;
50
+ gap: 0.2em 0;
51
+ }
52
+
53
+ div.compact{
54
+ gap: 1em;
55
+ }
56
+
57
+ .gradio-dropdown label span:not(.has-info),
58
+ .gradio-textbox label span:not(.has-info),
59
+ .gradio-number label span:not(.has-info)
60
+ {
61
+ margin-bottom: 0;
62
+ }
63
+
64
+ .gradio-dropdown ul.options{
65
+ z-index: 3000;
66
+ min-width: fit-content;
67
+ max-width: inherit;
68
+ white-space: nowrap;
69
+ }
70
+
71
+ .gradio-dropdown ul.options li.item {
72
+ padding: 0.05em 0;
73
+ }
74
+
75
+ .gradio-dropdown ul.options li.item.selected {
76
+ background-color: var(--neutral-100);
77
+ }
78
+
79
+ .dark .gradio-dropdown ul.options li.item.selected {
80
+ background-color: var(--neutral-900);
81
+ }
82
+
83
+ .gradio-dropdown div.wrap.wrap.wrap.wrap{
84
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
85
+ }
86
+
87
+ .gradio-dropdown:not(.multiselect) .wrap-inner.wrap-inner.wrap-inner{
88
+ flex-wrap: unset;
89
+ }
90
+
91
+ .gradio-dropdown .single-select{
92
+ white-space: nowrap;
93
+ overflow: hidden;
94
+ }
95
+
96
+ .gradio-dropdown .token-remove.remove-all.remove-all{
97
+ display: none;
98
+ }
99
+
100
+ .gradio-dropdown.multiselect .token-remove.remove-all.remove-all{
101
+ display: flex;
102
+ }
103
+
104
+ .gradio-slider input[type="number"]{
105
+ width: 6em;
106
+ }
107
+
108
+ .block.gradio-checkbox {
109
+ margin: 0.75em 1.5em 0 0;
110
+ }
111
+
112
+ .gradio-html div.wrap{
113
+ height: 100%;
114
+ }
115
+ div.gradio-html.min{
116
+ min-height: 0;
117
+ }
118
+
119
+ .block.gradio-gallery{
120
+ background: var(--input-background-fill);
121
+ }
122
+
123
+ .gradio-container .prose a, .gradio-container .prose a:visited{
124
+ color: unset;
125
+ text-decoration: none;
126
+ }
127
+
128
+
129
+
130
+ /* general styled components */
131
+
132
+ .gradio-button.tool{
133
+ max-width: 2.2em;
134
+ min-width: 2.2em !important;
135
+ height: 2.4em;
136
+ align-self: end;
137
+ line-height: 1em;
138
+ border-radius: 0.5em;
139
+ }
140
+
141
+ .gradio-button.secondary-down{
142
+ background: var(--button-secondary-background-fill);
143
+ color: var(--button-secondary-text-color);
144
+ }
145
+ .gradio-button.secondary-down, .gradio-button.secondary-down:hover{
146
+ box-shadow: 1px 1px 1px rgba(0,0,0,0.25) inset, 0px 0px 3px rgba(0,0,0,0.15) inset;
147
+ }
148
+ .gradio-button.secondary-down:hover{
149
+ background: var(--button-secondary-background-fill-hover);
150
+ color: var(--button-secondary-text-color-hover);
151
+ }
152
+
153
+ .checkboxes-row{
154
+ margin-bottom: 0.5em;
155
+ margin-left: 0em;
156
+ }
157
+ .checkboxes-row > div{
158
+ flex: 0;
159
+ white-space: nowrap;
160
+ min-width: auto;
161
+ }
162
+
163
+ button.custom-button{
164
+ border-radius: var(--button-large-radius);
165
+ padding: var(--button-large-padding);
166
+ font-weight: var(--button-large-text-weight);
167
+ border: var(--button-border-width) solid var(--button-secondary-border-color);
168
+ background: var(--button-secondary-background-fill);
169
+ color: var(--button-secondary-text-color);
170
+ font-size: var(--button-large-text-size);
171
+ display: inline-flex;
172
+ justify-content: center;
173
+ align-items: center;
174
+ transition: var(--button-transition);
175
+ box-shadow: var(--button-shadow);
176
+ text-align: center;
177
+ }
178
+
179
+
180
+ /* txt2img/img2img specific */
181
+
182
+ .block.token-counter{
183
+ position: absolute;
184
+ display: inline-block;
185
+ right: 1em;
186
+ min-width: 0 !important;
187
+ width: auto;
188
+ z-index: 100;
189
+ top: -0.75em;
190
+ }
191
+
192
+ .block.token-counter span{
193
+ background: var(--input-background-fill) !important;
194
+ box-shadow: 0 0 0.0 0.3em rgba(192,192,192,0.15), inset 0 0 0.6em rgba(192,192,192,0.075);
195
+ border: 2px solid rgba(192,192,192,0.4) !important;
196
+ border-radius: 0.4em;
197
+ }
198
+
199
+ .block.token-counter.error span{
200
+ 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);
201
+ border: 2px solid rgba(255,0,0,0.4) !important;
202
+ }
203
+
204
+ .block.token-counter div{
205
+ display: inline;
206
+ }
207
+
208
+ .block.token-counter span{
209
+ padding: 0.1em 0.75em;
210
+ }
211
+
212
+ [id$=_subseed_show]{
213
+ min-width: auto !important;
214
+ flex-grow: 0 !important;
215
+ display: flex;
216
+ }
217
+
218
+ [id$=_subseed_show] label{
219
+ margin-bottom: 0.5em;
220
+ align-self: end;
221
+ }
222
+
223
+ .performance {
224
+ font-size: 0.85em;
225
+ color: #444;
226
+ }
227
+
228
+ .performance p{
229
+ display: inline-block;
230
+ }
231
+
232
+ .performance .time {
233
+ margin-right: 0;
234
+ }
235
+
236
+ .performance .vram {
237
+ }
238
+
239
+ #txt2img_generate, #img2img_generate {
240
+ min-height: 4.5em;
241
+ }
242
+
243
+ @media screen and (min-width: 2500px) {
244
+ #txt2img_gallery, #img2img_gallery {
245
+ min-height: 768px;
246
+ }
247
+ }
248
+
249
+ #txt2img_gallery img, #img2img_gallery img{
250
+ object-fit: scale-down;
251
+ }
252
+ #txt2img_actions_column, #img2img_actions_column {
253
+ gap: 0.5em;
254
+ }
255
+ #txt2img_tools, #img2img_tools{
256
+ gap: 0.4em;
257
+ }
258
+
259
+ .interrogate-col{
260
+ min-width: 0 !important;
261
+ max-width: fit-content;
262
+ gap: 0.5em;
263
+ }
264
+ .interrogate-col > button{
265
+ flex: 1;
266
+ }
267
+
268
+ .generate-box{
269
+ position: relative;
270
+ }
271
+ .gradio-button.generate-box-skip, .gradio-button.generate-box-interrupt{
272
+ position: absolute;
273
+ width: 50%;
274
+ height: 100%;
275
+ display: none;
276
+ background: #b4c0cc;
277
+ }
278
+ .gradio-button.generate-box-skip:hover, .gradio-button.generate-box-interrupt:hover{
279
+ background: #c2cfdb;
280
+ }
281
+ .gradio-button.generate-box-interrupt{
282
+ left: 0;
283
+ border-radius: 0.5rem 0 0 0.5rem;
284
+ }
285
+ .gradio-button.generate-box-skip{
286
+ right: 0;
287
+ border-radius: 0 0.5rem 0.5rem 0;
288
+ }
289
+
290
+ #txtimg_hr_finalres{
291
+ min-height: 0 !important;
292
+ padding: .625rem .75rem;
293
+ margin-left: -0.75em
294
+ }
295
+
296
+ #txtimg_hr_finalres .resolution{
297
+ font-weight: bold;
298
+ }
299
+
300
+ .inactive{
301
+ opacity: 0.5;
302
+ }
303
+
304
+ [id$=_column_batch]{
305
+ min-width: min(13.5em, 100%) !important;
306
+ }
307
+
308
+ div.dimensions-tools{
309
+ min-width: 0 !important;
310
+ max-width: fit-content;
311
+ flex-direction: row;
312
+ align-content: center;
313
+ }
314
+
315
+ #mode_img2img .gradio-image > div.fixed-height, #mode_img2img .gradio-image > div.fixed-height img{
316
+ height: 480px !important;
317
+ max-height: 480px !important;
318
+ min-height: 480px !important;
319
+ }
320
+
321
+ #img2img_sketch, #img2maskimg, #inpaint_sketch {
322
+ overflow: overlay !important;
323
+ resize: auto;
324
+ background: var(--panel-background-fill);
325
+ z-index: 5;
326
+ }
327
+
328
+ .image-buttons button{
329
+ min-width: auto;
330
+ }
331
+
332
+ .infotext {
333
+ overflow-wrap: break-word;
334
+ }
335
+
336
+ /* settings */
337
+ #quicksettings {
338
+ width: fit-content;
339
+ align-items: end;
340
+ }
341
+
342
+ #quicksettings > div, #quicksettings > fieldset{
343
+ max-width: 24em;
344
+ min-width: 24em;
345
+ padding: 0;
346
+ border: none;
347
+ box-shadow: none;
348
+ background: none;
349
+ }
350
+
351
+ #settings{
352
+ display: block;
353
+ }
354
+
355
+ #settings > div{
356
+ border: none;
357
+ margin-left: 10em;
358
+ }
359
+
360
+ #settings > div.tab-nav{
361
+ float: left;
362
+ display: block;
363
+ margin-left: 0;
364
+ width: 10em;
365
+ }
366
+
367
+ #settings > div.tab-nav button{
368
+ display: block;
369
+ border: none;
370
+ text-align: left;
371
+ white-space: initial;
372
+ }
373
+
374
+ #settings_result{
375
+ height: 1.4em;
376
+ margin: 0 1.2em;
377
+ }
378
+
379
+
380
+ /* live preview */
381
+ .progressDiv{
382
+ position: relative;
383
+ height: 20px;
384
+ background: #b4c0cc;
385
+ border-radius: 3px !important;
386
+ margin-bottom: -3px;
387
+ }
388
+
389
+ .dark .progressDiv{
390
+ background: #424c5b;
391
+ }
392
+
393
+ .progressDiv .progress{
394
+ width: 0%;
395
+ height: 20px;
396
+ background: #0060df;
397
+ color: white;
398
+ font-weight: bold;
399
+ line-height: 20px;
400
+ padding: 0 8px 0 0;
401
+ text-align: right;
402
+ border-radius: 3px;
403
+ overflow: visible;
404
+ white-space: nowrap;
405
+ padding: 0 0.5em;
406
+ }
407
+
408
+ .livePreview{
409
+ position: absolute;
410
+ z-index: 300;
411
+ background-color: white;
412
+ margin: -4px;
413
+ }
414
+
415
+ .dark .livePreview{
416
+ background-color: rgb(17 24 39 / var(--tw-bg-opacity));
417
+ }
418
+
419
+ .livePreview img{
420
+ position: absolute;
421
+ object-fit: contain;
422
+ width: 100%;
423
+ height: 100%;
424
+ }
425
+
426
+ /* fullscreen popup (ie in Lora's (i) button) */
427
+
428
+ .popup-metadata{
429
+ color: black;
430
+ background: white;
431
+ display: inline-block;
432
+ padding: 1em;
433
+ white-space: pre-wrap;
434
+ }
435
+
436
+ .global-popup{
437
+ display: flex;
438
+ position: fixed;
439
+ z-index: 1001;
440
+ left: 0;
441
+ top: 0;
442
+ width: 100%;
443
+ height: 100%;
444
+ overflow: auto;
445
+ background-color: rgba(20, 20, 20, 0.95);
446
+ }
447
+
448
+
449
+ .global-popup-close:before {
450
+ content: "×";
451
+ }
452
+
453
+ .global-popup-close{
454
+ position: fixed;
455
+ right: 0.25em;
456
+ top: 0;
457
+ cursor: pointer;
458
+ color: white;
459
+ font-size: 32pt;
460
+ }
461
+
462
+ .global-popup-inner{
463
+ display: inline-block;
464
+ margin: auto;
465
+ padding: 2em;
466
+ }
467
+
468
+ /* fullpage image viewer */
469
+
470
+ #lightboxModal{
471
+ display: none;
472
+ position: fixed;
473
+ z-index: 1001;
474
+ left: 0;
475
+ top: 0;
476
+ width: 100%;
477
+ height: 100%;
478
+ overflow: auto;
479
+ background-color: rgba(20, 20, 20, 0.95);
480
+ user-select: none;
481
+ -webkit-user-select: none;
482
+ flex-direction: column;
483
+ }
484
+
485
+ .modalControls {
486
+ display: flex;
487
+ gap: 1em;
488
+ padding: 1em;
489
+ background-color: rgba(0,0,0,0.2);
490
+ }
491
+ .modalClose {
492
+ margin-left: auto;
493
+ }
494
+ .modalControls span{
495
+ color: white;
496
+ font-size: 35px;
497
+ font-weight: bold;
498
+ cursor: pointer;
499
+ width: 1em;
500
+ }
501
+
502
+ .modalControls span:hover, .modalControls span:focus{
503
+ color: #999;
504
+ text-decoration: none;
505
+ }
506
+
507
+ #lightboxModal > img {
508
+ display: block;
509
+ margin: auto;
510
+ width: auto;
511
+ }
512
+
513
+ #lightboxModal > img.modalImageFullscreen{
514
+ object-fit: contain;
515
+ height: 100%;
516
+ }
517
+
518
+ .modalPrev,
519
+ .modalNext {
520
+ cursor: pointer;
521
+ position: absolute;
522
+ top: 50%;
523
+ width: auto;
524
+ padding: 16px;
525
+ margin-top: -50px;
526
+ color: white;
527
+ font-weight: bold;
528
+ font-size: 20px;
529
+ transition: 0.6s ease;
530
+ border-radius: 0 3px 3px 0;
531
+ user-select: none;
532
+ -webkit-user-select: none;
533
+ }
534
+
535
+ .modalNext {
536
+ right: 0;
537
+ border-radius: 3px 0 0 3px;
538
+ }
539
+
540
+ .modalPrev:hover,
541
+ .modalNext:hover {
542
+ background-color: rgba(0, 0, 0, 0.8);
543
+ }
544
+
545
+ #imageARPreview {
546
+ position: absolute;
547
+ top: 0px;
548
+ left: 0px;
549
+ border: 2px solid red;
550
+ background: rgba(255, 0, 0, 0.3);
551
+ z-index: 900;
552
+ pointer-events: none;
553
+ display: none;
554
+ }
555
+
556
+ /* context menu (ie for the generate button) */
557
+
558
+ #context-menu{
559
+ z-index:9999;
560
+ position:absolute;
561
+ display:block;
562
+ padding:0px 0;
563
+ border:2px solid #a55000;
564
+ border-radius:8px;
565
+ box-shadow:1px 1px 2px #CE6400;
566
+ width: 200px;
567
+ }
568
+
569
+ .context-menu-items{
570
+ list-style: none;
571
+ margin: 0;
572
+ padding: 0;
573
+ }
574
+
575
+ .context-menu-items a{
576
+ display:block;
577
+ padding:5px;
578
+ cursor:pointer;
579
+ }
580
+
581
+ .context-menu-items a:hover{
582
+ background: #a55000;
583
+ }
584
+
585
+
586
+ /* extensions */
587
+
588
+ #tab_extensions table{
589
+ border-collapse: collapse;
590
+ }
591
+
592
+ #tab_extensions table td, #tab_extensions table th{
593
+ border: 1px solid #ccc;
594
+ padding: 0.25em 0.5em;
595
+ }
596
+
597
+ #tab_extensions table input[type="checkbox"]{
598
+ margin-right: 0.5em;
599
+ appearance: checkbox;
600
+ }
601
+
602
+ #tab_extensions button{
603
+ max-width: 16em;
604
+ }
605
+
606
+ #tab_extensions input[disabled="disabled"]{
607
+ opacity: 0.5;
608
+ }
609
+
610
+ .extension-tag{
611
+ font-weight: bold;
612
+ font-size: 95%;
613
+ }
614
+
615
+ #available_extensions .info{
616
+ margin: 0;
617
+ }
618
+
619
+ #available_extensions .date_added{
620
+ opacity: 0.85;
621
+ font-size: 90%;
622
+ }
623
+
624
+ /* replace original footer with ours */
625
+
626
+ footer {
627
+ display: none !important;
628
+ }
629
+
630
+ #footer{
631
+ text-align: center;
632
+ }
633
+
634
+ #footer div{
635
+ display: inline-block;
636
+ }
637
+
638
+ #footer .versions{
639
+ font-size: 85%;
640
+ opacity: 0.85;
641
+ }
642
+
643
+ /* extra networks UI */
644
+
645
+ .extra-networks > div > [id *= '_extra_']{
646
+ margin: 0.3em;
647
+ }
648
+
649
+ .extra-network-subdirs{
650
+ padding: 0.2em 0.35em;
651
+ }
652
+
653
+ .extra-network-subdirs button{
654
+ margin: 0 0.15em;
655
+ }
656
+ .extra-networks .tab-nav .search{
657
+ display: inline-block;
658
+ max-width: 16em;
659
+ margin: 0.3em;
660
+ align-self: center;
661
+ width: 16em;
662
+ }
663
+
664
+ #txt2img_extra_view, #img2img_extra_view {
665
+ width: auto;
666
+ }
667
+
668
+ .extra-network-cards .nocards, .extra-network-thumbs .nocards{
669
+ margin: 1.25em 0.5em 0.5em 0.5em;
670
+ }
671
+
672
+ .extra-network-cards .nocards h1, .extra-network-thumbs .nocards h1{
673
+ font-size: 1.5em;
674
+ margin-bottom: 1em;
675
+ }
676
+
677
+ .extra-network-cards .nocards li, .extra-network-thumbs .nocards li{
678
+ margin-left: 0.5em;
679
+ }
680
+
681
+
682
+ .extra-network-cards .card .metadata-button:before, .extra-network-thumbs .card .metadata-button:before{
683
+ content: "🛈";
684
+ }
685
+ .extra-network-cards .card .metadata-button, .extra-network-thumbs .card .metadata-button{
686
+ display: none;
687
+ position: absolute;
688
+ right: 0;
689
+ color: white;
690
+ text-shadow: 2px 2px 3px black;
691
+ padding: 0.25em;
692
+ font-size: 22pt;
693
+ width: 1.5em;
694
+ }
695
+ .extra-network-cards .card:hover .metadata-button, .extra-network-thumbs .card:hover .metadata-button{
696
+ display: inline-block;
697
+ }
698
+ .extra-network-cards .card .metadata-button:hover, .extra-network-thumbs .card .metadata-button:hover{
699
+ color: red;
700
+ }
701
+
702
+
703
+ .extra-network-thumbs {
704
+ display: flex;
705
+ flex-flow: row wrap;
706
+ gap: 10px;
707
+ }
708
+
709
+ .extra-network-thumbs .card {
710
+ height: 6em;
711
+ width: 6em;
712
+ cursor: pointer;
713
+ background-image: url('./file=html/card-no-preview.png');
714
+ background-size: cover;
715
+ background-position: center center;
716
+ position: relative;
717
+ }
718
+
719
+ .extra-network-thumbs .card:hover .additional a {
720
+ display: inline-block;
721
+ }
722
+
723
+ .extra-network-thumbs .actions .additional a {
724
+ background-image: url('./file=html/image-update.svg');
725
+ background-repeat: no-repeat;
726
+ background-size: cover;
727
+ background-position: center center;
728
+ position: absolute;
729
+ top: 0;
730
+ left: 0;
731
+ width: 24px;
732
+ height: 24px;
733
+ display: none;
734
+ font-size: 0;
735
+ text-align: -9999;
736
+ }
737
+
738
+ .extra-network-thumbs .actions .name {
739
+ position: absolute;
740
+ bottom: 0;
741
+ font-size: 10px;
742
+ padding: 3px;
743
+ width: 100%;
744
+ overflow: hidden;
745
+ white-space: nowrap;
746
+ text-overflow: ellipsis;
747
+ background: rgba(0,0,0,.5);
748
+ color: white;
749
+ }
750
+
751
+ .extra-network-thumbs .card:hover .actions .name {
752
+ white-space: normal;
753
+ word-break: break-all;
754
+ }
755
+
756
+ .extra-network-cards .card{
757
+ display: inline-block;
758
+ margin: 0.5em;
759
+ width: 16em;
760
+ height: 24em;
761
+ box-shadow: 0 0 5px rgba(128, 128, 128, 0.5);
762
+ border-radius: 0.2em;
763
+ position: relative;
764
+
765
+ background-size: auto 100%;
766
+ background-position: center;
767
+ overflow: hidden;
768
+ cursor: pointer;
769
+
770
+ background-image: url('./file=html/card-no-preview.png')
771
+ }
772
+
773
+ .extra-network-cards .card:hover{
774
+ box-shadow: 0 0 2px 0.3em rgba(0, 128, 255, 0.35);
775
+ }
776
+
777
+ .extra-network-cards .card .actions .additional{
778
+ display: none;
779
+ }
780
+
781
+ .extra-network-cards .card .actions{
782
+ position: absolute;
783
+ bottom: 0;
784
+ left: 0;
785
+ right: 0;
786
+ padding: 0.5em;
787
+ background: rgba(0,0,0,0.5);
788
+ box-shadow: 0 0 0.25em 0.25em rgba(0,0,0,0.5);
789
+ text-shadow: 0 0 0.2em black;
790
+ }
791
+
792
+ .extra-network-cards .card .actions *{
793
+ color: white;
794
+ }
795
+
796
+ .extra-network-cards .card .actions:hover{
797
+ box-shadow: 0 0 0.75em 0.75em rgba(0,0,0,0.5) !important;
798
+ }
799
+
800
+ .extra-network-cards .card .actions .name{
801
+ font-size: 1.7em;
802
+ font-weight: bold;
803
+ line-break: anywhere;
804
+ }
805
+
806
+ .extra-network-cards .card .actions .description {
807
+ display: block;
808
+ max-height: 3em;
809
+ white-space: pre-wrap;
810
+ line-height: 1.1;
811
+ }
812
+
813
+ .extra-network-cards .card .actions .description:hover {
814
+ max-height: none;
815
+ }
816
+
817
+ .extra-network-cards .card .actions:hover .additional{
818
+ display: block;
819
+ }
820
+
821
+ .extra-network-cards .card ul{
822
+ margin: 0.25em 0 0.75em 0.25em;
823
+ cursor: unset;
824
+ }
825
+
826
+ .extra-network-cards .card ul a{
827
+ cursor: pointer;
828
+ }
829
+
830
+ .extra-network-cards .card ul a:hover{
831
+ color: red;
832
+ }
styles.csv ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ name,prompt,negative_prompt
2
+ hos,"RAW IMAGE OF A HOSPITAL BUILDING , transparent windows, red oxide facade , concrete exterior TREES, GRASS , WARM LIGHT INTERIOR , GLASS REFLECTION, SUNNY SKY 3 d render, octane renderer, raytracing, 8 k resolution, rim light, hyper realistic, photorealistic, high definition, highly detailed, technicolor, architecture photography, masterpiece, realistic grass, roads",ugly
3
+ hosp elev,"raw image of a hospital in a forest with a lot of trees, cloudy sky, windows concrete exterior, 8k , dslr photograph, cinematic, still photo, motionblur,","hdr, 2d, illustration, ugly"
4
+ raz port,"raw image of a vacation home near a lake with lots of tropical trees nearby , cloudy sky, exterior, 8k , dslr photograph, cinematic, still photo, motion blur, , white exterior, cars , swimming pool pavement , sunset , people walking, curved arch , backwaters in the background , beach side","hdr, 2d, illustration, ugly, high contrast , over exposed
5
+ "
6
+ akkus cafe,"RAW photo, home interior view, daylight, sunlight from windows, large glass openings, timber framing, kitchen counter, concrete flooring lora:epiNoiseoffset_v2:1> , industrial style, urban jungle, glass panes , transparent glass , urban exterior, wooden furniture, chair, plants hanging from the ceiling, hanging lights, wooden partition with plants , book shelf , transparent glass , ultra realistic, photo realistic , false ceiling, 8k. cinematic, cinematic still shot, wooden chair, RTX lighting","HDR, 2d, illustration , cartoonish"
styles.csv.bak ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ name,prompt,negative_prompt
2
+ hos,"RAW IMAGE OF A HOSPITAL BUILDING , transparent windows, red oxide facade , concrete exterior TREES, GRASS , WARM LIGHT INTERIOR , GLASS REFLECTION, SUNNY SKY 3 d render, octane renderer, raytracing, 8 k resolution, rim light, hyper realistic, photorealistic, high definition, highly detailed, technicolor, architecture photography, masterpiece, realistic grass, roads",ugly
3
+ hosp elev,"raw image of a hospital in a forest with a lot of trees, cloudy sky, windows concrete exterior, 8k , dslr photograph, cinematic, still photo, motionblur,","hdr, 2d, illustration, ugly"
4
+ raz port,"raw image of a vacation home near a lake with lots of tropical trees nearby , cloudy sky, exterior, 8k , dslr photograph, cinematic, still photo, motion blur, , white exterior, cars , swimming pool pavement , sunset , people walking, curved arch , backwaters in the background , beach side","hdr, 2d, illustration, ugly, high contrast , over exposed
5
+ "
ui-config.json ADDED
@@ -0,0 +1,945 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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/Final denoising strength/visible": true,
279
+ "customscript/loopback.py/img2img/Final denoising strength/value": 0.5,
280
+ "customscript/loopback.py/img2img/Final denoising strength/minimum": 0,
281
+ "customscript/loopback.py/img2img/Final denoising strength/maximum": 1,
282
+ "customscript/loopback.py/img2img/Final denoising strength/step": 0.01,
283
+ "customscript/loopback.py/img2img/Denoising strength curve/visible": true,
284
+ "customscript/loopback.py/img2img/Denoising strength curve/value": "Linear",
285
+ "customscript/loopback.py/img2img/Append interrogated prompt at each iteration/visible": true,
286
+ "customscript/loopback.py/img2img/Append interrogated prompt at each iteration/value": "None",
287
+ "customscript/outpainting_mk_2.py/img2img/Pixels to expand/visible": true,
288
+ "customscript/outpainting_mk_2.py/img2img/Pixels to expand/value": 128,
289
+ "customscript/outpainting_mk_2.py/img2img/Pixels to expand/minimum": 8,
290
+ "customscript/outpainting_mk_2.py/img2img/Pixels to expand/maximum": 256,
291
+ "customscript/outpainting_mk_2.py/img2img/Pixels to expand/step": 8,
292
+ "customscript/outpainting_mk_2.py/img2img/Mask blur/visible": true,
293
+ "customscript/outpainting_mk_2.py/img2img/Mask blur/value": 8,
294
+ "customscript/outpainting_mk_2.py/img2img/Mask blur/minimum": 0,
295
+ "customscript/outpainting_mk_2.py/img2img/Mask blur/maximum": 64,
296
+ "customscript/outpainting_mk_2.py/img2img/Mask blur/step": 1,
297
+ "customscript/outpainting_mk_2.py/img2img/Fall-off exponent (lower=higher detail)/visible": true,
298
+ "customscript/outpainting_mk_2.py/img2img/Fall-off exponent (lower=higher detail)/value": 1.0,
299
+ "customscript/outpainting_mk_2.py/img2img/Fall-off exponent (lower=higher detail)/minimum": 0.0,
300
+ "customscript/outpainting_mk_2.py/img2img/Fall-off exponent (lower=higher detail)/maximum": 4.0,
301
+ "customscript/outpainting_mk_2.py/img2img/Fall-off exponent (lower=higher detail)/step": 0.01,
302
+ "customscript/outpainting_mk_2.py/img2img/Color variation/visible": true,
303
+ "customscript/outpainting_mk_2.py/img2img/Color variation/value": 0.05,
304
+ "customscript/outpainting_mk_2.py/img2img/Color variation/minimum": 0.0,
305
+ "customscript/outpainting_mk_2.py/img2img/Color variation/maximum": 1.0,
306
+ "customscript/outpainting_mk_2.py/img2img/Color variation/step": 0.01,
307
+ "customscript/poor_mans_outpainting.py/img2img/Pixels to expand/visible": true,
308
+ "customscript/poor_mans_outpainting.py/img2img/Pixels to expand/value": 128,
309
+ "customscript/poor_mans_outpainting.py/img2img/Pixels to expand/minimum": 8,
310
+ "customscript/poor_mans_outpainting.py/img2img/Pixels to expand/maximum": 256,
311
+ "customscript/poor_mans_outpainting.py/img2img/Pixels to expand/step": 8,
312
+ "customscript/poor_mans_outpainting.py/img2img/Mask blur/visible": true,
313
+ "customscript/poor_mans_outpainting.py/img2img/Mask blur/value": 4,
314
+ "customscript/poor_mans_outpainting.py/img2img/Mask blur/minimum": 0,
315
+ "customscript/poor_mans_outpainting.py/img2img/Mask blur/maximum": 64,
316
+ "customscript/poor_mans_outpainting.py/img2img/Mask blur/step": 1,
317
+ "customscript/poor_mans_outpainting.py/img2img/Masked content/visible": true,
318
+ "customscript/poor_mans_outpainting.py/img2img/Masked content/value": "fill",
319
+ "customscript/prompt_matrix.py/img2img/Put variable parts at start of prompt/visible": true,
320
+ "customscript/prompt_matrix.py/img2img/Put variable parts at start of prompt/value": false,
321
+ "customscript/prompt_matrix.py/img2img/Use different seed for each picture/visible": true,
322
+ "customscript/prompt_matrix.py/img2img/Use different seed for each picture/value": false,
323
+ "customscript/prompt_matrix.py/img2img/Select prompt/visible": true,
324
+ "customscript/prompt_matrix.py/img2img/Select prompt/value": "positive",
325
+ "customscript/prompt_matrix.py/img2img/Select joining char/visible": true,
326
+ "customscript/prompt_matrix.py/img2img/Select joining char/value": "comma",
327
+ "customscript/prompt_matrix.py/img2img/Grid margins (px)/visible": true,
328
+ "customscript/prompt_matrix.py/img2img/Grid margins (px)/value": 0,
329
+ "customscript/prompt_matrix.py/img2img/Grid margins (px)/minimum": 0,
330
+ "customscript/prompt_matrix.py/img2img/Grid margins (px)/maximum": 500,
331
+ "customscript/prompt_matrix.py/img2img/Grid margins (px)/step": 2,
332
+ "customscript/prompts_from_file.py/img2img/Iterate seed every line/visible": true,
333
+ "customscript/prompts_from_file.py/img2img/Iterate seed every line/value": false,
334
+ "customscript/prompts_from_file.py/img2img/Use same random seed for all lines/visible": true,
335
+ "customscript/prompts_from_file.py/img2img/Use same random seed for all lines/value": false,
336
+ "customscript/prompts_from_file.py/img2img/List of prompt inputs/visible": true,
337
+ "customscript/prompts_from_file.py/img2img/List of prompt inputs/value": "",
338
+ "customscript/sd_upscale.py/img2img/Tile overlap/visible": true,
339
+ "customscript/sd_upscale.py/img2img/Tile overlap/value": 64,
340
+ "customscript/sd_upscale.py/img2img/Tile overlap/minimum": 0,
341
+ "customscript/sd_upscale.py/img2img/Tile overlap/maximum": 256,
342
+ "customscript/sd_upscale.py/img2img/Tile overlap/step": 16,
343
+ "customscript/sd_upscale.py/img2img/Scale Factor/visible": true,
344
+ "customscript/sd_upscale.py/img2img/Scale Factor/value": 2.0,
345
+ "customscript/sd_upscale.py/img2img/Scale Factor/minimum": 1.0,
346
+ "customscript/sd_upscale.py/img2img/Scale Factor/maximum": 4.0,
347
+ "customscript/sd_upscale.py/img2img/Scale Factor/step": 0.05,
348
+ "customscript/sd_upscale.py/img2img/Upscaler/visible": true,
349
+ "customscript/sd_upscale.py/img2img/Upscaler/value": "None",
350
+ "customscript/xyz_grid.py/img2img/X type/visible": true,
351
+ "customscript/xyz_grid.py/img2img/X type/value": "Seed",
352
+ "customscript/xyz_grid.py/img2img/X values/visible": true,
353
+ "customscript/xyz_grid.py/img2img/X values/value": "",
354
+ "customscript/xyz_grid.py/img2img/Y type/visible": true,
355
+ "customscript/xyz_grid.py/img2img/Y type/value": "Nothing",
356
+ "customscript/xyz_grid.py/img2img/Y values/visible": true,
357
+ "customscript/xyz_grid.py/img2img/Y values/value": "",
358
+ "customscript/xyz_grid.py/img2img/Z type/visible": true,
359
+ "customscript/xyz_grid.py/img2img/Z type/value": "Nothing",
360
+ "customscript/xyz_grid.py/img2img/Z values/visible": true,
361
+ "customscript/xyz_grid.py/img2img/Z values/value": "",
362
+ "customscript/xyz_grid.py/img2img/Draw legend/visible": true,
363
+ "customscript/xyz_grid.py/img2img/Draw legend/value": true,
364
+ "customscript/xyz_grid.py/img2img/Keep -1 for seeds/visible": true,
365
+ "customscript/xyz_grid.py/img2img/Keep -1 for seeds/value": false,
366
+ "customscript/xyz_grid.py/img2img/Include Sub Images/visible": true,
367
+ "customscript/xyz_grid.py/img2img/Include Sub Images/value": false,
368
+ "customscript/xyz_grid.py/img2img/Include Sub Grids/visible": true,
369
+ "customscript/xyz_grid.py/img2img/Include Sub Grids/value": false,
370
+ "customscript/xyz_grid.py/img2img/Grid margins (px)/visible": true,
371
+ "customscript/xyz_grid.py/img2img/Grid margins (px)/value": 0,
372
+ "customscript/xyz_grid.py/img2img/Grid margins (px)/minimum": 0,
373
+ "customscript/xyz_grid.py/img2img/Grid margins (px)/maximum": 500,
374
+ "customscript/xyz_grid.py/img2img/Grid margins (px)/step": 2,
375
+ "extras/Input directory/visible": true,
376
+ "extras/Input directory/value": "",
377
+ "extras/Output directory/visible": true,
378
+ "extras/Output directory/value": "",
379
+ "extras/Show result images/visible": true,
380
+ "extras/Show result images/value": true,
381
+ "customscript/postprocessing_upscale.py/extras/Resize/visible": true,
382
+ "customscript/postprocessing_upscale.py/extras/Resize/value": 4,
383
+ "customscript/postprocessing_upscale.py/extras/Resize/minimum": 1.0,
384
+ "customscript/postprocessing_upscale.py/extras/Resize/maximum": 8.0,
385
+ "customscript/postprocessing_upscale.py/extras/Resize/step": 0.05,
386
+ "customscript/postprocessing_upscale.py/extras/Width/visible": true,
387
+ "customscript/postprocessing_upscale.py/extras/Width/value": 512,
388
+ "customscript/postprocessing_upscale.py/extras/Height/visible": true,
389
+ "customscript/postprocessing_upscale.py/extras/Height/value": 512,
390
+ "customscript/postprocessing_upscale.py/extras/Crop to fit/visible": true,
391
+ "customscript/postprocessing_upscale.py/extras/Crop to fit/value": true,
392
+ "customscript/postprocessing_upscale.py/extras/Upscaler 1/visible": true,
393
+ "customscript/postprocessing_upscale.py/extras/Upscaler 1/value": "None",
394
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2/visible": true,
395
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2/value": "None",
396
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2 visibility/visible": true,
397
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2 visibility/value": 0.0,
398
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2 visibility/minimum": 0.0,
399
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2 visibility/maximum": 1.0,
400
+ "customscript/postprocessing_upscale.py/extras/Upscaler 2 visibility/step": 0.001,
401
+ "customscript/postprocessing_gfpgan.py/extras/GFPGAN visibility/visible": true,
402
+ "customscript/postprocessing_gfpgan.py/extras/GFPGAN visibility/value": 0,
403
+ "customscript/postprocessing_gfpgan.py/extras/GFPGAN visibility/minimum": 0.0,
404
+ "customscript/postprocessing_gfpgan.py/extras/GFPGAN visibility/maximum": 1.0,
405
+ "customscript/postprocessing_gfpgan.py/extras/GFPGAN visibility/step": 0.001,
406
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer visibility/visible": true,
407
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer visibility/value": 0,
408
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer visibility/minimum": 0.0,
409
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer visibility/maximum": 1.0,
410
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer visibility/step": 0.001,
411
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer weight (0 = maximum effect, 1 = minimum effect)/visible": true,
412
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer weight (0 = maximum effect, 1 = minimum effect)/value": 0,
413
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer weight (0 = maximum effect, 1 = minimum effect)/minimum": 0.0,
414
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer weight (0 = maximum effect, 1 = minimum effect)/maximum": 1.0,
415
+ "customscript/postprocessing_codeformer.py/extras/CodeFormer weight (0 = maximum effect, 1 = minimum effect)/step": 0.001,
416
+ "modelmerger/Primary model (A)/visible": true,
417
+ "modelmerger/Primary model (A)/value": null,
418
+ "modelmerger/Secondary model (B)/visible": true,
419
+ "modelmerger/Secondary model (B)/value": null,
420
+ "modelmerger/Tertiary model (C)/visible": true,
421
+ "modelmerger/Tertiary model (C)/value": null,
422
+ "modelmerger/Custom Name (Optional)/visible": true,
423
+ "modelmerger/Custom Name (Optional)/value": "",
424
+ "modelmerger/Multiplier (M) - set to 0 to get model A/visible": true,
425
+ "modelmerger/Multiplier (M) - set to 0 to get model A/value": 0.3,
426
+ "modelmerger/Multiplier (M) - set to 0 to get model A/minimum": 0.0,
427
+ "modelmerger/Multiplier (M) - set to 0 to get model A/maximum": 1.0,
428
+ "modelmerger/Multiplier (M) - set to 0 to get model A/step": 0.05,
429
+ "modelmerger/Interpolation Method/visible": true,
430
+ "modelmerger/Interpolation Method/value": "Weighted sum",
431
+ "modelmerger/Checkpoint format/visible": true,
432
+ "modelmerger/Checkpoint format/value": "ckpt",
433
+ "modelmerger/Save as float16/visible": true,
434
+ "modelmerger/Save as float16/value": false,
435
+ "modelmerger/Copy config from/visible": true,
436
+ "modelmerger/Copy config from/value": "A, B or C",
437
+ "modelmerger/Bake in VAE/visible": true,
438
+ "modelmerger/Bake in VAE/value": "None",
439
+ "modelmerger/Discard weights with matching name/visible": true,
440
+ "modelmerger/Discard weights with matching name/value": "",
441
+ "train/Name/visible": true,
442
+ "train/Name/value": "",
443
+ "train/Initialization text/visible": true,
444
+ "train/Initialization text/value": "*",
445
+ "train/Number of vectors per token/visible": true,
446
+ "train/Number of vectors per token/value": 1,
447
+ "train/Number of vectors per token/minimum": 1,
448
+ "train/Number of vectors per token/maximum": 75,
449
+ "train/Number of vectors per token/step": 1,
450
+ "train/Overwrite Old Embedding/visible": true,
451
+ "train/Overwrite Old Embedding/value": false,
452
+ "train/Enter hypernetwork layer structure/visible": true,
453
+ "train/Enter hypernetwork layer structure/value": "1, 2, 1",
454
+ "train/Select activation function of hypernetwork. Recommended : Swish / Linear(none)/visible": true,
455
+ "train/Select activation function of hypernetwork. Recommended : Swish / Linear(none)/value": "linear",
456
+ "train/Select Layer weights initialization. Recommended: Kaiming for relu-like, Xavier for sigmoid-like, Normal otherwise/visible": true,
457
+ "train/Select Layer weights initialization. Recommended: Kaiming for relu-like, Xavier for sigmoid-like, Normal otherwise/value": "Normal",
458
+ "train/Add layer normalization/visible": true,
459
+ "train/Add layer normalization/value": false,
460
+ "train/Use dropout/visible": true,
461
+ "train/Use dropout/value": false,
462
+ "train/Enter hypernetwork Dropout structure (or empty). Recommended : 0~0.35 incrementing sequence: 0, 0.05, 0.15/visible": true,
463
+ "train/Enter hypernetwork Dropout structure (or empty). Recommended : 0~0.35 incrementing sequence: 0, 0.05, 0.15/value": "0, 0, 0",
464
+ "train/Overwrite Old Hypernetwork/visible": true,
465
+ "train/Overwrite Old Hypernetwork/value": false,
466
+ "train/Source directory/visible": true,
467
+ "train/Source directory/value": "",
468
+ "train/Destination directory/visible": true,
469
+ "train/Destination directory/value": "",
470
+ "train/Width/visible": true,
471
+ "train/Width/value": 512,
472
+ "train/Width/minimum": 64,
473
+ "train/Width/maximum": 2048,
474
+ "train/Width/step": 8,
475
+ "train/Height/visible": true,
476
+ "train/Height/value": 512,
477
+ "train/Height/minimum": 64,
478
+ "train/Height/maximum": 2048,
479
+ "train/Height/step": 8,
480
+ "train/Existing Caption txt Action/visible": true,
481
+ "train/Existing Caption txt Action/value": "ignore",
482
+ "train/Create flipped copies/visible": true,
483
+ "train/Create flipped copies/value": false,
484
+ "train/Split oversized images/visible": true,
485
+ "train/Split oversized images/value": false,
486
+ "train/Auto focal point crop/visible": true,
487
+ "train/Auto focal point crop/value": false,
488
+ "train/Auto-sized crop/visible": true,
489
+ "train/Auto-sized crop/value": false,
490
+ "train/Use BLIP for caption/visible": true,
491
+ "train/Use BLIP for caption/value": false,
492
+ "train/Use deepbooru for caption/visible": true,
493
+ "train/Use deepbooru for caption/value": false,
494
+ "train/Split image threshold/visible": true,
495
+ "train/Split image threshold/value": 0.5,
496
+ "train/Split image threshold/minimum": 0.0,
497
+ "train/Split image threshold/maximum": 1.0,
498
+ "train/Split image threshold/step": 0.05,
499
+ "train/Split image overlap ratio/visible": true,
500
+ "train/Split image overlap ratio/value": 0.2,
501
+ "train/Split image overlap ratio/minimum": 0.0,
502
+ "train/Split image overlap ratio/maximum": 0.9,
503
+ "train/Split image overlap ratio/step": 0.05,
504
+ "train/Focal point face weight/visible": true,
505
+ "train/Focal point face weight/value": 0.9,
506
+ "train/Focal point face weight/minimum": 0.0,
507
+ "train/Focal point face weight/maximum": 1.0,
508
+ "train/Focal point face weight/step": 0.05,
509
+ "train/Focal point entropy weight/visible": true,
510
+ "train/Focal point entropy weight/value": 0.15,
511
+ "train/Focal point entropy weight/minimum": 0.0,
512
+ "train/Focal point entropy weight/maximum": 1.0,
513
+ "train/Focal point entropy weight/step": 0.05,
514
+ "train/Focal point edges weight/visible": true,
515
+ "train/Focal point edges weight/value": 0.5,
516
+ "train/Focal point edges weight/minimum": 0.0,
517
+ "train/Focal point edges weight/maximum": 1.0,
518
+ "train/Focal point edges weight/step": 0.05,
519
+ "train/Create debug image/visible": true,
520
+ "train/Create debug image/value": false,
521
+ "train/Dimension lower bound/visible": true,
522
+ "train/Dimension lower bound/value": 384,
523
+ "train/Dimension lower bound/minimum": 64,
524
+ "train/Dimension lower bound/maximum": 2048,
525
+ "train/Dimension lower bound/step": 8,
526
+ "train/Dimension upper bound/visible": true,
527
+ "train/Dimension upper bound/value": 768,
528
+ "train/Dimension upper bound/minimum": 64,
529
+ "train/Dimension upper bound/maximum": 2048,
530
+ "train/Dimension upper bound/step": 8,
531
+ "train/Area lower bound/visible": true,
532
+ "train/Area lower bound/value": 4096,
533
+ "train/Area lower bound/minimum": 4096,
534
+ "train/Area lower bound/maximum": 4194304,
535
+ "train/Area lower bound/step": 1,
536
+ "train/Area upper bound/visible": true,
537
+ "train/Area upper bound/value": 409600,
538
+ "train/Area upper bound/minimum": 4096,
539
+ "train/Area upper bound/maximum": 4194304,
540
+ "train/Area upper bound/step": 1,
541
+ "train/Resizing objective/visible": true,
542
+ "train/Resizing objective/value": "Maximize area",
543
+ "train/Error threshold/visible": true,
544
+ "train/Error threshold/value": 0.1,
545
+ "train/Error threshold/minimum": 0,
546
+ "train/Error threshold/maximum": 1,
547
+ "train/Error threshold/step": 0.01,
548
+ "train/Embedding/visible": true,
549
+ "train/Embedding/value": null,
550
+ "train/Hypernetwork/visible": true,
551
+ "train/Hypernetwork/value": null,
552
+ "train/Embedding Learning rate/visible": true,
553
+ "train/Embedding Learning rate/value": "0.005",
554
+ "train/Hypernetwork Learning rate/visible": true,
555
+ "train/Hypernetwork Learning rate/value": "0.00001",
556
+ "train/Gradient Clipping/visible": true,
557
+ "train/Gradient Clipping/value": "disabled",
558
+ "train/Batch size/visible": true,
559
+ "train/Batch size/value": 1,
560
+ "train/Gradient accumulation steps/visible": true,
561
+ "train/Gradient accumulation steps/value": 1,
562
+ "train/Dataset directory/visible": true,
563
+ "train/Dataset directory/value": "",
564
+ "train/Log directory/visible": true,
565
+ "train/Log directory/value": "textual_inversion",
566
+ "train/Prompt template/visible": true,
567
+ "train/Prompt template/value": "style_filewords.txt",
568
+ "train/Do not resize images/visible": true,
569
+ "train/Do not resize images/value": false,
570
+ "train/Max steps/visible": true,
571
+ "train/Max steps/value": 100000,
572
+ "train/Save an image to log directory every N steps, 0 to disable/visible": true,
573
+ "train/Save an image to log directory every N steps, 0 to disable/value": 500,
574
+ "train/Save a copy of embedding to log directory every N steps, 0 to disable/visible": true,
575
+ "train/Save a copy of embedding to log directory every N steps, 0 to disable/value": 500,
576
+ "train/Use PNG alpha channel as loss weight/visible": true,
577
+ "train/Use PNG alpha channel as loss weight/value": false,
578
+ "train/Save images with embedding in PNG chunks/visible": true,
579
+ "train/Save images with embedding in PNG chunks/value": true,
580
+ "train/Read parameters (prompt, etc...) from txt2img tab when making previews/visible": true,
581
+ "train/Read parameters (prompt, etc...) from txt2img tab when making previews/value": false,
582
+ "train/Shuffle tags by ',' when creating prompts./visible": true,
583
+ "train/Shuffle tags by ',' when creating prompts./value": false,
584
+ "train/Drop out tags when creating prompts./visible": true,
585
+ "train/Drop out tags when creating prompts./value": 0,
586
+ "train/Drop out tags when creating prompts./minimum": 0,
587
+ "train/Drop out tags when creating prompts./maximum": 1,
588
+ "train/Drop out tags when creating prompts./step": 0.1,
589
+ "train/Choose latent sampling method/visible": true,
590
+ "train/Choose latent sampling method/value": "once",
591
+ "txt2img/Enable/visible": true,
592
+ "txt2img/Enable/value": false,
593
+ "txt2img/Invert Input Color/visible": true,
594
+ "txt2img/Invert Input Color/value": false,
595
+ "txt2img/RGB to BGR/visible": true,
596
+ "txt2img/RGB to BGR/value": false,
597
+ "txt2img/Low VRAM/visible": true,
598
+ "txt2img/Low VRAM/value": false,
599
+ "txt2img/Guess Mode/visible": true,
600
+ "txt2img/Guess Mode/value": false,
601
+ "txt2img/Preprocessor/visible": true,
602
+ "txt2img/Preprocessor/value": "none",
603
+ "txt2img/Model/visible": true,
604
+ "txt2img/Model/value": "None",
605
+ "txt2img/Weight/visible": true,
606
+ "txt2img/Weight/value": 1.0,
607
+ "txt2img/Weight/minimum": 0.0,
608
+ "txt2img/Weight/maximum": 2.0,
609
+ "txt2img/Weight/step": 0.05,
610
+ "txt2img/Guidance Start (T)/visible": true,
611
+ "txt2img/Guidance Start (T)/value": 0.0,
612
+ "txt2img/Guidance Start (T)/minimum": 0.0,
613
+ "txt2img/Guidance Start (T)/maximum": 1.0,
614
+ "txt2img/Guidance Start (T)/step": 0.01,
615
+ "txt2img/Guidance End (T)/visible": true,
616
+ "txt2img/Guidance End (T)/value": 1.0,
617
+ "txt2img/Guidance End (T)/minimum": 0.0,
618
+ "txt2img/Guidance End (T)/maximum": 1.0,
619
+ "txt2img/Guidance End (T)/step": 0.01,
620
+ "txt2img/Annotator resolution/visible": true,
621
+ "txt2img/Annotator resolution/value": 64,
622
+ "txt2img/Annotator resolution/minimum": 64,
623
+ "txt2img/Annotator resolution/maximum": 2048,
624
+ "txt2img/Annotator resolution/step": 10,
625
+ "txt2img/Threshold A/visible": true,
626
+ "txt2img/Threshold A/value": 64,
627
+ "txt2img/Threshold A/minimum": 64,
628
+ "txt2img/Threshold A/maximum": 1024,
629
+ "txt2img/Threshold A/step": 1,
630
+ "txt2img/Threshold B/visible": true,
631
+ "txt2img/Threshold B/value": 64,
632
+ "txt2img/Threshold B/minimum": 64,
633
+ "txt2img/Threshold B/maximum": 1024,
634
+ "txt2img/Threshold B/step": 1,
635
+ "txt2img/Resize Mode/visible": true,
636
+ "txt2img/Resize Mode/value": "Scale to Fit (Inner Fit)",
637
+ "txt2img/Canvas Width/visible": true,
638
+ "txt2img/Canvas Width/value": 512,
639
+ "txt2img/Canvas Width/minimum": 256,
640
+ "txt2img/Canvas Width/maximum": 1024,
641
+ "txt2img/Canvas Width/step": 64,
642
+ "txt2img/Canvas Height/visible": true,
643
+ "txt2img/Canvas Height/value": 512,
644
+ "txt2img/Canvas Height/minimum": 256,
645
+ "txt2img/Canvas Height/maximum": 1024,
646
+ "txt2img/Canvas Height/step": 64,
647
+ "customscript/movie2movie.py/txt2img/Save preprocessed/visible": true,
648
+ "customscript/movie2movie.py/txt2img/Save preprocessed/value": false,
649
+ "customscript/movie2movie.py/txt2img/Duration/visible": true,
650
+ "customscript/movie2movie.py/txt2img/Duration/value": 50.0,
651
+ "customscript/movie2movie.py/txt2img/Duration/minimum": 10.0,
652
+ "customscript/movie2movie.py/txt2img/Duration/maximum": 200.0,
653
+ "customscript/movie2movie.py/txt2img/Duration/step": 10,
654
+ "img2img/Enable/visible": true,
655
+ "img2img/Enable/value": false,
656
+ "img2img/Invert Input Color/visible": true,
657
+ "img2img/Invert Input Color/value": false,
658
+ "img2img/RGB to BGR/visible": true,
659
+ "img2img/RGB to BGR/value": false,
660
+ "img2img/Low VRAM/visible": true,
661
+ "img2img/Low VRAM/value": false,
662
+ "img2img/Guess Mode/visible": true,
663
+ "img2img/Guess Mode/value": false,
664
+ "img2img/Preprocessor/visible": true,
665
+ "img2img/Preprocessor/value": "none",
666
+ "img2img/Model/visible": true,
667
+ "img2img/Model/value": "None",
668
+ "img2img/Weight/visible": true,
669
+ "img2img/Weight/value": 1.0,
670
+ "img2img/Weight/minimum": 0.0,
671
+ "img2img/Weight/maximum": 2.0,
672
+ "img2img/Weight/step": 0.05,
673
+ "img2img/Guidance Start (T)/visible": true,
674
+ "img2img/Guidance Start (T)/value": 0.0,
675
+ "img2img/Guidance Start (T)/minimum": 0.0,
676
+ "img2img/Guidance Start (T)/maximum": 1.0,
677
+ "img2img/Guidance Start (T)/step": 0.01,
678
+ "img2img/Guidance End (T)/visible": true,
679
+ "img2img/Guidance End (T)/value": 1.0,
680
+ "img2img/Guidance End (T)/minimum": 0.0,
681
+ "img2img/Guidance End (T)/maximum": 1.0,
682
+ "img2img/Guidance End (T)/step": 0.01,
683
+ "img2img/Annotator resolution/visible": true,
684
+ "img2img/Annotator resolution/value": 64,
685
+ "img2img/Annotator resolution/minimum": 64,
686
+ "img2img/Annotator resolution/maximum": 2048,
687
+ "img2img/Annotator resolution/step": 10,
688
+ "img2img/Threshold A/visible": true,
689
+ "img2img/Threshold A/value": 64,
690
+ "img2img/Threshold A/minimum": 64,
691
+ "img2img/Threshold A/maximum": 1024,
692
+ "img2img/Threshold A/step": 1,
693
+ "img2img/Threshold B/visible": true,
694
+ "img2img/Threshold B/value": 64,
695
+ "img2img/Threshold B/minimum": 64,
696
+ "img2img/Threshold B/maximum": 1024,
697
+ "img2img/Threshold B/step": 1,
698
+ "img2img/Resize Mode/visible": true,
699
+ "img2img/Resize Mode/value": "Scale to Fit (Inner Fit)",
700
+ "img2img/Canvas Width/visible": true,
701
+ "img2img/Canvas Width/value": 512,
702
+ "img2img/Canvas Width/minimum": 256,
703
+ "img2img/Canvas Width/maximum": 1024,
704
+ "img2img/Canvas Width/step": 64,
705
+ "img2img/Canvas Height/visible": true,
706
+ "img2img/Canvas Height/value": 512,
707
+ "img2img/Canvas Height/minimum": 256,
708
+ "img2img/Canvas Height/maximum": 1024,
709
+ "img2img/Canvas Height/step": 64,
710
+ "customscript/movie2movie.py/img2img/Save preprocessed/visible": true,
711
+ "customscript/movie2movie.py/img2img/Save preprocessed/value": false,
712
+ "customscript/movie2movie.py/img2img/Duration/visible": true,
713
+ "customscript/movie2movie.py/img2img/Duration/value": 50.0,
714
+ "customscript/movie2movie.py/img2img/Duration/minimum": 10.0,
715
+ "customscript/movie2movie.py/img2img/Duration/maximum": 200.0,
716
+ "customscript/movie2movie.py/img2img/Duration/step": 10,
717
+ "customscript/additional_networks.py/txt2img/Enable/visible": true,
718
+ "customscript/additional_networks.py/txt2img/Enable/value": false,
719
+ "customscript/additional_networks.py/txt2img/Separate UNet/Text Encoder weights/visible": true,
720
+ "customscript/additional_networks.py/txt2img/Separate UNet/Text Encoder weights/value": false,
721
+ "customscript/additional_networks.py/txt2img/Network module 1/visible": true,
722
+ "customscript/additional_networks.py/txt2img/Network module 1/value": "LoRA",
723
+ "customscript/additional_networks.py/txt2img/Model 1/visible": true,
724
+ "customscript/additional_networks.py/txt2img/Model 1/value": "None",
725
+ "txt2img/Weight 1/visible": true,
726
+ "txt2img/Weight 1/value": 1.0,
727
+ "txt2img/Weight 1/minimum": -1.0,
728
+ "txt2img/Weight 1/maximum": 2.0,
729
+ "txt2img/Weight 1/step": 0.05,
730
+ "customscript/additional_networks.py/txt2img/UNet Weight 1/value": 1.0,
731
+ "customscript/additional_networks.py/txt2img/UNet Weight 1/minimum": -1.0,
732
+ "customscript/additional_networks.py/txt2img/UNet Weight 1/maximum": 2.0,
733
+ "customscript/additional_networks.py/txt2img/UNet Weight 1/step": 0.05,
734
+ "customscript/additional_networks.py/txt2img/TEnc Weight 1/value": 1.0,
735
+ "customscript/additional_networks.py/txt2img/TEnc Weight 1/minimum": -1.0,
736
+ "customscript/additional_networks.py/txt2img/TEnc Weight 1/maximum": 2.0,
737
+ "customscript/additional_networks.py/txt2img/TEnc Weight 1/step": 0.05,
738
+ "customscript/additional_networks.py/txt2img/Network module 2/visible": true,
739
+ "customscript/additional_networks.py/txt2img/Network module 2/value": "LoRA",
740
+ "customscript/additional_networks.py/txt2img/Model 2/visible": true,
741
+ "customscript/additional_networks.py/txt2img/Model 2/value": "None",
742
+ "txt2img/Weight 2/visible": true,
743
+ "txt2img/Weight 2/value": 1.0,
744
+ "txt2img/Weight 2/minimum": -1.0,
745
+ "txt2img/Weight 2/maximum": 2.0,
746
+ "txt2img/Weight 2/step": 0.05,
747
+ "customscript/additional_networks.py/txt2img/UNet Weight 2/value": 1.0,
748
+ "customscript/additional_networks.py/txt2img/UNet Weight 2/minimum": -1.0,
749
+ "customscript/additional_networks.py/txt2img/UNet Weight 2/maximum": 2.0,
750
+ "customscript/additional_networks.py/txt2img/UNet Weight 2/step": 0.05,
751
+ "customscript/additional_networks.py/txt2img/TEnc Weight 2/value": 1.0,
752
+ "customscript/additional_networks.py/txt2img/TEnc Weight 2/minimum": -1.0,
753
+ "customscript/additional_networks.py/txt2img/TEnc Weight 2/maximum": 2.0,
754
+ "customscript/additional_networks.py/txt2img/TEnc Weight 2/step": 0.05,
755
+ "customscript/additional_networks.py/txt2img/Network module 3/visible": true,
756
+ "customscript/additional_networks.py/txt2img/Network module 3/value": "LoRA",
757
+ "customscript/additional_networks.py/txt2img/Model 3/visible": true,
758
+ "customscript/additional_networks.py/txt2img/Model 3/value": "None",
759
+ "txt2img/Weight 3/visible": true,
760
+ "txt2img/Weight 3/value": 1.0,
761
+ "txt2img/Weight 3/minimum": -1.0,
762
+ "txt2img/Weight 3/maximum": 2.0,
763
+ "txt2img/Weight 3/step": 0.05,
764
+ "customscript/additional_networks.py/txt2img/UNet Weight 3/value": 1.0,
765
+ "customscript/additional_networks.py/txt2img/UNet Weight 3/minimum": -1.0,
766
+ "customscript/additional_networks.py/txt2img/UNet Weight 3/maximum": 2.0,
767
+ "customscript/additional_networks.py/txt2img/UNet Weight 3/step": 0.05,
768
+ "customscript/additional_networks.py/txt2img/TEnc Weight 3/value": 1.0,
769
+ "customscript/additional_networks.py/txt2img/TEnc Weight 3/minimum": -1.0,
770
+ "customscript/additional_networks.py/txt2img/TEnc Weight 3/maximum": 2.0,
771
+ "customscript/additional_networks.py/txt2img/TEnc Weight 3/step": 0.05,
772
+ "customscript/additional_networks.py/txt2img/Network module 4/visible": true,
773
+ "customscript/additional_networks.py/txt2img/Network module 4/value": "LoRA",
774
+ "customscript/additional_networks.py/txt2img/Model 4/visible": true,
775
+ "customscript/additional_networks.py/txt2img/Model 4/value": "None",
776
+ "txt2img/Weight 4/visible": true,
777
+ "txt2img/Weight 4/value": 1.0,
778
+ "txt2img/Weight 4/minimum": -1.0,
779
+ "txt2img/Weight 4/maximum": 2.0,
780
+ "txt2img/Weight 4/step": 0.05,
781
+ "customscript/additional_networks.py/txt2img/UNet Weight 4/value": 1.0,
782
+ "customscript/additional_networks.py/txt2img/UNet Weight 4/minimum": -1.0,
783
+ "customscript/additional_networks.py/txt2img/UNet Weight 4/maximum": 2.0,
784
+ "customscript/additional_networks.py/txt2img/UNet Weight 4/step": 0.05,
785
+ "customscript/additional_networks.py/txt2img/TEnc Weight 4/value": 1.0,
786
+ "customscript/additional_networks.py/txt2img/TEnc Weight 4/minimum": -1.0,
787
+ "customscript/additional_networks.py/txt2img/TEnc Weight 4/maximum": 2.0,
788
+ "customscript/additional_networks.py/txt2img/TEnc Weight 4/step": 0.05,
789
+ "customscript/additional_networks.py/txt2img/Network module 5/visible": true,
790
+ "customscript/additional_networks.py/txt2img/Network module 5/value": "LoRA",
791
+ "customscript/additional_networks.py/txt2img/Model 5/visible": true,
792
+ "customscript/additional_networks.py/txt2img/Model 5/value": "None",
793
+ "txt2img/Weight 5/visible": true,
794
+ "txt2img/Weight 5/value": 1.0,
795
+ "txt2img/Weight 5/minimum": -1.0,
796
+ "txt2img/Weight 5/maximum": 2.0,
797
+ "txt2img/Weight 5/step": 0.05,
798
+ "customscript/additional_networks.py/txt2img/UNet Weight 5/value": 1.0,
799
+ "customscript/additional_networks.py/txt2img/UNet Weight 5/minimum": -1.0,
800
+ "customscript/additional_networks.py/txt2img/UNet Weight 5/maximum": 2.0,
801
+ "customscript/additional_networks.py/txt2img/UNet Weight 5/step": 0.05,
802
+ "customscript/additional_networks.py/txt2img/TEnc Weight 5/value": 1.0,
803
+ "customscript/additional_networks.py/txt2img/TEnc Weight 5/minimum": -1.0,
804
+ "customscript/additional_networks.py/txt2img/TEnc Weight 5/maximum": 2.0,
805
+ "customscript/additional_networks.py/txt2img/TEnc Weight 5/step": 0.05,
806
+ "customscript/additional_networks.py/img2img/Enable/visible": true,
807
+ "customscript/additional_networks.py/img2img/Enable/value": false,
808
+ "customscript/additional_networks.py/img2img/Separate UNet/Text Encoder weights/visible": true,
809
+ "customscript/additional_networks.py/img2img/Separate UNet/Text Encoder weights/value": false,
810
+ "customscript/additional_networks.py/img2img/Network module 1/visible": true,
811
+ "customscript/additional_networks.py/img2img/Network module 1/value": "LoRA",
812
+ "customscript/additional_networks.py/img2img/Model 1/visible": true,
813
+ "customscript/additional_networks.py/img2img/Model 1/value": "None",
814
+ "img2img/Weight 1/visible": true,
815
+ "img2img/Weight 1/value": 1.0,
816
+ "img2img/Weight 1/minimum": -1.0,
817
+ "img2img/Weight 1/maximum": 2.0,
818
+ "img2img/Weight 1/step": 0.05,
819
+ "customscript/additional_networks.py/img2img/UNet Weight 1/value": 1.0,
820
+ "customscript/additional_networks.py/img2img/UNet Weight 1/minimum": -1.0,
821
+ "customscript/additional_networks.py/img2img/UNet Weight 1/maximum": 2.0,
822
+ "customscript/additional_networks.py/img2img/UNet Weight 1/step": 0.05,
823
+ "customscript/additional_networks.py/img2img/TEnc Weight 1/value": 1.0,
824
+ "customscript/additional_networks.py/img2img/TEnc Weight 1/minimum": -1.0,
825
+ "customscript/additional_networks.py/img2img/TEnc Weight 1/maximum": 2.0,
826
+ "customscript/additional_networks.py/img2img/TEnc Weight 1/step": 0.05,
827
+ "customscript/additional_networks.py/img2img/Network module 2/visible": true,
828
+ "customscript/additional_networks.py/img2img/Network module 2/value": "LoRA",
829
+ "customscript/additional_networks.py/img2img/Model 2/visible": true,
830
+ "customscript/additional_networks.py/img2img/Model 2/value": "None",
831
+ "img2img/Weight 2/visible": true,
832
+ "img2img/Weight 2/value": 1.0,
833
+ "img2img/Weight 2/minimum": -1.0,
834
+ "img2img/Weight 2/maximum": 2.0,
835
+ "img2img/Weight 2/step": 0.05,
836
+ "customscript/additional_networks.py/img2img/UNet Weight 2/value": 1.0,
837
+ "customscript/additional_networks.py/img2img/UNet Weight 2/minimum": -1.0,
838
+ "customscript/additional_networks.py/img2img/UNet Weight 2/maximum": 2.0,
839
+ "customscript/additional_networks.py/img2img/UNet Weight 2/step": 0.05,
840
+ "customscript/additional_networks.py/img2img/TEnc Weight 2/value": 1.0,
841
+ "customscript/additional_networks.py/img2img/TEnc Weight 2/minimum": -1.0,
842
+ "customscript/additional_networks.py/img2img/TEnc Weight 2/maximum": 2.0,
843
+ "customscript/additional_networks.py/img2img/TEnc Weight 2/step": 0.05,
844
+ "customscript/additional_networks.py/img2img/Network module 3/visible": true,
845
+ "customscript/additional_networks.py/img2img/Network module 3/value": "LoRA",
846
+ "customscript/additional_networks.py/img2img/Model 3/visible": true,
847
+ "customscript/additional_networks.py/img2img/Model 3/value": "None",
848
+ "img2img/Weight 3/visible": true,
849
+ "img2img/Weight 3/value": 1.0,
850
+ "img2img/Weight 3/minimum": -1.0,
851
+ "img2img/Weight 3/maximum": 2.0,
852
+ "img2img/Weight 3/step": 0.05,
853
+ "customscript/additional_networks.py/img2img/UNet Weight 3/value": 1.0,
854
+ "customscript/additional_networks.py/img2img/UNet Weight 3/minimum": -1.0,
855
+ "customscript/additional_networks.py/img2img/UNet Weight 3/maximum": 2.0,
856
+ "customscript/additional_networks.py/img2img/UNet Weight 3/step": 0.05,
857
+ "customscript/additional_networks.py/img2img/TEnc Weight 3/value": 1.0,
858
+ "customscript/additional_networks.py/img2img/TEnc Weight 3/minimum": -1.0,
859
+ "customscript/additional_networks.py/img2img/TEnc Weight 3/maximum": 2.0,
860
+ "customscript/additional_networks.py/img2img/TEnc Weight 3/step": 0.05,
861
+ "customscript/additional_networks.py/img2img/Network module 4/visible": true,
862
+ "customscript/additional_networks.py/img2img/Network module 4/value": "LoRA",
863
+ "customscript/additional_networks.py/img2img/Model 4/visible": true,
864
+ "customscript/additional_networks.py/img2img/Model 4/value": "None",
865
+ "img2img/Weight 4/visible": true,
866
+ "img2img/Weight 4/value": 1.0,
867
+ "img2img/Weight 4/minimum": -1.0,
868
+ "img2img/Weight 4/maximum": 2.0,
869
+ "img2img/Weight 4/step": 0.05,
870
+ "customscript/additional_networks.py/img2img/UNet Weight 4/value": 1.0,
871
+ "customscript/additional_networks.py/img2img/UNet Weight 4/minimum": -1.0,
872
+ "customscript/additional_networks.py/img2img/UNet Weight 4/maximum": 2.0,
873
+ "customscript/additional_networks.py/img2img/UNet Weight 4/step": 0.05,
874
+ "customscript/additional_networks.py/img2img/TEnc Weight 4/value": 1.0,
875
+ "customscript/additional_networks.py/img2img/TEnc Weight 4/minimum": -1.0,
876
+ "customscript/additional_networks.py/img2img/TEnc Weight 4/maximum": 2.0,
877
+ "customscript/additional_networks.py/img2img/TEnc Weight 4/step": 0.05,
878
+ "customscript/additional_networks.py/img2img/Network module 5/visible": true,
879
+ "customscript/additional_networks.py/img2img/Network module 5/value": "LoRA",
880
+ "customscript/additional_networks.py/img2img/Model 5/visible": true,
881
+ "customscript/additional_networks.py/img2img/Model 5/value": "None",
882
+ "img2img/Weight 5/visible": true,
883
+ "img2img/Weight 5/value": 1.0,
884
+ "img2img/Weight 5/minimum": -1.0,
885
+ "img2img/Weight 5/maximum": 2.0,
886
+ "img2img/Weight 5/step": 0.05,
887
+ "customscript/additional_networks.py/img2img/UNet Weight 5/value": 1.0,
888
+ "customscript/additional_networks.py/img2img/UNet Weight 5/minimum": -1.0,
889
+ "customscript/additional_networks.py/img2img/UNet Weight 5/maximum": 2.0,
890
+ "customscript/additional_networks.py/img2img/UNet Weight 5/step": 0.05,
891
+ "customscript/additional_networks.py/img2img/TEnc Weight 5/value": 1.0,
892
+ "customscript/additional_networks.py/img2img/TEnc Weight 5/minimum": -1.0,
893
+ "customscript/additional_networks.py/img2img/TEnc Weight 5/maximum": 2.0,
894
+ "customscript/additional_networks.py/img2img/TEnc Weight 5/step": 0.05,
895
+ "customscript/ultimate-upscale.py/img2img/Target size type/visible": true,
896
+ "customscript/ultimate-upscale.py/img2img/Target size type/value": "From img2img2 settings",
897
+ "customscript/ultimate-upscale.py/img2img/Custom width/value": 2048,
898
+ "customscript/ultimate-upscale.py/img2img/Custom width/minimum": 64,
899
+ "customscript/ultimate-upscale.py/img2img/Custom width/maximum": 8192,
900
+ "customscript/ultimate-upscale.py/img2img/Custom width/step": 64,
901
+ "customscript/ultimate-upscale.py/img2img/Custom height/value": 2048,
902
+ "customscript/ultimate-upscale.py/img2img/Custom height/minimum": 64,
903
+ "customscript/ultimate-upscale.py/img2img/Custom height/maximum": 8192,
904
+ "customscript/ultimate-upscale.py/img2img/Custom height/step": 64,
905
+ "customscript/ultimate-upscale.py/img2img/Scale/value": 2,
906
+ "customscript/ultimate-upscale.py/img2img/Scale/minimum": 1,
907
+ "customscript/ultimate-upscale.py/img2img/Scale/maximum": 16,
908
+ "customscript/ultimate-upscale.py/img2img/Scale/step": 0.01,
909
+ "customscript/ultimate-upscale.py/img2img/Upscaler/visible": true,
910
+ "customscript/ultimate-upscale.py/img2img/Upscaler/value": "None",
911
+ "customscript/ultimate-upscale.py/img2img/Type/visible": true,
912
+ "customscript/ultimate-upscale.py/img2img/Type/value": "Linear",
913
+ "customscript/ultimate-upscale.py/img2img/Tile width/visible": true,
914
+ "customscript/ultimate-upscale.py/img2img/Tile width/value": 512,
915
+ "customscript/ultimate-upscale.py/img2img/Tile width/minimum": 0,
916
+ "customscript/ultimate-upscale.py/img2img/Tile width/maximum": 2048,
917
+ "customscript/ultimate-upscale.py/img2img/Tile width/step": 64,
918
+ "customscript/ultimate-upscale.py/img2img/Tile height/visible": true,
919
+ "customscript/ultimate-upscale.py/img2img/Tile height/value": 0,
920
+ "customscript/ultimate-upscale.py/img2img/Tile height/minimum": 0,
921
+ "customscript/ultimate-upscale.py/img2img/Tile height/maximum": 2048,
922
+ "customscript/ultimate-upscale.py/img2img/Tile height/step": 64,
923
+ "customscript/ultimate-upscale.py/img2img/Mask blur/visible": true,
924
+ "customscript/ultimate-upscale.py/img2img/Mask blur/value": 8,
925
+ "customscript/ultimate-upscale.py/img2img/Mask blur/minimum": 0,
926
+ "customscript/ultimate-upscale.py/img2img/Mask blur/maximum": 64,
927
+ "customscript/ultimate-upscale.py/img2img/Mask blur/step": 1,
928
+ "customscript/ultimate-upscale.py/img2img/Padding/visible": true,
929
+ "customscript/ultimate-upscale.py/img2img/Padding/value": 32,
930
+ "customscript/ultimate-upscale.py/img2img/Padding/minimum": 0,
931
+ "customscript/ultimate-upscale.py/img2img/Padding/maximum": 128,
932
+ "customscript/ultimate-upscale.py/img2img/Padding/step": 1,
933
+ "customscript/ultimate-upscale.py/img2img/Denoise/value": 0.35,
934
+ "customscript/ultimate-upscale.py/img2img/Denoise/minimum": 0,
935
+ "customscript/ultimate-upscale.py/img2img/Denoise/maximum": 1,
936
+ "customscript/ultimate-upscale.py/img2img/Denoise/step": 0.01,
937
+ "customscript/ultimate-upscale.py/img2img/Width/value": 64,
938
+ "customscript/ultimate-upscale.py/img2img/Width/minimum": 0,
939
+ "customscript/ultimate-upscale.py/img2img/Width/maximum": 128,
940
+ "customscript/ultimate-upscale.py/img2img/Width/step": 1,
941
+ "customscript/ultimate-upscale.py/img2img/Upscaled/visible": true,
942
+ "customscript/ultimate-upscale.py/img2img/Upscaled/value": true,
943
+ "customscript/ultimate-upscale.py/img2img/Seams fix/visible": true,
944
+ "customscript/ultimate-upscale.py/img2img/Seams fix/value": false
945
+ }
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=--share
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="launch.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% launch.py %*
54
+ pause
55
+ exit /b
56
+
57
+ :accelerate_launch
58
+ echo Accelerating
59
+ %ACCELERATE% launch --num_cpu_threads_per_process=6 launch.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,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+ import time
4
+ import importlib
5
+ import signal
6
+ import re
7
+ import warnings
8
+ from fastapi import FastAPI
9
+ from fastapi.middleware.cors import CORSMiddleware
10
+ from fastapi.middleware.gzip import GZipMiddleware
11
+ from packaging import version
12
+
13
+ import logging
14
+ logging.getLogger("xformers").addFilter(lambda record: 'A matching Triton is not available' not in record.getMessage())
15
+
16
+ from modules import paths, timer, import_hook, errors
17
+
18
+ startup_timer = timer.Timer()
19
+
20
+ import torch
21
+ import pytorch_lightning # pytorch_lightning should be imported after torch, but it re-enables warnings on import so import once to disable them
22
+ warnings.filterwarnings(action="ignore", category=DeprecationWarning, module="pytorch_lightning")
23
+ startup_timer.record("import torch")
24
+
25
+ import gradio
26
+ startup_timer.record("import gradio")
27
+
28
+ import ldm.modules.encoders.modules
29
+ startup_timer.record("import ldm")
30
+
31
+ from modules import extra_networks, ui_extra_networks_checkpoints
32
+ from modules import extra_networks_hypernet, ui_extra_networks_hypernets, ui_extra_networks_textual_inversion
33
+ from modules.call_queue import wrap_queued_call, queue_lock, wrap_gradio_gpu_call
34
+
35
+ # Truncate version number of nightly/local build of PyTorch to not cause exceptions with CodeFormer or Safetensors
36
+ if ".dev" in torch.__version__ or "+git" in torch.__version__:
37
+ torch.__long_version__ = torch.__version__
38
+ torch.__version__ = re.search(r'[\d.]+[\d]', torch.__version__).group(0)
39
+
40
+ from modules import shared, devices, sd_samplers, upscaler, extensions, localization, ui_tempdir, ui_extra_networks
41
+ import modules.codeformer_model as codeformer
42
+ import modules.face_restoration
43
+ import modules.gfpgan_model as gfpgan
44
+ import modules.img2img
45
+
46
+ import modules.lowvram
47
+ import modules.scripts
48
+ import modules.sd_hijack
49
+ import modules.sd_models
50
+ import modules.sd_vae
51
+ import modules.txt2img
52
+ import modules.script_callbacks
53
+ import modules.textual_inversion.textual_inversion
54
+ import modules.progress
55
+
56
+ import modules.ui
57
+ from modules import modelloader
58
+ from modules.shared import cmd_opts
59
+ import modules.hypernetworks.hypernetwork
60
+
61
+ startup_timer.record("other imports")
62
+
63
+
64
+ if cmd_opts.server_name:
65
+ server_name = cmd_opts.server_name
66
+ else:
67
+ server_name = "0.0.0.0" if cmd_opts.listen else None
68
+
69
+
70
+ def check_versions():
71
+ if shared.cmd_opts.skip_version_check:
72
+ return
73
+
74
+ expected_torch_version = "1.13.1"
75
+
76
+ if version.parse(torch.__version__) < version.parse(expected_torch_version):
77
+ errors.print_error_explanation(f"""
78
+ You are running torch {torch.__version__}.
79
+ The program is tested to work with torch {expected_torch_version}.
80
+ To reinstall the desired version, run with commandline flag --reinstall-torch.
81
+ Beware that this will cause a lot of large files to be downloaded, as well as
82
+ there are reports of issues with training tab on the latest version.
83
+
84
+ Use --skip-version-check commandline argument to disable this check.
85
+ """.strip())
86
+
87
+ expected_xformers_version = "0.0.16rc425"
88
+ if shared.xformers_available:
89
+ import xformers
90
+
91
+ if version.parse(xformers.__version__) < version.parse(expected_xformers_version):
92
+ errors.print_error_explanation(f"""
93
+ You are running xformers {xformers.__version__}.
94
+ The program is tested to work with xformers {expected_xformers_version}.
95
+ To reinstall the desired version, run with commandline flag --reinstall-xformers.
96
+
97
+ Use --skip-version-check commandline argument to disable this check.
98
+ """.strip())
99
+
100
+
101
+ def initialize():
102
+ check_versions()
103
+
104
+ extensions.list_extensions()
105
+ localization.list_localizations(cmd_opts.localizations_dir)
106
+ startup_timer.record("list extensions")
107
+
108
+ if cmd_opts.ui_debug_mode:
109
+ shared.sd_upscalers = upscaler.UpscalerLanczos().scalers
110
+ modules.scripts.load_scripts()
111
+ return
112
+
113
+ modelloader.cleanup_models()
114
+ modules.sd_models.setup_model()
115
+ startup_timer.record("list SD models")
116
+
117
+ codeformer.setup_model(cmd_opts.codeformer_models_path)
118
+ startup_timer.record("setup codeformer")
119
+
120
+ gfpgan.setup_model(cmd_opts.gfpgan_models_path)
121
+ startup_timer.record("setup gfpgan")
122
+
123
+ modelloader.list_builtin_upscalers()
124
+ startup_timer.record("list builtin upscalers")
125
+
126
+ modules.scripts.load_scripts()
127
+ startup_timer.record("load scripts")
128
+
129
+ modelloader.load_upscalers()
130
+ startup_timer.record("load upscalers")
131
+
132
+ modules.sd_vae.refresh_vae_list()
133
+ startup_timer.record("refresh VAE")
134
+
135
+ modules.textual_inversion.textual_inversion.list_textual_inversion_templates()
136
+ startup_timer.record("refresh textual inversion templates")
137
+
138
+ try:
139
+ modules.sd_models.load_model()
140
+ except Exception as e:
141
+ errors.display(e, "loading stable diffusion model")
142
+ print("", file=sys.stderr)
143
+ print("Stable diffusion model failed to load, exiting", file=sys.stderr)
144
+ exit(1)
145
+ startup_timer.record("load SD checkpoint")
146
+
147
+ shared.opts.data["sd_model_checkpoint"] = shared.sd_model.sd_checkpoint_info.title
148
+
149
+ shared.opts.onchange("sd_model_checkpoint", wrap_queued_call(lambda: modules.sd_models.reload_model_weights()))
150
+ shared.opts.onchange("sd_vae", wrap_queued_call(lambda: modules.sd_vae.reload_vae_weights()), call=False)
151
+ shared.opts.onchange("sd_vae_as_default", wrap_queued_call(lambda: modules.sd_vae.reload_vae_weights()), call=False)
152
+ shared.opts.onchange("temp_dir", ui_tempdir.on_tmpdir_changed)
153
+ startup_timer.record("opts onchange")
154
+
155
+ shared.reload_hypernetworks()
156
+ startup_timer.record("reload hypernets")
157
+
158
+ ui_extra_networks.intialize()
159
+ ui_extra_networks.register_page(ui_extra_networks_textual_inversion.ExtraNetworksPageTextualInversion())
160
+ ui_extra_networks.register_page(ui_extra_networks_hypernets.ExtraNetworksPageHypernetworks())
161
+ ui_extra_networks.register_page(ui_extra_networks_checkpoints.ExtraNetworksPageCheckpoints())
162
+
163
+ extra_networks.initialize()
164
+ extra_networks.register_extra_network(extra_networks_hypernet.ExtraNetworkHypernet())
165
+ startup_timer.record("extra networks")
166
+
167
+ if cmd_opts.tls_keyfile is not None and cmd_opts.tls_keyfile is not None:
168
+
169
+ try:
170
+ if not os.path.exists(cmd_opts.tls_keyfile):
171
+ print("Invalid path to TLS keyfile given")
172
+ if not os.path.exists(cmd_opts.tls_certfile):
173
+ print(f"Invalid path to TLS certfile: '{cmd_opts.tls_certfile}'")
174
+ except TypeError:
175
+ cmd_opts.tls_keyfile = cmd_opts.tls_certfile = None
176
+ print("TLS setup invalid, running webui without TLS")
177
+ else:
178
+ print("Running with TLS")
179
+ startup_timer.record("TLS")
180
+
181
+ # make the program just exit at ctrl+c without waiting for anything
182
+ def sigint_handler(sig, frame):
183
+ print(f'Interrupted with signal {sig} in {frame}')
184
+ os._exit(0)
185
+
186
+ signal.signal(signal.SIGINT, sigint_handler)
187
+
188
+
189
+ def setup_middleware(app):
190
+ app.middleware_stack = None # reset current middleware to allow modifying user provided list
191
+ app.add_middleware(GZipMiddleware, minimum_size=1000)
192
+ if cmd_opts.cors_allow_origins and cmd_opts.cors_allow_origins_regex:
193
+ 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=['*'])
194
+ elif cmd_opts.cors_allow_origins:
195
+ app.add_middleware(CORSMiddleware, allow_origins=cmd_opts.cors_allow_origins.split(','), allow_methods=['*'], allow_credentials=True, allow_headers=['*'])
196
+ elif cmd_opts.cors_allow_origins_regex:
197
+ app.add_middleware(CORSMiddleware, allow_origin_regex=cmd_opts.cors_allow_origins_regex, allow_methods=['*'], allow_credentials=True, allow_headers=['*'])
198
+ app.build_middleware_stack() # rebuild middleware stack on-the-fly
199
+
200
+
201
+ def create_api(app):
202
+ from modules.api.api import Api
203
+ api = Api(app, queue_lock)
204
+ return api
205
+
206
+
207
+ def wait_on_server(demo=None):
208
+ while 1:
209
+ time.sleep(0.5)
210
+ if shared.state.need_restart:
211
+ shared.state.need_restart = False
212
+ time.sleep(0.5)
213
+ demo.close()
214
+ time.sleep(0.5)
215
+ break
216
+
217
+
218
+ def api_only():
219
+ initialize()
220
+
221
+ app = FastAPI()
222
+ setup_middleware(app)
223
+ api = create_api(app)
224
+
225
+ modules.script_callbacks.app_started_callback(None, app)
226
+
227
+ print(f"Startup time: {startup_timer.summary()}.")
228
+ 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)
229
+
230
+
231
+ def webui():
232
+ launch_api = cmd_opts.api
233
+ initialize()
234
+
235
+ while 1:
236
+ if shared.opts.clean_temp_dir_at_start:
237
+ ui_tempdir.cleanup_tmpdr()
238
+ startup_timer.record("cleanup temp dir")
239
+
240
+ modules.script_callbacks.before_ui_callback()
241
+ startup_timer.record("scripts before_ui_callback")
242
+
243
+ shared.demo = modules.ui.create_ui()
244
+ startup_timer.record("create ui")
245
+
246
+ if not cmd_opts.no_gradio_queue:
247
+ shared.demo.queue(64)
248
+
249
+ gradio_auth_creds = []
250
+ if cmd_opts.gradio_auth:
251
+ gradio_auth_creds += [x.strip() for x in cmd_opts.gradio_auth.strip('"').replace('\n', '').split(',') if x.strip()]
252
+ if cmd_opts.gradio_auth_path:
253
+ with open(cmd_opts.gradio_auth_path, 'r', encoding="utf8") as file:
254
+ for line in file.readlines():
255
+ gradio_auth_creds += [x.strip() for x in line.split(',') if x.strip()]
256
+
257
+ app, local_url, share_url = shared.demo.launch(
258
+ share=cmd_opts.share,
259
+ server_name=server_name,
260
+ server_port=cmd_opts.port,
261
+ ssl_keyfile=cmd_opts.tls_keyfile,
262
+ ssl_certfile=cmd_opts.tls_certfile,
263
+ debug=cmd_opts.gradio_debug,
264
+ auth=[tuple(cred.split(':')) for cred in gradio_auth_creds] if gradio_auth_creds else None,
265
+ inbrowser=cmd_opts.autolaunch,
266
+ prevent_thread_lock=True
267
+ )
268
+ # after initial launch, disable --autolaunch for subsequent restarts
269
+ cmd_opts.autolaunch = False
270
+
271
+ startup_timer.record("gradio launch")
272
+
273
+ # gradio uses a very open CORS policy via app.user_middleware, which makes it possible for
274
+ # an attacker to trick the user into opening a malicious HTML page, which makes a request to the
275
+ # running web ui and do whatever the attacker wants, including installing an extension and
276
+ # running its code. We disable this here. Suggested by RyotaK.
277
+ app.user_middleware = [x for x in app.user_middleware if x.cls.__name__ != 'CORSMiddleware']
278
+
279
+ setup_middleware(app)
280
+
281
+ modules.progress.setup_progress_api(app)
282
+
283
+ if launch_api:
284
+ create_api(app)
285
+
286
+ ui_extra_networks.add_pages_to_demo(app)
287
+
288
+ modules.script_callbacks.app_started_callback(shared.demo, app)
289
+ startup_timer.record("scripts app_started_callback")
290
+
291
+ print(f"Startup time: {startup_timer.summary()}.")
292
+
293
+ wait_on_server(shared.demo)
294
+ print('Restarting UI...')
295
+
296
+ startup_timer.reset()
297
+
298
+ sd_samplers.set_samplers()
299
+
300
+ modules.script_callbacks.script_unloaded_callback()
301
+ extensions.list_extensions()
302
+ startup_timer.record("list extensions")
303
+
304
+ localization.list_localizations(cmd_opts.localizations_dir)
305
+
306
+ modelloader.forbid_loaded_nonbuiltin_upscalers()
307
+ modules.scripts.reload_scripts()
308
+ startup_timer.record("load scripts")
309
+
310
+ modules.script_callbacks.model_loaded_callback(shared.sd_model)
311
+ startup_timer.record("model loaded callback")
312
+
313
+ modelloader.load_upscalers()
314
+ startup_timer.record("load upscalers")
315
+
316
+ for module in [module for name, module in sys.modules.items() if name.startswith("modules.ui")]:
317
+ importlib.reload(module)
318
+ startup_timer.record("reload script modules")
319
+
320
+ modules.sd_models.list_models()
321
+ startup_timer.record("list SD models")
322
+
323
+ shared.reload_hypernetworks()
324
+ startup_timer.record("reload hypernetworks")
325
+
326
+ ui_extra_networks.intialize()
327
+ ui_extra_networks.register_page(ui_extra_networks_textual_inversion.ExtraNetworksPageTextualInversion())
328
+ ui_extra_networks.register_page(ui_extra_networks_hypernets.ExtraNetworksPageHypernetworks())
329
+ ui_extra_networks.register_page(ui_extra_networks_checkpoints.ExtraNetworksPageCheckpoints())
330
+
331
+ extra_networks.initialize()
332
+ extra_networks.register_extra_network(extra_networks_hypernet.ExtraNetworkHypernet())
333
+ startup_timer.record("initialize extra networks")
334
+
335
+
336
+ if __name__ == "__main__":
337
+ if cmd_opts.nowebui:
338
+ api_only()
339
+ else:
340
+ 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="launch.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 launch.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 launch.py..."
184
+ printf "\n%s\n" "${delimiter}"
185
+ exec "${python_cmd}" "${LAUNCH_SCRIPT}" "$@"
186
+ fi