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.
Files changed (29) hide show
  1. {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/METADATA +1 -1
  2. {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/RECORD +27 -27
  3. InvokeAI-4.2.9.dev10.dist-info/entry_points.txt +2 -0
  4. invokeai/app/invocations/fields.py +3 -0
  5. invokeai/app/invocations/flux_text_encoder.py +15 -9
  6. invokeai/app/invocations/flux_text_to_image.py +15 -18
  7. invokeai/app/invocations/model.py +26 -60
  8. invokeai/app/services/workflow_records/default_workflows/Flux Text to Image.json +37 -43
  9. invokeai/backend/flux/sampling.py +4 -13
  10. invokeai/backend/model_manager/load/load_default.py +1 -0
  11. invokeai/backend/model_manager/load/model_cache/model_cache_base.py +0 -9
  12. invokeai/backend/model_manager/load/model_cache/model_cache_default.py +61 -62
  13. invokeai/backend/quantization/bnb_llm_int8.py +12 -2
  14. invokeai/backend/stable_diffusion/diffusion/conditioning_data.py +5 -0
  15. invokeai/backend/util/__init__.py +1 -2
  16. invokeai/backend/util/util.py +0 -3
  17. invokeai/frontend/web/dist/assets/App-DUFQH-Kw.js +66 -0
  18. invokeai/frontend/web/dist/assets/{ThemeLocaleProvider-BSRQyfxR.js → ThemeLocaleProvider-Dc0lAavD.js} +1 -1
  19. invokeai/frontend/web/dist/assets/{index-4VBs_C-Q.js → index-DK9y4o4h.js} +52 -52
  20. invokeai/frontend/web/dist/index.html +1 -1
  21. invokeai/frontend/web/dist/locales/en.json +11 -0
  22. invokeai/version/invokeai_version.py +1 -1
  23. InvokeAI-4.2.9.dev8.dist-info/entry_points.txt +0 -4
  24. invokeai/frontend/web/dist/assets/App-B1xXrt8x.js +0 -66
  25. {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/LICENSE +0 -0
  26. {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/LICENSE-SD1+SD2.txt +0 -0
  27. {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/LICENSE-SDXL.txt +0 -0
  28. {InvokeAI-4.2.9.dev8.dist-info → InvokeAI-4.2.9.dev10.dist-info}/WHEEL +0 -0
  29. {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.dev8
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=xdhHrsWGpChgb2VhBjJ2ttqemZ8Bt210sKn6XSyKsDg,25244
32
- invokeai/app/invocations/flux_text_encoder.py,sha256=xl42hmNuwiG02EY8_OUTpMAo7EkFPAHdxsZrj_xY8PY,3478
33
- invokeai/app/invocations/flux_text_to_image.py,sha256=XpRq-FcLWovPQRygx4auldOc-5dFlT26xAwdtgDn358,6920
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=MK0685OfrBnYr6TVUTXdPSjGj14qdNNZXaLjCvRBxpc,24221
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=GqknzxQw1R70ElW-VA-vhIHtHA-RF-N-LhAs07YFsd0,8265
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=plsQWr34OKZrljJ5cbyXeiFDnfFbg5quYvxjskcRteI,5501
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=wfPaFwVHaZ4rHy72O-jaHz0ZK5iEk-PiswEuvBFjifQ,4002
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=t-m7r3jhx7UsKdDG8_qBmNgz-cav-a2UclE9bi8eS7U,6216
301
- invokeai/backend/model_manager/load/model_cache/model_cache_default.py,sha256=mJRrmXFliminPG3oPegJMqXdNiIjbblvQqqqF8YIUVU,17510
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=az_FxITDORm2w-J9Vu25ytK8PsAany5r_Cvd0prDtoo,5577
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=XkLPgWQpdNPmBTjvMaxngGf-otCfVI4hAdwCFpPPBrQ,9928
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=EWgbUQYjfToaTkc-pJLIzPjHg4ZdcjDGJ_T2cBnefnQ,261
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=ArX6mSrLDwumkXYH6JKi59kY-wQqI49PamjCBbRTuKo,2470
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=ITMTJUb4EGtupcomfRQfrE_3cy9YIUb6agffUSj_FH0,682
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-BSRQyfxR.js,sha256=Zv9kugJy3r2DlnESI4LPAbKukMmWbtInPHmdgFBVI6M,605
399
- invokeai/frontend/web/dist/assets/index-4VBs_C-Q.js,sha256=YYhZ1koMLB9BEpxhqimtdQvr5q6P5o6YCZ9tWwvKhUE,2145398
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=DxjI8W1EM0MHpV4aVo7bLhc1UJzQjSZfClxzJtVjGB8,86512
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=vnYskt5Rgbx36xRfM_Sx3AUx4fApNHpf1QlG96jitP0,27
461
- InvokeAI-4.2.9.dev8.dist-info/LICENSE,sha256=OTAVifLLp_QCl8faBcfl0WT3BMqpeWZbEXw1MgPJzwM,10146
462
- InvokeAI-4.2.9.dev8.dist-info/LICENSE-SD1+SD2.txt,sha256=GbsztR5dRQiKsmF33NYkGL-GFJhSc2oG9gQPwzo-7Tg,14555
463
- InvokeAI-4.2.9.dev8.dist-info/LICENSE-SDXL.txt,sha256=JV_wPIqRG79iLCB8HrwY1J8jBimjUblcUxfnDbUMaqs,14213
464
- InvokeAI-4.2.9.dev8.dist-info/METADATA,sha256=Gk0-polUf-UwqEn0S4R9RPqsV6d8Zsy1HeYZiGbdcf0,27028
465
- InvokeAI-4.2.9.dev8.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
466
- InvokeAI-4.2.9.dev8.dist-info/entry_points.txt,sha256=LCFZSg_rueHvY38L2CPqClMIlBIkCf3LCd564kgtzkw,200
467
- InvokeAI-4.2.9.dev8.dist-info/top_level.txt,sha256=69I61eoKb6LXiuo6Zz2l_6lhY1eRGBCqP8i9SMqp9Gg,9
468
- InvokeAI-4.2.9.dev8.dist-info/RECORD,,
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,,
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ invokeai-web = invokeai.app.run_app:run_app
@@ -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
- t5_embeddings, clip_embeddings = self._encode_prompt(context)
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 _encode_prompt(self, context: InvocationContext) -> tuple[torch.Tensor, torch.Tensor]:
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 prompt_embeds, pooled_prompt_embeds
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
- # Load the conditioning data.
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
- img, img_ids = prepare_latent_img_patches(x)
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=img.shape[1],
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=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.3",
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
- t5_encoder: ModelIdentifierField = InputField(
173
- description=FieldDescriptions.t5_encoder,
174
- ui_type=UIType.T5EncoderModel,
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
- model_key = self.model.key
180
-
181
- if not context.models.exists(model_key):
182
- raise ValueError(f"Unknown model: {model_key}")
183
- transformer = self._get_model(context, SubModelType.Transformer)
184
- tokenizer = self._get_model(context, SubModelType.Tokenizer)
185
- tokenizer2 = self._get_model(context, SubModelType.Tokenizer2)
186
- clip_encoder = self._get_model(context, SubModelType.TextEncoder)
187
- t5_encoder = self._get_model(context, SubModelType.TextEncoder2)
188
- vae = self._get_model(context, SubModelType.VAE)
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.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": "4f0207c2-ff40-41fd-b047-ad33fbb1c33a",
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": "4f0207c2-ff40-41fd-b047-ad33fbb1c33a",
24
- "fieldName": "t5_encoder"
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": "4f0207c2-ff40-41fd-b047-ad33fbb1c33a",
33
+ "id": "f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90",
34
34
  "type": "invocation",
35
35
  "data": {
36
- "id": "4f0207c2-ff40-41fd-b047-ad33fbb1c33a",
36
+ "id": "f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90",
37
37
  "type": "flux_model_loader",
38
- "version": "1.0.3",
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": "Model (Starter Models can be found in Model Manager)",
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
- "t5_encoder": {
57
- "name": "t5_encoder",
58
- "label": "T 5 Encoder (Starter Models can be found in Model Manager)",
59
- "value": {
60
- "key": "20dcd9ec-5fbb-4012-8401-049e707da5e5",
61
- "hash": "random:f986be43ff3502169e4adbdcee158afb0e0a65a1edc4cab16ae59963630cfd8f",
62
- "name": "t5_bnb_int8_quantized_encoder",
63
- "base": "any",
64
- "type": "t5_encoder"
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": 337.09365228062825,
71
- "y": 40.63469521079861
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-4f0207c2-ff40-41fd-b047-ad33fbb1c33amax_seq_len-01f674f8-b3d1-4df1-acac-6cb8e0bfb63ct5_max_seq_len",
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": "4f0207c2-ff40-41fd-b047-ad33fbb1c33a",
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-4f0207c2-ff40-41fd-b047-ad33fbb1c33avae-159bdf1b-79e7-4174-b86e-d40e646964c8vae",
212
+ "id": "reactflow__edge-f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90vae-159bdf1b-79e7-4174-b86e-d40e646964c8vae",
219
213
  "type": "default",
220
- "source": "4f0207c2-ff40-41fd-b047-ad33fbb1c33a",
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-4f0207c2-ff40-41fd-b047-ad33fbb1c33atransformer-159bdf1b-79e7-4174-b86e-d40e646964c8transformer",
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": "4f0207c2-ff40-41fd-b047-ad33fbb1c33a",
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-4f0207c2-ff40-41fd-b047-ad33fbb1c33aclip-01f674f8-b3d1-4df1-acac-6cb8e0bfb63cclip",
228
+ "id": "reactflow__edge-f8d9d7c8-9ed7-4bd7-9e42-ab0e89bfac90clip-01f674f8-b3d1-4df1-acac-6cb8e0bfb63cclip",
243
229
  "type": "default",
244
- "source": "4f0207c2-ff40-41fd-b047-ad33fbb1c33a",
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
- dtype = model.txt_in.bias.dtype
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."""