From a7ccea60ffeb31c0ab02b2ca473ecc86f37b8868 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 12 Feb 2025 08:54:00 -0500 Subject: [PATCH] add lumina2 Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 10 ++++-- README.md | 2 ++ html/reference.json | 7 ++++ installer.py | 2 +- .../Alpha-VLLM--Lumina-Image-2.0.jpg | Bin 0 -> 38209 bytes modules/model_lumina.py | 21 ++++++++++++ modules/model_quant.py | 2 -- modules/modeldata.py | 2 ++ modules/sd_detect.py | 4 +++ modules/sd_models.py | 5 ++- modules/sd_samplers_common.py | 2 +- modules/sd_samplers_diffusers.py | 1 - scripts/mixture_of_diffusers.py | 31 ++++++++++++++++-- 13 files changed, 78 insertions(+), 11 deletions(-) create mode 100755 models/Reference/Alpha-VLLM--Lumina-Image-2.0.jpg diff --git a/CHANGELOG.md b/CHANGELOG.md index 6028c2982..7e65fb85b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2025-02-11 +## Update for 2025-02-12 - **User Interface** - **Hints** @@ -14,9 +14,13 @@ - **UI**: - force browser cache-invalidate on page load - **Models** + - [AlphaVLLM Lumina 2](https://github.com/Alpha-VLLM/Lumina-Image-2.0) + new foundation model for image generation based o Gemma-2-2B text encoder and a flow-based diffusion transformer + simply select from *networks -> models -> reference* - [Ostris Flex.1-Alpha](https://huggingface.co/ostris/Flex.1-alpha) - originally based on Flux.1-Schnell, but retrained and with different architecture - result is model smaller than Flux.1-Dev, but with similar capabilities + originally based on *Flux.1-Schnell*, but retrained and with different architecture + result is model smaller than *Flux.1-Dev*, but with similar capabilities + simply select from *networks -> models -> reference* - **Docs** - New [Outpaint](https://github.com/vladmandic/sdnext/wiki/Outpaint) step-by-step guide - Updated [Docker](https://github.com/vladmandic/sdnext/wiki/Docker) guide diff --git a/README.md b/README.md index a50d04241..ef356ed19 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,8 @@ ## SD.Next Features All individual features are not listed here, instead check [ChangeLog](CHANGELOG.md) for full list of changes +- Fully localized: + ▹ **English | Chinese | Russian | Spanish | German | French | Italian | Portuguese | Japanese | Korean** - Multiple UIs! ▹ **Standard | Modern** - Multiple [diffusion models](https://vladmandic.github.io/sdnext-docs/Model-Support/)! diff --git a/html/reference.json b/html/reference.json index 83849c3c0..4cc2edb28 100644 --- a/html/reference.json +++ b/html/reference.json @@ -309,6 +309,13 @@ "skip": true, "extras": "sampler: Default" }, + "AlphaVLLM Lumina 2": { + "path": "Alpha-VLLM/Lumina-Image-2.0", + "desc": "A Unified and Efficient Image Generative Model. Lumina-Image-2.0 is a 2 billion parameter flow-based diffusion transformer capable of generating images from text descriptions.", + "preview": "Alpha-VLLM--Lumina-Image-2.0.jpg", + "skip": true, + "extras": "sampler: Default" + }, "Kwai Kolors": { "path": "Kwai-Kolors/Kolors-diffusers", diff --git a/installer.py b/installer.py index aae9a6988..d9367fcec 100644 --- a/installer.py +++ b/installer.py @@ -531,7 +531,7 @@ def check_diffusers(): t_start = time.time() if args.skip_all or args.skip_git: return - sha = 'f63d32233f402bd603da8f3aa385aecb9c3d8809' # diffusers commit hash + sha = '067eab1b3aaf4d09f85edf21d8b147e0980c662a' # diffusers commit hash pkg = pkg_resources.working_set.by_key.get('diffusers', None) minor = int(pkg.version.split('.')[1] if pkg is not None else 0) cur = opts.get('diffusers_version', '') if minor > 0 else '' diff --git a/models/Reference/Alpha-VLLM--Lumina-Image-2.0.jpg b/models/Reference/Alpha-VLLM--Lumina-Image-2.0.jpg new file mode 100755 index 0000000000000000000000000000000000000000..5c71625bf85db5f72b08c3ef6ae8a906b324d782 GIT binary patch literal 38209 zcmbTdby!?Mvo|=n`{3?QaM$4O4#8yx32wn5$lxB_-Q5#{yF>8c1h?RX?Bu=Qz5DEb z|9rbWr{(F>Gjpoy^slR`tN*V2-3DMQ$tlVKU|?VX=Fkt|?+(CT)(2z@0H~@0SO5S3 zG5{Wi1b_f-!9cS(4C(*0KuZ7)G^;`Lzhn;0|Gx8|+QkCo?7`t| z<3Yv8!O6kJ1O2CUfHVLV2?-eq5fvF384VQ`4U-5P69WU29G?J(h?bI`j)szknt@f| z9Ro8jGc^sT6c?|Mh`6{oJ%@~MpjN!4bR9sS8R$ftA)zsY5+ScCD+0{QVI5a#mIyOGPu(-7RV`X)1XLoP^;PB|z z@yYeg?eDw$hsUSqe{{h>>HP2XUxfX?=)!^01q%-k2aoiRE*MyEXokaqN1*0H#Ff%S zvT((t;SNCtzE3J_{EkA)qjiOE={AQ-K*zg7fBlcN|4{aSMp)?oFUtOhu>YH`H2^vs z3{-eNWr50{d#2A6#aj4Uich$I3#0H_Tp3MPO6m;ML#(gJv14OmS{Gzd=?K#2)D9`#>AkQ@>t3jk`tlGZ=oW&BxCcK-{YX!;B2 z0vBIXi^WPZJ5-D^Gr@qEqdb9tA_%~x1PHiRV1n6A)PNhJDnNorNn$~}b|edsv^3x< z3XtGbOSlXhRltBy(0CXGV$H}K0U;E?l-i%4!rb<$v@aR!VJ*VKaX7^oHd;ftWuV+5 z&$yNtZ+|0gT0eP6Y=cw9O?&t*^yW#>-3;8HpZ#q>9gn;$m`KCar%MFT3GJqaPmg4E ziib^aq2rR}r0)F8*q%%b07+ES*CKzUW zD64VP|BL0&8uy>55Q;*QO#T8!TJkTlI3)JA)E`s@FT(G+6v~rK8Du<4G+?zzEP*5{ z3ozRYQUxdoyd(gh62xE%Cd6PervIlDG$m1?JuL+qFtH241;|-cU~?w4G?GP%B^P#9 zgi&^!v%2EW;PYgjMDVB)Tj-HpnNP&>HNLe4`sPvs(l3Yj6%0PlX8IwXdH5gQ8Bmjdrp_l+LAkmg&%VOjmj-M=7T*sg+q*{&IEI zVk%9oLbZx{wHAzmWVJeMFrbyH0Km>6S%3hWWrAuhUH}TdlnqxgKrN*o=@mhkz~aQu zrhEH+M#!e@dTH3Cda2gmNw;9fr=(~P_ddDjw!sJi78QXC2z_Z4n1frOy!>Bm{l{D& zKuZI5UIRww@{Wm(_9v^GAJYk_WQAY?ftaD=bjt5$Kev2btY|WxjIZ1M{Xr0 zfRU1%3FB{sse*s3{j9fR=t@u9)#NG(jE=vxebF;d$ z=5$lzx4M?I#+D<^$Hac8sZ|AECliA<*t9E&xpZ9(Vztf--b1)lkWdi-f+WzHhnT1V zA3To=@G1DO*@&tsi3vo77t~;a=@0ogjEW2a`l7+6YQywte+IBXTneO9wZbH^U=#UZ z>3~zeVVL-E5>WwP`1C-*WeCZSRakCFeqK1PWpKT=Vn6-~sU9jCb@xljn178pH!=Gz z*u9xc!zpq54uhuKPfIlWi?_fcm7AAE5PC9YnquVa_JKtF1;G?+4Oo7paO;fGafx2ZIb8|8we^+~Ua&IEGuJ6TUWK(T6y;%;>~ zy3SSQS^=9Lmbj$y-M-%7i@ z)I0+oxY}yGfBDE@`{z{}=}+OQ$pt$J!^Z`wN}>~$S=f17D9{FzXDPA49wsNEDN5qX zzO{{-J2c@--vxE_ohL`HO$)VYhgzBF?^`hAM~o0UK%Pr^SYql!+XzLrP}c zWUKE)i8K?;6wkx!SI4#@slUu{w)>RkbT6E-2FHY0krmLd1I~bR+2QI!OfcV z1y>$7(YaxOm<+>IEO@=AvZjg6!+!~2(4R14swi;%kn zuv|#1RR2ObdNf}C0xTxVJ}FBiF;Xj}Puo>1PZP8_VfiAWqa@x8uPR0{FlFNZA6W?q$JSspJiqG*<_JrR=~Kdlxp}cX~+lFM+F0Y=4PI`pa4yJf_e8LdbYfztkxwu->7c zol9R6ik$3uUL2pGxsXE_ld7g0%~$gnQ~#pZ2}GFoEM{?$V|6pOKcM8kJyqc_->si2 zZ*t3lc*7=^x7es54~c|??e^Lp$t+mr&DLkr6^h%84x_xK*_qB~YsZi2@q5Pa^8k2; zF+gfR7Bd-V)lnYPe+~u@2^u&T5&L}KiLCky`0T_GUGk@HZN~}U*UmvS8{ z<6{g2)l2d=yXuYH+DEoB4 z_ZZmyinXMg@b|}}$~PUOqa_z%??a6h8D(D`%!o?3Q;q!UIo!{U2(HB@%LF47PR|uo zSE6yC3!+vxo4_%O`9xB>DDxe0(O~DG3!hUmtC)`5Nir)xFy%8KHcU49KB|@!h3;lH z^eye9VFatli}9d+x{$a$PONsL_^gMQ7V;VhQ5S2n$}Ozr(4jB|q zyM0&_*c(5!4ZTy+eM`nRX>)>Dws7#6$KU*qC_UAW6qB%ZDSh%6mq#ZVgP6TN*90H< z2nq+KfAY4I$Gl<8zpfuUGmw6vxLbHs8W?Z7H8Ag-*)deo=ZkfW8*GR1A*vn^116)T zW{K*SOUZ^FekubGl=If;j=w{uy4EvgMjz~KMUUT5^P=Ci;F-BcgX$ z>`ZJN4^9o=agXSX8vA&N6B)Zx^_u9EWj{k5iC>izUSumNT`u;>N9GFwVc#F!R0WL6 z{fu-bS#dj;-oDKhp*^f1RTA7{U)XxD)6 zt`b{>VE~0xz^W{Mf))z`TCn6ge*uGKXF&@DZ#q*7N6MXl0d=ac6`wFgic^}+vac%H zhVkRv6?3CfA%QHYBnZsgc#_1&FH=f#Z@-2J;M}Jet1a6zx`9!~>21yyXDrqx7vf84 zD7SL7X!YsmSu#MH){y;8=&KknZOZW;1x_^dUlV1kL%>#F6D!M)kq+JO4F5gsomR&l_UW?#$U>36WNQII%_Bjf9y zb<1vfadKy1YT7O8JZgnR+9~*lOKsT9ux+^ZFCg~3j$;w9j^o{!SSqM!yIi=MrNr&!!XhwPu!#1S4DQ-!Tw z`T2^KEe7%Hf^iR{l^ZNPf5D}iyQt+AMQ`%SZ2xJ)$V%{oY_d?KWB@lyXS|}8AVRCL zpw_0aT%m)RX~PTqch8rEQHr}6x{=1HBiQ5*X;cF0IkJ^Vbe}Fn^=y9SxWhT7G>#~- z$t=w=#@xNAil6mY+$eT%invri>Ilc@+&%_eaLieE>gjoVJ;l4RDy&;2pEcKm+ZW`^ zOo&ivIaMd+C*^5Flszilx7Az1CGX#KIvLrxzL&H&Tv}CpZGT(28YsI@>UV~r-Nw1p ze$=z@E|Nn$LN7IDZ*|uSsVjc{UQ5CMJ*0wYWp9eq<11Lbi6lYsB1^KBo` zljsz^XsMrwqQBEy*xCDrSH_}s_DZ8l`n7^t|nrpG_A>dE? z(aZ|}GaZ5dF&F>U01yU%x**G3d(ryltdzDwTi3Iaf6eOU2w&4EWI|!R6m1oW52%`! zWh?qoq8zqMt5GDW`eSe3UqHH*M080bCEWr=$%6B!roQ#=>=u~6?N4T(#L-nX3Huqr zgR-}{((ojJT=6e}p?R?->DMwR8z&1>pC)9q>Dn_UkwGuYFAGQ{L{3vUBZ&6X>bJ+0Yau*4u`=?R2Ev|TuK8>YJ%k(_!`RC;;sBFhqCj|NWAN( zFCs4fV;NVxody@~0&}0cC_V?j9zQHdyG*cgkb7h1cGl7cmMClIeodJ8%Gf9<5vN|w zc)5{q5%C)5Kv)=_US!1oOUKVubCsVs<0l`ktZeRd48tF8vOLL=1Kr<kD(1!wlnbT& zTUrnPnw&0q(e!yFunD`$;0iESw=m7^$uAPIH2t$zeXfL%f;!GPDZ-!9Ijx0Ix-jrU zbh5Y9{y~fADAAY7O~6y)v+7=){V#FCbf40jIt~*lyaz2Qx&#-PS|=;QsGJsAa)-e! z{HygA?{>tKUje@?pH?XST_i}ZN!vE_+)x-@g~sm0e=kL+mOa=Nj$MD0Y4>uFK#gtJ z3xKHqAg*WeKG(5a7c&%R_i;O`I{83AG_xfc*ZxFuV=}9FzWf#a3M+0qMPv3TYuRbN z1Y1FxS-fI($aiKSKr4V}gv2#^g?=(mrb?K*y?%Ck7U}EbC)u_+-j0?>gHc){Zcdo& zjos|pQ`VhFtK9P~ciMAZ?S#Rs^!bfe??!@e+p3I%N-=&v&`5Gpqx&z!U-imTYSvHr z(Y&3BT@_7R3B=eredTGP+l1MKmRTdXW`Ea6zkFi+g0RrP?6D za&e$ut6IXC>wImUW|Jg-KexcA?4FeQMyVOFqj+W*|AClxtuoJbh%uPnHvN;A7Y%DH zeyo?M8#r(O!>`#Zgq0U`rL%$@JD0H;=^>-W*|G&bS{ouyh;jz?j{}=&g`Z49l+0sm*k^^gd7rMQlz}=-OfCH%|(LKyIQdXFD<`SA|BAl%m}Jg>P~KxSH6_# zqOenrgxe<1i5#d(^Tdo*s2g-y8a!~o6I$q2yihphSqK{oK$@>lXD#TYbkBSn>h8$2 zx^GL``5B+>rCG%A)xv*_&svBJ0LT=GI2Z{qmaZ;hh%rIA{a$J$*RrR*lJt7oj&ZRtbCfS(~Ho#_bWa7lJ_#9 zz3!>J8^>@zPn3Ud?7v-V_1Qfqhph25WXj35-PYv#qpF%$j)=~SCPuNkj9&1=GP~KYSy1x`ea*$_Bn(vJ1?_h>LGFJ=fxda-Idpfv6B-@ymvPv;osB&9f|b`0^6Iu3fB>)pxJVtyM)KCnrU@Ceft zm0)g{7T`%TRwaW25FKF;ljsriR!$ zt&`3;8|@RaGh4Jt;ZZaD^Kn@CTqB|FC0cSn(Teyv;n57g_9}=71<)Bvw%au87$c|Pd;n~ zSlF->5D%U+@3i`UeYt3){t#z!rDK3a{dN&#bXrnRo8HsAPU=@WFApb!Y1s9mtDNl~ zMAsxg>+w+cI8vD=$i6Bs{Vo2-U;}S$t2Lr%-ryc(t@~P{<#Zv0`-aF9-VN(Wr^U|X zxKcVTmvY!^B;xn5gohc~U%=0{Y6|L5b<$Uk+uB624Jlikc=azi!U_JiZAN*@G2t~c zc;14vLWtGT5-eWKV_cE7@cRo~P+$FtIH{r7Lqbc5F1=Oa_|YsAqeLF->>KdWv`3(H z<1yPHc7W~rJcP)9g7QONjq6B536kz^wqa|n)=#y_sM?gN%x`PXz(C3TL2XA*o3zqA zl}OvIZTGSBM|7z0+#ZcPkPBS1f@<*JZ;w0 zJMOEIPeVA#UqdUETpyEef5h`f&h==wL}H=#CtRUaedUUf-cAXw8PKu!ChJ* zRcp-h;a4`AIfZ`#_GEk4BekzIj$o{RL1G^6-}DY&T9zl&Z9gaL$?ZjI^yOp?CZA$J#A7^9sGqIl=8Y zh?ZcBTx)rbap-*nyFPWf$CasZ12Nt8@MRLmNb%Z<1W%;~=&hzMVMs%W#PiZPDrg9C zYglyQu;Dyw3=w89tVtdu_}3UtR{XRly(l9_ zzkX^_#2>~o;pw>vb06l%nz5q0^;VlTY0b-hhAXvogznMtMg)tlL2lHpih>DwQvsb& zi+qY6fcVcN4$qL7Wl5X3qsnb{lcHiryQ}{fpt}0jSLTqJVS={kL^<6S(a*&Z;he|O z2M7{Q+q>nnC6C50^3tcSZdTIeHZ>mpIswU7w%}<0m^5tojUz4YIlIJD&r3R>hg5!o zh>cZVg}5_m^re8Qq}8Su2h{SIMaiC|Ff3%$CFfh~7@K=xBVY2qDFQ7S)4>!7lZA`t zSSLj)Uk*&}z=A|vXhlmKj)iPhL|s9@NuWZiKDIq}I2qS^=u| zL@g84PDGM=)ZJ%v#sE#Z;o7kV70-Bvr-Muhi&BDFE0SRL7dyF=P2&YL7CwK?4dx2v zGBSFBag+zA-Z9r=+8LPMM{^#5w1RLF4ws@jo9M#1n9)?m6@Ma-_H;ddth?d`wL*p!<{90}LsX*M<*+Jh5XB(?O+`t}f`49H zY%sdMT89mM5-B#)hcpW{WWkyCS{>cZ@XfSoa!&(kCoh%&BE99tBDD2pfkdu&!J&_5 zme07=;)g~*jlW%2zJhz+$XG}9&C2;O!QwiMoc)Y0)_SYoa)Wb)3^*pMU%ia zYK^Fz+mMm=#adfhtd>6x0!qprMp+k5Ro1_&=9=**-S%~ihD@@4IW?y>&Z$bf(oH#D zr;S>~vlOKbuJiiS)34dLYpWBfSZGtE6_(Q0Wg}D&ag$GqZ0iRQ{WK<GUH-vo5G<2aLsqc6}2wjuK%9-aztEyGI7v7{E4EhV9gZrf%Lj059h0AhhBzS zhyQ5xL$PyqI1u$JD1HKLL{W}kI+@R#Cr50U zAY}hY^@nS@ClDE;L`Rs^Cx0E`nDDZ%7n$Q1E&=;<5-|w7FhMlD?K|y>QAaiYq9^61 z)UL>wh?6$Q&&fn4xJ9;C#_f0T%482I0bQ@|xGMguMDc+N869^c_}bs!fKBsO4rNg@ zJ{yk^8bsU~!@EKL+!9i8+NEa{d)j=$N9k~9}g&{AEv3u7Q&Ij~XSx#^U zv;H#e5>6nGP79BLzW_8VD!h%CANp0BG{@TVJaD9i(|b@nun`8;V#%W!R(@J5iiozV zGWKN3{yRMV+BEnZC1-XuElwH&4L@!P=dyQE!Jat4#_Oe$PJV7RruV)di* zfG%li2&wnhh##nhmBHm2EP?bu95`lK{!)uZIp5UtXdvhEU#4L%sr6a zAVn()my$i?DN0nJ7yLLp%ggnlK+KCD>9!(EhyE+zRI?Y|LG!-SKcpdA%01Qojk)!W(78|d{Noi)% zYIaj0W_*#C3e!I|P0@C^1LEX}lL^TVKuM!T%Sg72!Q8SSa!3HNubQk@@>7yR1VQRi zD?=PGDX@7b?@fljHVxAUp~{%)tE!gAw?wNc$h(5EqHPxs{Z#MI&`=6Vgn#?_oCJwk z0F`+Xcv=#xyhU_~`%Qi+zjP<^T^SNr1&62UQGGh|S|s6mFTVV3EzO7(yVYNSTC%#- zALi@C`3=m|_9tCs3wc945KoQYQWMvHXi@Wa#>6#7j9m!-&jny|kD+(V+)0+cym+l_ zazIW8aeO}JQs_SOG*rQs{%jSXrv|=L% z0ESOVav}(8!CtH2d@$t1(Cy3s%y)u_0%>y46fynKm(3u~sK-rYH$K&&J<*jM2AM`O zaom$(adqTk(ZF*8YIs5CQYkAVU3oEn%|$CT7Xx(G*NH#iw_b;X@4${G>2!^n}KfoG`&UXkaW# z{$^u#{I+*P`7i`h-;0C=`rI^;+uw^%nxm%2nXmHs1@(k}zKBHuHWF|o zI5KN_D-*@vaKUOf{*;}}=^%i+7_WEPe?30AZxcPnx8y7TvidxKKt3bXdllo}K=NCz z9b-wVIMsh7VQQ!Qktk7aYeT=bH(Y%{UOCnOC}q|7gv(T(aE%|)98=aW%l`f&^H12^ z@>ocQDtB)&XRQb8j|}rphz=Zm)OY;l5*#T! z-bTOFfI|-696e4BHYFp@%!Ok5xh1%*rYCz5$Apo3|8FB;|s{-TF zIAg|;<39WeGZT{y>ToVun>D5U4=pA_(gus=*KEn4WkZ6wTe`kKd%sw<2ZTMal;t>Thy~?f8|J=D)Ma_^qv+q76OO=waZ~)Yqt!(h^^TF>wH#5+LJoh_rxHugvlJQK>7?lX0=_N~zsfos z2VySOT`sdL5bZ`s2#~M;`CdL5QLxfQpUUje^HI(svGx`wKTsmggWG7>CW!j|UR=JK z;9X7T$$SEv7JZ|hoQeVrE&M$&T{4<$!*AADPlObS6<&zcgd(hiPgy0)IFnWj8ClWx zt{~vTgJie+(QTXMQVNr8N{U=o#ad>L*J7-6QHs#a5^>L%ps&6bH)HubWww6eH;y5b z-~9OZ{jN1>xsL}}nI@I|jtXlRX1`~#zD!XG%%lzrd?HbX=~hYe>KNX+C7DNXj_LB| zFUafU&HDKI$!aU-fg^9Ij~R>sPZOqs#Ro*aiN6LhLqpM|lc@8+@1#cXhTuh6^NhlCm$he zv`q~r@pVJjt+;r#E~?qHHv3CDF5==o#a(WIJ;~39Qb`R&{ZLnF2m-=uSzPZ;QrsTo z`@%V{VF-m?YKa}2Z_S3*iH#tA<05I1oLE&$Qw1dxTzqH~HTH&rK_W}-=AvHurRXHS zj$M|QqqoB0t14rzx07YLkjT#!)T!p&J94>C$A|(Ax)czhx{8rx;R`pVz`5hbVx)^* zHXpY43Dd=0nO4d0WU#A$0jRm-y>S>H-tj19`kk>%oS#0E1Wfq0Ey(}y7otq6FyhXu zIC4VVVO-8oe@V!ix0X3+F%&Si>RK|zzgIm-S#m%$oP|@sP>6&;d%f6 zmk_p~z32ZyYdaeYkHlC`i8N_6?AGHl7hbSpMW3ZPX^wYIcf`0m#0fIUA~iOnt&Yky zt3!ek3|f~jrNYBcsXtwQ#?PLi`^YetTP9C={)?HM*CIgqYM=u!m{{WeXHSnkifa3M5l-RE zX$ZenkMsBzC`f0mbz*N5-j8V5F@#R4nen7MO}J+3Qt}+bEvh zuQPKlMUmN}O*44eK7y??G|WD?WDT5QlKw3wzmLI_RjkC`L>eX0e3y}dhH5612784~ z5kw%ge@}*aH~YA*6g7b`N9rH37tf_jUwAld^h*|90a0>>GO@y`4qwBLF=V;HPKw7k zeWTAhs~fr(PGMk~NURQ)*VMP`{oEmYbSyc1{Dac^3)lI4g~{l|c)Y5}=lJmfgIESq zK#GZJ@5c8?vcq@_x8iRJ8azVlqkL1x?eo!`dq~SM(SxUHnVol4iKZVlP*?)6q@fz) zSDrjS9Yh;lMygp>G!H@xD%6Rui|-Ezg~X7{cw>9jY~ppfDgTVb;NhhbPcsJyBj8oyH1{`I| z_s5pP&pn%wPg7!)FHvbb$Q&C$N5{O&uoB+~j-c?r2a2BTQ%`2*W)RUwchN^4&p@eyn_$9>ln+qLL3DU}-o9_A--4aNdNy(H{ z1<8ARxG50pxX9-zdN?37stZnIN?5KWMG}oI+=VOa`?uwL0s~+(#hoHQ&->jInNi6a zd6PT@x0ESge=jbtzW^I7d?olz62h!zW}!5LXXb5PK@X9Bff`M!VMS+E`%11)GLRcH zMGgfd@uhOY$b&S2%nWiYa+W2=l?*+xNi%MzQxe$epFYoey`@>-MWg-#c#7TBU3Dsx zPYkTNfGwn5@xIjp2wn}zcKjuD#7%6jCta?mT!8(-1d z@W)Si89V3B7)DE`m_#n)ewB4-{kOGc?Qn`h5sXg;@sSIBDG65A7k*=L zk`DJ1RaWZN%m)%tA&{=M*z`h(F|#ZBh^^c_*YcOA{jQw;RRfdc(v^mj_>JYQ%0hWj z<2_OXH)21CD(8L1iRG9Ren&q#jKOp1!E%;=b%DB#W57waiS-WwO({}kwh&D@MaEJW zqx(v}{ZIx$N%sc5#G-@FIHhr6v^s}`YW0I*rFF(l?N|B5Wt%QyO8Yk&puSePd5e(A zf!NeJhXeq1BL<+haR zTWm7U7}%=g8>cM&`;VuZG$~AmcyYaG6rgE@-nH!mG-srhB{7*6es-b}QLH~ZVQNu$ z=&Hx_jW)Tsl<9?S0aulmkYF}w>~thVN&yKKs_e=eTARK>KU z0MnK-q3*WjWyM=E=n7dUj7HjPX^_WH1ed$Cpw+7UDQX;87!;8G!*9Boy?pK5adr^X zWooRPZ*}hXoRc4-DF>U1-l;l` z&VhYTe6IT1%#wzMgF}Vm9_0!%V{lEi2%WgvKC0`Ka?uE8v-^=LV@^l^#qV-Kq3)r~ zVI|ZlVgbSrUNQUN)nr9ZZ83$1%2!1jCx${gE*md^YhGITiLlmzV=F$NM|{>#gN5A% zOJ;7G&j4804>oniO0x_j)HEhJ-qi!U0cEj}7GFMj?HZqA&DJGH>xCoZFXY#3Ox!LG zGrYZ0=NGaA<7x}Rh%T&chbX2epJd)ES6{YtoojUf;`36o_|AJTvhj=>llFDZM`E!` zrNvnEjK~q1&Z9!(Z#%L^QNp4scQs5$` zDKeX_Z*)oAY&LX4#4}3GRlly*a_5-oo7}*jyl$WCqWsCpTu$`lR5Zj>6Uf!v`kiM_DU8){)7&}H^fD+WRBS&(tr7A;%?+9Hep!rQcbz@=uW42yXBnE-Pijc+ zkPXXSgpCzqID5W)=H;pl+XN?3x9VxsO5(BFZqvF+sm(l0KV5@Jt(PnfrE4e#0~EAe z{Is?ZRSDdIF{F;es#@|0Ach&L2;=fa|I_{o|J^hGtFKGGwGUi^CtwnJMiyaHX~Sk! z@iB}+`bF5l5AuA|@|GymTcF>K8BM0sd;M$SAMH)8Rh(TozdY2rt3~XR!RO8)T~+o~ zh1zGRKJZ&#tJDf{PO;Sau2UMt^TuLzu^P8&L1dC2vpomtCVVC{Mf~7&OE~L_0nTW! zfDt2EL&Ehzt*Oy?i@yNaayk~2-MpeE9;PW@Bp)3@0W|ne2_O1HR-88H*M|-A3&>S% zWxxIf=s*}>GACYO*6KLjyd=-@y%h1&4r|a;@PKdy*e- zvN>zAnT`o3y_4A|{mM>x(!Mv3Z)>>RhYl+7`{)paZ|}v_$OR1A?Q;s*1ZS)yW7N6@ znGe3bFap2K?Ta&99o#4R(#4kQmx0+uHQLy^kA`G&@`Yufn~za>k)q3NvtOC3K*)(&a7q6T1xU(! zm7dc}jWNlJ%W%v5LP3b&W;uSf&#WFQ`tdns?2YYcaVZxAcMdicDZWG>tmr9}eZ$!k z;8M#3tC^b<>0-bp_peCkrB&UshWrWx8D`$D>B}o3Y@^TL z<{$|@>**$he^@|zdG8*3mzdY;E&Jl-u=NO;P{zs5?C*gX0`F+!gLri6U*B0(j3;l6 zk{1J*#VWe+s#eo>>v3ADo#;~{w2=26JMk<30+8>czTDDDx0k6aO*^$((~BQrKSpeQ zihJ2l#ox?B^q~qAs`OlLLqE3Wa%NZyTY<}8{Gls&mVia5+5MDas6gAw}qbO(9Kl8l5j-ch;6gK12eY^PNT_;!LH?D6)GG`cC4990nFutRv z-uTvHAfwr*WzO|`bFG%mreu7(O^CK=ma87w+;Rfy`2yvjbph0K4T7eFJGKFzXL#vDR1iK?8LPA9}W z@0h75Yns>;O}^VFk{A!}&53=`Qg99CM6Mf^PNQ%#I&mJoL1|eyG?n(HR?keEMRy(` zqdYK`kGpi@bprYCOSUr~qStHBF5`1#uF6&pAHf`&9X|*3q(7h*&CBZ!1RRLgU6xNh zE#LS=%F%)#KjHU7Te-50vjo3>79$*PXX!Ju+=e=-;q>JS3t62B+P)T(xk_h(#>fRC zMU6p~YUATH9>g&5aFpQNUNgOThxvPgex^vG1jhVYam(J41eGO!c~?Jl93};k`0mJF zU(3gQtvG&!{)Brqdv9B(Ht*|Uby>z=tZ|LkhlMr?o5g!CzvA)1lao({7mcEj+@iSQeYkChzo ze4ZT~U?P`uEB~<;uR}IOOr!IW%P=%$8cV6sCzwEeCs0-v(y8TR#CvOXL_Wkle>(AH zZEE%kgOi+_qp)l&p$8Gnm5sI>_ibrxKIIIpOR)MSC57;6;FK6?B8?b=OzYyr=XW>LBC{b?poE z7#r`sY|n$u*h?g2-#j&e5r$OByYLc2F5f1#ouZYq-7vWX9sgj0yQ1!77c{p?GwAO4 z5R>Yj=FY!hVsf+SLR^z+^M(%*HxVYQg1Sa%+O$4>YCz?*5kuxR5X#ypM=TrWB0KpW zspUt~d(X5kit3kqHfr@XILF-jd5K(84;^^ILI%<7M68*MPF4ukJ8{*qac3aPikMKS zu2k`FcMFPq))fPdAKxbZn2;EqBR3-TQq7TVB4*!9A#;7oTI3)5SUz0f2Gn;#*C6R2-?k!ClZbMx zM?Czn@Y|D(c8;rz7YaG-XtRtqvEXhqoAaS8g4&fF|3h_WZq09DG+7!PZugl`yCim6KaMvzt7kaT`Y{);PenFH&oM?HB-)BNi?@c9l7X&|D)D0*`S2Qx3gHS# z{_Oo(N!0TYMA5#>>K!=)-Sb8?`~Tda{H(1<{_FnkQ)E;5%2z&-Luh1XK>&gl9u=ie zpvNbp+=11BM)&h}r{(Q8e8~+a34h&BO1T5c|^!P2Nv95`c(jht5Qy5#tX&FA&?<941Qbf0)`DKU3Q z%#b>HTZmvR0*9nvy%Or#&8c!aMh?~&o0eE_eW#I|GDD1eHox4%uJofMrY&XyfwvQ4 zm;ny`cy*KOr@M;OxAPy2p@NzdpHNjQ96h@b#uscp>$(4rqUXiDhlqWMsnFnGx|8F4wE*278C}{)sJ+F5gmf78DMWt&(D7a<$Cs` zGN$O`2q%m}Pi4zHVT&L(C_`;$>-;czEf=B->G7d$1Uj>M^AIq0){7st^bGg5 zs0c}^PZ3%*2`3;Kzjvh5i!;XbgP0+m@mT(b2P$bYv&3L3z?yt>R`SXZhZ> zE*G@Tdzw93o5C$lJ*0)4>v>K7Nw?d$+Mz>PR=7F7is=?7=Z$dQthOjnw=xUS zLUH??zDv6OmxDKN-%jf}t{Ce2xfgxfZCIX9?KeV(Ke%RKeG+}apXV5gNrpD?IC-hY z(DS=p0j!LyBIKwj#S51v^3Ic+B1=x1F>;l8H9SwtH1Cb7@#yLwa*im%8me)aZoWLv zB1sk1v0*Sb5&ga(Aow=_S_>>|9{&Y^WzpFD z6~0C^C)>}nb5|*K)#XV+Lv+K!47~Jf?R+YHw!9WQS;1N{hqF`PY_oPslfL-`n)T^? zpwU;rUkILRmxyzxJNNPwsD)^abxNJ~mD)dQ2nV-j^C~No+@HoV2c70B5!&Xq&$&M9 zVd*)yao=f(4-n3Qo*@^_QX4c&LnkV2EST^r!qG70ER^)>PW{yt(FffbxK#As{JSuH z70yA+Z$N`O+qt<%{x=1VHDWr3jo5Rs=u5*j^h)vx)*K`gR2BO>v30yM9@Tb4WgSa5 zue&na-?scU%84ui??uB5TeOm5UIj~CLuIAeMwb(w@s2u%NV+atZ5}A6>oSI;E3bG6 zbxAb=Z!8&xstF`VR3oOIyms{LDrm(~@nRs3zktR3S{dcU^gR#mKRn7-lm8b0@jwp0 zEMHHMzwU!K1oKan zj$q*OIvQ&aEw=vv3F%z(jg8>$JWvf}Sj&^P+D683ri+9AjVJr2lh|u>6x_%diV9H_BLnF45=(My>N2(ODu3Duei)oAIdkQE(+e9_(%W>NRd@+(p1p4iHs+ z^js`MtV#ZZv;p%l{&ibclPMBp zX!##`+mr28JY{wEm6Fv6A`}IP^)>2KTHNt*QdZ?T9VN4;KRgFHsPukpu43-8{{TwW z9Cb8W79-py5&_4jwJZ;pWIaKq%-}ryg|bTka_#;0JpiXG46gBzha=jg(9zQ`<+G9H zX2^|qKjqL>1Z+f+f?s@q$iuMf{uDHr)a4hWJF5>7B8a}whsM`D^lLqK3!JLB`AN?`E6*+N9y?p-Mj-i(kNfKt9?2T4WV)l% zPOWaIX^}%?AZN93sUyAOWS(Ki>qoIc_1Dxe|M+Q)mwQy>xk5HtCT1F{V9Ugn(WF^V0;lMAdgX5lU}RqUuHsob^_Z2mP-J)HgNd`fy8KeX@ zb}-st#<(D3H8yF1F6xgo0VZlZ&<1CThV2r6_i5Vj-J{Mw*)%c7bB47!w_l|)%>MwR zipFc+I^(hE_v7vZ&&&y@Py5TbHm;+(kwA{COc=3){lQD8 z;90_>v}^pU)rOHrn>X(=ck4ul1PZi3hmlBnQxTnY8$~ajA5r&*tysAQmn*{xq#~`M zj$4-l8)i?LeZ^5}Ocx70V{4;jlh&KmM=|1CC$hZr5MXZHJ*%bhJ)&LNiBJL=cLQAY zBcahwO8T50uPK{Ggn&x#A2*@&s@wB#Erf?3yb>mTLF86nWZUfzjdxDi>5v6aVHs&1 z&rQGz<&!#+G-SuwU+8KnA1G7NbNbdsrE9_ar625pPrO_x`evFFBJy)+xEzu{om+x1 zY@#Ro-`2KEOPIH*n|Ql!NFt}z6Bi15Frlk5qV9+xZM=>uG&rPadj6LnZ8qHJtV{f> zKSG?gk!o|+CH_<RS^1~y&OFHgC zDJN%gn!2&iYS(eygk;9#B^w<&j)%QJS&}CCVnBf~Hi6UDy6QCS(Z@|Sbk1V!x-Yq? z?$7UW>CF*Ck#9{*hN<+`0yaM1(v-@IBaL>WAAV`>Hrulrk(uu%$5EUDYBmMr#yA4B zMs3{Pv(x_6FhJ?`s@h%CK`4pa3EGQ^qS9KOKI9TN#K#R=u|;n%V8Av+j7;V z=5Y>u!T{RdqNrJ`At~Ml!1rF%uE%6-x@8M7%Vd5OGwy^RTF!e88;ukSz}SxGi&=l% zG?!oT={Ng^lh|u>9bSlSZfE}hRSUP!RC2RxlyBR0&AR^pwN|FmFOBp}@Re2WYefkp z^cvK!sJ7`LPxgg$F?d=l(v!8>+?<%e0MQyVw!(5tb3IQAD|~2H+<8Jm{oVP|r= z(S)Q1HPFD8_V4A~TE;#2&1v;#+*;b`;SxUPmfnG^RnYq@=MlloPxJOkcFWLhko8JU9mpv`PGxsUgjZo@r^z^YU! zu7c*jQoMQ&n;}OLiJdtDL;WhuS1`MUx%nji_x}K{v`~uK64OMY+Rhl5lvqd^BX1w2 zL9JYy4Ho82!J}l_r1izE{_|> zvQQh7h6lcCJ9ha`x=>3tE#r~y6ozoyamx;w`c&F}T6oX<6-gPk$!)DvK&gSVZsiA_ zMNe+SWFysDor$|AMFJ+rKO(Tt)|NbZe^`j7ElJz&OYF+^Li15eagcJ(fB{9q#Fy7b zGSSD&7T?EUYAq@kp5c9L+?R3znV7RKIvU#2tp%l`vW$?tW`@h92EFER-xYMp z7XH&yjakx2%uj)xrFkFB*P&cUMT-|zW1MYnhPf+JQq=b_6`#O-^v#i8%W>fCD^UIQ z_MH+Aq{iDx{6%wnCVGx(9&_N<{pHB_72aC-OF^}sPwcU9jNf<`ETi+M?Ae^I^|770 zw&w7_jdzRC2f9(oBR%#pH&(Fl#oU81PYi>$NnFz8mtbz&nL(=U#)YZcjLB?B^+Fns zSJ)Fwr@ED`?hs|*l}D*VO2ZR19_&yBeOPYOCm-yZW%P`ZGnEe*Q6F8*;<%H{*(#rE_>mwXxen7w;NF$vjlbFrvA{B){sL=|l3kpbnPJ ziopk=LHwyLNNqj`AKVq{!{JApJtWERGO>vlw_1`m5=K<=4_dMaW0Xjl6;43fea}3? z=Y#1?MW>}~GGrXkBNtPNvF0Jc6=LwI45z&?D`}H|Xz4OQ>xnJNLOr^V=Tx*w4X221 zEm)nG5oLa>{{YrMr6;J?hZV2dwWhRy0s}R4zAmuea|@{Fcp3IRYnGzrM_nh(W7(&b z9BNO@*>giaW_`Vs0bDOrxe!S&`a=QGj8$OU?pThVU>}7vvwM@mXq?)J&V{ffRdnWin#tNQP_BB&MO_Voa z)DlUDsj;okL-3BL9Qu0MvBa?S{{U%gn()%Oyi1iORuhs(e`*vP*iNF3=cX({*EIMW z_ha;_6DeL=?u_EJS}`gSNuWm=aGOgHO1G-PrYGN?3jY8qlf*zSoMy+| zZ|7Q4eGKZZry+9V%st7XG3HDd_0JX5v^lqCwVIgi+dp`rH2D7Gd*N#tJF{r52rj-@ z0(#VUJEgi<)MsePs*37Forc?6hjb0b;mui9+Neh)FwIjTD~S4ROOBv$Xyswdp5&5^nv85ZOqe+7S&&`J z46(sD<~QJ;-qo9BsOWSD86)zi*=urKsDzWh9eM*sf_(AP zMT>1nTw*J{BY%0@Zhs1)b*IQ!%MJr|BN;SZi{0#W&T5ioQ>h5-dO?|NL3k$;05VYV`qzq0s$X14(n)nGE!PZ1 zK2s-%x#;&l5cI=v(NAp2wBWJ~kzQI!B$9G{>a0h%eGf#w@etQ60D&b~Rzd-D_o}U| zOKWRu03Rx#B#!mGBV>5^yhN(YmF$aanB#><1wf{|?vpiEFjDAfwY+z*JT5c1aZG}L zCPZ&l#RyZ6RB>*G+TqioRwB22U#1w=JLnUr#F+kc+BK&&Js#!saU=-e>}IQ2%CcD| z(~;$YLNc6nG+~H8mOiyLm<6IfgoKcT2JmnpXWusW72PA&Nje*m0B`l+R2o)Z&g3iizxR&Yk}LZ;3x!#YM0BW zS}Qr^sRFS)aXu~}wjPHH2pnP z518{$a$y9uW!t$#R*s{B2*qOS+JYi9NW?kDF;tLLt7T(G$59g6&Qy7ZH7sLpPZdkU zcFc^ICm_fQwrVD>jj(lOrkmKg3`u-Mw^GY&y_2A*Ztm`8l-t{~$VtW>a7}V(eNt0u z>qK3a@LDK}&Pe7yg?d$MJt$e9I!L6BQ~XMID5t3nQ(kPb4Uw6I_mMvT0QMUr@~XFb zw5UumJaV^kcp{6WH5!uJL}*-HvLTKVjCy|Yaf-~-*v%$oGr|GnpO_jiak_DathH%v zGfHHUBrDv;`3AI}>Np`X2_bY*)9#vfNXk_uEfOP|{wr9%dCGPPDpq-z>bC(*asYTy z!2nTy#YU1^%(H0)wxs2x5JXcJcvw$i5L|Lm ziq<}*b*Mpe!T2Suff>2U+uaY>_{)(SlduS$!&5$Dxj`zMU;d{Q_n zPql7hPb6zRWgG$x5x5{y0+>l4B?l|%S0!AGigybb8kuphg)5RlCa+x$>Q#nEp{6Sw z4gS0>JV{{aKh?MrA5h$XTCw6E58K^F^2La*2iI*va-8Sq1M=dyTF~?p)GgPSK9W?s ze7kaeTR*J>BGjewWhb`oN3}D=E3rd*qd{o0WuA=q@t$*5+C=(N6V zfj*p?ucVUJ%B1~j;`B3;)YtQOAc`^dH6$?r00RP@*%n4M_LgMa>-WzhweI9qz#Q%5 z)^bSF4eV!F&*$2sAG|nksH%EH^Ew`)LVsH4kVPy=OPkh?I*10++hj0(s=QZP#l zj8l%~McJYqKUINc5fG}4)8@_(;aJy`MQLzi6I@B%L{WtVeQ{kUTa0F|j<$G~;u4Il zf;xZ~`PM$2d~Trq>a1*?Oz)CMt|&R$ab7$AZzy9F z7OMXMGA>!_5?n)xq-Al}BrbmeTyx#u+uV^2u#MFH_T-WH(Wz3Vp0PSTPTl~GJb5k# zNI}=}HJRqeJR)0*g3aAaXCH+IT+)fl>$;)23lw{mM^IdoPS>o_kDqT5R3CeeKDDGQ zVO~wG3>q<7oMB1^Rz^|t3}%7Zqq(q@Ug*$DrwkKoeMc3A;f+mgt{T=>!cF%{ z?A5Gg(BiK``lE6g2z{@?_o;6!i22Z9iq~__X~mY^fQcJD>a;E-vMSv{skWx7cSZeH zXP3is6zH z%%pbqso3m{p;L3Au(}N-WllzGnDG9j%XGH#o=@E-gvhBz$n7<-8$~jA4gG2jUSM=3 zO!7{DTBDIIOxqXT8q^wlU5hWA`%NQzKJs#mp#C`j02-|fB{|Ds)=^w) zcfw}ncXADMnl-#|MnD{gEA`rFY#~bS?9|Fy+d0NOv@OT2aeooKOf=m(JvJ8q07$#Z zd>^`?^ZC|Ol8QYnJtsM7vDsvJ-DuWLe{UJ!*Dgavq`rM!1NW* zbbSnAI*i%8*KGrsE#-T6=*03XD%)-R-d)YE(fm#aN}INH`xsMKk$%p|>JRr~o-y~G zP7Pjy%E}nO(C&Poqdb~vcQBo6=^YD9Eo^PhU9FJ^-EomvH`=Y-jk0J&_Ue9I^PhSg zk{mGdle~iJWYi=W2*7>Nje}F^5NTIZeWF0t?5E`irhRE{YbP2?$vc;9v}tW(-md8* zbq+dvWLAo$-FQExRng1M=6S^>d1p|xgn%gl(CCN#2}il6X)U%G*VS`gl@;zIf~&mQepTl+ zEQ2ds7?r`>(t;_7og5KWgOxaFH7Fs$w$0ddAqUiN@;a!Vi~5be6ICLP+;vWsIT6 zxTi*U+bo0cAsdBHHPx8;Z0?Lb5e1}8B$?~Us|g+hfyc~1710!7DG*=WTxv3nz^p0v z6Z)Tep4|zVK^{H4rS~X0_m3!0Y;-s{B=Ajpps84P<0zz}_dH%I)#0j%hX+Yvt1Rtjr*G=<8<*2P9 zwV~fQ1Ly@wV=Pvu%zQH*K+R~EQzqWVibMXCBR_P2O++rd+169Sk+`B5-IF7Z%ZwV9RCYGBjBX%()5xltCCGFDbx)MiK-Py!UjqW61d~qWSb}!_(|WNr z8rP6|i#DFoCfidC ze(a>x*;jTC01WC*|b+b9ShvY{>&hyN;xF{c3>WX?s~4e`jI)ek{_p))LQ7 zOJNh45jO7Q6_ni3?PMR>xNhHzIlW6pyt=(>$tPKUZ0rDv-!(qcS2tKXDmF;LgItEm z3=&$*4o2>szZ$)$X>i`ANZRB0g<7p6l38UZsPp4{FtaGMxB^B}KJNfyj=t5(UfE4& zF4-53%sLu=)V7}?+PuQj9E$Udb~x@w|Fv zjCSh{&gB?8O5pxxxeAk_HDwiKdaa+u-74A<44O^Ui`~9VpVqvloy_HVJG0ZZPl=iZ z^cx`4br=|&k_uq{8>`G{ZskH!gSuyN55y>8afmLqdSy@bt{#!A#8hXkNAZ6|F)UN) zw@j)q2-%`1pxA?u`^tM>$(QjG$v0a^hyQ|2mxtWV?yWI8D@qa{!?zXVh(Ek8+ ziV^<+p;wVo=3#f-_KHgL&VsGvffFp)9qKJgH<}?7W0pOAC>lC_F~h-YDxM5u`BiNd zj8R7mpK)HD7kDGitiAShqm`z{+*XD}5&{V|EQ2(}Rg;_=dF#lg1VOusM_dv`06Cm8 zm1>2XAdd71<@|SMi=j;`jD;YKeMM||o&>+}#pEnPzmmjf*A)|58dG+WQrAqxQSuBHxZnPKqu=@bSb(f=V|$W!mcv5gvuAx)VE>ek`6;IYQ2<)XpcM& zMO%&bGfvx$D#Crsf~B~rEE!tm;(m?DtA@G}Jsre>b9kx$08IcNol9<;b!1=qYCoN5 z^h7OMJtjZ6DHHAr<2wX%O_1|a$|+nfL8&F>Y8gnxyNr?Zbo3QH+UGS4(Hw7yEd1Fm z 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 0 and allow_bnb: diff --git a/modules/modeldata.py b/modules/modeldata.py index 63130d041..0105771e5 100644 --- a/modules/modeldata.py +++ b/modules/modeldata.py @@ -31,6 +31,8 @@ def get_model_type(pipe): model_type = 'f1' elif "Mochi" in name: model_type = 'mochi' + elif "Lumina2" in name: + model_type = 'lumina2' elif "Lumina" in name: model_type = 'lumina' elif "OmniGen" in name: diff --git a/modules/sd_detect.py b/modules/sd_detect.py index de30063e8..f011fd77a 100644 --- a/modules/sd_detect.py +++ b/modules/sd_detect.py @@ -69,6 +69,8 @@ def detect_pipeline(f: str, op: str = 'model', warning=True, quiet=False): guess = 'Sana' if 'lumina-next' in f.lower(): guess = 'Lumina-Next' + if 'lumina-image-2' in f.lower(): + guess = 'Lumina2' if 'kolors' in f.lower(): guess = 'Kolors' if 'auraflow' in f.lower(): @@ -101,6 +103,8 @@ def detect_pipeline(f: str, op: str = 'model', warning=True, quiet=False): guess = 'FLUX' if 'StableDiffusion3' in pipeline.__name__: guess = 'Stable Diffusion 3' + if 'Lumina2' in pipeline.__name__: + guess = 'Lumina 2' # switch for specific variant if guess == 'Stable Diffusion' and 'inpaint' in f.lower(): guess = 'Stable Diffusion Inpaint' diff --git a/modules/sd_models.py b/modules/sd_models.py index 8851c5cbd..a9e916d74 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -290,6 +290,9 @@ def load_diffuser_force(model_type, checkpoint_info, diffusers_load_config, op=' elif model_type in ['FLUX']: from modules.model_flux import load_flux sd_model = load_flux(checkpoint_info, diffusers_load_config) + elif model_type in ['Lumina 2']: + from modules.model_lumina import load_lumina2 + sd_model = load_lumina2(checkpoint_info, diffusers_load_config) elif model_type in ['Stable Diffusion 3']: from modules.model_sd3 import load_sd3 shared.log.debug(f'Load {op}: model="Stable Diffusion 3"') @@ -314,7 +317,7 @@ def load_diffuser_folder(model_type, pipeline, checkpoint_info, diffusers_load_c files = shared.walk_files(checkpoint_info.path, ['.safetensors', '.bin', '.ckpt']) if 'variant' not in diffusers_load_config and any('diffusion_pytorch_model.fp16' in f for f in files): # deal with diffusers lack of variant fallback when loading diffusers_load_config['variant'] = 'fp16' - if model_type is not None and pipeline is not None and 'ONNX' in model_type: # forced pipeline + if (model_type is not None) and (pipeline is not None) and ('ONNX' in model_type): # forced pipeline try: sd_model = pipeline.from_pretrained(checkpoint_info.path) except Exception as e: diff --git a/modules/sd_samplers_common.py b/modules/sd_samplers_common.py index 62bc4f55c..0b50c5c6c 100644 --- a/modules/sd_samplers_common.py +++ b/modules/sd_samplers_common.py @@ -9,7 +9,7 @@ from modules import shared, devices, processing, images, sd_vae_approx, sd_vae_t SamplerData = namedtuple('SamplerData', ['name', 'constructor', 'aliases', 'options']) approximation_indexes = { "Simple": 0, "Approximate": 1, "TAESD": 2, "Full VAE": 3 } -flow_models = ['f1', 'sd3', 'lumina', 'auraflow', 'sana'] +flow_models = ['f1', 'sd3', 'lumina', 'auraflow', 'sana', 'lumina2'] warned = False queue_lock = threading.Lock() diff --git a/modules/sd_samplers_diffusers.py b/modules/sd_samplers_diffusers.py index 63740051a..667683eb0 100644 --- a/modules/sd_samplers_diffusers.py +++ b/modules/sd_samplers_diffusers.py @@ -306,6 +306,5 @@ class DiffusionSampler: if name == 'DC Solver': if not hasattr(self.sampler, 'dc_ratios'): pass - # self.sampler.dc_ratios = self.sampler.cascade_polynomial_regression(test_CFG=6.0, test_NFE=10, cpr_path='tmp/sd2.1.npy') # shared.log.debug_log(f'Sampler: class="{self.sampler.__class__.__name__}" config={self.sampler.config}') self.sampler.name = name diff --git a/scripts/mixture_of_diffusers.py b/scripts/mixture_of_diffusers.py index e3d6d20c6..21139e6ce 100644 --- a/scripts/mixture_of_diffusers.py +++ b/scripts/mixture_of_diffusers.py @@ -1,6 +1,8 @@ import gradio as gr -from modules import scripts, processing, shared +from modules import scripts, processing, shared, sd_models +max_xtiles = 4 +max_ytiles = 4 class Script(scripts.Script): def __init__(self): @@ -13,9 +15,31 @@ class Script(scripts.Script): def show(self, is_img2img): return shared.native + def update_ui(self, x, y): + updates = [] + for i in range(max_xtiles): + for j in range(max_ytiles): + updates.append(gr.update(visible=(i < x) and (j < y))) + return updates + def ui(self, _is_img2img): # ui elements with gr.Row(): gr.HTML('  Mixture-of-Diffusers
') + with gr.Row(): + x_tiles = gr.Slider(minimum=1, maximum=max_xtiles, default=1, label="X-axis tiles") + y_tiles = gr.Slider(minimum=1, maximum=max_ytiles, default=1, label="Y-axis tiles") + with gr.Row(): + tile_width = gr.Number(minimum=1, maximum=2048, value=1024, label="Tile width") + tile_height = gr.Number(minimum=1, maximum=2048, value=1024, label="Tile height") + with gr.Row(): + overlap_width = gr.Number(minimum=1, maximum=512, value=128, label="Overlap width") + overlap_height = gr.Number(minimum=1, maximum=512, value=128, label="Overlap height") + with gr.Row(): + prompts = [] + for i in range(max_xtiles*max_ytiles): + prompts.append(gr.Textbox('', label=f"Tile prompt: x={i%max_xtiles} y={i//max_ytiles}", placeholder='Prompt for tile', visible=False)) + x_tiles.change(fn=self.update_ui, inputs=[x_tiles, y_tiles], outputs=prompts) + y_tiles.change(fn=self.update_ui, inputs=[x_tiles, y_tiles], outputs=prompts) return [] def run(self, p: processing.StableDiffusionProcessing): # pylint: disable=arguments-differ, unused-argument @@ -24,10 +48,13 @@ class Script(scripts.Script): shared.log.warning(f'MoD: class={shared.sd_model.__class__.__name__} model={shared.sd_model_type} required={supported_model_list}') return None self.orig_pipe = shared.sd_model + from modules.mod import StableDiffusionXLTilingPipeline + shared.sd_model = sd_models.switch_pipe(StableDiffusionXLTilingPipeline, shared.sd_model) + sd_models.set_diffuser_options(shared.sd_model) + sd_models.apply_balanced_offload(shared.sd_model) shared.log.info(f'MoD: ') - def after(self, p: processing.StableDiffusionProcessing, processed: processing.Processed): # pylint: disable=arguments-differ, unused-argument if self.orig_pipe is None: return processed