From 1610fce3f475bc3e0977072fc0fbc95dc6b4548e Mon Sep 17 00:00:00 2001 From: jammyfu Date: Wed, 25 Dec 2024 22:23:01 +0800 Subject: [PATCH] =?UTF-8?q?Introduce=20DynamicImageCombiner=20class=20and?= =?UTF-8?q?=20update=20init.py=20for=20node=20integration.=20This=20commit?= =?UTF-8?q?=20adds=20the=20DynamicImageCombiner=20class,=20enabling=20dyna?= =?UTF-8?q?mic=20addition=20of=20multiple=20image=20inputs=20and=20outputt?= =?UTF-8?q?ing=20a=20list=20of=20connected=20images.=20The=20init.py=20fil?= =?UTF-8?q?e=20now=20includes=20this=20new=20node=20in=20NODE=5FCLASS=5FMA?= =?UTF-8?q?PPINGS=20and=20NODE=5FDISPLAY=5FNAME=5FMAPPINGS.=20A=20new=20Ja?= =?UTF-8?q?vaScript=20file=20has=20also=20been=20created=20to=20manage=20t?= =?UTF-8?q?he=20node's=20behavior,=20enhancing=20image=20processing=20func?= =?UTF-8?q?tionality.=20=E5=BC=95=E5=85=A5DynamicImageCombiner=E7=B1=BB?= =?UTF-8?q?=E5=B9=B6=E6=9B=B4=E6=96=B0=5F=5Finit=5F=5F.py=E4=BB=A5?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=8A=82=E7=82=B9=E9=9B=86=E6=88=90=E3=80=82?= =?UTF-8?q?=20=E6=AD=A4=E6=8F=90=E4=BA=A4=E6=B7=BB=E5=8A=A0=E4=BA=86Dynami?= =?UTF-8?q?cImageCombiner=E7=B1=BB=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=9C=B0=E6=B7=BB=E5=8A=A0=E5=A4=9A=E4=B8=AA=E5=9B=BE?= =?UTF-8?q?=E5=83=8F=E8=BE=93=E5=85=A5=EF=BC=8C=E5=B9=B6=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E6=89=80=E6=9C=89=E8=BF=9E=E6=8E=A5=E5=9B=BE=E5=83=8F=E7=9A=84?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E3=80=82init.py=E6=96=87=E4=BB=B6=E7=8E=B0?= =?UTF-8?q?=E5=9C=A8=E5=9C=A8NODE=5FCLASS=5FMAPPINGS=E5=92=8CNODE=5FDISPLA?= =?UTF-8?q?Y=5FNAME=5FMAPPINGS=E4=B8=AD=E5=8C=85=E5=90=AB=E4=BA=86?= =?UTF-8?q?=E8=BF=99=E4=B8=AA=E6=96=B0=E8=8A=82=E7=82=B9=E3=80=82=E6=AD=A4?= =?UTF-8?q?=E5=A4=96=EF=BC=8C=E8=BF=98=E5=88=9B=E5=BB=BA=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E6=96=B0=E7=9A=84JavaScript=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=9D=A5=E7=AE=A1=E7=90=86=E8=AF=A5=E8=8A=82=E7=82=B9=E7=9A=84?= =?UTF-8?q?=E8=A1=8C=E4=B8=BA=EF=BC=8C=E5=A2=9E=E5=BC=BA=E4=BA=86=E5=9B=BE?= =?UTF-8?q?=E5=83=8F=E5=A4=84=E7=90=86=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __init__.py | 5 +- __pycache__/__init__.cpython-311.pyc | Bin 1765 -> 1884 bytes .../dynamic_image_input.cpython-311.pyc | Bin 2155 -> 2132 bytes __pycache__/text_combiner.cpython-311.pyc | Bin 4184 -> 4450 bytes dynamic_image_input.py | 92 ++++++++++-------- web/js/dynamic_image_input.js | 64 ++++++++++++ 6 files changed, 118 insertions(+), 43 deletions(-) create mode 100644 web/js/dynamic_image_input.js diff --git a/__init__.py b/__init__.py index 5e5e098..7f8fee1 100644 --- a/__init__.py +++ b/__init__.py @@ -19,6 +19,7 @@ try: from .text_combiner import TextCombiner from .multiline_text_input import MultilineTextInput from .click_popup import ClickPopup + from .dynamic_image_input import DynamicImageCombiner # 节点映射 @@ -29,6 +30,7 @@ try: "TextCombiner": TextCombiner, "MultilineTextInput": MultilineTextInput, "ClickPopup": ClickPopup, + "DynamicImageCombiner": DynamicImageCombiner, } NODE_DISPLAY_NAME_MAPPINGS = { @@ -37,7 +39,8 @@ try: "RemoveEmptyLinesAndLeadingSpaces": "Remove Empty Lines And Leading Spaces", "TextCombiner": "Text Combiner", "MultilineTextInput": "Multiline Text Input", - "ClickPopup": "Click Popup" + "ClickPopup": "Click Popup", + "DynamicImageCombiner": "Dynamic Image Combiner" } diff --git a/__pycache__/__init__.cpython-311.pyc b/__pycache__/__init__.cpython-311.pyc index 9059387fbc8def1d3f7bdf5c5bd40d7c1a044042..a627e8d11212d96dcfbaaadd1165bc28d42f8e34 100644 GIT binary patch delta 439 zcmaFLdxuYbIWI340}xyk%1M9D#=!6x#DM`0DC6^{jq0+DUMUPIJUJ4%l2MY345_@S z{HcPe!l|OE;;E7;ymQ#2m{a&t_)`Q@1XF}kgi}PoVk{}l!3@d_sZuHoMH*4kObn?q zDWa*;lj|78nPpPMCeL7$m6VQ_2B}J6jsmjE8Os?em?Ig=88yWxpJTiy$#_e|r7|xu zH#6BYH!(fcIX^ckGcUDBlYR19COM`e{>dkp+Qh}6N)*6q6kv)b`!Yu`%1&O!{7_6d z1!72iCdicd%)Elq5}@X0mib(&KwmNfaq-5**-7;i3=>^AH*0`>~Dyx-p~oYA)$Ul&g6!e@(l$G zpc*BR8YQ3_ISBgkL5hJx_yYqAqY8q!!NS?#dVx!GLE_{(wm>mECryS!nyk)Z%!l-3 LoduZ>3xe1Hs{VO* delta 320 zcmcb^_mo$CIWI340}vR0$WFIqV_LlUFdx zN=imcf>fn2M*&&ojO7d!%#jS`jGCg8?=jw!VJqSU+FAs1R1r6b-~kc5AcAl5SEjbf zlbORAr6<2;emMCV%WN)Xpadfj7tfsB&052#Jeh+n&-()xgNpSHaitqNJ~t#(Zpazj z5L5WT%P!6KfdNQdU=jZy!k}V*LtOQSPVfy0^&4^~H^h{I3Y0(!lzdM?6d4XFvO4oIA5xQb=43w131R~Ph4W4I diff --git a/__pycache__/dynamic_image_input.cpython-311.pyc b/__pycache__/dynamic_image_input.cpython-311.pyc index 0bf5b533fb0c49fb14d1143671d24fe7bba6efc1..ca1b7b309ae3889a3aaaa241634f10ecf7c41293 100644 GIT binary patch literal 2132 zcmb6ZO>Yxd@V#BHV>>npb(|On8ABqd3j(SjNFX3NjuWgVj)iSiaZ{~~cL@vjuGw7^ z5;;{`<-nn8Q&noBHYhm(6+KW1Bo3V557?3q){`PtsyO7-Md<-?>O6lX4qQ5KcizmK zdGluGy_rW2hYbNd>dMUiVMge0$~3@KCw2ybSVaO7a0Vq2gT|4-EF*z^$RP9t{u(5) zz=~MHNk(7=6U?lDW5~~KQ*k6+*Q!p9Jv&!`T}2{-y(r0uuwxlLgtaG4?W9RylAORM z&4MY}CU8lMU`|?vwq=yG2^O$#C0(QQaw;pO!`alV7*w*?C0SI{xM>0*7HInK*a58~ z35I~z8Q9H4{0ykU7`r$V2#*KjijvW0;D{UZ ziSVd+SIj6mvBC3mk}N258lO{CJ#{_P6wIXanyzGdSrNqMZa$ilWL=VHgRrV5bO{U# zwK#Z*2Et2nF0Y@?&6DV(AJPvrb|KV{)WD)yKe)Rhm~`hZS1`9) zquFR(!RY__k!Gf$uounWm}B*M4$q-`>@=FgelD_2uciJzc)v-do^3-1Kq~cWn_lC> zk&vn?s!x(X`ZO>4{5Ha=DS1{TY(|ucP0}P;(^GO6^qH7iCRRi8+GQQWOt7fY ztMS!9rTtFrppN%_w3J#4pc@o5H)H{-iE&x`|8n)*AKP+y);@ob-aJ+Eo+*3JJUv?S z4wPKy%C2(;GC78-Xa!fgkFDKV$-rPM&hE8SMdxw&9uL1@%O{76C$Dbx9Nj$iSSueJ zc%FDRQ|cKh_ly__yM`)m?}p=7$7bf~K>7HEl6$c19xS>C-$6Ndc?`rjKHc*6t=}$w zcCqBWRQ6t4X|EjWUvm_DP82&&fRd|sWvFOB{O(PM8(gvW@1iaH!Qv;w&x0@UpJUI) zfP}APzg)IoF4`}@@f=w{Sv-EeEIRv&_Wj>G0K*EFVb=N~L*I?q zMmo_e2SahEE!fMx@|+KLv#&cb(675Wz!85tvG6=}YLVxOjpwt9kk3%s&hvNjsZ3qc zp3bB+Ei39b6+xwagxIfz;)!dKS_5oyk-%gqMh;9R;I|)r>;#`FI%;MC6%`S+5@01K&6PTYhMCdYK{umX)q=ZIwqjEEHWQl{;IZMM_t~f ziHegV*Wsl|rQ^ub)k?>}(pAIM%|W6+M71;NN%>wt^(W`6woPA{ws>E?lR|m9L8Iyw zaYm*_Lws-|5R37XfoL=w8IKW9b#XKti%tZld76NxY+rouEyK0+UQy42ORHps=@vTgXkWY literal 2155 zcmaJ?|4&m_6uDOY;Dsh((2|+BSi$8oP*QY*?CD+>Bd`fzhi# zH}K^iujVJy^7Uo;k87Jy!nL)06?2rhFFlygJ)V*O8q8(x>iASZ#e^j8mxHDGr}|id z_Tx9Bv``!OADxqL{0VQc?XVBtR$m6-@V8zABn2hNkc`1k_z5TtWAu9vN=wtZ<)j9B zBSpVIl4gHY;p)|ZnNC)Sav}b(uE9da?-LGFlA600kERMsw{X5LUMpK2`bp8kvHej$ z$1-AtAD1S5;0__0oJX76+wLF-AsT!Ep2v5gUY~Ft?rnCqxAeAzgC_^NovrK{HV}@K zw!OY6FNA}1D9o^YNk|{}`a^<0)Yk%1u3PX2_+Ccq1X_!y=Cv_0AXYhD$GhFMyXSaY z*SS60+of@neg^>J>wv_OQiFDUFx8W`uI+AGvmaWs99joC;wpduezO{dcMxu|Cc=e% zEYE9!`Dg=JC^s*qOAwWtm#?ZYKT&R8UwN4sS9^8KL*kiI1>gDs+>2RH^vNen~Os~3X=)si@J_`CuSVn6(i?L(@3|(Ow72|nm}U*W8_I( zQe^ZM7)ZB<@)PCTUw?j`Y3BOgsHc7VPM`H+X|blt_v77^G@OB1^I~#Inz$&>tw<~5 zxy(bVp;$}}`%CP>1}c9ysRzU*t8dB{v=EI1*#D2dF%7W0;#<=WgJ|*#Y>*eNyx`>o z{;Xd(C7QjF2peJ?Ceg^Vfs>+HyB>#IQY21`#2MZMEOtb3_>DO`kaP8A3UO;4QDDY@ z0|aVuC)!z;FlX!DPjy`Bxa^vADTu7BS4pxp(VXbd+H1#Sqp_(YPwji3+4m}lu+^vQ z(;sJR-%i=C*rvQsYpG|o)LJd|FNhKYYnFF88~AoPsznP;!%qlH)1sB8gJC8bz9EpF#AmuP8ecDJ=3>+Dg}!Bv7M6_A!9Jk&T$aMAKUAaVUqA#Em$f-u>G z%sUj)Z2D9|KwcSOJM^t4s6};q;vLzyFxj;`?#kLfj33F`o8m_lqs{alKK~}s;^U|; q2cbrP1J-NH=URHc;65s0`wSSxKoEpN?kB+GcJd0#{wbqSR diff --git a/__pycache__/text_combiner.cpython-311.pyc b/__pycache__/text_combiner.cpython-311.pyc index 0462ab74ffaa173ca9835fd61ecb68cf1c29b693..8cb2e31e179858a8f7917cea797899a05301744f 100644 GIT binary patch delta 1619 zcmah|Urbw77(eIU_TJw9p+GB?*|AGOY=sOu9tMsGGXen<2oOvZMr7RE4n|r$x5~g< zKwTmw#t@H&8ClW?hZvZS#6_1l-P7>#b~e#mhaqkVk6oMz@kP&REv%c1r(eJGo$vSi zzH`p+-utuoo5%K<&1MEG5EHjv_o-5 z2rWBCnQRn;%cN*^zi=K#_$&rM3`*=W;jZrU;|APqa^gWY{}n>D98h!GbJ@IPBpc*3 z$lWf=20_#iv1j=JNL-`<|G?HAH%h!}`~+NNqMXX9%o_krsEo>$>{H(g=dPo?%EyKD z@mdWIn2ACLM-xx3VL6+=K6)bOoN4iC!x&Wg+;fH)l@G$GNj2ab#$u!OJWx$U$#M&e zDpUhHA_;LT-HVfK1Tx^;#xfxW1cqm0trOPJOLx(0se1|kRsZK!y4+$Lh?{S{)7}`aUSMhbYdXd@}zfGzR66d~O`!RleqhQi?xK+}OqeR33tlYf6D87Gure_l{#24fUk0mtPVwdkDIGHOmIZI`k>AsC4xrA zKW9)eN$4=5P+3JWeGpWF*9AYU!@uy~6?#biKfrptY5K*bow_7_y>_ghQf?P#8TcPVp_7z*nHNL!n8XL9))t%J9&*tQ${H zMr1|jBzZV2$-3cmI6Q`{Eys+A>WBv|E~iB|DDqe!t-j8koftwv1ut2;Ir`a(uj2cb zx|wmJ#ojDPF;#+Z+fnqO$XZPkStg2_lf*lklaA&TfHwc8yL72NK9X?PCf&6Q!k-){ zDZMbVQk-!4lP>>HuKHW9daa>7;p#}bI_BC5Ug5pWtO?q&=Wnzpyq!sJXQI3-S>B~t z#T5R)I#tmMyP($7cdMmOYw5e>`P948aAh>%IhpjF)QAlPwEiIW+kTyCOaVs7xGiVH zRmYX?^`fteG-m@f#|h2)uy ztke?4-Z|RpZWX~z(cb1~Z`KsH@$3eKB;Md{)H@5?s@aXobf((a=EvXW{phYXl8qnZ s@T$F~t&?=7Uz$RL6bm6tSphW93iOvUG(l4TsJlmV_YZ(p+>~GP4{aEjsQ>@~ delta 1388 zcmah{Z%kWN6up^b`AFVqRwxmzT^CBY#XxtWgucn0arZAk)S3&i&nU z&-tD6?mhSZP=6!n{M6~R11wi?%D^H)}$432gVCI2KL9eTxzJy9%OO_gboPBP zLm8aT>C^;JGCHMmd$y^sr+2RnUgvW>-hvP5HV@>{8C&=@*VrSk*O5OgMIC-oS|n?M&(B_la(N=Rpvdt@Q!C`CjZVNfMo$2krA=!u=a+0{)V z+#*(#iB3Y4N<~~-F?Tt32*-4L3LXOz(D?0>f+4YNhk&xzaLAQfZP^2W?m&ZV?R}2d z9LInR3_NF`7TAez<#_&`6WEoL0k6<~AOj=br!5$ap|7}hbc>sk{J4}t{uhB3tEieX zI5tmN)WIeTYAU(?U=SVV4#Nk~kNlG7ZtU3dDsGZlhZY>ounnyVmje=Ugb3V$){cI* z&;Bp%xeijIfq)0Ycr}K#g^%#l-uQ5CV`*u1@yt)>vKtpKJ`@}$Z7eS$E@dBHTFj|e zwWMmXax#&Yla}pNIz3`hN)ok+_oFefra`o9YH}o{u!PMHXX46$YPsVHZ9G2mf|?wQ zD{(EYplR_aN3JG_JMf#>GINxVja@V!Ew}C@%?055m3S=tW>owBres>r!J(-s#c=j2Tk#I{S(VgR}D#P z+<}#<@Qj*k&Q45Em{nn--iRsQt|Yg};6yyDO}J-o9E`Cs0W1ryZa=+T + count + (input.link ? 1 : 0), 0); + + console.log(`当前连接数量: ${connectedCount}, 上次连接数量: ${this.lastConnectedCount}`); + + // 只在连接数量发生变化时更新 + if (connectedCount !== this.lastConnectedCount) { + this.lastConnectedCount = connectedCount; + const targetCount = connectedCount + 1; + console.log(`目标输入点数量: ${targetCount}`); + + // 添加新的输入点 + while (this.inputs.length < targetCount) { + const newIndex = this.inputs.length + 1; + console.log(`添加新输入点: image_${newIndex}`); + this.addInput(`image_${newIndex}`, "IMAGE"); + } + + // 移除多余的输入点,但至少保留一个 + while (this.inputs.length > Math.max(targetCount, 1)) { + const lastInput = this.inputs[this.inputs.length - 1]; + if (!lastInput.link) { + console.log(`移除输入点: ${this.inputs.length}`); + this.removeInput(this.inputs.length - 1); + } + } + + // 更新节点大小 + console.log(`更新节点大小,当前输入点数量: ${this.inputs.length}`); + this.setSize(this.computeSize()); + app.graph.setDirtyCanvas(true); + } + } + }; + } + } +}); \ No newline at end of file