From 8a8964b2e5bbb0269fe847fceae0084b71ba213e Mon Sep 17 00:00:00 2001 From: da2el-ai Date: Sun, 23 Feb 2025 23:35:00 +0900 Subject: [PATCH] feat: Added D2 Model and CLIP Merge SDXL --- __init__.py | 3 +- docs/en/index.md | 9 ++++++ docs/en/node.md | 19 +++++++++++ docs/img/merge_sdxl.png | Bin 0 -> 71832 bytes docs/ja/index.md | 10 ++++++ docs/ja/node.md | 17 ++++++++++ docs/zh/index.md | 11 +++++++ docs/zh/node.md | 18 +++++++++++ nodes/d2_merge_nodes.py | 70 ++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 10 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 docs/img/merge_sdxl.png create mode 100644 nodes/d2_merge_nodes.py diff --git a/__init__.py b/__init__.py index 6c4f068..271276e 100644 --- a/__init__.py +++ b/__init__.py @@ -12,9 +12,10 @@ from .nodes.d2_nodes import NODE_CLASS_MAPPINGS as D2_CLASS_MAPPIGS from .nodes.d2_size_nodes import NODE_CLASS_MAPPINGS as D2_SIZE_CLASS_MAPPIGS from .nodes.d2_xy_nodes import NODE_CLASS_MAPPINGS as D2_XY_CLASS_MAPPIGS from .nodes.d2_refiner_nodes import NODE_CLASS_MAPPINGS as D2_REFINER_CLASS_MAPPIGS +from .nodes.d2_merge_nodes import NODE_CLASS_MAPPINGS as D2_MERGE_CLASS_MAPPIGS WEB_DIRECTORY = "./web" -NODE_CLASS_MAPPINGS = {**D2_CLASS_MAPPIGS, **D2_SIZE_CLASS_MAPPIGS, **D2_XY_CLASS_MAPPIGS, **D2_REFINER_CLASS_MAPPIGS} +NODE_CLASS_MAPPINGS = {**D2_CLASS_MAPPIGS, **D2_SIZE_CLASS_MAPPIGS, **D2_XY_CLASS_MAPPIGS, **D2_REFINER_CLASS_MAPPIGS, **D2_MERGE_CLASS_MAPPIGS} NODE_DISPLAY_NAME_MAPPINGS = [] __all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"] diff --git a/docs/en/index.md b/docs/en/index.md index 38d44d7..7bb801a 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -130,6 +130,11 @@ If you have installed any of the following custom nodes previously, please remov - `D2 Refiner Steps Tester` - Node for checking steps +### Merge Node + +- `D2 Model and CLIP Merge SDXL` + - A node that combines ModelMergeSDXL and CLIPMergeSimple + ### Float Palet - `D2 Queue Button` @@ -142,6 +147,10 @@ If you have installed any of the following custom nodes previously, please remov ## :blossom: Changelog +**2025.02.23** + +- `D2 Model and CLIP Merge SDXL`: Added checkpoint merge nodes + **2025.01.20** - `D2 XY Seed2`: Added new node diff --git a/docs/en/node.md b/docs/en/node.md index 249973d..a6385b2 100644 --- a/docs/en/node.md +++ b/docs/en/node.md @@ -842,6 +842,25 @@ Output text - Node for checking steps + +--- + + +## :tomato: Merge Node + + +### D2 Model and CLIP Merge SDXL + +
+ +
+ +- A node that combines ModelMergeSDXL and CLIPMergeSimple +- Allows comma-separated weight specifications for easier use with XYPlot +- In this figure, `0.85,0.85,1,1,0.4,0.4,1,0.4,0.4,0.4,1,0.4,0.4,0.4,0,0.55,0.85,0.85,0.85,0.85,0.85,0.85,1,1,0.65` is specified + + + --- ## :tomato: Float Palet diff --git a/docs/img/merge_sdxl.png b/docs/img/merge_sdxl.png new file mode 100644 index 0000000000000000000000000000000000000000..166775990344c363465cd24bc4060823ff8810af GIT binary patch literal 71832 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
jyypFWWI>4>1om4?!nUcQi5w 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

Z*|B50 z#v#G;#tk-gtS^WK^3?3@1tbhD0O`geCa0j#*r`hV|AXxUPJ$)A-%6m+urTP_&Ve9$ z;wb2}yYGXSd2tsv1cvjcr=`Wu0aBE>cHFFBWcnOUQ_4)&&Y|yHM$@4ovNiT&5IGeF za+HrjtUVuCDFO`O-UB?NZKrbID#TZluflAlhj~+aSwZ_ZF6cQ2Y{>23Yah87~`7)sG-L@Lajh&68D)vF5N1(SSk zM68M`PyNVXOmOnWUl!L$MLm+$F4(^6TA~3{SF*aG=^F0{I__4kY5&#fO8C^TDG+y= zfPaUDM)TTT3Mx?|8-&mqNN`YL{ekvId58Q_k7v{zDo$wq3dxdT{uo#s>eIASHz) z)@6_&1+n1AZl%V@OUlUHHoM^LOdQCar&@$Cz$Pm+7%rM9v)>=p)8j!PDjn%NCf%H! zZ=|Qcq$%?~wD0L84E=tN-eK<4SqwVvaMRtVH{svx?E&9`1viub0xbA`B53~918Vpa z=|RB#_BjK@XMjW<<3q-dxWo+sI=DdrP+z!+g|$g?ihzDKIra zDx4F{1l3UHJ3SWo6-;S8lB7P6+9u!}HGin=zQ<5)*Yq6wi6Dcr_fG~Hk1f`?nNr&@ zF~s@UDEBV>*~{OC!c0qWcahC6E-mp}+uFuR-4F#N=g@8mmK`v+A`yi+Cq6;@TG&Rw z*f;Sma5i%wW4mZ#a#Ed=2_xL(g`2g@gQx&z>>hD(O~xgbJ{SzE<)}75V8HBfO-$lT96b2Sng5Xm2yw9D-Ukodg9>PPH34)9uvMhFi|oUV&q;Tq7|@@=-o3kf=vKL)$`f?WMTl1UOvf_~XyHxLDfQ zn5GPClgn3asX54sts~XoKXAbKZ?dz=3_>VgPLV`IzRES-D+5y*^bJxfgs0{Kthr9D zq8RN9lrvs&9Wby*M{9e|%2QE)o_GS5`V}LB2k3@4l(pinrC$ zx^fyzei_D~M-1UxtJnWz@de^JmW&c?9UXU>8w4FFCJl&=vjs~gl;H2pkAOce7B)`> z<*4zHm-}Eb&1bx_RJ!*>4xlPLV(Cw^adEXzTD(M^a�e%>F2*)uZtj^MmI&jL+ir zz%{43M}r?Yc>$o9-YKPoBH&!&GWU=APSwXi>`)9n0W9HeSx&xYT=|CckP(prp;{E{ zC*P2m16atM<{9Oo1YxHRjPPQMWbFlL1$pI}*#(HcLleki(S(F9+sDoH#Xv_lEafI+ z%5sPExSM51je(fCm6ejDB>$Nj9&LmJ$Te92`VbQp^|6@q#%sMCIu#C;Lr3qGL7xu| z1L=w!gX$CD3d{Qgnd43oj5$7p(Xx{GLC%@nN)3$I+ZCDSDXZ-c<{l$vGi$9*^eLF>_dA*NA&U;~f~px7Gu zeaP1U5H8D^JMN({TrglM}VAt zwz0k{M^k_GM@(<~qON|yRi-uYpc(qW)(ui(8(tnXE0GWrJ9>a836~^hZrT*^K(?3%d}ew2{ri+tIB-TY7Zn z4z2wQZOkDDJw_R)QJ16}CtX`lxJ-wIyR-~3tsm%AYD&SknOiEfKeYk!)9DDr{nv@U zuCTw|!qHyM+UP0lcnf~{t7p6thiTYMLmDvqXtH=(M{KobY)-eeohC!n`TOudu8Y<2XL=t4J^QOo;bYi`cW&nlY0U!rw$ahms;-?6FYI|Uv1U611Obf1~AafOBKUMFBvN0u`0=q`*!xZ6R_5db+0wxrJliqeTJPtc=nvu3v9?^|wH7U_QhuybuyRQSYiBUQq#dumG4=bUP`(E_bw8{koGl z3VKiZOrY*tBwABIAC-o@*pe~}M%dWrt`d&O$OOFy)~0b1hMJ{x05HyNK!zG zq@X|}M_vPw&Y-+;dEYOJ5ndhwZPJB#){tl5&gJwiz0%a57qvtKQ6AmuTsxQWsp4%+ zr-Ic2S!+`CRq%%%Pj6F#(8C#0tUDJeKco|yrt2|Laqq0Tp4H&yKY4tsQlL&C?{!5} z@OPb0oQNL322Qi9Mpk@<==bm<+&(HpnjPo2jvtdmovk;2BzC5xy8KI%<6?X6cNz!H z#(7KANXxkgqD@Y3KNiN&;u{igfUT1FuD8cTM^j>;KK=Hqe+nWYv#5i6S`CFYPj1>8 z^8jEpBjXa@lQK8&q)IB=5uXVd!R_*g>j@yeCT??(HtjcmbHHTmMur{}m#B3ViGR%i zWK6f`%a!wTzVns6$BUHWtmY~2?X?^c7+eI+Ew@5;FWA_MP=z0o9j70fP0b77E#3uG z?GOQbQ57cXMzUVitlae_H7MFt%YZIJaT6B%09cqsn6*i3~)K}i@b=`IO&iGrivKA`xaSHY>qOh@Sw9XQnPJ?H@R zi?FQMp`oD=mj&}$9aiyr{rT!6rm={92TJ9=PiZL#Bz;O=ug@13WFmzK?W-e(r(^7=mw`M9B(EuOA~PeaI@CN1#Wq%CaPiR z@2}j@><7OaRKZ_hE)DXHz{;!|z}E22e~v+JnXSDf!8NEZ)CnmOpzr8&bx_ddI_Y<4 z7=$Vh}7Y-A~{ zXDvV=)Q>Bc^!-M=&yw{Pp>TzsG%KT7pATu0@WwYN3A&T`hotIK-zJptLORn)O zPzB6Vc_8Jk4+>}c@zXniz+QuA1}>WW7uQeg704rz8_{ll_7z{pO}tepo?IM{7wc

sP z;Kj!-l(gqRD(-1=)P37}N0UfSfXXC{09R+svGlF&-BY)=UdFDRo#O1)%UF^)ct749 zAQBflHMJdlUK|B&TU{$G=sim~W33D{wkr|!jzM0pcKnp2XGwp`P$El(2< zv|V)MGbs0n$sIR3-sw7CE^`T2-2@kJme*xxo2EaqBYL$^lZ)IuXCxS%AxZ7amoHEh zULViHb7(eZFMuAkWZ0w#r1>DDh{#0_ga7{e4~)c*RlO8mfUf$t4qr!2m@IE^xcplNu$$xrh0vyKCXaLn!ap2%4F zwLxD#Mx=5}fg$sVgweU9kIpX{g1?pjTRLOGo4x5ztEys8b7@L`dYN0~Ry=akqOH{{ z%Z&@$_SEr4jtEst?v3z3Oy&Isde({G(kh%$TN5kKO;jUAckOa?bv;@#3gV#qhZ(#K zki5J#O^ZdsOGb(5=}Iap=ic&6hzbcEwxQ9-lt29=U)ZsiN*M%=q9xMUO=jJ}HF(kL z4|$mCZ~$JlLSA5Z@}*VK?&pfQ*z2omV2^iUB19b12+X5Q7VTpIl)t~M%EQw2djp7Y zo~a2U2OpRqQuD)5T|})r7;)fw8AJn64@TdNjQ=TsB0hJUdkFy~lekTnJ$T5;<)g1( zPfkkW+Xm$z_s(OXo}MIP#mHr9 z%OR-TbRI$0I+((W(f96cKU32PGk3>0SX~2j!~vRM;0%ajB98HCisyWuBso%1UJeMi zEI5R%s(p^N66MbD&J7iQg<AUoI;nh)WUWgywU@PjSk;a&)@;X{Mp zm)Xv(%$k{xPmm@t3N99L007qW0ABl~lR@4xjb^I&0TGcan6a$@RZ#MrNX!Fi=GXs0 z!Z;I(hmDQdeQY+2N8vI5FW_JP>j+m74%~NnA7m04ouEY#oNL)aOx9n)y`*i<-AH^ z1lT1Wx3o;$x*c10+fYy(6AD}A4vd+tEpoA_)lWX#)%s_f7kozB5I`b;E|P8*cTB)vDM}pJj_QJH?@tQ+GL%{GNUP{Qx74}qUVJ|Se1LH9oW!?Hc`*`tn z@K5kGd_A~6$fL|6$`Q=25u)}FJP}61k#|@Q=wx9BnCoXio?Ux&IE>YX7k}>z_AUIZ z^K?$&bU%oqrl!^!6u-1BaMv;(hW6$2blntk!7g|5EfhXPt zG<#Y^vNwQ&q`|lk`Dkogn7{T^Q1z*iu|-mXQwH|<4%@rc$3p-dRuc?!bI9O;^TJqH z_ZPD)p9zW%#!MLz4h-#tR6 zw5m$v+L!GM$6;tLk$DjZN1w$-Be1@zi|T!mNIMTyHw~~zLm)%ww#A80;DSG1u<3%I zCM#^1N4Vf|I5yu`WTj2r#;oCc;>O(HiM|+Zvf4WmsHXmKVK!(ZN}7J&aa}4Iq&zSR z9tz#3Ncxs-RwVMp)y+4Uay7$$$>On!ARcVN2he@ZHjVGz?Ugk!H)lI?#Y5!Y%rX?s zLl5??mYr@Bnnm2Nd3F)|;2@8Jw-K-s?=h9YJng);54J(L){po*2K)PP!~SSd2PHn) zKQvlDn*v;!GraQyO9u_1qYrk>re){Y+Q7*UyYPB*aRn_!0AlofO zF=j8YfA%pFo=pDslRPL&WX3}gDyVgwh`#5uLZ${cfw;}2t26H4#lPqE(~EDKO5kb9 zoAuc8vL~R8)#vr@Bh9r3h@py;FZYZHi_b3ayp`dr^k4`=KZ5@>*Jv1Dhp9nbD=V5| z-}3q0ezjFcQ?$31o$GmXFA+e+5m*{zz~p^RK-Ai-z}nB!SN@}ONm(mvH0|oy9FzBX zoqJcSl3MrpjL6xXHF@;SR{uGb_tq)`{n;DnUw#Wq~X1@e&#LE4BG9* zVDooPfzVW|a_IT|SToWO_kr+RO0?%G@T7Hj->`WH6+2{hLRdr=N>w#5brL4B8fy?2 z?Rm<>1B=5|?e#6J@9J9qmMsNdT~OHzd-PZf>!q86kKM-RxgQ>^P8FwaLAJyLqa(hT zFM|vB@8a;B9`oMm%F}JPg)=Uz^{0!LXqN+0VAJm5UG^mVzoSjQ2Ut27X4*oD4%4pw zUa1Cgh(9`3Pw(*964M2G>y8e}YbQ^htO-zcC{N+`gi)-76_6MqW)=tC>Wfmnf8Z;D z3IC^%0E(f1%}$Z{Mko4*;WlM#D7r=t#?lTn4Wv`CTM|5pu{z$qz5>yWS$i;F;t(Ws zi}~%{+poYZHQ7~JUfx0%Wgc++IA>>I5}218`GKkk8i{)N4z|(K0@b6a;BM1x|X1Ll;Fg)I1~t&Io=uBLIe zgnABSI%+5w{%K8pdTREE;2Cxgo0#1Jxutq=JVGKIzN0X0y`t(zYw<}PR~m6t%!3JjBXeHs{` zXD~^DG-nvT0568z^8?X%A7uM?mQQ7M`M0ozJw6>!{oo|AX8uxO-*mfQb}HG`TbH zWMK&=wBHH?$=L~UY5Xx$(_qS-a&;WDU2OPQuV3>+s8>`HW^|MW?+uvf$rKf>DI+T@ zF3Eg1`aUut;GXeP;d#ShtW}+%kwtzfse6p~Ka)28Uhu#g^hc}{*DV5^FlOm>FeNdK zwFN=c4%{_v@)HgI#3k+EUS5t%s%{U=CJOTNgT}OVbPjrmNFGMPh^H_a;`X2(L=(r| z#5l1NilKI@L$J~<-76TFZ4M;>Y^e@)1}Z12)PoIGj17u3cJ`|jS)`r@9C-<4LnmC$ zn!sT3*|TjQ=)Xs7xOOV*7($Ho{oCMeXWeH-G7E~g!7l;_q@_DHX+Hcazfvi|1the^ zPZ|%LYX_U1V0cJ}xHOH|XF=9@8@}~8fo8ui@5VrUD708>18qjys=#rogWB)l$#XM( zH%9b5IOcD4=Uwx@vL^Xxk3N6V@+`D$BEg;{Djx)Sjoesh?1fXtRWx0}4kzf3~06Nn0a% z;Av0k4tw(QaE)#*-(N+@~+uG>HB7r^QE|9j4l zSR3%yx!Kp_!8}xQjQcsW#+{ML$!oO2lcm20*zj$l zb2|qiFVk}7|Cf20!q>EQyJU?=Wmka~s55rySHg8iZ`=TU!0&#${1ve3MD%Z|a~xdH zApU;G4+(TIHvH|TPu=5n{(LP57>!*{`MW~YtQ~A_Z`QwmFNEsR`0IUda~c`|u(G6m zfq^KT|8Zas{wvH8_BLk4r{$bz-M0~dAJJ*S5ochOHYV|hh&h#eX z@7%;c|HYucXmU`|B}(}?+1Oy&&IOI#z9$ee1sfMp4Lum4-f%T4fV6H{1Ym%9|JmNm zEQJVq8Tt$`c!#*_*RO*V1J+vPr404bxesG)b#!QVlQ2Lx4MB?2(_l#rUxcYL9H75n z?JrgKY>q8XdRthqn_f}qMnH?W$Px#UiTh5Upm5pos?+>0cf6`z5^Lm^A8MR+^=}lTXBG9IUR2c0B#bxP$-7BCcn7d;qO)$6}v5xERuA*^zqA= zhfLHtwr&mO;Nm*;5E2STMn@a@dF$a5fQ_h_xsefB6hPO14K#Z86*6jcOR;D&?tryr zeJu+7GQq4tch!iCGhTAyJs(6CmjLQf$nw6~*_YmWpcjz5(Zs(5x<;7N8Vw#FQfm1D z*3UhioedeqL$KWP-F4xQD9u;@5T%&`aS>Pi>7#XYQEEEoF~OS9sD@)IEu?$*U|1O# z0;S}RX1xRK!Oi`>dpck$9}B-^@-*2vJR6C}=OD1~`0?ZFYHEpmmahB6#ogW}@2x*5 zy1Q=Q$Ws#Btf!y9e}_NHi2a5Lf}UG}!cQ>rUKy}?B64}hzt1+t!S?46$_fH4HFb^o zngK{7_($0O&tT*XjIayj#KsW<4JP{Tt!##6wPRA!(p0(qOJ$Br?==Lx2LqQp#x zeCu5ufF_2~#OrBksj9y!Aqjvfv2ZE?tyslvtgNx>w@1>>3KqIUVO0KvJFaWhZn? zt3=yT0iCCsNvrZGtfphhYQVxLkPWop%*>}xS5JK+M{5xaCf>ax4YuytsTfvH&TEj= zRpDw@Pp=rlpO=3MwrbDStgO1IJ7N9KI0mI3fr?6G#L&M7o+Ex=LY#+#JwTL0OuqG3k zo|quZd0bTmd?RD_*OaK8tgPg(qT&z+JGxW8R|TzIa#B(kziqcAHn-a~2L)l`RmR&% zeLGQ_WO0yW$Kd-fUz`Qi)YMA#iY@BJRaAIvsjh+)o&=E`?^dvEzW?DCH72rV(q%i9 zSUTM^6<;kP!JYihHfna5jQq_P5H2B5I6g^nVnin~Bc4-L^hW=`mI?aeQ~3o2Z*Pph zd>JZvvJYf3b+-rQ`H%;n!12U~B!MW0gB@^qTTtKF1}tAQYwNw{r=tjgC(C!LjuDsI zS^CAAk%5$wapF18%c))Ul#AYi_{)Hz4Y1mRI(EvEk6^5{*E&grn~N*4b-nb z41CqjL7Q9;`C{UOW`?l5o*2A@sn6L}4@$;%&aah_sY%T5ge!U24??7W#WkF&%%tYq z@>caOw1PHJVoz}SQIv@;~SDmZcL0mUb`*vXG=31th+r?Tx>MPp`>$V?^8(+)j zdHBIVmn#cePqs^MK=dlTYOgBda6dlI6=48bUk%|4JzdT4k z`;jH#f57mc5Bv7Sa$P457j!^aMx0s@hcurQl|&-TONenivfrw%ovZM_@kjj@7pSTK z4?#~q#toJ!f7Qz|pm+@x=6Zhp=_T{{xFwNB8Vlv<1HVeqFzi0OFjD7ezJgoM-tOWF7ov7UZ*NO@}NrbfPrzagb){$4Q)*8VR@>2ZiAGUI$ zwr!8bXo&bluo27K(3>cDV6JrhP1g3~p@aDApL-2W6l_GG&}Z2TwL?6_Wvk%x^YWAw zu;kO+a_%QQJmN7<;@rTuYcd0%7~FB|z%KhxG^Cz5%ls z1`=jAw(d`#qMP76o2uAUxd|o%bKEYhFl22GIL2;_wiLD!d-hy|KkGNa+k=G((cW@L zS`OiT_CU$t+_8f{m57Nja`vcy6ZFV&G8{?4L_~_hv-u;Xz3AcOH$MSL0znK#!c|jP zR>o)&s#~<$Z@`YD{G)D|s{*S$fYm#$b1Q=MWY0B{QpnB)0Y>Qwn6F5@XTwv^6F=tD zHTTP{4Fn=fPm5jW7bGhFLe@4nA!NtG2x{u;q~0QsBtu5YFASQ01qDl)dzBi5?KCv} z_#T~aMMJ!l<$I`lI`W;7&gsx~w`v0uG1hysbMG!EJ3G>gRhw}<-v9EkzKN{$r>@0%D#u}DUIyQ*oI+#@1f|N=RW5- z=RD8zJAd5w{pw`QeCPYUKG*f$uB@duR%qu`SF0jB=xBf93p5G~$vYTc&Ml9Wfrp#c z79JS*qU|`tk5Y?J;%|8}~>&o@7;TIH)mm(b6 zIoPFwITrY{QNN6=EI+oNuDY3mW2Yl`#Xc>u3s+Y9ny7v~$+?S%2W#5jUfNl@%^jqN zncVB~Xl%MT5l&Z+XwH%*Si)mK-?~{|KI_&eqhM)lG75_3HLFkSD>5UPPv-dk_3Yn% zn&aq>hKm^XXK~ItbM@-})k~O+hA6KyGR&$D_C6Ru{?@#5g#hY&MjvScQh20*EEHHe zQD5@zl+ZAun~JzTeEgUvHK5nPaQ+w5K?DY&nN!TFeQ7M)i)riD?k>pkg`Pmc8Lv&; z(`JQ*o1`M&_HwW&y4-5V31#VsV|(`W=??GIOAVu6Z?90H(;k16sy|VH_8ZO&HyzHSjq#jwR-$(q9^UbhgS!GG8dp!d|} zx=~ydMWG%FRC8TBd#TR1CV+jqYrgo|s4#lR%@5lmd`-&pz0Is!JKMXvRpgEz!EHU+ z2J~;p!2<8iRoDoBI!Nh&Iq9Kj$<57%_YM34?fUPntiwuK6YDp_Sl@Hf(6Pe>g|T>M zi}dmn1U<_!@0Ax`E(?jmMGKXb8o65y69Va^9gv8mT`0{7r>gLc0lk~FQ6K8 zq(%KU+>(xZA|Vib^H!YGBVCK($mdGa#f2yAvLf|LA?3=BdnAuV9?pn zz?r}5zpnVMeak#l^u>IW4o?CwcN7R=&#U)p5Ai~bEnSk zn&(q{H%(q6;%n=gX_n$ZZNYDF@?U8NW`;DxC{L>UUo4;c1#|-vIHil9&(k+c4HzZU z7m1zeCL@kKnu?DD`x^OD5r0uVpbHJ!8*9@NNKlKe;C@kx-k47y? zN>5KuLgJR*wvTZ z7}&Rp+v$dj(MTE;Eb1XJj3bx(ZpAjZsOS3XpP7Sr|b6DYUf zoz>a)?tKYasyFJ|7kyOTT`f}FSS*&kM1J8IJ&m?;d(|2o`)$Yoz;qJ)g{k9{%O=%$ zt)~MpdSK>`-s1u)`g>u1zQib2a46W23O8~)u{#%R+H9bia%tqq-ggdc;?sSneoHw0 zQ&j_1zA?8Mi1n?|mxdNin|9459+E$_Z`&3D_>%7$NwIDn9vHY0e7XzEW`OIzTC`|C z2S-jx$%>^=+|K$Asoo58kh0Y1=qdr1kMfR=iHW>dUk2i%eLWTwUl9ZDFxC-i96X;FlLmzUSVMTeH3kl$#@*);#HbNu&?j_B%E z4vAG+%XfNiP8otsV(W6Z5Ogj#uC*&9ML;Te&Csw7--tmdd@+(FKybD_nIOpJk=Avx zu7_N)_Wob<2c&g*D;9-jHADf$4i1)(B>=L!(-O|Ty>$JSEv8#2a6{)waxcH&(Y1Y= zD`+?!bePSa07$Bw%;60Iw4yMQeV7{O{Osv*9R$BubKsJcdN`URl=;xm+4Cwxb7wDI z5^seK0MC)Z7|C^G5s^}47Pkik1UW@@XogGzXxuhN<)g@LX?KiZtB3!3cF3&D@M}oz zG>E8aZSC&PQXhWHQ%<)ONXc0DGoCSE|4kTh*8%k|4q9XwS%bXf_?3)|9IR!zHRxOS zmSKUWQ0~GV=Q_Svw-lH%=8g|OPSkJTzxP?V{p{}k zq!7Uz;&F&A*;8T-hUf*|h$!dTz5BVL=@iqDsy=MD;>4BNH!j*w?uI$0Lx9A1mKX@$ zBtgCgG*DCeiq2lgg{>c2$L9WAcZ@!B{+m6-&n15#3V+c<7|rw$UUL^N4_dUBz9UI} zNyqF(OL}k4x%pI)xJyPq;<*XqT{}z5^}AO((iaRkTiDnzt=+lqRDdXF;V(b4Rf zX>{|7i<5cw_M-96Yb@QztsimoDXm$!$XV_6M@9L+Z6$GL~{=AQebGwnR|=MsWsfQwg}b+!!6 zoc;Mzd7**3>ER|9=h(fs8_83%G5hl+1+M={o-z*DxWm`{Vvz^g@1W+uG9k@Vol74;&$2=KguXcET1`+XK>9Usm^-1ct>5jA7y>u9AoZ5^c42=0 zb)dt4+2sVyf50-TmW}dX6thAG(lK@p4!C(&)!x&#EW5Xc1D^{ZJ&$%4c=Z@nAk!}q zvsI3GGQ)BhSpQcr24qhIWVC^v?i}O#mfVrrj^5_%pmb0Sh~MgM0)&_Txv7ac6r~Jc zB`{npFp*?Gz2dFvgcD}r>CH}m+yhkhiOJ;q*`bvJfDj_vF`TRI2dsw|+Nu4`~By++280Hd6pwCy%eXORXqHP$5bPTL4+Tu9Dr!ZWaPSwsjuu==2 zSGPsJD#Mx2_xCPcJAdum^7H0ke^H{5UQXCDS!JwlpdwM{%WT@^*5t)`KR6;sEocWh{F1;MV}^)<(zMSl97&FYJNdvh zn<3a(`9-D#VfO6VQn$0`)h^33OWgP(Qvs4khBhn#s@daq3C;=TP(2jyDfL0QymJv| zrP*`bZYwBx7K>8$%o4NPg5}ehV&d|k*zTSxSC)||kMTWTtGCi0UAp#4w{GDN#BWfI0m;eR(tLw12k)KE5JfNH%R zEL*S%AfrN;aMO=RPtukmbE5L*x|nlL6eogdPl#$%`gqCN-lXjmMdioj8Jmxir=ut5@~C{;nA(h z?F(;+bzq!CCfrF@W-+^+%}A50o(MZ@MVlB`6eNBv)^A?2B5HZex%pgbMOx&gSKn60 z(`0wrZW1tgc`*#_TJfqnXx2nbc4_V>^M*n#DnRz=t)W?-PJZ*Ie*Jb1k6v%e7SZda zN&DR>g98I!G}!#F#Ent%#F94~yRZKeYmYbVuWVq^osr&IlPD>B%MuNduS~(?MNyG2 zUSy~5(%pn{&8WPtCe@62>-zEBT%1tJ3-fy+`Zi-)$fq4rVf0sL&t{d-$nSmab(o zPqkV_iHj2>;>PwMPw3B;M?5&5|XgnoA@-J{%@3Cl~l!@~GR&7hCvq7lz2? z2z{)OwzN#K4B?Cu9H>*fV;jLpe$oDRiOS1c%1K2$1DA-AIrdJHJ27xX4oedVV#|-} zoxgsGM|mOs#=02N4N47feK4y-ZOWl)(~+Vmn!@5oXu09XbllysZ_g?DghjVKvl7pN0ft zh}kOoYrOQi>1e^xx@`h`7=NsPcDCHH^vL95=@JMWk7OF38m2{X(|Efo+ zi&)HAH+O|jeUx=1$wj2;-?xO!I**)9jSx!3 z^72>uzI|ND81U>_#13xF6z&+=avR9I>0TnjM>e$F8?iBxnVD!mW+@@@-mwaKFXHy2 zO0i%}Q)HkRrq(T2!sw+sc~uv5+bbtw)ySG zhD?o7meWb)3&R5iM}xv&SvK)VtfbLzKl%f7jz6cc1neC@F(6>;V!vfQsO(ocV{03R z!|v(IyxJN0?8&KU&DU2$*(+YQUjZVftsTft->Zd`@1pIu>w$M*?B)LsJw@o1n}sEQ zJrKAt73bz&uHrIQ@=%GbsSLRZuGpo_61{LfV`!8f0iq3eQGPhR^XBk}L2Qtg_C=*j zi=M8@udpe8cMkP}J1RD`ibZ#lTd5=8UDvRuVV@!7F^Hp!rmfg~AZQ<40_88eQW5)G z>3qP2#Q1@Rmi2vlCNoKL@^qOWz0+G8JA9OtpT-XzT(LQo;=S8Y=#fihRn@4EwqJ)q zymyoP4jDe~6}*OIeq!3nM?J0gC=Z0dJSfIa}(8QB%J%Q z9lH2A>Yh`9HP33XOn)FKi|q*jQ&JN@>?NxGKn`W;LY-`c)I2GFt(hzdq`(S&Ew1zkoDdM$6k+)OLvuj;bamL}Nz%vq+JMj0kkj22vB+&EN}gNJ=Ki}?@Gwz4u@_9{o}en1jNL&w(qzZ9T8D_W8sFbv$JHry&2Km@ zmTw;`>ye9mTAo44#^3oHPmNXhVh!8R_V%kP^p^2m;Ds!xs_))ECWPW(*>I;HZbd96 zsP3-nsE!x6?*FjQqAQ|y1u|w0^(Q`ByHar@TBR5AxRKBQu7y5bB-HGKZ3q1tCR+Dg z*LZv~0st)VVE9q198}cQB5wXD@RI3)TnD|w2~d`0I(h^;qhkmPCol9fVr};vlR0_v zOzI_n^9`z_2rb-0I|< zb~vobZ@j~>sq)l6Bu{ZOQMXvV- z8R~8$BVj5bSxWf(nPIYry^&BA+wPZ|W5^8@&jd^7JNaqb9Jv{o=J7JfS`4~!5aACD!Ye?es2bN6LJ`PK3EH%5hvHQ7JK=a|r zwq;jTN$;ZQI{V z1Ovn!wt7<{*CR&aV2rweX)VO%-Kp^90#}qlQfK#L&>2vYExXc;kzC_Fju;6)0y+xD zvym||AKnHB!r%u!ADd>7k|M&wa$ceXHd zL=J6s*UAE^<{bGg9F5}_x?eqF( zx=HgwDpfd8n_fX4zs>6flg8pz9@SuP=A$;ch^E65!i^^%;%%Mk_L=sNyiXjrf=3E00l%-oK-t4dbysYpAz!p zfPjjoW`{B1O5BS~J%WrUciBtP!jPhB>Nkl4wZgsC7mbGuu$l=C&j`xSg9mY(*gR2w* zqn7ag(NW_@V8BtrHv@yL|cCigL!g^#z%BHI-KnL^POyO6f~by2WhS>54}!G0(b z8JCVwureoWV$|5G1J72VsP%T0^+6%^`kjU2 z43i!6x=LePj!fsoI$HgFIWBi`J5XvvbLOZi{gQLeU~g%H(S`{Kp#Na6UG zfD7LCLI4+6=?NYG6X0Us?I*p4W2k_9>OplyZr%?ppJPvR8&($=L)&E;d!Q$IE!G6y zBWpFiP#K?9s&9{qg2%+L1yyi|9o*)%O-UVq1{~T+jP(@mGtGy8_0u)Rgu}~6MhA(D zby4G||(>NJN`ARqCR-F8rTcsSy z`QujAuKCUVjXxy||8>;D%lx0C7M->Z8HfY`8jUp%N^KU!WZ%6H+S7X^6ciM0iKxH> z5OlS>uEk1(o_QuS5lI5Gnac=$!{Q_a`Rqs+dG=qTIA~1|4e5fswW#MyU2Bh z?R9)J>kmNU|Gc%h^XGKGh$Vrcq&J8-dlFLlNoI8v6Q6E#j7UZCK|ybe$={X4C2j?_ z>T`UY{=hySB#u_aeE_Uq8QZ>op4Q{42YJ(C&8oFXYT@7{<&@pM7GKwh>Y z$<^&y?#!$f;lo@jDYfj!is_a?3D}QwO6=gBIdT`CVe-4H$$IK%hCRw~+OXxP-@_}; zam`E{i=DOM`BvXQxnTa6)FVVW)uo!PF!qG+2SIFOrqER&>qG(j6K!>l9sBt40ppP~ z*DqWM_IwF!ePwtx6U6uQ)sM=btE*pV@5{p>1&sy(KeMJRe>bx!G|>qXn1pn3x=m?^jc{{lL}O9W(SVC%W(tcIG}PMU}AxAXGF zh}qS(K!_Xa&Qlux{aO>*5}$>ky0D}4)3YooKfIVYD?NHEX-|;O&gm1Vt3X?tTIc%b z*ZH?y#*QNZK&y^n*r=i}z+$SPSF24!*y@xJ5_0sShNkA=tIW)^^EEx%eqdvVsVB;+ zMMqWSse(eKhVlGB?oNP8o?rFh9I06|9X$X`_Z*< z_`%8#wDpaR0 zEzlu;)?rdP*bU;XqoYCxXl8U|WP-Ym8#bt`qvg@7&#;Q;+v7&@CT~G&m+gL5Kl9ab ze#1(iv$9N5Qc|TGO!W;7Bkkm)j7T7UIr0=0H8gyCHQ1 z>iz(j7;#5)*6)Sz?Q-t!GrC#LUT}C$&C4$1B z)imwJmOZ{RYHIY^8e17}=hpQC{tdm>t8~6>sgqfI{R%)sxTyWZQuj(1X z15d1hbDQt@ciqJr83J10yOP8+BjKY4xG>C=d>`ef=A|B>$DO;@|A6MA)?!mWunX+3 z*Ur#{s%rvM@g^vIs~<&;_X4Z4Bx(B%=i)+Jg%?og2+b77no9(<7#@w;HC+zfxAdJ4 z1K7b=4}q%DxIQRUCbcZP*8_2>snvxDsq6z{=u=o|2F_)FEKpQ@)g8w?{w&69`(Pd4BOgte^)oRGg(XqHgs&fn?dq(7fool6 zwHCkX56yX`zToT)3&R+t)}3(eXW+KrDkIlf9gpS?gtPneIdWpje5v2kK{SijKU zbsJD5;T$;2vPAk*M zYRtC3<(^WBD}1td1(tGvsSiuX^3l9quEWz?Rn5?}v2O-)a2~ zQ5Y?M7I-jww{U;B>C$TrcbZ}}lA}IxSSoIi(3;itedE@7lLvnA=&}{5RBO?I(*eyg zi>`1WBvssRdxh9c(ft@yQu0_lhZc5~#LU8Tuh*O0#CORUuU&iH0yYxuA!wD^|#&Qe-F7%8BI2?y!ZmEbzIr;~tc1R@mK%5;#sMa4h(%2k zFA_AKd{WyTkA-k^_+3(9;i!z~F|t68;@j-tK!lOm^?hU%fHaNSfi^zeUA2x&#h|tR zjdkK3v~#AhP`^~4sr@lPKF&O#RMkCpY|*zFij4H^pL7=Mcl>9a1+>4#Ho7iGI(^mdBt%ab7!@$qS zcT9=)IP;an(hg}aBu>CyzqYFD57a4-3il`oM7!i3>#u1=B_`4ZS4?73QmOz}oRI|L z?a8ekeBSz*v~N7+qtoT2YId->RhKO+l4Dg*2=eiTcnRpjqYeEo{GI+6Gc+0yw$3)2 z>4l0c_nBhb$GvS`AXG=Y$Y8;i4?pAgj-w(darB1C2sS|}2wO!DMIc)0l8H$tN^`9Y zv`{gRaW>I6AuB2<;Jy!ktcWMw>@(l_ZIgdr@n*7K27-Th8RfYY3;Xm@}4}%l#$}f)%T-4Jp zKmUgeh|kM%XpojIUw+|SLOw>1v#HPRuqsU3VLUlw5UsjgfM`N9^4|V!{(~C%kNFQI zph4F9BCn8&Z5g{OfRgX`GWz$07P=W{0V5MLvsZU(OAD}F!)i2SGS5qP6x-UnY7EXj6gY?!T%6irk5T2G^unKN>`)Px z;Xs>+^wqxHn)u=C5?3OJM>$gwxrXIBzP!(M}< zy-#V;shJ7-BR^@WM2`#M285;Sxvvjas&<_! zwu~oTJ`%`0g#`X2KPdgL>Wn+azncYq)t*-8u2riKZ_je!o#v&#h-T02Vr66RpE*yX zNY0>Ij!) zo4$zykN)Reh^_MGqc01w_u(q-UYq`(6D=-FEdS(LIGZ|!1i}Expo=J6YAH4Q#CM;#7~@%8 zS!sCF=Xf20DcZHZLkOI7KIL-Jh6rBw!ZQQXd0j~*KOMBm75d}A3u=1-7bL%^9T?qd z8gi`{l1l&eWZ%!UY2v78A6R!gLJ=TT$&YI6Y=Z8q4J*5|1Z88~xgWUS&-44utH{iT zh<0prln>s*R#a}2^&4C0-!G3=%tjo!Top@n2qZh$11c{cKYk}sOZ|mUl2K6{I|Cw8 z4IZXody`VuPGx>F#wm}D5uCes%dU^uhkz?O;L*PL78mD}GNX0-RZVB@T0j2m(HK9m zX}sI2$&T#8U|e1PDE-36CF3;cSijI&iSgzY4$qF0mwtm%^Vs=@#uUp>YRPpJr;;OioV|59T7p)=Y!NTKkH%g{wgBn~Hcq1R)yzY=2vE_svrxpTjO zX8iGVU+m!kx!2VqI=nij#O(U@FE$e@dTwD|Wv*5mpH>bZ)A;gT$H@bA6Rb zR*3NiwpVus{LgvRkyeVCcnVMms2KkUvN)H|9)WBj8sHgn0)5_za45A!-QLJ=w z7iSj$vg8M*{#l<8M+Rsizf0-H4kr=IPPgSoL0MT^yhh$vPiWp!lAFi3tp}SDst!TR z;~BZbmxBAct;^t06i2h7BB0^=&--LnYm!k{;QN=Vmy^6cIQK|k=L<>KiIE&}qm~{A zn(bmZ`0fwQPR?%&zeITFUsAIxt~Y2(;75m;w*3uYv5WcYqc17R$u;K{DSqC8oM)}9 zQoREmOD0lp(_N|m0zJ|a9o6&C*bz?F&%Wh4Hoipa51!B)8`PE+$&KA%K;rR%v-Y*- zNe)rUDf)piL-R7S1CO6NP|tjm;`Gg~su`nOTHtSip<(&N7+(p;CW6eC8y8Kp}>bMy~dVM9U#t#qPskDL@l%~(| zAD52{cs6fspPty)nUa@g{ujB$4>$D<0nEpO`re=aP9T z<*7;R}wEsu&?{wBFxmAcf6vvM!;VtJFi@Q zpt8}?VlE?)0M|KF;6$*PxP;U|cA3^M)y8>(YM~I82x$iCC%1_}@`r-br(dYyr((F4pCkMGCi9yMy^rNnM@NmD(g`H*%U4 z9O({5TqE}(!#D^*PL)x)Jw~iDqn;cy(&hXx6`F5j!8m7T0z0RJ`NNHZLC`gbMpvBf79zY?`q{uM=@+|;@m~8Wa4u*hi}paySbSB<9r6*#DQatLlZ2PuIl8$^YP2by zg7c0zM)EZ?NdtEx(hhmV01aNhbCdYEvpDrUQxVTy8ssZZ7Pd3L>+hj`P!QfGC3br_ zIi<59AIl;!=9FpexBt5n>Qc?CV>Gkcq`c#eIL_r9Mk|th1B1gBuW`1GngNH^d;&wE za8V#bQ&2~jrO@J^KYwRRKzVz{eD4+owXzH17=bfdT5(&Ho92wuu(Yr?7r18A8*B4l z?EHy8>%n|XjVQ9ow**oO^{$GT7 z|FH+_CzbxcP5{H}pqTx7CBr^afnCt0aKja=w8r0}8rcl|EMumPNV-tRdmMP0Wu&ER z5-vJx3?9*)WUT#Szs>0F6=wAIsVGjqa(L2gbS`&bip;#Ui)%{02FrH;by3mmY3bc( zszm3|QumRO>#rD?7!SDzW%4t4ts z8yj5PiYe;I#G-pyLo;gRe@)Q-e>65t!?lyLw47{o$_Jl~3G+ z9>f0>NTar5g&q?=7#-+c7qi_&_T_J4NW8nlnhZ~)c=F4+8vtIYSAupevrKAdbP+Ooj4vJa5zd(fA$wm}xynduf-CJ9y z$^Mtnys>oUt0P#a4BNUv+=-;wI;(| z=F9s}^<}vJK9SmKxq)@G&WFK=628BGoSfBNbdsC$(b%c7pfI1Z+=u)+ndd6`d%%dO z_$(ECUp{Vv`Uk24``95slqkMtp8@vlmmq*X8)tIIK4Z2Oojfz?W{CIHk+n77&mW_o zi}Z^_{;udqS1wLosLB8L{N#T#(ZB1x;$p`pKMP%NKA)@5Rc_VfJ@C(ebm}(QJ1rZU zdTkzQ`ajP=MNVZ?EEch4%;1A~L?}{zn6=t8uqlN3Mp#lw}Sr&zqAwGYaPvlFD z`l7R1LQio$jvK75B$A6ovLgN*_L47RAky*fcZ9$tJJsV%71KY^qq?k0B$? zN@((}9dm~gC4U!7q9_J^`Vw{AVFOmABEhDXjaz>`5RS2*l_W?#{AB#p^PeIa z=icE+D8?dn3dwi+hu#~@%E^WMtlqD>z0Q33$c)~DlZ>;g2FD)q=@4GYx>FTee*6*V zu3cAM0rmG~Bz^mKLEr8*SM3e3(8D@RkqqV~8GsvHxVgA|%i6~tXj3JO0XL|>zWM|D zd%wO~iOh;fZgrUocSIe?Z~i7Y%1XwnmO6{Af4m*#AJ0BhTNI3|V*1h)kXoHii`7VO zr&7pXg#52xgBCogh*|-n*5wC#fSB@M#a4LI ziTK7ch(P?i%F^lRpe#ICU=N<@M-y* z)vT{IAVER1sQ(^2Ry%6qzx9aKF z4Bf2p4aVl|xyyLRn1CMW(e*rU$V-ylFfyul0ElR@17y0N>=7!xM)wpnhVbzfKX0bX zVAO;|YmAMI06E8cz2b|NT4OxIOzUIz?>=Jc0C4D&v3%9*FZJ~?eHs~`JHVmUXz@E&+cQ}DRYqD+l3zBpc#IzOArXsh3@<8 zdya-{g*~tlRGC?QcnUV;8Kp)d#;ioRW%FDQiaLj%K*_-#-2K%t>gG_t4xd%U{S#IR zQJw5wB6NnSl-I{9_K6QWz16s@B}`&8_%6>}IDdfyfu+7~xY*U1ApRH%1;41ChH>G>4Q9vM(aJ^8w@&acR0(!BC^A8*^) zix*#bp5tH=4m0p~IMs7Djnrz8uw`S@E8Pbd2{#3{4!)z#Jjy{7+!wM3NMnG)4mh8= z%^@P9X~Xdm?#m`T|6N}qP8M8hGf|zWO21H@geS$a-|xkCZlA=}Eg4Ud!AUD)IZq%$j6?8_uJ zTlik~LU1?fWnp}1=*K(BYOxX;Bmwbbdw$kisPED%8G3e(U?T#Mc;AkLmYvUhIzMsM z_BS?a`Kr3NZ*C|qD#BwN!=A#P7krkoDwo<~{fJUCSp0}$m{80R2gjc`rQ+<_Wsm9g zV`g~SC`gP9$MWs*&SV321OVqU7 z;)a7_A48&np<#mg$`|y!UQo=z``Kzq!&RM+#&_61n6y7sF4HL&5n3amr@Wq9t+zco zzSiHbORK2)j+pqAVxX*5a#6Fv)NmiXP6aZCdF1aroRbGSFoczbuEdbZKE#Q#3VMg% z2H+Fq?@LxlkWM#V|IRS&!+h+k4YYOvi_W8Y(=Eo6LNoLuN{aZ|33oV7&}nHcA&)sb zj5uqrlpskB_)p_3_zkxxPI`p;HG!=Q-`;=Qu1mNBRrUh(-mh2Bh&br)n4bCh_m04M?pD{Z~(;K?7Q3)UIW9px3j^xcP${Vxf_IbVE)8Aiq zH-|Zw3fPT?pYYoC4aorX^j1YhbJ!)nu3;9s+Je*g**tG9bs}M0oJJORXm?ovY0~-c;*^#( zt~tEtFSyXjX8zu~rir17z~IM_Iubta+p*(^8SOjKIMQ~IHc=5wYaL6XSyH-MMrgfN znoDQCj2KE+L%_Exv9V#wIR!P6s+w9F3<-xkaCTW(Ss9-wbS-?Uq^z7*ht4A7>W>p$ zZy~X$T7E`e{=9oCJYd>n-Yriks7Z!#z*`_MILni~vgrrU^>OjDVh5YXL&sY?>AI2Dhdmt~W0mm){`223X$fl4HZ}1yynaD$ zv~L|W6qxRxA-k`qFcW2mj0qwF;isNm&2!(uY(MZgzZrEFR@k^RufN$Qsa^_Sod%O4 zoNN51bt$r}VEu6w$H(@G?^lKG>S{~wDxxfl58Zz_m{~dkq3q%{99Sq9N{j9B>h6wj zBn)@asElWCV=$grFm&&LNvOJMr;+h-tdGYf3eTuL3FoINmMQ!heB_xnrpvyqQ@XT`W* z>#(*n{+Wt+Q{`7*Rj=oE;rg75MK1$D;uEf0Aw9_fSP=9H##L(p&s-ot^A3wH4l`c@ z_ipu9AA0&*Gl#60Ewc7C+cFMUIjE&wW|_Wa@q1|YR~sXVKZnM8m^s!lzG)Syp?5Ua zDpZ63B4P_Dsa;V?q!+xGkSgFqJZSs*bHm1sXpAB=vCqA1YhzvArfzG(O?N*(YPG|- z>Ua)moJdpk$-1UZ6S#Dxy(x=4L|yDLQ>`D5QB31bid*e(Q`Pri8lLwiP#bAs`E}6a zDlG>UMlF+MrgV`jMqr_(+k+NE$m0E=ES{;W+}_^4Hd8fLV@GR6T-K!qVUIWXo}P+_ z1_f=KLmqP){O%&AkQZ4#j6!>F`~1UQ3!&n9KLkyPb9uMC~;KV;sYwdKLi)X9=KIb}vOR#DR* zv5&{oyt}Dm-vp%#t};3+c-jTlbqIn}Ldfgve5itP?b_32i>D8+b#uvMA>w(})PeYzFLFIWY(1b@ z5QCZ5+uMtNVhgzro_v%a{&(1+0L<2*j|85TiM1Idh#JU_i}yi;g$J)$y<=wD7tPN0 zr}fq8pg+239%a_kAjxch4N96KUqS3Ghbrykut7XkPV0|CP?YHiH89-3Qa_ugO@ftt z!xVe5pTrU~-L?;$$mZE?M)w21>@-Ei=poXw;_0j3>IUc+1JtB{4H&qnd+=``65?=t zk@-8Tz=gtZ_Y=_(G~rJC6X)@X25LZStAKb;7Z`~>+F2&q_zcxgPy~ZK*I+pNWx&)U z4HM;xMFtrg2(VEd+i}#PC+m!jh>*$#&W!;BYW*xyb#1Lt1v0>q5@>KJ7HYuh z(NfQe!s*LZQR07cw6Z4T)4|z2t&p_Qkm}|qY+-~;f{H)!^MxyQh+=4`u3m#7vdfWf zJ>$pxMff3Cc1G#i%)R-skSbA#=jMm`tAlO+COmEw`}QJOX8FV7;<_t{53jl1KecH3 zj)$)I1e~?V{0dSLDUmyFka~p$H`%YNVsjq1Q`Y<2E2lqi`!N9`#srWg_ixG0ybNO# z?&8D(Y8r=F$%-56Zmuio-R4+$uXkG8cpnr8K$B@3r(Ppn5{5{Jvt2IWM7E9IiW!== znpXPpi32_12BH^F_bv5% z#o_Hx%bRKP{>s}SR~vqR-HG#>9SrjWKJ0}7Y*p%Uzf!9)V7(Ylrz=3>XX@W2Pn`G0 z;vK|R9f3v=j3CZJRAKNAcg=s~KZT_MFNIshxZ0;Q9Y;AfR611b8HLyj3nE;Au22%W za8Im?ueF>&uPYr6xx%v4x|xqPP$;LoD~%#ltiQN`iqnqGu68Sf*_W5+(Tn|DdXF32 z`BQS6^9PvBe_${@07D$X3| ze;e7LO`a?!`R(wr1NdUI(+K;-gOggQw!^O#J2{~bo$s3o(E@AeLjwkHKDvovX#FNJ z>;8}@#SNpNV-Ab7B5XnH?AdV_K_=^-#)B>Z<1vT@YW%b0h2>>bzYYPhk*~L*op*VC zy)Sq|8>e_YB~mX?*djm7i`_`a+FD5C2z$|#|Iq}w}A> znwa)1BC&u@zh4I~UMnA}Eoj#G`6c}lm;H19z|BH4oTp5l?H_Y;WO@q8n9cc4!#Uev z%LFM7lgObrFkgb|!FH96>9aRkzYF#^va@>wE(5`K?pWKlsWsE{8)BfCO2xwb$-uyX z<a3_u(YJjULPLp!27n!zcZQ zk4r!ax$keI1*W)}`jX$h1S$!go7snVTmEh_t9^W=5(8+1w|Y`(Wsi(fod-5`sb&#( zAawy%;pW+L3Jp+Z6ZM1gg86VuZ_0nIk)id4j{lkHQ ztl+CNI+X4stsLGe@?KpERbEH@RqWYq*OqZ{CwoF@4@3PBPTO`j6zVE(`! zev{YElhnbaw0@d>7MIBFbZICDi2Wx41B{mg=7Iaa&s0PcwS-C`lm`p!1so>qgqU%f zO#bF|%@;*6$3)Tz8EU7#xb2Upsu&zn=>T%_OiQ5rWscVdK7ZD87!I}Yu8CfTZ~2eAxTR9!eVb_ zX<6Ay=Jke6cw?mQ-fZd=;2)h^BC5U`D2 Refiner Steps Tester` - steps を確認するためのノード +### Merge Node + +- `D2 Model and CLIP Merge SDXL` + - ModelMergeSDXL と CLIPMergeSimple を合体させたノード + + ### Float Palet - `D2 Queue Button` @@ -145,6 +151,10 @@ D2 Nodes ComfyUI ## :blossom: Changelog +**2025.02.23** + +- `D2 Model and CLIP Merge SDXL`: checkpointのマージノードを追加 + **2025.01.20** - `D2 XY Seed2`: 新規追加 diff --git a/docs/ja/node.md b/docs/ja/node.md index eecc5c3..b2e1fbe 100644 --- a/docs/ja/node.md +++ b/docs/ja/node.md @@ -935,6 +935,23 @@ Output text --- +## :tomato: Merge Node + + +### D2 Model and CLIP Merge SDXL + +

+ +
+ +- ModelMergeSDXL と CLIPMergeSimple を合体させたノード +- XYPlot で使いやすいように、各 weight をカンマ区切りで指定可能にした +- この図では `0.85,0.85,1,1,0.4,0.4,1,0.4,0.4,0.4,1,0.4,0.4,0.4,0,0.55,0.85,0.85,0.85,0.85,0.85,0.85,1,1,0.65` を指定している + + +--- + + ## :tomato: Float Palet diff --git a/docs/zh/index.md b/docs/zh/index.md index faa886e..03594c7 100644 --- a/docs/zh/index.md +++ b/docs/zh/index.md @@ -131,6 +131,13 @@ - `D2 Refiner Steps Tester` - 用於確認步數的節點 +### Merge Node + +- `D2 Model and CLIP Merge SDXL` + - 將 ModelMergeSDXL 和 CLIPMergeSimple 結合的節點 + + + ### 浮動面板 - `D2 Queue Button` @@ -141,6 +148,10 @@ ## :blossom: 更新日誌 +**2025.02.23** + +- `D2 Model and CLIP Merge SDXL`: 新增 checkpoint 合併節點 + **2025.01.20** - `D2 XY Seed2`: 新增節點 diff --git a/docs/zh/node.md b/docs/zh/node.md index c5eecf4..2192eb9 100644 --- a/docs/zh/node.md +++ b/docs/zh/node.md @@ -876,6 +876,24 @@ Output text - 用於確認步數的節點 +--- + +## :tomato: Merge Node + + +### D2 Model and CLIP Merge SDXL + +
+ +
+ +- 將 ModelMergeSDXL 和 CLIPMergeSimple 結合的節點 +- 為了便於在 XYPlot 中使用,可以用逗號分隔指定各個權重 +- 在此圖中指定了 `0.85,0.85,1,1,0.4,0.4,1,0.4,0.4,0.4,1,0.4,0.4,0.4,0,0.55,0.85,0.85,0.85,0.85,0.85,0.85,1,1,0.65` + + + + --- ## :tomato: Float Palet diff --git a/nodes/d2_merge_nodes.py b/nodes/d2_merge_nodes.py new file mode 100644 index 0000000..6d00f73 --- /dev/null +++ b/nodes/d2_merge_nodes.py @@ -0,0 +1,70 @@ +from typing import Optional +from comfy_extras.nodes_model_merging import ModelMergeBlocks, CLIPMergeSimple + +class D2_ModelAndCLIPMergeSDXL(): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model1": ("MODEL",), + "model2": ("MODEL",), + "clip1": ("CLIP",), + "clip2": ("CLIP",), + "weights": ("STRING",), + } + } + + RETURN_TYPES = ("MODEL", "CLIP",) + FUNCTION = "merge" + CATEGORY = "D2/Merge" + + def merge(self, model1, model2, clip1, clip2, weights): + # Parse weights string into dictionary + weight_parts = [w.strip() for w in weights.split(",")] + weights_dict = {} + + # SDXL model structure components + components = [ + "time_embed.", + "label_emb.", + "input_blocks.0", "input_blocks.1", "input_blocks.2", "input_blocks.3", + "input_blocks.4", "input_blocks.5", "input_blocks.6", "input_blocks.7", "input_blocks.8", + "middle_block.0", "middle_block.1", "middle_block.2", + "output_blocks.0", "output_blocks.1", "output_blocks.2", "output_blocks.3", + "output_blocks.4", "output_blocks.5", "output_blocks.6", "output_blocks.7", "output_blocks.8", + "out" + ] + + # Map weights to components + for i, weight in enumerate(weight_parts): + if i < len(components): + try: + weight_float = float(weight) + weights_dict[components[i]] = weight_float + except ValueError: + weights_dict[components[i]] = 0.5 # Default to 0.5 if invalid weight + + # Fill remaining components with default weight + for comp in components: + if comp not in weights_dict: + weights_dict[comp] = 0.5 + + # Calculate CLIP merge ratio (last weight if provided, otherwise 0.5) + clip_ratio = float(weight_parts[-1]) if len(weight_parts) > len(components) else 0.5 + + # Merge models using ModelMergeBlocks + model_merger = ModelMergeBlocks() + merged_model = model_merger.merge(model1, model2, **weights_dict)[0] + + # Merge CLIP models + clip_merger = CLIPMergeSimple() + merged_clip = clip_merger.merge(clip1, clip2, clip_ratio)[0] + + return (merged_model, merged_clip,) + + +NODE_CLASS_MAPPINGS = { + "D2 Model and CLIP Merge SDXL": D2_ModelAndCLIPMergeSDXL, +} diff --git a/pyproject.toml b/pyproject.toml index e1f1415..e7ed719 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "d2-nodes-comfyui" description = "This is a collection of custom nodes that make ComfyUI slightly more convenient." -version = "10.0.0" +version = "11.0.0" license = { file = "LICENSE" } [project.urls]