InvokeAI 4.2.9.dev8__py3-none-any.whl → 4.2.9.dev10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/METADATA +1 -1
- {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/RECORD +27 -27
- InvokeAI-4.2.9.dev10.dist-info/entry_points.txt +2 -0
- invokeai/app/invocations/fields.py +3 -0
- invokeai/app/invocations/flux_text_encoder.py +15 -9
- invokeai/app/invocations/flux_text_to_image.py +15 -18
- invokeai/app/invocations/model.py +26 -60
- invokeai/app/services/workflow_records/default_workflows/Flux Text to Image.json +37 -43
- invokeai/backend/flux/sampling.py +4 -13
- invokeai/backend/model_manager/load/load_default.py +1 -0
- invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -9
- invokeai/backend/model_manager/load/model_cache/model_cache_default.py +61 -62
- invokeai/backend/quantization/bnb_llm_int8.py +12 -2
- invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +5 -0
- invokeai/backend/util/__init__.py +1 -2
- invokeai/backend/util/util.py +0 -3
- invokeai/frontend/web/dist/assets/App-DUFQH-Kw.js +66 -0
- invokeai/frontend/web/dist/assets/{ThemeLocaleProvider-BSRQyfxR.js → ThemeLocaleProvider-Dc0lAavD.js} +1 -1
- invokeai/frontend/web/dist/assets/{index-4VBs_C-Q.js → index-DK9y4o4h.js} +52 -52
- invokeai/frontend/web/dist/index.html +1 -1
- invokeai/frontend/web/dist/locales/en.json +11 -0
- invokeai/version/invokeai_version.py +1 -1
- InvokeAI-4.2.9.dev8.dist-info/entry_points.txt +0 -4
- invokeai/frontend/web/dist/assets/App-B1xXrt8x.js +0 -66
- {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/LICENSE +0 -0
- {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/LICENSE-SD1+SD2.txt +0 -0
- {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/LICENSE-SDXL.txt +0 -0
- {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/WHEEL +0 -0
- {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: InvokeAI
|
|
3
|
-
Version: 4.2.9.
|
|
3
|
+
Version: 4.2.9.dev10
|
|
4
4
|
Summary: An implementation of Stable Diffusion which provides various new features and options to aid the image generation process
|
|
5
5
|
Author-email: The InvokeAI Project <lincoln.stein@gmail.com>
|
|
6
6
|
License: Apache License
|
|
@@ -28,9 +28,9 @@ invokeai/app/invocations/crop_latents.py,sha256=frCjcMQeN8G2wweMkZnOUPox79r8ap2r
|
|
|
28
28
|
invokeai/app/invocations/cv.py,sha256=xlIWdxA1x-79Fzz8BNT3uZe2gFn-_dyHNjSS8dRWy-c,1623
|
|
29
29
|
invokeai/app/invocations/denoise_latents.py,sha256=mEZ3C_0PHU2a5C2EYjXU5sba8HbnAcZBuLW4wldBG2o,47718
|
|
30
30
|
invokeai/app/invocations/facetools.py,sha256=wRdN9cxbM5-LhHvoJA0f4wcP9aAf-WPZAfeD6ktWECg,26436
|
|
31
|
-
invokeai/app/invocations/fields.py,sha256=
|
|
32
|
-
invokeai/app/invocations/flux_text_encoder.py,sha256=
|
|
33
|
-
invokeai/app/invocations/flux_text_to_image.py,sha256=
|
|
31
|
+
invokeai/app/invocations/fields.py,sha256=k-KpbEQ9zJOjtbp5KkB40Gz2F2Luc3dOHBrt1AJdIqc,25369
|
|
32
|
+
invokeai/app/invocations/flux_text_encoder.py,sha256=eCvL_2tnsTRTgsshUsjFNR6gCRyNWD66Bfecpe3gNqo,3801
|
|
33
|
+
invokeai/app/invocations/flux_text_to_image.py,sha256=6Y07XWD5qig7SMWjnkBg0xVwpvIn27kecQrRTGd-owQ,6598
|
|
34
34
|
invokeai/app/invocations/grounding_dino.py,sha256=Mv46FG3mq8X-XK50efdwdbV16B7GI5_kDCedjviXSn4,4560
|
|
35
35
|
invokeai/app/invocations/ideal_size.py,sha256=LyowqAWwv11p9diFQDY5GyUs3jLzj0dgTxBov_WlrLI,2810
|
|
36
36
|
invokeai/app/invocations/image.py,sha256=mURKycFb6V6TNaAkDNNh3fMNwFhHjCjIgVrI6uq4roU,38635
|
|
@@ -41,7 +41,7 @@ invokeai/app/invocations/latents_to_image.py,sha256=T42-aeT8798ITECx_EvK-JqS09WM
|
|
|
41
41
|
invokeai/app/invocations/mask.py,sha256=ojDupVM7tIT-uEtmKM7gG7peLNa5v17X75zr2wk1SBc,5434
|
|
42
42
|
invokeai/app/invocations/math.py,sha256=y00c6frIIowhN2lwTHYDjnuozNAtHGBa8_7FfHcRxLk,10441
|
|
43
43
|
invokeai/app/invocations/metadata.py,sha256=ZrdeeDBpbq03dLqCykhkRc0y8LHN3sA3UQXP86UqQCA,11467
|
|
44
|
-
invokeai/app/invocations/model.py,sha256=
|
|
44
|
+
invokeai/app/invocations/model.py,sha256=swyqakKT_sMQv60-qNJTWuRD8kD0_l8wnLffo5ddKDU,22858
|
|
45
45
|
invokeai/app/invocations/noise.py,sha256=9cLYCgaMjVxuMxCa4_lPzHXvTo3M7ghBSDrG97bPJdg,3571
|
|
46
46
|
invokeai/app/invocations/param_easing.py,sha256=yEdJY3SMcqiX7jrEAqQGDSFw3S7qBOrviDpbZ0rQyPM,10931
|
|
47
47
|
invokeai/app/invocations/primitives.py,sha256=G9q69QsHEQebPmKKLz4P-M8f_MMhJ5qeRhc7utM6sXQ,16372
|
|
@@ -210,7 +210,7 @@ invokeai/app/services/workflow_records/workflow_records_common.py,sha256=YsqF3BW
|
|
|
210
210
|
invokeai/app/services/workflow_records/workflow_records_sqlite.py,sha256=jmfqNhRE2uHArobgszy7Sk4AIcRqySSYYRIRQ-E9J0Q,8618
|
|
211
211
|
invokeai/app/services/workflow_records/default_workflows/ESRGAN Upscaling with Canny ControlNet.json,sha256=K-blUzhyR6Wi2qxX_4C8yh4fK3bW1MWHKpQ8DbsNGC0,24038
|
|
212
212
|
invokeai/app/services/workflow_records/default_workflows/Face Detailer with IP-Adapter & Canny (See Note in Details).json,sha256=Vmd5xOCZWKaAebIdiwSwlDd2hCtIHYXtmG0cXW7a1qk,40964
|
|
213
|
-
invokeai/app/services/workflow_records/default_workflows/Flux Text to Image.json,sha256=
|
|
213
|
+
invokeai/app/services/workflow_records/default_workflows/Flux Text to Image.json,sha256=ZYBpUwUvMnrNdf_K51Qm5bib6jc3zUTEOeguq3oTrM4,7761
|
|
214
214
|
invokeai/app/services/workflow_records/default_workflows/Multi ControlNet (Canny & Depth).json,sha256=K4KOWTYYnOrOhwxWE_GIjsXKhsAY2YxL40uBBGw-TBw,28538
|
|
215
215
|
invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SD1.5.json,sha256=tz5p5Io3VXafpSCA2WORx4wYex00KqUsxqDJUKWZmXs,39959
|
|
216
216
|
invokeai/app/services/workflow_records/default_workflows/MultiDiffusion SDXL.json,sha256=prbM2KQBN8FEhJeS3Ka3sV66QC7Fba9R-Wl24kMNuH8,46050
|
|
@@ -241,7 +241,7 @@ invokeai/backend/spandrel_image_to_image_model.py,sha256=8LEPnxmsq49VdDpJuM8k_sT
|
|
|
241
241
|
invokeai/backend/textual_inversion.py,sha256=ELJpRptFlxZyJSdCxN1-p6BQV_8l9-j6_4VNDSDdtY4,5434
|
|
242
242
|
invokeai/backend/flux/math.py,sha256=HUg2_9D8gTWbBCk83Kbj4YtVpbed1jQp-FfFo_zduAQ,1237
|
|
243
243
|
invokeai/backend/flux/model.py,sha256=7_lwJ-U_yvlqoaF9fSr_pp_oZ7-IY76FNNSbKS16ABo,3800
|
|
244
|
-
invokeai/backend/flux/sampling.py,sha256=
|
|
244
|
+
invokeai/backend/flux/sampling.py,sha256=OjM34t2kkpT4BCCn55EFF0fVpG50HWRHua1lSd3_jAs,5262
|
|
245
245
|
invokeai/backend/flux/util.py,sha256=EhTyFi5D9ZwXBtCa3t5IlfxFFAlRfWzD72SnaJ_iUlY,1537
|
|
246
246
|
invokeai/backend/flux/modules/autoencoder.py,sha256=XzjNn5HimcvquoSV9bTAwDWlRoHrSLMd3IUmmBX5VRo,10501
|
|
247
247
|
invokeai/backend/flux/modules/conditioner.py,sha256=Qg8LtxBj5vc8F620MoR3-PkZKpn5w-u4JpKlbLlKdZI,1186
|
|
@@ -291,14 +291,14 @@ invokeai/backend/model_manager/search.py,sha256=OCRBOyvl2G1RH3IVJf4lyiAMGLUG0Ihw
|
|
|
291
291
|
invokeai/backend/model_manager/starter_models.py,sha256=DaZZ8AAewoIq8Cd_Bi4lt9NRjgUt3z7HKboTu-EXBeE,20903
|
|
292
292
|
invokeai/backend/model_manager/load/__init__.py,sha256=9x2aYphy8NcdyElCqJFTy5WxKqVEtrYmsw0qRDEsxL4,1023
|
|
293
293
|
invokeai/backend/model_manager/load/load_base.py,sha256=YDK1_n1VLjL6q-PgG4OwirKmA-3eD_e9wUvxSYDn6Yw,4784
|
|
294
|
-
invokeai/backend/model_manager/load/load_default.py,sha256=
|
|
294
|
+
invokeai/backend/model_manager/load/load_default.py,sha256=xq2c-Z75r926lfO-VViPsNQsHEo-e6lhcWJ0y5NXH1o,4096
|
|
295
295
|
invokeai/backend/model_manager/load/memory_snapshot.py,sha256=YChwCTvA804__FJ7BUC2gIvQ9dcEpAlRN3H3N7uNqb0,4079
|
|
296
296
|
invokeai/backend/model_manager/load/model_loader_registry.py,sha256=GS1Q6w1bmUCOmE8aTCQqua6Jq0CEoTfDHZrXWU4U8IE,4014
|
|
297
297
|
invokeai/backend/model_manager/load/model_util.py,sha256=W3JdPA1t-ZVzQYZcHMCtiXW-Yx-hEmrPKxSqPS-OxBY,6129
|
|
298
298
|
invokeai/backend/model_manager/load/optimizations.py,sha256=cwGXg5tBv-w5UGKaO5u2o8x6kuKyWC4cPn-EG5CwllQ,1392
|
|
299
299
|
invokeai/backend/model_manager/load/model_cache/__init__.py,sha256=8vmdxdzgTNQQIrEitdbZL3oA5_zGTdIwcfu4_7FdWCM,217
|
|
300
|
-
invokeai/backend/model_manager/load/model_cache/model_cache_base.py,sha256=
|
|
301
|
-
invokeai/backend/model_manager/load/model_cache/model_cache_default.py,sha256=
|
|
300
|
+
invokeai/backend/model_manager/load/model_cache/model_cache_base.py,sha256=lKDvUWWd6VraGPHtgwuknHZAUGWdcc3y-YfFGkW4z6w,5973
|
|
301
|
+
invokeai/backend/model_manager/load/model_cache/model_cache_default.py,sha256=0TY56JB6AfQ-zjbXVL2sChLhKJYF5AgNeGxXaTRQBfk,17842
|
|
302
302
|
invokeai/backend/model_manager/load/model_cache/model_locker.py,sha256=Nhc80hZ43OGdvYJdufYEMWP9D0k8eTBjYhApEb0Rgc4,2190
|
|
303
303
|
invokeai/backend/model_manager/load/model_loaders/__init__.py,sha256=EDgdUKmYMiisOPDHtaRU2uwbfSlLbU6hoQybJqVgS7k,37
|
|
304
304
|
invokeai/backend/model_manager/load/model_loaders/controlnet.py,sha256=PBvWgeGpgLmE1CovUrN8gDEpssCHmb5orfwAiOYCj3U,1347
|
|
@@ -321,7 +321,7 @@ invokeai/backend/model_manager/util/model_util.py,sha256=NmLH47PXXLqPP0QCoMkAHlx
|
|
|
321
321
|
invokeai/backend/model_manager/util/select_hf_files.py,sha256=O4Y-9PuXtiqe2UuRlKnh2Rl-1mxtkZO5DilkLBVKnJE,7731
|
|
322
322
|
invokeai/backend/onnx/onnx_runtime.py,sha256=2x1VY0TD_rOr0EyHL9XnYnL2OrDptLKu-v6ba5xKVHc,9341
|
|
323
323
|
invokeai/backend/quantization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
324
|
-
invokeai/backend/quantization/bnb_llm_int8.py,sha256=
|
|
324
|
+
invokeai/backend/quantization/bnb_llm_int8.py,sha256=N-pE5R1HlbzAz2Ag9K_QogdBYNjbiCbewgtKSRr_Oow,5914
|
|
325
325
|
invokeai/backend/quantization/bnb_nf4.py,sha256=r_Y97abXJh18cUcVkieKu-3WTfvARQ4YGvC9PxqQGoo,7486
|
|
326
326
|
invokeai/backend/quantization/scripts/load_flux_model_bnb_llm_int8.py,sha256=3VX1dqs_mmJLwws038xIjXEeyWApdK5W4A_UulQefoU,3532
|
|
327
327
|
invokeai/backend/quantization/scripts/load_flux_model_bnb_nf4.py,sha256=Q6hl1jcJgYcf8XUv0jyf5eLNGhNY4WSB0_jhN_M80-I,3829
|
|
@@ -335,7 +335,7 @@ invokeai/backend/stable_diffusion/extensions_manager.py,sha256=8nuxafeEdvnzt6T7T
|
|
|
335
335
|
invokeai/backend/stable_diffusion/multi_diffusion_pipeline.py,sha256=R3ckLReKDOR9gYfHyvKzmsLxs7CuZSGLcz-DufxAy2I,9585
|
|
336
336
|
invokeai/backend/stable_diffusion/vae_tiling.py,sha256=scaK8nIFNQUKs3ERQREilqOPelDOblmeiIeN6nHKBRY,1353
|
|
337
337
|
invokeai/backend/stable_diffusion/diffusion/__init__.py,sha256=jM2_45i6TPyyZnwvJHv24tSwjfOoy2QjsSgsYnP1QAw,190
|
|
338
|
-
invokeai/backend/stable_diffusion/diffusion/conditioning_data.py,sha256=
|
|
338
|
+
invokeai/backend/stable_diffusion/diffusion/conditioning_data.py,sha256=YGc6rskdqtprNiHlTns7m87Nn3N-QzFrlpizcjShVHw,10183
|
|
339
339
|
invokeai/backend/stable_diffusion/diffusion/custom_atttention.py,sha256=JPgj5jpwR3whUi1pRs_KiDRneOHJXYOZqEq039oH-Hs,9702
|
|
340
340
|
invokeai/backend/stable_diffusion/diffusion/regional_ip_data.py,sha256=827a7P_usxN026r1SW8_DA94dFnCzCthj8P4dK0BuPY,3299
|
|
341
341
|
invokeai/backend/stable_diffusion/diffusion/regional_prompt_data.py,sha256=gjOsipACHNyuzmWBQ9eebFg08h350MX9g4N-bWeNROc,5463
|
|
@@ -356,7 +356,7 @@ invokeai/backend/stable_diffusion/schedulers/schedulers.py,sha256=NRZNMxqXbpelbv
|
|
|
356
356
|
invokeai/backend/tiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
357
357
|
invokeai/backend/tiles/tiles.py,sha256=6csyAtmbdAtD0BbKW8u4Fke1u8Q_2U6CnRcn4zPyaZ4,20459
|
|
358
358
|
invokeai/backend/tiles/utils.py,sha256=Pks6iQzmTbklj6k05iLvLe_EwgJ3GecnqjFjZrCo9jw,5643
|
|
359
|
-
invokeai/backend/util/__init__.py,sha256=
|
|
359
|
+
invokeai/backend/util/__init__.py,sha256=8u98IUT6Iky2W8Zl2pr_VTp5lfJ1dNpI-sne7YAzwg4,245
|
|
360
360
|
invokeai/backend/util/attention.py,sha256=Z89wBw5W4so7S8Q8AflGihRtL2oeB5HjlWxNRnhhJBM,1013
|
|
361
361
|
invokeai/backend/util/catch_sigint.py,sha256=iuszXjbJBhlpLDxoIWIkmF0ox_Mqoz62flrSNJJnVwc,906
|
|
362
362
|
invokeai/backend/util/db_maintenance.py,sha256=BYornx1pkzGH7HRUith5AMdMGrO5_kGvFky2_t6hlaQ,26301
|
|
@@ -368,7 +368,7 @@ invokeai/backend/util/mps_fixes.py,sha256=CGJOymqOT38K0rJpnQT3xynpN_EmmFVs1kipCT
|
|
|
368
368
|
invokeai/backend/util/original_weights_storage.py,sha256=01u-oDSO925a17sBaIz_fe00ArEh-MWAYzbwQ8X4FD0,1406
|
|
369
369
|
invokeai/backend/util/silence_warnings.py,sha256=RiGmj0dmOyL8U7vREbMmSbJ2m7Mgoaut3fbInYFyT_M,1166
|
|
370
370
|
invokeai/backend/util/test_utils.py,sha256=XzOGmhfei112WaovIFSwvw5jbvZlbh5LU5L-ltLjPfE,2516
|
|
371
|
-
invokeai/backend/util/util.py,sha256=
|
|
371
|
+
invokeai/backend/util/util.py,sha256=vkW28cfk8hE1WC2OekVBpizsc0gAFb9Z-qbcTisqpQA,2429
|
|
372
372
|
invokeai/configs/controlnet/cldm_v15.yaml,sha256=OeEzjEFDYYrbF2BPlsOj90DBq10VV9cbBE8DB6CmrbQ,1949
|
|
373
373
|
invokeai/configs/controlnet/cldm_v21.yaml,sha256=BTXRzGMA3RnP0-ve5pezqjhPmWXlc-gFBr6ii8uvRVk,2216
|
|
374
374
|
invokeai/configs/stable-diffusion/sd_xl_base.yaml,sha256=gYc6UzyIwLq0Vixezlk5ym0BGlDcPVRRYlXEPHuxbWc,3246
|
|
@@ -391,12 +391,12 @@ invokeai/frontend/cli/arg_parser.py,sha256=6_y2ZB0iDmMvy2b_MJRWSdlqW1hToptmOoFl0
|
|
|
391
391
|
invokeai/frontend/install/__init__.py,sha256=aAlRfyPocCx3Bm7NRB2I3Y_88Ug5omU4M5thFiNaw1A,57
|
|
392
392
|
invokeai/frontend/install/import_images.py,sha256=wddGRowy3HQGEnRHTGAkOA1fhzPz9qT4IbGoZqX9xlc,34417
|
|
393
393
|
invokeai/frontend/web/__init__.py,sha256=H4ye3hqaqVMEuzTnUNGeYBSHDhYLDcUWzS1XOr1zUWw,54
|
|
394
|
-
invokeai/frontend/web/dist/index.html,sha256=
|
|
395
|
-
invokeai/frontend/web/dist/assets/App-B1xXrt8x.js,sha256=lWhzO3W3OaO9IFE1GQHGztXJ_qloTGS93z_oZau2bUE,763652
|
|
394
|
+
invokeai/frontend/web/dist/index.html,sha256=62-MtcN4tjYZQXSJ6PsYgGVJCt8RhKH-Y99kqj9mFbc,682
|
|
396
395
|
invokeai/frontend/web/dist/assets/App-DEu4J2pT.css,sha256=HLO_vKmG5ANNQg2BEeOD8KYUvV8sL3rH0i2S1Cwe4T0,7322
|
|
396
|
+
invokeai/frontend/web/dist/assets/App-DUFQH-Kw.js,sha256=RO5m2WULt0zjE258xDZuBopTBSbIa8x9GfWmP-4arz8,767330
|
|
397
397
|
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-B2NxUfIp.css,sha256=AX2miGfzdvzaNF5JUMZdLSevO2nzgbeG8CvPMIBzQMs,15298
|
|
398
|
-
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-
|
|
399
|
-
invokeai/frontend/web/dist/assets/index-
|
|
398
|
+
invokeai/frontend/web/dist/assets/ThemeLocaleProvider-Dc0lAavD.js,sha256=EL7Tj0FWh6PWduYl_pU34WA43eZ7RKjKc91uz7T811c,605
|
|
399
|
+
invokeai/frontend/web/dist/assets/index-DK9y4o4h.js,sha256=aBDAZRAq3sl9yI2NosXiInhNOI3-9wRW-Yecr0bovdA,2147445
|
|
400
400
|
invokeai/frontend/web/dist/assets/inter-cyrillic-ext-wght-normal-B2xhLi22.woff2,sha256=wpY9x2Wg6ArPJplunuyuJEXzN4PVPGFdwBSovnKqwXA,25888
|
|
401
401
|
invokeai/frontend/web/dist/assets/inter-cyrillic-wght-normal-CMZtQduZ.woff2,sha256=YswB2u9yw-p2olhEU2jS9KuNBakfkcU_0S98QuMyWUI,18740
|
|
402
402
|
invokeai/frontend/web/dist/assets/inter-greek-ext-wght-normal-CGAr0uHJ.woff2,sha256=akF8_kBanIieL9Y6ZyibhaaIaBwPpk8SFedKwUcaNv4,11200
|
|
@@ -431,7 +431,7 @@ invokeai/frontend/web/dist/locales/ar.json,sha256=tfE9ecaXVwPjLe6RK1WxypBPJnjiw2
|
|
|
431
431
|
invokeai/frontend/web/dist/locales/az.json,sha256=gssN5Q1lHAHJQj4-qvjg6dP3Sh-ZPNb6pb6FLE7xTxk,62
|
|
432
432
|
invokeai/frontend/web/dist/locales/bg.json,sha256=BlR-CNtSfdYBxKpPNry8czGAHryF1kqC64CEft-nk7w,2797
|
|
433
433
|
invokeai/frontend/web/dist/locales/de.json,sha256=I0a4pKjvNYVFBB92rg9_vxhjpLZiBvAffpCNlsNtBdo,53387
|
|
434
|
-
invokeai/frontend/web/dist/locales/en.json,sha256=
|
|
434
|
+
invokeai/frontend/web/dist/locales/en.json,sha256=demEYXEu5rtXiB_DwqquT5nfwFV28WQJ80a9UHChFf8,87049
|
|
435
435
|
invokeai/frontend/web/dist/locales/es.json,sha256=cM0Y11TD3yagTWW-UEWNsl3UJSczQ9sjXtYKYzdAh1Y,28050
|
|
436
436
|
invokeai/frontend/web/dist/locales/fi.json,sha256=m3l-thXyvRoGIeRbo99AziHPhx5nkcpQEiELOHGeqrc,1725
|
|
437
437
|
invokeai/frontend/web/dist/locales/fr.json,sha256=8iUSmE3g44tFPiOw6sjLbK2ZMHksvIaHzU-FXwCorbs,19666
|
|
@@ -457,12 +457,12 @@ invokeai/frontend/web/scripts/clean_translations.py,sha256=-3KLLgb8fvvp0yglxKIkj
|
|
|
457
457
|
invokeai/frontend/web/static/docs/invoke-favicon-docs.svg,sha256=2DfWaNhjgplnQK8V79yXjQ34JDCk94ZPH29CiTk90y8,779
|
|
458
458
|
invokeai/invocation_api/__init__.py,sha256=PJgu7yu-0hukEyAHOm0sfw4kPZ2OvbAnXI6n7NtIt4A,5339
|
|
459
459
|
invokeai/version/__init__.py,sha256=22G4uBmmfLuldDclGKINkVS-rgPfNFQUJH_ag8m_OcM,529
|
|
460
|
-
invokeai/version/invokeai_version.py,sha256=
|
|
461
|
-
InvokeAI-4.2.9.
|
|
462
|
-
InvokeAI-4.2.9.
|
|
463
|
-
InvokeAI-4.2.9.
|
|
464
|
-
InvokeAI-4.2.9.
|
|
465
|
-
InvokeAI-4.2.9.
|
|
466
|
-
InvokeAI-4.2.9.
|
|
467
|
-
InvokeAI-4.2.9.
|
|
468
|
-
InvokeAI-4.2.9.
|
|
460
|
+
invokeai/version/invokeai_version.py,sha256=JsJFH20Ul4FhSAmfmhfEmC2wUmIH_vxwU-___LsKNgo,28
|
|
461
|
+
InvokeAI-4.2.9.dev10.dist-info/LICENSE,sha256=OTAVifLLp_QCl8faBcfl0WT3BMqpeWZbEXw1MgPJzwM,10146
|
|
462
|
+
InvokeAI-4.2.9.dev10.dist-info/LICENSE-SD1+SD2.txt,sha256=GbsztR5dRQiKsmF33NYkGL-GFJhSc2oG9gQPwzo-7Tg,14555
|
|
463
|
+
InvokeAI-4.2.9.dev10.dist-info/LICENSE-SDXL.txt,sha256=JV_wPIqRG79iLCB8HrwY1J8jBimjUblcUxfnDbUMaqs,14213
|
|
464
|
+
InvokeAI-4.2.9.dev10.dist-info/METADATA,sha256=FZfJr_ia5pAoHUEwfcoW6f81a2AseFz62ZxTpVXO7Kk,27029
|
|
465
|
+
InvokeAI-4.2.9.dev10.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
|
466
|
+
InvokeAI-4.2.9.dev10.dist-info/entry_points.txt,sha256=MyuHYE_-ewdP-nVIcsITkhCNq7q0HNkavfd49TfNYho,62
|
|
467
|
+
InvokeAI-4.2.9.dev10.dist-info/top_level.txt,sha256=69I61eoKb6LXiuo6Zz2l_6lhY1eRGBCqP8i9SMqp9Gg,9
|
|
468
|
+
InvokeAI-4.2.9.dev10.dist-info/RECORD,,
|
|
@@ -45,11 +45,13 @@ class UIType(str, Enum, metaclass=MetaEnum):
|
|
|
45
45
|
SDXLRefinerModel = "SDXLRefinerModelField"
|
|
46
46
|
ONNXModel = "ONNXModelField"
|
|
47
47
|
VAEModel = "VAEModelField"
|
|
48
|
+
FluxVAEModel = "FluxVAEModelField"
|
|
48
49
|
LoRAModel = "LoRAModelField"
|
|
49
50
|
ControlNetModel = "ControlNetModelField"
|
|
50
51
|
IPAdapterModel = "IPAdapterModelField"
|
|
51
52
|
T2IAdapterModel = "T2IAdapterModelField"
|
|
52
53
|
T5EncoderModel = "T5EncoderModelField"
|
|
54
|
+
CLIPEmbedModel = "CLIPEmbedModelField"
|
|
53
55
|
SpandrelImageToImageModel = "SpandrelImageToImageModelField"
|
|
54
56
|
# endregion
|
|
55
57
|
|
|
@@ -128,6 +130,7 @@ class FieldDescriptions:
|
|
|
128
130
|
noise = "Noise tensor"
|
|
129
131
|
clip = "CLIP (tokenizer, text encoder, LoRAs) and skipped layer count"
|
|
130
132
|
t5_encoder = "T5 tokenizer and text encoder"
|
|
133
|
+
clip_embed_model = "CLIP Embed loader"
|
|
131
134
|
unet = "UNet (scheduler, LoRAs)"
|
|
132
135
|
transformer = "Transformer"
|
|
133
136
|
vae = "VAE"
|
|
@@ -40,7 +40,10 @@ class FluxTextEncoderInvocation(BaseInvocation):
|
|
|
40
40
|
|
|
41
41
|
@torch.no_grad()
|
|
42
42
|
def invoke(self, context: InvocationContext) -> FluxConditioningOutput:
|
|
43
|
-
|
|
43
|
+
# Note: The T5 and CLIP encoding are done in separate functions to ensure that all model references are locally
|
|
44
|
+
# scoped. This ensures that the T5 model can be freed and gc'd before loading the CLIP model (if necessary).
|
|
45
|
+
t5_embeddings = self._t5_encode(context)
|
|
46
|
+
clip_embeddings = self._clip_encode(context)
|
|
44
47
|
conditioning_data = ConditioningFieldData(
|
|
45
48
|
conditionings=[FLUXConditioningInfo(clip_embeds=clip_embeddings, t5_embeds=t5_embeddings)]
|
|
46
49
|
)
|
|
@@ -48,12 +51,7 @@ class FluxTextEncoderInvocation(BaseInvocation):
|
|
|
48
51
|
conditioning_name = context.conditioning.save(conditioning_data)
|
|
49
52
|
return FluxConditioningOutput.build(conditioning_name)
|
|
50
53
|
|
|
51
|
-
def
|
|
52
|
-
# Load CLIP.
|
|
53
|
-
clip_tokenizer_info = context.models.load(self.clip.tokenizer)
|
|
54
|
-
clip_text_encoder_info = context.models.load(self.clip.text_encoder)
|
|
55
|
-
|
|
56
|
-
# Load T5.
|
|
54
|
+
def _t5_encode(self, context: InvocationContext) -> torch.Tensor:
|
|
57
55
|
t5_tokenizer_info = context.models.load(self.t5_encoder.tokenizer)
|
|
58
56
|
t5_text_encoder_info = context.models.load(self.t5_encoder.text_encoder)
|
|
59
57
|
|
|
@@ -70,6 +68,15 @@ class FluxTextEncoderInvocation(BaseInvocation):
|
|
|
70
68
|
|
|
71
69
|
prompt_embeds = t5_encoder(prompt)
|
|
72
70
|
|
|
71
|
+
assert isinstance(prompt_embeds, torch.Tensor)
|
|
72
|
+
return prompt_embeds
|
|
73
|
+
|
|
74
|
+
def _clip_encode(self, context: InvocationContext) -> torch.Tensor:
|
|
75
|
+
clip_tokenizer_info = context.models.load(self.clip.tokenizer)
|
|
76
|
+
clip_text_encoder_info = context.models.load(self.clip.text_encoder)
|
|
77
|
+
|
|
78
|
+
prompt = [self.prompt]
|
|
79
|
+
|
|
73
80
|
with (
|
|
74
81
|
clip_text_encoder_info as clip_text_encoder,
|
|
75
82
|
clip_tokenizer_info as clip_tokenizer,
|
|
@@ -81,6 +88,5 @@ class FluxTextEncoderInvocation(BaseInvocation):
|
|
|
81
88
|
|
|
82
89
|
pooled_prompt_embeds = clip_encoder(prompt)
|
|
83
90
|
|
|
84
|
-
assert isinstance(prompt_embeds, torch.Tensor)
|
|
85
91
|
assert isinstance(pooled_prompt_embeds, torch.Tensor)
|
|
86
|
-
return
|
|
92
|
+
return pooled_prompt_embeds
|
|
@@ -58,13 +58,7 @@ class FluxTextToImageInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
58
58
|
|
|
59
59
|
@torch.no_grad()
|
|
60
60
|
def invoke(self, context: InvocationContext) -> ImageOutput:
|
|
61
|
-
|
|
62
|
-
cond_data = context.conditioning.load(self.positive_text_conditioning.conditioning_name)
|
|
63
|
-
assert len(cond_data.conditionings) == 1
|
|
64
|
-
flux_conditioning = cond_data.conditionings[0]
|
|
65
|
-
assert isinstance(flux_conditioning, FLUXConditioningInfo)
|
|
66
|
-
|
|
67
|
-
latents = self._run_diffusion(context, flux_conditioning.clip_embeds, flux_conditioning.t5_embeds)
|
|
61
|
+
latents = self._run_diffusion(context)
|
|
68
62
|
image = self._run_vae_decoding(context, latents)
|
|
69
63
|
image_dto = context.images.save(image=image)
|
|
70
64
|
return ImageOutput.build(image_dto)
|
|
@@ -72,12 +66,20 @@ class FluxTextToImageInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
72
66
|
def _run_diffusion(
|
|
73
67
|
self,
|
|
74
68
|
context: InvocationContext,
|
|
75
|
-
clip_embeddings: torch.Tensor,
|
|
76
|
-
t5_embeddings: torch.Tensor,
|
|
77
69
|
):
|
|
78
|
-
transformer_info = context.models.load(self.transformer.transformer)
|
|
79
70
|
inference_dtype = torch.bfloat16
|
|
80
71
|
|
|
72
|
+
# Load the conditioning data.
|
|
73
|
+
cond_data = context.conditioning.load(self.positive_text_conditioning.conditioning_name)
|
|
74
|
+
assert len(cond_data.conditionings) == 1
|
|
75
|
+
flux_conditioning = cond_data.conditionings[0]
|
|
76
|
+
assert isinstance(flux_conditioning, FLUXConditioningInfo)
|
|
77
|
+
flux_conditioning = flux_conditioning.to(dtype=inference_dtype)
|
|
78
|
+
t5_embeddings = flux_conditioning.t5_embeds
|
|
79
|
+
clip_embeddings = flux_conditioning.clip_embeds
|
|
80
|
+
|
|
81
|
+
transformer_info = context.models.load(self.transformer.transformer)
|
|
82
|
+
|
|
81
83
|
# Prepare input noise.
|
|
82
84
|
x = get_noise(
|
|
83
85
|
num_samples=1,
|
|
@@ -88,24 +90,19 @@ class FluxTextToImageInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
88
90
|
seed=self.seed,
|
|
89
91
|
)
|
|
90
92
|
|
|
91
|
-
|
|
93
|
+
x, img_ids = prepare_latent_img_patches(x)
|
|
92
94
|
|
|
93
95
|
is_schnell = "schnell" in transformer_info.config.config_path
|
|
94
96
|
|
|
95
97
|
timesteps = get_schedule(
|
|
96
98
|
num_steps=self.num_steps,
|
|
97
|
-
image_seq_len=
|
|
99
|
+
image_seq_len=x.shape[1],
|
|
98
100
|
shift=not is_schnell,
|
|
99
101
|
)
|
|
100
102
|
|
|
101
103
|
bs, t5_seq_len, _ = t5_embeddings.shape
|
|
102
104
|
txt_ids = torch.zeros(bs, t5_seq_len, 3, dtype=inference_dtype, device=TorchDevice.choose_torch_device())
|
|
103
105
|
|
|
104
|
-
# HACK(ryand): Manually empty the cache. Currently we don't check the size of the model before loading it from
|
|
105
|
-
# disk. Since the transformer model is large (24GB), there's a good chance that it will OOM on 32GB RAM systems
|
|
106
|
-
# if the cache is not empty.
|
|
107
|
-
context.models._services.model_manager.load.ram_cache.make_room(24 * 2**30)
|
|
108
|
-
|
|
109
106
|
with transformer_info as transformer:
|
|
110
107
|
assert isinstance(transformer, Flux)
|
|
111
108
|
|
|
@@ -140,7 +137,7 @@ class FluxTextToImageInvocation(BaseInvocation, WithMetadata, WithBoard):
|
|
|
140
137
|
|
|
141
138
|
x = denoise(
|
|
142
139
|
model=transformer,
|
|
143
|
-
img=
|
|
140
|
+
img=x,
|
|
144
141
|
img_ids=img_ids,
|
|
145
142
|
txt=t5_embeddings,
|
|
146
143
|
txt_ids=txt_ids,
|
|
@@ -157,7 +157,7 @@ class FluxModelLoaderOutput(BaseInvocationOutput):
|
|
|
157
157
|
title="Flux Main Model",
|
|
158
158
|
tags=["model", "flux"],
|
|
159
159
|
category="model",
|
|
160
|
-
version="1.0.
|
|
160
|
+
version="1.0.4",
|
|
161
161
|
classification=Classification.Prototype,
|
|
162
162
|
)
|
|
163
163
|
class FluxModelLoaderInvocation(BaseInvocation):
|
|
@@ -169,23 +169,35 @@ class FluxModelLoaderInvocation(BaseInvocation):
|
|
|
169
169
|
input=Input.Direct,
|
|
170
170
|
)
|
|
171
171
|
|
|
172
|
-
|
|
173
|
-
description=FieldDescriptions.t5_encoder,
|
|
174
|
-
|
|
172
|
+
t5_encoder_model: ModelIdentifierField = InputField(
|
|
173
|
+
description=FieldDescriptions.t5_encoder, ui_type=UIType.T5EncoderModel, input=Input.Direct, title="T5 Encoder"
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
clip_embed_model: ModelIdentifierField = InputField(
|
|
177
|
+
description=FieldDescriptions.clip_embed_model,
|
|
178
|
+
ui_type=UIType.CLIPEmbedModel,
|
|
175
179
|
input=Input.Direct,
|
|
180
|
+
title="CLIP Embed",
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
vae_model: ModelIdentifierField = InputField(
|
|
184
|
+
description=FieldDescriptions.vae_model, ui_type=UIType.FluxVAEModel, title="VAE"
|
|
176
185
|
)
|
|
177
186
|
|
|
178
187
|
def invoke(self, context: InvocationContext) -> FluxModelLoaderOutput:
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
transformer = self.
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
188
|
+
for key in [self.model.key, self.t5_encoder_model.key, self.clip_embed_model.key, self.vae_model.key]:
|
|
189
|
+
if not context.models.exists(key):
|
|
190
|
+
raise ValueError(f"Unknown model: {key}")
|
|
191
|
+
|
|
192
|
+
transformer = self.model.model_copy(update={"submodel_type": SubModelType.Transformer})
|
|
193
|
+
vae = self.vae_model.model_copy(update={"submodel_type": SubModelType.VAE})
|
|
194
|
+
|
|
195
|
+
tokenizer = self.clip_embed_model.model_copy(update={"submodel_type": SubModelType.Tokenizer})
|
|
196
|
+
clip_encoder = self.clip_embed_model.model_copy(update={"submodel_type": SubModelType.TextEncoder})
|
|
197
|
+
|
|
198
|
+
tokenizer2 = self.t5_encoder_model.model_copy(update={"submodel_type": SubModelType.Tokenizer2})
|
|
199
|
+
t5_encoder = self.t5_encoder_model.model_copy(update={"submodel_type": SubModelType.TextEncoder2})
|
|
200
|
+
|
|
189
201
|
transformer_config = context.models.get_config(transformer)
|
|
190
202
|
assert isinstance(transformer_config, CheckpointConfigBase)
|
|
191
203
|
|
|
@@ -197,52 +209,6 @@ class FluxModelLoaderInvocation(BaseInvocation):
|
|
|
197
209
|
max_seq_len=max_seq_lengths[transformer_config.config_path],
|
|
198
210
|
)
|
|
199
211
|
|
|
200
|
-
def _get_model(self, context: InvocationContext, submodel: SubModelType) -> ModelIdentifierField:
|
|
201
|
-
match submodel:
|
|
202
|
-
case SubModelType.Transformer:
|
|
203
|
-
return self.model.model_copy(update={"submodel_type": SubModelType.Transformer})
|
|
204
|
-
case SubModelType.VAE:
|
|
205
|
-
return self._pull_model_from_mm(
|
|
206
|
-
context,
|
|
207
|
-
SubModelType.VAE,
|
|
208
|
-
"FLUX.1-schnell_ae",
|
|
209
|
-
ModelType.VAE,
|
|
210
|
-
BaseModelType.Flux,
|
|
211
|
-
)
|
|
212
|
-
case submodel if submodel in [SubModelType.Tokenizer, SubModelType.TextEncoder]:
|
|
213
|
-
return self._pull_model_from_mm(
|
|
214
|
-
context,
|
|
215
|
-
submodel,
|
|
216
|
-
"clip-vit-large-patch14",
|
|
217
|
-
ModelType.CLIPEmbed,
|
|
218
|
-
BaseModelType.Any,
|
|
219
|
-
)
|
|
220
|
-
case submodel if submodel in [SubModelType.Tokenizer2, SubModelType.TextEncoder2]:
|
|
221
|
-
return self._pull_model_from_mm(
|
|
222
|
-
context,
|
|
223
|
-
submodel,
|
|
224
|
-
self.t5_encoder.name,
|
|
225
|
-
ModelType.T5Encoder,
|
|
226
|
-
BaseModelType.Any,
|
|
227
|
-
)
|
|
228
|
-
case _:
|
|
229
|
-
raise Exception(f"{submodel.value} is not a supported submodule for a flux model")
|
|
230
|
-
|
|
231
|
-
def _pull_model_from_mm(
|
|
232
|
-
self,
|
|
233
|
-
context: InvocationContext,
|
|
234
|
-
submodel: SubModelType,
|
|
235
|
-
name: str,
|
|
236
|
-
type: ModelType,
|
|
237
|
-
base: BaseModelType,
|
|
238
|
-
):
|
|
239
|
-
if models := context.models.search_by_attrs(name=name, base=base, type=type):
|
|
240
|
-
if len(models) != 1:
|
|
241
|
-
raise Exception(f"Multiple models detected for selected model with name {name}")
|
|
242
|
-
return ModelIdentifierField.from_config(models[0]).model_copy(update={"submodel_type": submodel})
|
|
243
|
-
else:
|
|
244
|
-
raise ValueError(f"Please install the {base}:{type} model named {name} via starter models")
|
|
245
|
-
|
|
246
212
|
|
|
247
213
|
@invocation(
|
|
248
214
|
"main_model_loader",
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"name": "FLUX Text to Image",
|
|
3
3
|
"author": "InvokeAI",
|
|
4
4
|
"description": "A simple text-to-image workflow using FLUX dev or schnell models. Prerequisite model downloads: T5 Encoder, CLIP-L Encoder, and FLUX VAE. Quantized and un-quantized versions can be found in the starter models tab within your Model Manager. We recommend 4 steps for FLUX schnell models and 30 steps for FLUX dev models.",
|
|
5
|
-
"version": "1.0.
|
|
5
|
+
"version": "1.0.4",
|
|
6
6
|
"contact": "",
|
|
7
7
|
"tags": "text2image, flux",
|
|
8
8
|
"notes": "Prerequisite model downloads: T5 Encoder, CLIP-L Encoder, and FLUX VAE. Quantized and un-quantized versions can be found in the starter models tab within your Model Manager. We recommend 4 steps for FLUX schnell models and 30 steps for FLUX dev models.",
|
|
9
9
|
"exposedFields": [
|
|
10
10
|
{
|
|
11
|
-
"nodeId": "
|
|
11
|
+
"nodeId": "f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90",
|
|
12
12
|
"fieldName": "model"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
"fieldName": "num_steps"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
|
-
"nodeId": "
|
|
24
|
-
"fieldName": "
|
|
23
|
+
"nodeId": "f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90",
|
|
24
|
+
"fieldName": "t5_encoder_model"
|
|
25
25
|
}
|
|
26
26
|
],
|
|
27
27
|
"meta": {
|
|
@@ -30,12 +30,12 @@
|
|
|
30
30
|
},
|
|
31
31
|
"nodes": [
|
|
32
32
|
{
|
|
33
|
-
"id": "
|
|
33
|
+
"id": "f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90",
|
|
34
34
|
"type": "invocation",
|
|
35
35
|
"data": {
|
|
36
|
-
"id": "
|
|
36
|
+
"id": "f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90",
|
|
37
37
|
"type": "flux_model_loader",
|
|
38
|
-
"version": "1.0.
|
|
38
|
+
"version": "1.0.4",
|
|
39
39
|
"label": "",
|
|
40
40
|
"notes": "",
|
|
41
41
|
"isOpen": true,
|
|
@@ -44,31 +44,25 @@
|
|
|
44
44
|
"inputs": {
|
|
45
45
|
"model": {
|
|
46
46
|
"name": "model",
|
|
47
|
-
"label": "
|
|
48
|
-
"value": {
|
|
49
|
-
"key": "f04a7a2f-c74d-4538-8d5e-879a53501662",
|
|
50
|
-
"hash": "random:4875da7a9508444ffa706f61961c260d0c6729f6181a86b31fad06df1277b850",
|
|
51
|
-
"name": "FLUX Dev (Quantized)",
|
|
52
|
-
"base": "flux",
|
|
53
|
-
"type": "main"
|
|
54
|
-
}
|
|
47
|
+
"label": ""
|
|
55
48
|
},
|
|
56
|
-
"
|
|
57
|
-
"name": "
|
|
58
|
-
"label": "
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
49
|
+
"t5_encoder_model": {
|
|
50
|
+
"name": "t5_encoder_model",
|
|
51
|
+
"label": ""
|
|
52
|
+
},
|
|
53
|
+
"clip_embed_model": {
|
|
54
|
+
"name": "clip_embed_model",
|
|
55
|
+
"label": ""
|
|
56
|
+
},
|
|
57
|
+
"vae_model": {
|
|
58
|
+
"name": "vae_model",
|
|
59
|
+
"label": ""
|
|
66
60
|
}
|
|
67
61
|
}
|
|
68
62
|
},
|
|
69
63
|
"position": {
|
|
70
|
-
"x":
|
|
71
|
-
"y":
|
|
64
|
+
"x": 381.1882713063478,
|
|
65
|
+
"y": -95.89663532854017
|
|
72
66
|
}
|
|
73
67
|
},
|
|
74
68
|
{
|
|
@@ -207,45 +201,45 @@
|
|
|
207
201
|
],
|
|
208
202
|
"edges": [
|
|
209
203
|
{
|
|
210
|
-
"id": "reactflow__edge-
|
|
204
|
+
"id": "reactflow__edge-f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90max_seq_len-01f674f8-b3d1-4df1-acac-6cb8e0bfb63ct5_max_seq_len",
|
|
211
205
|
"type": "default",
|
|
212
|
-
"source": "
|
|
206
|
+
"source": "f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90",
|
|
213
207
|
"target": "01f674f8-b3d1-4df1-acac-6cb8e0bfb63c",
|
|
214
208
|
"sourceHandle": "max_seq_len",
|
|
215
209
|
"targetHandle": "t5_max_seq_len"
|
|
216
210
|
},
|
|
217
211
|
{
|
|
218
|
-
"id": "reactflow__edge-
|
|
212
|
+
"id": "reactflow__edge-f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90vae-159bdf1b-79e7-4174-b86e-d40e646964c8vae",
|
|
219
213
|
"type": "default",
|
|
220
|
-
"source": "
|
|
214
|
+
"source": "f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90",
|
|
221
215
|
"target": "159bdf1b-79e7-4174-b86e-d40e646964c8",
|
|
222
216
|
"sourceHandle": "vae",
|
|
223
217
|
"targetHandle": "vae"
|
|
224
218
|
},
|
|
225
219
|
{
|
|
226
|
-
"id": "reactflow__edge-
|
|
227
|
-
"type": "default",
|
|
228
|
-
"source": "4f0207c2-ff40-41fd-b047-ad33fbb1c33a",
|
|
229
|
-
"target": "159bdf1b-79e7-4174-b86e-d40e646964c8",
|
|
230
|
-
"sourceHandle": "transformer",
|
|
231
|
-
"targetHandle": "transformer"
|
|
232
|
-
},
|
|
233
|
-
{
|
|
234
|
-
"id": "reactflow__edge-4f0207c2-ff40-41fd-b047-ad33fbb1c33at5_encoder-01f674f8-b3d1-4df1-acac-6cb8e0bfb63ct5_encoder",
|
|
220
|
+
"id": "reactflow__edge-f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90t5_encoder-01f674f8-b3d1-4df1-acac-6cb8e0bfb63ct5_encoder",
|
|
235
221
|
"type": "default",
|
|
236
|
-
"source": "
|
|
222
|
+
"source": "f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90",
|
|
237
223
|
"target": "01f674f8-b3d1-4df1-acac-6cb8e0bfb63c",
|
|
238
224
|
"sourceHandle": "t5_encoder",
|
|
239
225
|
"targetHandle": "t5_encoder"
|
|
240
226
|
},
|
|
241
227
|
{
|
|
242
|
-
"id": "reactflow__edge-
|
|
228
|
+
"id": "reactflow__edge-f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90clip-01f674f8-b3d1-4df1-acac-6cb8e0bfb63cclip",
|
|
243
229
|
"type": "default",
|
|
244
|
-
"source": "
|
|
230
|
+
"source": "f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90",
|
|
245
231
|
"target": "01f674f8-b3d1-4df1-acac-6cb8e0bfb63c",
|
|
246
232
|
"sourceHandle": "clip",
|
|
247
233
|
"targetHandle": "clip"
|
|
248
234
|
},
|
|
235
|
+
{
|
|
236
|
+
"id": "reactflow__edge-f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90transformer-159bdf1b-79e7-4174-b86e-d40e646964c8transformer",
|
|
237
|
+
"type": "default",
|
|
238
|
+
"source": "f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90",
|
|
239
|
+
"target": "159bdf1b-79e7-4174-b86e-d40e646964c8",
|
|
240
|
+
"sourceHandle": "transformer",
|
|
241
|
+
"targetHandle": "transformer"
|
|
242
|
+
},
|
|
249
243
|
{
|
|
250
244
|
"id": "reactflow__edge-01f674f8-b3d1-4df1-acac-6cb8e0bfb63cconditioning-159bdf1b-79e7-4174-b86e-d40e646964c8positive_text_conditioning",
|
|
251
245
|
"type": "default",
|
|
@@ -111,16 +111,7 @@ def denoise(
|
|
|
111
111
|
step_callback: Callable[[], None],
|
|
112
112
|
guidance: float = 4.0,
|
|
113
113
|
):
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
# TODO(ryand): This shouldn't be necessary if we manage the dtypes properly in the caller.
|
|
117
|
-
img = img.to(dtype=dtype)
|
|
118
|
-
img_ids = img_ids.to(dtype=dtype)
|
|
119
|
-
txt = txt.to(dtype=dtype)
|
|
120
|
-
txt_ids = txt_ids.to(dtype=dtype)
|
|
121
|
-
vec = vec.to(dtype=dtype)
|
|
122
|
-
|
|
123
|
-
# this is ignored for schnell
|
|
114
|
+
# guidance_vec is ignored for schnell.
|
|
124
115
|
guidance_vec = torch.full((img.shape[0],), guidance, device=img.device, dtype=img.dtype)
|
|
125
116
|
for t_curr, t_prev in tqdm(list(zip(timesteps[:-1], timesteps[1:], strict=True))):
|
|
126
117
|
t_vec = torch.full((img.shape[0],), t_curr, dtype=img.dtype, device=img.device)
|
|
@@ -168,9 +159,9 @@ def prepare_latent_img_patches(latent_img: torch.Tensor) -> tuple[torch.Tensor,
|
|
|
168
159
|
img = repeat(img, "1 ... -> bs ...", bs=bs)
|
|
169
160
|
|
|
170
161
|
# Generate patch position ids.
|
|
171
|
-
img_ids = torch.zeros(h // 2, w // 2, 3, device=img.device)
|
|
172
|
-
img_ids[..., 1] = img_ids[..., 1] + torch.arange(h // 2, device=img.device)[:, None]
|
|
173
|
-
img_ids[..., 2] = img_ids[..., 2] + torch.arange(w // 2, device=img.device)[None, :]
|
|
162
|
+
img_ids = torch.zeros(h // 2, w // 2, 3, device=img.device, dtype=img.dtype)
|
|
163
|
+
img_ids[..., 1] = img_ids[..., 1] + torch.arange(h // 2, device=img.device, dtype=img.dtype)[:, None]
|
|
164
|
+
img_ids[..., 2] = img_ids[..., 2] + torch.arange(w // 2, device=img.device, dtype=img.dtype)[None, :]
|
|
174
165
|
img_ids = repeat(img_ids, "h w c -> b (h w) c", b=bs)
|
|
175
166
|
|
|
176
167
|
return img, img_ids
|
|
@@ -72,6 +72,7 @@ class ModelLoader(ModelLoaderBase):
|
|
|
72
72
|
pass
|
|
73
73
|
|
|
74
74
|
config.path = str(self._get_model_path(config))
|
|
75
|
+
self._ram_cache.make_room(self.get_size_fs(config, Path(config.path), submodel_type))
|
|
75
76
|
loaded_model = self._load_model(config, submodel_type)
|
|
76
77
|
|
|
77
78
|
self._ram_cache.put(
|
|
@@ -193,15 +193,6 @@ class ModelCacheBase(ABC, Generic[T]):
|
|
|
193
193
|
"""
|
|
194
194
|
pass
|
|
195
195
|
|
|
196
|
-
@abstractmethod
|
|
197
|
-
def exists(
|
|
198
|
-
self,
|
|
199
|
-
key: str,
|
|
200
|
-
submodel_type: Optional[SubModelType] = None,
|
|
201
|
-
) -> bool:
|
|
202
|
-
"""Return true if the model identified by key and submodel_type is in the cache."""
|
|
203
|
-
pass
|
|
204
|
-
|
|
205
196
|
@abstractmethod
|
|
206
197
|
def cache_size(self) -> int:
|
|
207
198
|
"""Get the total size of the models currently cached."""
|