From 5a3c638a3f291bbfbadb7602a4466b13d6f5c9c6 Mon Sep 17 00:00:00 2001 From: jinye_huang Date: Sun, 27 Apr 2025 15:51:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E9=80=89=E5=9B=BE=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=A8=A1=E7=B3=8A=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/__pycache__/__init__.cpython-312.pyc | Bin 396 -> 396 bytes core/__pycache__/ai_agent.cpython-312.pyc | Bin 37504 -> 37504 bytes core/__pycache__/poster_gen.cpython-312.pyc | Bin 37572 -> 37588 bytes .../simple_collage.cpython-312.pyc | Bin 35060 -> 39988 bytes core/__pycache__/topic_parser.cpython-312.pyc | Bin 8733 -> 8733 bytes core/simple_collage.py | 255 ++++++++++++------ poster_gen_config.json | 8 +- utils/__pycache__/__init__.cpython-312.pyc | Bin 374 -> 374 bytes .../content_generator.cpython-312.pyc | Bin 20226 -> 27562 bytes .../output_handler.cpython-312.pyc | Bin 13191 -> 13191 bytes .../poster_notes_creator.cpython-312.pyc | Bin 29886 -> 29886 bytes .../prompt_manager.cpython-312.pyc | Bin 28187 -> 28187 bytes .../resource_loader.cpython-312.pyc | Bin 6945 -> 6945 bytes .../tweet_generator.cpython-312.pyc | Bin 34372 -> 34533 bytes 14 files changed, 181 insertions(+), 82 deletions(-) diff --git a/core/__pycache__/__init__.cpython-312.pyc b/core/__pycache__/__init__.cpython-312.pyc index 3ce90a88ade7825f3061dba8856285e1e259a461..c040350c99a718f115c8171478a9de7bfa31b2d2 100644 GIT binary patch delta 20 acmeBS?qTLW&CAQh00c1?c{g%5G6DcEM+A`o delta 20 ZcmeBS?qTLW&CAQh00g17+#9(Y838Ml1M~m@ diff --git a/core/__pycache__/ai_agent.cpython-312.pyc b/core/__pycache__/ai_agent.cpython-312.pyc index ddbb6baf6e172d0747167ef938e00a6e7305237e..dae3bf4b691a84975d843171f97632ac72f24294 100644 GIT binary patch delta 22 ccmZoz%G9uwiTgA!FBbz4#9ZXv$Xz-K07!cVMgRZ+ delta 22 ccmZoz%G9uwiTgA!FBbz4WZ&o5$Xz-K07)MPUH||9 diff --git a/core/__pycache__/poster_gen.cpython-312.pyc b/core/__pycache__/poster_gen.cpython-312.pyc index fcd33a358b6d9f42b7737a6a86304565b7433ceb..18f2c485c7c3d711d88b6abe278934b0c24866ff 100644 GIT binary patch delta 3214 zcmai$4Nz3q700>z&6j*g&?>@$sH}X+NE9IirHEDmK^j9_3|ZL6@|xX!vaMq6nSO)%5=(SgQx($_kZwk8fur=4c1?bvpv=YJnzF*8k{ zQ!=fU!n#$F|+(TjaNh zBKuNP_=UYp9JD90$Hj;}+quX`{~n&+!cs-D<4@v0jxm-gMw}JwIdRSTAnWIr%Vjgm z>!z30zff~z=lhvir&3R~zm{{VWqL)?bVjkb?JCS^zg+$Q%+|!NUS_wxy>5%6rouW^ zkx*;5UUin%##rBpvDey#Kem$PMNY@=WR5)A63-R)hNao^f>sMfCI0I@}_o)g{DQ~Ao)G@!JN86<*T6y4_j(Lv_;U+v zf_=XaMby* zw`vS!DdqZWFw_7JgaIAs6?r8YX|e<^vpwx<(Cb(DfM_Y%$ciIlC4X@`0x&%wzOiYj z;3$a?Yz6NAN2tbRr3yP!9V0SU**+|~aK{vb@A2j&aM`!L)`@T8k193a_9SR7P+zJSse@b**j z5h))N2OfJjwwT0lIzh}dr;Fl{J@QQDs-#bM{H?k#XP$%uyRPa1g^n-^Jo^CHNZ=vi zsyAd(WIFg5lyHBS{?qe86+c3M{OjfO$0{BaiyHPM|BQ5ot6K}Jx~hfvd7(GByhsN~kBOaIdcLSH)tJr^H=G$$mP~9>mUliuM!MLM^Bilupl(qa>Fn{V6*s) z%Ff{LKspAz1qfh*;J_Y8P@hBFNjD6gXI@g z=*JlT1o#`lh-(k@C~X~DK;wqpr*zXr{}IJ~FSwcAh-?V`)>3es%zBatbgU-t9)In_ zAG~~LLX^83C@->oBcJbBzO>A5o z@6UC}{7;EX{i{~U>liIFcdfivg`-B#bQOQ|*no!}6>A4J4!%no-VQ{gF`I?5;!{KP zA?nb&`?-UWNhj>gSRqvdTLBxe2GD?i0J87qJLt3Dl!GuSjGE&U^nmv@CoodkcIuq&B&8(-bLc}(9(=sn8u-@>U+bVel5NW?XN`2p zHXJIkux+C2#YwhZTD>!1IWBf-?U~7F9AN&9I_TNx`mm& zKU(T2g7q!2ZfrR#7GovpPFv8chUk~JIyS&qwz%_BN!BXZ$ok2WxG9HJE JA)Y)I{4WggA6)Rw!cqPGR zI>w5McuY#PvHa0=>SSu#-o`dsDr3}6d=(q*LQSn&z*#5EIqiv%**(b>>7W*ffCmQY+ zY@J-RZB`*?jE)6H_e~a7u$q*mi-`HXs`ZwJTJzP~bPq9Kv##1yXTDZv^$^yRQcs-P zJ1N_V@&p0&Sozn>)5;5inIZn+qBA@ z67w@q)NSEVObvu6-3%^Sjs{{qA+?j1L$Q*B(?T<_MLKl5D)*}G`-ANrp|BjIRa_ji zaB%QNGdV$ba_FyMg@uLeMs}ulFVAV(CH(m+b{hbD0SW6?VVyQY`V0p>wL^)j^G~pH zDNdL8v@v5qr#GFPHT%5ixmKG)&qxwfJ+B)Cv=AEMB^c zxY_kmb*Tu>-08YCtn|oq-i^xe!AACMSz!%ap(PxgHY0lCTU?IrZ)K^6`vT zXKJ=4db2J`T=2BZmW=*3)w$p+F!kw}*XwJp1sJj2jm2#N>?9f1($r}!UV z58U(^{}=qSSbucWC@b>r$sFf0J-JJXh18G|r5D)Oy^ge6E}Vux^Z#?ufughC+X zS7`-!^a#Z$(50~A_l0A$8 zYC`+)*)qlBfR$poZDKpktXxYr5*Ay#3onV(IUo@MnMyFjC73I~S8%nya(XIw&UW zPp~IaXfkTU!e7p?;kF5T2$|Pu(yi1N<--hTJ2U5bB%HzV^D^{Pu%Q;y`i3M9CsHF&m5+%XshaXrtYCZN$$G^wp9}>^pr+BoY5>>`q_#Vlj?U zGBac419y-!d`-IPJ1n!`NscpDf6d?xE~0)w!X2Ypcvu3VD1VClN>?AX5v~Fg^O|=f zSP$T_2jpLniNc#Jp~oK;F_$Zo_}rd1jjY;_$+8QUK!C9BP@TQgiJBlKwEAi zFrv${_+bvVGP*#U7}%FeuCU@my?exE9CNOTD8C4HJpdP^TL6avEr1^Y{tkE<;J|&m zK#5j2h7tSAq5Q)85Ta{%`hBt4=i=Lt{+gA%vV@Nh&nwj?vW4}2<1*RG)*d-Fh|csl zO;i+Rlr#M0$-x)7fCT_tL;QxL+d=IBcmZPa2;YUX2|sUQ_rHK!fZKpO0O9*nxWJbH zD@Z;^yk9gMkO`;}z*>h6Ng(}6>|k52_Mf396M2n!kDn{K4h1n*E`vg8@d<~)OD_U` z#`1^v^4}TV!!5>7!8afkaTm7vnMrgN;IZNmxe(sXkF0cJwX_o2_u11Y3P=?jtIo4o sBEC?R|F-Ts(N9Pz`^QLi@lxoB{E3t#gB3@KL)Wl|lcl7N1y4r)2ar`B1^@s6 diff --git a/core/__pycache__/simple_collage.cpython-312.pyc b/core/__pycache__/simple_collage.cpython-312.pyc index 82c1e67916cd8c58306d08f63b0de2de1f5eda93..f3a325bfdb223ca6cf02308fdaf1dffd1011ff93 100644 GIT binary patch delta 12666 zcma)i349ahweQSm-)z~EEL)as$;OMk8^U5^Fa{D98v`L>2S<2hBjb&cjF*fM$%Do; zQ0zCMU>Ny(#bZ-FME6B#R~K zou7U5t>-)EeCPY-JOBCa^-&itQ8B;M>C^-~{8zf|89(WZNhHtoWj|X@6ExYR+o+?6 zB?K+qOVF}6C~QU$8)IlKE#FISjHMNOiH&+%M=K#0N2?$gPpg3%Tt-^6BZnXuB}KRl zeOH>vJzODa$uQCqXey&kz>?f3rxR!y{3?JQu~A8zkrB6poUf$~P+;s*I1&Q}?rWKW z`-n_fI~@i;0%Ea5tsn@J1_E+qINLzb)K9TKBq~94kq$|FBGdMif&+*{pcY^(cHC!B3n&FTHbakywP0j{at;gHd6yWx|$@zbSX*!~aM%QKXTpk{u#V+@EEoWa_X@jD`rncu zkppp1%yO(-&Yg^%W3^yXiev_mfUM2w@wylp7Cgb-jmXPMo0L2u&YJs0go&Tj{fM|B|4NUrZd5)KLvY9kr#B zAbb+9lsSZTQ3 zae|hdkc4w2!AdM_4S4{CgFilE$aZ-gRN}`AfXk|C7#c&T`JP#NvS&CJ%N?O$o z{Vaq}71dJ}ZcD3hxxu&=Z*ph=0+*tNRV^mo2$h5zL$d-=yqE|Bk~mNS7N%|48dm<` zw73bMnw5ey;3qx}t@UYHO=AkTx+pnT$I77`oX@9XRYI9%A*QKxh07yCy56qi48Miwe{2*0;f4IE^H5y=#tk_B)FPS(m`YpUYJku znMN?_KE0RZ$}Ltu9nb0?w9E#AHu&_r^<8rDw}b2;Iwc#34$@(4e+v9s9bOW_b8o}0 zb7TKYH;%sRBosT;#T3?6v<*1m&(dH2BelRv+{|NZN)?h#9%<@JG= zg1rZCygqc}*xnm{p=X3+BvHvUc*-I<9B`Y{9n*N&~yb?VA6I)JAYl|!2R_urf(C#1z zKM@={ar4~aziY}eTe||L4{RCi8M3u!LfSTY>6g*=4<0&qmn~G$lxZ8d-PrO z|0;rnR~k!ff!)|g(gaJ^QJvHdSWulLBO~Euhv^myy>rQr$s;5z(*!BeMV*y^k4f5b zFP*%!NBF(0{*%%Z2+*g%1xLRDDZOr`cN_d|d{q^n^8ePOy z=WS)WYU|s(ySr+eo!+|bh2>4HbmlnP17xQM?HbZhS>EJq-bOp;cQ5#_D;VnXD`4ZnL(m@L zO39VgA3m{%V9eqmk{zzD_6$fz>u|lNH~7Poe|h(XXg3G1i-UHsji$v zK=)UFDf;H*<;#=r9S$DY7wmllj3U|um%6ahg<&5x;LQ(Sx-t0jyT^M3#zBVL%N{ zYdv+XjLQ>HL0a@ukP(Z7l3GzJ^){EsEBb9fRo~h!IyIa~z!yDn+^KS7hOhtvmhX1> z?!v$0FfW5_o@L;ddx(1pgi3!%yI;$j7hFlcqT@|9W6G7crL$DYlNp(>mz^pb+&-Ey z``-vMaWQ$+dCg)yncbg#vY@}<40TR%T5(Q$T06A<($3MG$}!8rI}#$va$9KI<6kN! zCbfn`)%&ZD&VFsiKmi8?@x@j$q92(&(ev+lskk(m)k3yG$izTxzeLMxp@;t>yedx zD+d;TZgkvMKN0ajgog>Lbqo!i)SI|pNSTYBkgXEz7w1l_h_bRRd zpAN2kpk&lA?Ti7IJ-=$*SpNFY9qYqvmwax_N45p`)P&B6y70-BS8}dc_@wGF?TXuS z!eZ@NK9Q1nhfwRL_o^lmlX_(nR)6NnmHjJ6tp&ZRFVnK`5L8@7?-J1Lh_BDb`3D_; zG|vES2IBhF{j%FKsJ*Qwj7djJxYCLIlHTP?Nc2 z8E>bKr7Z1LPgt`CcJ{BpA=3v+`gOfBw5PUD%cm{8;xE0D$FJDR*V6n}7oSo;rf;}r zPCC-j*KvgHV+WQFx<}1(E@krO3SM6^Db53*{_L239SHf?J5Ca3{M&mpN$8V6dR6i@ ztzlf7GNMi4ZHul{UYWtCE*aAW? zT(}kX&m(Z8W~n{NEYS#qJ^bvE(3FpA(LTP`M{%oT(vl=B_28L@mF%HtJXb@lS*WFD ztmMJ77q?oP1}AkR_pb>mib)f)a9W3Ry@vc}A@`?*6v`*XBpJt@*BOMCK3SyWkNnV) ziF7>ZS5wRyj(pB+m$H#abTh0;pWLTl<&2GmAQI1)Ofm|V0c8(~E%%WvbG-P%6rM&S zcS>r=RN_%TItHQ11_Dor54W_dzN;mz_9-E9QE&^=gvf>RsZazsN2?xWjYsiAnovyh z9Eh$7oue&WaiU41d?R#BfKUwWV&~4cm5>=|9XrWt!Uxz$D~i=Xl(P+@9Ia0y%tnlG z2987%5YcEoR<8sPubb)E@04Hf)3FpCC&cR#I^L&iF+<)E${Qgc3wcv0p8$D?f@rgl zr|3kV4hNr`gpNX6SRK&h6SA>yIOhSlwW`C}SH0sXX9=$az1Nqt-g zV4QX$DxP{=n~)PELWrSzTzxkTN!u`z>W1JLuml}MR52|@Ud=Tr6w{`<6I2uINw&aHfk_I+{zrB`sh{oI8j4G zkq0)=q|X2zNC~1FVEdYfL#4z{K>=?3(?DwN9AK$9D)|P5gv;k z)1m`f}z5V##A#EP)o{>O(n}J*Gtwv=G-Hwy1hc3tX|{ij0RAE3ie} z1NLAIOcJ^)*OzL1*w?vVrN$S9_B}QhoD-sPU%Yo^cq-X=x+v_N5ZUY5_{P=3WTvJm zG7W4D?w1fXBg`f|5H&k|>Zn<^pi?@v0<5BA)iBplfx5W5>L>`NNuPSRdQIqeDwqz% z<{BY3j~*rK(NR`sq3hF+j1uPFOC2~Njx)voA=%3w<(g6~NFBAcde?-tZF~l8;SaBq z?^DE4(th;;R6sx>Z|r|N_~xUZAzSjXK0GRUTg$w_*=S6im>=q+tcS~El z7mw1DmktKc9u2-a2ocBRyT?kz;P_EsA(};m7h(n+Z%Zl;1s@_b5so~>i2Zuck0JU% z2qFp+;7GeA_r@!iMQL&9_g@CV(i<2zT|2#VdV0Psy>*w1X>zuu-#ELUtFT*AMOC0v zh~3aT!E=`)UAdih`<(BE6jm*(E?m|O(5x-ONfasH#>MSQnA3CQ=BdFcte}R$$g$h> ztOsHnTL`|j38-$F?KI`y3!9~T2m%DIHr?bG0?=wQ2j;Mtw`S}hi@85!G?RtgylKa{Ytvry=P?+AGA&42 zk-%$)U>G0)xvLZ6K@a1>i~<}8Q6Dj8!xVE6%VjQx0Wf+e_QEKS*^T6RtWrW)=;?4n zBq?`$>fKE)#*1~kkhEh1Ipd6Jp<9~+a*wkaz#yiKi^(!4GhJ9Iqg~tD8v^pW?XB)Q z7c(2n5;~is{j*P2^j8d) zjwa9SRbETAoowiD7*8!6Ni7`g8ci+j)!dU4#)KoY`(_`R-#33CXUvdyfx4(Tuehi? zue-E;ta!zbi}drY9ha8>!_o4#F*7vHDLOaIenmgaOY3Et|g|O)b?xn71_(L z&b?Z|XRaSh+%Pe%s9!Y+HM)KspHp>p+10sx*1EC8^%H3s15Y3AJQ_P`Og^%rZv{VX zEx+zLeyx*F-!^8fn@CO@h(9`~cjfSZ^$O= zA}OY4RA#Q7F1?yK8#2GuFPs5CpGqq;;OF-_mAbXFsn2HSK;{prm09pJB3m2_KcAc8 zkY<~Z&Qq-|l6)agU7IWUVj79*OyvAUu53PLij|O_)+Dw^wxjE5A)jx37ii_&`!jfs<@|% zx6efc2LO+jc33CyQAqH2!H1cAY+j9|42VN5ejND-3j_!KnER$U*Rc@t0cBgO$BlRi zV}q=KH-)$M5KPCM;ZCfwbM6v7xr6I2`5HbPHBCQAnNVEjDv~MbmT@sNYhe9vnYqr7 z;xWGf5>R-yx7XLh>i8WN;j)YpvktRUvW7kZMahcw=}2%pWIh8DP`K*rVQqOtfQITU z2~b_|-#HzAr;Ccja5HAbYY=8+&H@qP6mDRhl53h3PwpS~&)Nf@z}}kkH|kkIks@q) z9LO#FCL;i(4ymY_pq@Z*R&J$Y{W44;GV74u!floLKM^8K-BRx9xw&8n-`uLF1w$Zo z^|0!K*5cPNs0FQ>n%r$3*rFikh<{|#kb`Il&QhLfUWj=ckboLCzUJC`1~<$~Zf$uk zS;4(fK1(iW|0efd`E>G^!?(*n#czJ^%{NMCPHB7;`rm+mc%%yitpwErWVNWfs0`FH z$2s|;e0wn_KS%Nfl5rqlfp0K>DdAH+_1P*^rLf7*PVy3oZv@qFODTYAO7v)SPIPgr>ABss?e-p z4Z#rq0cl1cXu^hL{rHdz8tR2dzJU2xY=Cam0RQl47ce*(p~b{)s+kGy(^r!&7p={` zUGto1SHXt3u9yiV51Cn5`hu-DKy5(L-r}xrW#IM4w0d!qK)^hpSh#G_v+&Qb$N{Yd zNUFOqYQ2#-~jHhexF-jTv@0`w+txV%?-64cejhNao?N< z1TXm(Q-1~GvEs{)>s=*>f2l$MM49uj)s#>&YM5U&AOW-PeC8gh7ra&2Xp*pV71zEt zH&t-Ne}Mcq8X$;o3kNvB?sq_*yS#SRVqx8Vr+KEf9NqV+G;>{6$!9n$>c#v4i4BMc z*Z$N-2`N#5At;Xch*`0bf~G2x+f!oZQrs%;AJ_d0Y36o5lQcZJzMRrbX|{~Z+mxw~ zD8(egft=aFJ-2CLjiAO%;44nZe?g(|+e5kAn^G*OP(Z@8b_67F^oUjsKeUV9{uXMI z8}@cnbF0Vct_$BgcpmjCjOaCdY;zoLE@!rEmefosh37)?`;)M#2;SbF0EO2tUJm|n zAh>TZc>Yl6=EI32Hu2qt?%qx1+Za+b!CGg9==beVA(}vN{x>j-CpK{fO!@uP#Kt~6 zvFX@cc#V7vDe!bx1HAdfJ%I^e<)4vUL-N0n*nkAIoN-&RXp~{dN4-jRY>OxRhj(wg zhst~CzeUez68C&VDOtt+kA^gH*FN2#+jK)Y@(1ixm#SdU0lg5qp0l#DDIvfb^-3z_5|{ix7C;a!UdW*iqQ}Ui zf|LaQ?{>@KPD>`&*y@n8BooKNb&41h0^3qR=#<>ttyb>d1|#?TR<)E#3l&Txn7Gec z)sh=xo@x})@XuORQlBi;W@j6=fdY9Hm&<!5#>}Ey*N;feTQy zdGM{CrQm`JPCYz=k@dc~mO0P@*XKhI;Ath{qQ>dSAvOZw0-71(nntjIY(C1B)ibl$ z7!mj-^_-n?6vRd;9TNs?L23QNA7c(26xGh4dNU!Udo$MzjuX z`ab@2LNpN1#;k$6Gs68D5u?irYYIqUwom7U)hIrVIfw*SYJ?F0N`DXu#LHfQ)9HM= z-8%3u;dct9bC}!z85ju|7B^#;os0J-t`l+s5#g~Lm-_)ri+n?m;4UIa_V+L{fsufX z&GRO2kAif*2N4tc;Q1tkFhww`?}W(k2qoNpnY{E4-gM!L?THDYt2lU)E1SZ(xLSJ_ z_r5pAfAbeF+<4_ATs#2PrbakCbnB%MZ+5az)iTWAl`V4bQkVGB5-EQ0esCS z;A6R6CxVE)1 zKgP7Qu)$r=o!eDXWrJ)O3Ojo}d;tRP{#-xYBVufDQNjR?Lg?7J%fUkkKf?VX8*>E8 zYv674HvBSnPScUme&@C0Yddh$owNjAv}Y*UsO(@N=%SW1c@b3K0`t1H${E z4cReB29S7=oI>(bB*N?GXPDZFe97HT6zVzAHT3*>Y8W=y)B7YhzmL zTprKVB_U=3tiBl7?mY28;4VZeH`(|eTH5)zLz^finpWQ`TbSfD{rYC(>^z0F!d}0crS4|$xDs5DUB@t8enwG`BU)R}lD(&y;*xL}GfT3}_w6{q1>c z(rL0rIF!QWHJP|T@x_RT>fb+aHZF$D7Fbz#Wl#wB%cV-j%zgWOdi+AD5c^4(MVNk$ z%V!g_P0%c$b<&OPa0NZ0>m*DmvbSSF8TZ1ATgb!Q|9R;5ibG=WgW0{5C6kH9aV~&29&jM5zO6ETkDY2FoLwjQ0$;Wpxf;VW&`wan8a@) zzkoXCe{%Ysxm6vQ6hsmP#(5AdDcC_6hIsaiUTB}j2!Sq=eLdy{KEvjuA5kML~e l`g&}Me0c8_?>?2df+VeXwsN2J?7Hs(rRbzHovWd^4s0U7`xj|HtnACU1mVExj*KA zzvsE7+}bLRsb&QE0Y*@quHpgh2CiW5`^m`z5(AgG~c5;RbY7qoy0PP3rfIg?>THODv;4qa+0Z-bdf87H%e z6_`z&z``h*zyZnyvmk@{3c&*3VK*rStDu0lN=O9y>?So(XNZq2SMFBYZDBKcG-xIv zHZdiUQgkr_`vW$>)FEs1+0BtOE|V6mK@^_7fZEM-#%o0T?JX@vpx3gT$748ElLBggV&uQrEGA}?##CnP|hm;n%0)O#DfqR112 zZYj)vR5zO~8QiN|ATPJ!n0$l+0J~g7g-yU1=z}@SigVyKCPPpH*g0_-yu@YXE93mM zBrM7iiU7ijW{1!36cyO;0I4zM*-EfDAE6Y$9w$nSkzP}Qav?S^A|IM6*-Bz+vH^GL z@r&8o!L9Kg+0>cp=*)k&C8h{^vL^GLTUCjE)cI$`aWR8tHqa_uI)3e#* zjKH0gonv7vJS?MO0qsCjjXW~lKt9`$k*f(P?j9XbR587(dd|hvb6X#0n4l`4YDgyWn^L%jR8sV)nev-QTx*TESbF~ zeY4>oiWC>r1USJ+w~$OQ1vMTU)Z@qN2~ame-8^2mKwSlOE3I=vVo-zMUI24I%SizZ zVDd>tluMRzF+r_A2lb3kKppJ~Xm*0liY|#iV+x&_N~xszbI6jz){W^WRngI~UiYCP zWbCX08c6|lKy$zTHu!>&iSD2c>{^foG%3K1XErXfm7ky;U0%P6EIE)ChvcH_4r)=n z>a2kFZq@p8sXPEe_S8NQSr^b&F=OnJdEd_K3{i#}3W(!TvoR-H z55@&_4YSd3*f=swtc2v59}uPm^mnt=1G{;W7Ie|+pe1yV$tZR4jA$zh`jCwJesjiG zXCwXaq5WpUsWVs|Ig^)02CCG=@T8XfE72h%l|n8q-Q?Z!Ed<$~je;zQ1~rp1WezY6 zb3rm|sw}1sqvw6-x5xTR?&<#_^h*Yc^GomP?}h%n*!%_9A3vFXEA-DIEArFLy1?Z2 zI%v-)ZTGZSL%Wf@dQbaoXg8B^etPoVbZ`Sn8zh043T*Lr^#+Wv6kt=tR%juPlnk=G zFk$xiQUr8hHJM;FasKM4eFfr#*-_p2*d9|Lu3RJBf} zJVT=V&~&uFdnrdL_HjKYr_!9lW0^!LeGcVrlDqY>Nvpd zX>Re?32w2Bzxh)wi9Gdkm_0j%L@_(H($ajkj%A4;WjvPNldW#a*2S1MZU@{wma+nUU7FB-zMi_Ld{vueEJ&V{Ih z&h`0sH#%XYnQwLbckn>k<@EDDcN;eH%TYr-Xh@>S3tp#>_jvuhbC=uaFXPY3+vJ4} z&8{{Dpwso0ys+8hYE#P#w>34lr94aui<8Od11W49VT*U_XkcQ3WfyIvwRoqJ#xsTF zPsL4aK6&)P7Zf7KROCM%Jl&ofRyBHEF5omQcY8ptc<2c$MTbZ5Hieb-JG}0CXPEQ) z!t!Q^e@9qJ8S;e{PEquVFd5hbwndC@!W!qUdS^3gD6DAowmQYI+UXH|C~#Qm_HB1J zI>Yh?uiFz=wK_x(e6%DiYjk?TN}r>txzQ;FNEk+i<=$p!SJitxPdY_^Sm|hnx)4?f z&TTC&aV}Xt?{9OP=r{eMqu#mAQNJ^+X%^ice;qJkH_<35tch7(SV0#6BAfn_EC{nc zEZH=ThK2A6xG3uUYtF|EF8OFg!xZ&#mj@DHWK^7aeB!|_V> zx;W;;X&hp1!J2I5XBIh>f0ndl`dXX(qeUf9`T5++Vt8G$FUf(|FAYl!Yty)2rObrN zuVqVS!0VH|DkHpx%i;llqqibvYt~w1znPV>)+oEIVWE6kim3N@^AGDKvLI|IJj?d4?7D(?6dN* zzr#yBbvIB8rEz#6b}T2QOLi=vp|r;7X=!qb4hW}%*fkd+4`BrYhSYYg6cZoC25|U{ z_yW1MB+p&}#jv{B>vN+?(p!KJ1J&s2^1Nuq(fi5l$|BZ89F*}ffYw;!9Pu;{?H2|mZ8{z-gdKaY@w@Xr8Y zm2>-c@B%)u;``MWHUlpN8p`GY=p`5VMDpHhHCbDopezIr?Q11}-kmkrQ@x1=-ft}X zhO3R;WJEX27&9VeRP8+%8@dQ%xC=x)Ajb@J(AWdm@RJzOm3o+zuF3=1g;gupP}z&I ze~PqJQ0dMCy&y^pMPcXYk7EUyok_Wu!mHGWgzizLw3M(7|>Xe*=E-$SbIv zR2gA*m9(^yc+e}l$$zcQ&!YDCD%Q^-{0P7sHXea4^(ri>5LN?#mA3dDjm2S-%e0xMQy2)D)MR4yd#VB*BaTj!GT&M2j+8eLy5|U zsso8{;r!tkoFZ{`i5VYa9c{%0KX~*NBIavxR0!e?}hw}bc9tc9ygpsaQui~KW_X~+FH4MX)XN1vL?qas!1rhJ(3nwcwm9^ z7xyCN6$tdQoy34Yu%~^S?VWnO&{TmRP`jI4b$B3)8RXjIO{QNUm0u!!g77KX=$J04 zt_vJS7Ww@=lj>C#w%{=t`5gA(9~^BmP~v0GJFJP?-$|T?I}iNX7FS*xHLVw+{uj(^ zU{EsfcI1trGCs`iBBx#Rs_ti16S|2>WjB1AJQ+J?Wmtko>+eJ%#!~ndof|%iwgLEC_l-X$`tbLDOuOAKcnhf}Zb)XNxR#f?te)YVPvg zdNI=y+uLniJ}>@Gl3}s9Sh7*dG?jrG>J!*aPn&)$-ESR?Q`dpVky!{Y0EAVd(*-9F zY)Nc-17QH+Ji?m@bc5>2H{u-0$3Fv&<33(PYJKr+`Jl^p2L;^H^3CK0u@PZcDZ8AU z+LbA}EVL`wwwI9VH!+~zZ8rJ0UBy#nq>|A+(vPF3h&SQ49)#X#y6Py7lnz)d@dzkw zSmtsxi?^|QAIlRL;}FufJ5^e_XUX~9CG5_@vE5IjV9nnxX04RZ37`wPoD2nKZKmdh zz7#x|S8z&uyMxw!4u}m=1iM072�Qx5baw4GdSsf5Cye?QV~wvCiEDF}x2YquT&t zyYgT$dxD6;0Ba?m2kWPW4dcOJ9Ss&C#g_o1MKueX1LFYPGo*3PBJOpLoZFL8VTCrk z49?XF&S{D2A2=)9hdD*s?MKMv_Qe`X1gDWxIf?8svN&-Dd91^(hNO%FeoFG$v`q3z zqB$wRoP*EegGn-}M3aG#dzmE*Fn8xPTyTES44^!yf(#%YgY;>LBYXFzTh#$I~sWCcIihgxoAxIn1a$pPND6{Jy1#nMgK88G_uNW<0m2h3uSm z3WFc?S;*Oa2_Oz|M4nj6Kcw{IX+@tvEdL3&bJgV3sUNq2G$xi%g>=JrF-Zk!RXO=! zzb%~&a6i(XlS$*YfCU8&kbW|VO9G099F)QsOH;8-Kq@oEGlF??vM`_sC~>vMlNcJB#7L2ZVi-t| z%n0fr@%Y82v}J-ipu68v(^P{dsN181+z5S7XULOQo;gqB=C*9#uw3#pl_lDDLFBbNb$G84Y`b;8OwP{$&Gye`g`x+ zID951%;e0+jdsX~Ov!;ryhu3^_`dWRe&*(_cc(z8kL0I(Z1mV0k1StRxEwucqD+k%yj3?&qqFL!M9KIUqd|RRydHSiy>u-%7{V}wR9e%!yuYoh54+cTrptn0CN5lx? zD|U7Z{ts*PX#eQok#WO`CZc#U&~3G~;JLvgo!&#B@5sCRB0~`8k>7PMvL%QfBEz z^q!Qw5^Zn*48qRS_%H&4oJksa=GhtTSFN^=nya?tklb=d$>`&HOS(&X%e%{u6^`ia z*VM*dL$@K6WIt0FvX_Pu%SO}-t{UU}9_V_q%K*ugq*9o7OQ}~RUb7?~U2$l|u|1b9 zgg?jk}+pEV@{}O$w)@!N8-n=AGChF=Y#e=BkLc# zvVQCE`mI;iZyR2}EmZ$R$mhSjzGbBP$=fm}J>wRo6H+Hhg)bn3!(Y>zdsla_4y9FI zEDu$#38kzZ(XYE|w)TmA^SV}F2d-%@DECLQQ2xTpGZ%$&%R}YsLe|<5_4+${CeGZq z@Unrw%~%!fTi7o47H83HVLvNac%@+daKZYkri`nJsaMl-Z>gBV4eXbUyfAK9pVw6# zvgUoEXG}I2aK$uz*fhQ0HDW5frDfu?u9$L%O}U|&i$+Z4*CB7DKco+3&K+J{Lgt+Qnov%0sCel|OE1M;uG$b<`dH|(jiF83LmOQomp>HWG9rKSsxCQ{IxD1` z6_U^T-`gu$)cs%Ym>9kFHp9W{sEt?D$;0a8P+BQ4V-BS(8c~v#!zo|+9szs&U}kc4HuE97WO{YF{AV*Vq4JS38?j``{ACvI<8%d7KF-!Gi}A{)sU7EA>LSKeRMD%f$zw1O6D_X7cHA-ugdsmzK@`f 1: + keywords.append(part) + + # 尝试匹配更短的语义单元(例如中文的2-3个字的词语) + for i in range(len(target_name) - 1): + keyword = target_name[i:i+2] # 提取2个字符 + if len(keyword) == 2 and all('\u4e00' <= c <= '\u9fff' for c in keyword): + keywords.append(keyword) + + logging.info(f"用于目录模糊匹配的关键词: {keywords}") + + # 3. 对每个目录进行评分 + dir_scores = {} + for directory in all_dirs: + score = 0 + dir_lower = directory.lower() + # 为每个匹配的关键词增加分数 + for keyword in keywords: + if keyword.lower() in dir_lower: + score += 1 - # 如果没有指定样式,随机选择一种 - if style is None or style not in self.collage_styles: - style = random.choice(self.collage_styles) + # 如果得分大于0(至少匹配一个关键词),记录该目录 + if score > 0: + dir_scores[directory] = score + + # 4. 选择得分最高的目录 + if dir_scores: + best_match = max(dir_scores.items(), key=lambda x: x[1]) + found_dir = best_match[0] + score = best_match[1] + logging.info(f"模糊匹配成功!匹配目录: {found_dir},匹配分数: {score}") + return os.path.join(base_dir, found_dir), score + else: + logging.warning(f"模糊匹配未找到任何包含关键词的目录") + return None, 0 + + except Exception as e: + logging.exception(f"目录模糊匹配过程中出错: {e}") + return None, 0 + + def create_collage_with_style(self, input_dir, style=None, target_size=None): + """ + 创建特定样式的照片拼贴。 + 如果input_dir不存在,会尝试进行模糊匹配。 + + Args: + input_dir: 包含图片的目录路径或目标对象名称 + style: 拼贴画样式,例如"grid_2x2", "overlap"等 + target_size: 拼贴画目标尺寸,例如(900, 1200) + + Returns: + tuple: (PIL.Image 拼贴画对象, 使用的图片文件列表) + """ + try: + # 使用默认样式如果未指定 + if style is None: + if self.collage_style is None: + style = "grid_2x2" + else: + style = self.collage_style + logging.info(f"Using collage style: {style}") + + # 使用默认尺寸如果未指定 + if target_size is None: + target_size = (900, 1200) # 默认尺寸 logging.info(f"Using collage style: {style} with target size: {target_size}") - # 检查目录是否存在 - if not os.path.exists(input_dir): - logging.error(f"Input directory does not exist: {input_dir}") - return None, [] - + # 检查输入目录是否存在 + if not os.path.exists(input_dir) or not os.path.isdir(input_dir): + # 尝试从输入路径获取基础目录和对象名称 + base_dir = os.path.dirname(input_dir) + object_name = os.path.basename(input_dir) + + # 如果基础目录存在,尝试模糊匹配 + if os.path.exists(base_dir) and os.path.isdir(base_dir): + matched_dir, score = self.find_directory_fuzzy_match(base_dir, object_name) + if matched_dir and score > 0: + logging.info(f"使用模糊匹配的图片目录: {matched_dir}") + input_dir = matched_dir + else: + logging.error(f"无法找到匹配的图片目录: {input_dir}") + return None, [] + else: + logging.error(f"输入目录不存在且无法进行模糊匹配: {input_dir}") + return None, [] + # 支持的图片格式 image_extensions = ('.jpg', '.jpeg', '.png', '.bmp') @@ -690,74 +781,82 @@ class ImageCollageCreator: def process_directory(directory_path, style=None, target_size=(900, 1200), output_count=1): """ - 处理指定目录中的图片,创建指定数量的拼贴图。 + 处理目录中的图片并创建指定数量的拼贴图 - 参数: - directory_path: 包含图片的目录路径 - target_size: 拼贴图目标尺寸,默认为 (900, 1200) - output_count: 需要生成的拼贴图数量,默认为 1 - - 返回: - tuple: (拼贴图列表, 使用的图片名称列表的列表),如果生成失败,返回 ([], []) - 拼贴图列表是PIL.Image对象列表 - 图片名称列表是一个列表的列表,每个子列表包含一张拼贴图使用的图片文件名 + 如果给定的目录不存在,会尝试进行模糊匹配。 + + Args: + directory_path: 图片目录路径或目标对象名称 + style: 拼贴画样式,例如"grid_2x2",如果为None则随机选择 + target_size: 拼贴画尺寸,默认为(900, 1200) + output_count: 要生成的拼贴画数量 + + Returns: + list: 成功创建的拼贴图列表 (PIL Image对象) """ logging.info(f"处理目录中的图片并创建 {output_count} 个拼贴图: {directory_path}") - # 创建 ImageCollageCreator 实例 + # 创建拼贴图实例 collage_creator = ImageCollageCreator() - collage_images = [] - used_image_names = [] # 存储每个拼贴图使用的图片文件名 - # 检查目录是否存在 - if not os.path.exists(directory_path): - logging.error(f"目录不存在: {directory_path}") - return [], [] + # 如果指定了样式,设置样式 + if style: + collage_creator.set_collage_style(style) - # 支持的图片格式 - image_extensions = ('.jpg', '.jpeg', '.png', '.bmp') + # 检查目录是否存在 + if not os.path.exists(directory_path) or not os.path.isdir(directory_path): + # 尝试从路径获取基础目录和对象名称 + base_dir = os.path.dirname(directory_path) + object_name = os.path.basename(directory_path) + + # 如果基础目录存在,尝试模糊匹配 + if os.path.exists(base_dir) and os.path.isdir(base_dir): + matched_dir, score = collage_creator.find_directory_fuzzy_match(base_dir, object_name) + if matched_dir and score > 0: + logging.info(f"使用模糊匹配的图片目录: {matched_dir}") + directory_path = matched_dir + else: + logging.error(f"无法找到匹配的图片目录: {directory_path}") + return [] + else: + logging.error(f"输入目录不存在且无法进行模糊匹配: {directory_path}") + return [] - # 获取目录中的所有有效图片文件 + # 获取有效图片文件列表 + image_extensions = ('.jpg', '.jpeg', '.png', '.webp', '.bmp', '.gif') try: all_files = os.listdir(directory_path) - all_images_names = [f for f in all_files - if f.lower().endswith(image_extensions) and os.path.isfile(os.path.join(directory_path, f))] - - if not all_images_names: - logging.error(f"目录中没有有效的图片文件: {directory_path}") - return [], [] - - logging.info(f"目录中找到 {len(all_images_names)} 个有效图片文件") - except Exception as e: - logging.exception(f"列出目录内容时出错: {e}") - return [], [] + image_files = [f for f in all_files + if f.lower().endswith(image_extensions) and os.path.isfile(os.path.join(directory_path, f))] + logging.info(f"目录中找到 {len(image_files)} 个有效图片文件") - # 尝试创建请求数量的拼贴图 + if not image_files: + logging.warning(f"目录中未找到有效图片: {directory_path}") + return [] + except Exception as e: + logging.exception(f"无法读取目录 {directory_path}: {e}") + return [] + + # 创建指定数量的拼贴图 + created_collages = [] for i in range(output_count): - try: - # 创建拼贴图,使用指定样式 - collage, selected_images_names = collage_creator.create_collage_with_style( - directory_path, - style=style, - target_size=target_size - ) + # 如果指定了样式,则使用指定样式;否则让create_collage_with_style自行选择 + if style: + collage, used_images = collage_creator.create_collage_with_style(directory_path, style=style, target_size=target_size) + else: + # 随机选择一种样式 + available_styles = collage_creator.collage_styles + random_style = random.choice(available_styles) + collage, used_images = collage_creator.create_collage_with_style(directory_path, style=random_style, target_size=target_size) - if collage: - collage_images.append(collage) - - # 从输出日志中解析出使用的图片名称 - # 由于我们修改了create_collage_with_style来打印选择的图片 - # 可能需要进一步修改为直接返回选择的图片 - used_image_names.append(selected_images_names) - - logging.info(f"成功创建拼贴图 {i+1}/{output_count}") - else: - logging.error(f"无法创建拼贴图 {i+1}/{output_count}") - except Exception as e: - logging.exception(f"创建拼贴图 {i+1}/{output_count} 时发生异常: {e}") - - logging.info(f"已处理目录 {directory_path},成功创建 {len(collage_images)}/{output_count} 个拼贴图") - return collage_images, used_image_names + if collage: + created_collages.append(collage) + logging.info(f"成功创建拼贴图 {len(created_collages)}/{output_count}") + else: + logging.warning(f"创建拼贴图 {i+1}/{output_count} 失败") + + logging.info(f"已处理目录 {directory_path},成功创建 {len(created_collages)}/{output_count} 个拼贴图") + return created_collages def find_main_subject(image): # ... (keep the existing implementation) ... diff --git a/poster_gen_config.json b/poster_gen_config.json index 345dd3f..718cc5e 100644 --- a/poster_gen_config.json +++ b/poster_gen_config.json @@ -1,7 +1,7 @@ { "date": "4月29日,4月30日, 4月28日, 5月1日", - "num": 10, - "variants": 5, + "num": 15, + "variants": 15, "topic_temperature": 0.2, "topic_top_p": 0.3, "topic_presence_penalty": 1.5, @@ -42,13 +42,13 @@ { "type": "Object", "file_path": [ - "./resource/Object/安吉银润锦江城堡酒店.txt" + "./resource/Object/美的鹭湖鹭栖台酒店.txt" ] }, { "type": "Description", "file_path": [ - "./resource/Object/安吉银润锦江城堡酒店.txt" + "./resource/Object/美的鹭湖鹭栖台酒店.txt" ] }, { diff --git a/utils/__pycache__/__init__.cpython-312.pyc b/utils/__pycache__/__init__.cpython-312.pyc index 22cbbcf4fc3283931cd410e4f03f12e8bc9fd584..053c7667cd10c70f53b5e2c0be0aa5d8d22be288 100644 GIT binary patch delta 20 acmeyy^o@!8G%qg~0}#Yq)d` diff --git a/utils/__pycache__/content_generator.cpython-312.pyc b/utils/__pycache__/content_generator.cpython-312.pyc index 380394277c2b030699b81367b1d8bd4210bed718..49b3b1cf8778cf5c0df7a6ebca8b6c89eb427739 100644 GIT binary patch delta 9775 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 J43!Mg{{W}z`6~bb delta 3350 zcmbtWYiv`=6`r{d+t-d`JGsV*9pjiJBo2@S!aK<(PMilxSO^JFATQ(V1UtbA*OyoJ z8Y)_?phaESX-nvq*H$eov|UiNDlMp+L{oQ7FGE}TUrSjsI)ZO?sn!n4s@kT zl{%8Yd*;l{IcLs%o--FG;i1zo^;5lG3vj!9T)*S(uU$#CXw%fVOXJ^*A{KxXfCC(I zR6Eee?b@nVkOL$#U1>okDZTpU0+EJb3kWfL!9IEm*b4x!0$oFDf~W zKxN`J35AKi1QP}XM$vL8nr@{dl;U@ZOeKf^C-1HZjlRs8gX-1hGFGPF1A^+*tOF96 zppMW7=#VDy-3w>qWCV4;I>HE=2rDz_N{3m^%1~y4Y3OLG&8U)9Vx6q=fDShR5w#Lq zkE~9{7STxNWENzNG$$!vq7ssrCXu}?XaI`!JkQk3vC343A zoHZpKOa!M9b?bTbRHs!%IIOpmY?f$~wjx@Y6Lftmu)SJYJ0n%$9dNiu4Pnn#5YZ`d z8)aQ`70D?C$&8`S4Z0M3cyz+Ok_KKQ=wIbwVTzn0w)TREUUJNA2goT&YdAZV0JP&h zM^YmO#aDrBNRCE~LaJ=UT*wp*K`s=4GIW^0)L`JBf zi=?=C&VO?w(}!>Xgifz$i3*N$G5m!vR(;EnN zNdc+fA7dr|J}Dey10lh`4?W2&VxNp*+sI<=^_gP~@f~CP2fRW!W@v0(_om118xZ`p zqBtPN*zjO~K*AqM3=E2dxMB{57$y2+>K<&-+ut8kdDgYLo10_WKsXQzOWu&rA7lCh zVJSxU`$Ono*3w1dJhF-v{M&c;x=bQreN62e2uc2s6w{Cpy08l|pEy{7cGzCyDmgyR(0cPji|xeF@u9Q%6PCiLvGC=?bjxIV{&;%+ za{%?`2Sz?l*0bYTJr}&H$ zO~;!i`TTJ{KU(M+Z5geJ)^Cdzv`_LK<9x^G*dU%Z{XzrubEa(hhnuHtcEw=-<@&1| zKHl=nEfco-!_5y2wkf;oIZ&CL$7j!K95vQQp`5+^EImPPqxFY$7${m*?AH2t1$o{p=~b4S4@waIyW%`x|}J#k8f!*b-D z89F(1Vg7_;@i6nqmVaUCxUKl|=27NK*O)rmy7``AD$9AM`DF72{(e@`Ytb37p=W7; z&z!PlA8SU?Sq6Dj;VeIxmVUVY^SGMk`04Nu@#%eo&j7>eMf4?V4Fi4#i|C)1Vd0ZP z-dzbksZ6gfqi>`+s+ZF@7PDA?V>wGSWs9(U)3wy&q;A>C!duyppp)|CvA1ÐLu^ z#MjZ_4sEZSN8ia_fi-tCmNYEXQDa&%cT7h$7}zmAM`R1JcaPy3dHSB-O*I}`%^c_%`E2DVmARUbuM9(s5duC;-d;ZjOiT2;vX62%k^8_yY6Z(+c{;m4~K`X=nw7+IE8H0 z$5=L^lChxcj0QZp@OAfU^rTzKPE?pw)0TgbS zuaD^ly<*rebO~O`i%vJ}QI+89IQ#*!t|`iJaE?dTxs%p~d+;#v#DEd;g_*hZk7Kox;k*E%EZAN0FaX#M7ld4zZh zxntU%z&@NBJG04~+a_ok-p=KB7uCA}fLa1aF5t z7G)5Gm|IyR_u4s#3G=L@ctLt{_N#ZtSKno_PI=w&XrMC>RjubuYB}XA6}hu^E_%vq z&>uS&nPy*55GZdEJF<7#(XLdUP8GP3macpnZbJLF2hg9ldk+#0i3*zru;em|1w^5w z$4R7q0!mhu3@#^KHvz)0L_$fO6FV`)I7#&S{M)_0z8E(s20~Jof1gj>MaHWzxD1IZ zm>LN640H(r(eG=O2E_e|YanIjc2W2!ZYPU;1Ox(p0?K_9z*0;n`orYLAk-DVMaGme z8Ya>@*zP~^Nta*nUAEg-IX*$w0nUXc0k`;BVzu(dp-PkqJ z(j8szje7f{_Wt`RJJCk}0GFFLHP?Bzba*TJt>57yuckxQR1F1gu;mzUQe3T(zNvGs zuGP`ES%^Egbu31-qqi8<_5>hU&9n++VK<`-wj;Ukpdx}B5)dg6sRat z5~-xQgDBr7aFhTd@I3-22%IGF9?A}S)J>4(NHgeS(0{}SR1$_Vj diff --git a/utils/__pycache__/poster_notes_creator.cpython-312.pyc b/utils/__pycache__/poster_notes_creator.cpython-312.pyc index aedd0de1c4cad9535930b3e0ce9a5b411169b001..80700e7a1e0397c0a31b16b5d7c5a8d9dc587f1a 100644 GIT binary patch delta 22 ccmdn@l5yWlM()$Ryj%=G5Oa}tBlqSK09^hDXaE2J delta 22 ccmdn@l5yWlM()$Ryj%=Gu%U}*BlqSK09~60bN~PV diff --git a/utils/__pycache__/prompt_manager.cpython-312.pyc b/utils/__pycache__/prompt_manager.cpython-312.pyc index c86a92e1ce45f4a8fa34ce379ed583aec5e6baf5..3cb2e163e425d3e71c612f458441ffc9638f0f82 100644 GIT binary patch delta 22 ccmbPzhjI2DM()$Ryj%=G5Oa}tBey^v08|_XUjP6A delta 22 ccmbPzhjI2DM()$Ryj%=Gu+4&NBey^v08;G+9RL6T diff --git a/utils/__pycache__/resource_loader.cpython-312.pyc b/utils/__pycache__/resource_loader.cpython-312.pyc index 84310072e55babc5c50bb7cf2470a2b4561ddae8..32f9cb2e45a3a73ac7c160af782b3b441846e386 100644 GIT binary patch delta 20 acmZ2zw$P0GG%qg~0}#Yq}Tvk@{L8kF22h&yY@U*HrGN0tYQ(#avHDfBFLEhzFuvQ>^^oU`@03qoyeyEk ze0$@|D_>msFcihBn$b5>0!ejfN|lK@Yf{ZHaA#Ai(r3hQBQg981LQ=-qpMIGB_b=- zrzJy)(iGdPP%%EViFF|#+Q8sAAA&8#aqx#IBRp3u0H=u!Tf1g#-tcJNOXhik0fse7 z))xV}f7647KR>YZ_6z;De|hTjJ-@pB!_#+nzgi-C z1>(yR@0{6vd+&iSj-I~#)}Akp9sX?Sgq_FJi7Tk+X~muGoozv0>h5Uw5aYq^-MEbS z?2%9IB&h4gT~4CV{~fBwC6jAchA{Bor6J`Dhz@2zR5)`fds4 zP-K+KJeoW~)>uZhrdJjRv}vQZNk`_sG55H6sQ#L*Vi*N%4q2aaOR!xRCIy5^14YN{ zuL*@iC?J$v7b*in<*@mEvaSRW9c+Fm_soOs=s6)0KPI5J9BM}qbFN4=!^Vvu(~M+pB$+21 zF2;OW_}zgpxRmans=G0$#;rY%PK+G+)E@nBpEf6}I-5>V?>Pzz+~WK;^@ z>MGG%DA)feGF%FC;i`TL>I61+QREbwdM>PpEkGE6EQC|eg?q7i$P1z&&s$RxFJKQ*2=-_Q5IX7~U_P#MA6I0;RMn{jsJ0Hv`W6~Hp%0@Mq?Fuu*c z$-<}UHh*8d2_YN27M~152_~&eL0%eH^ghnVu4WrxVVW2h6Be`D7fB?o^=VwXy%8=w zC`|n*8(uP{RL73<8}{>0B>(+nPL`B_a+7YeuHlg#R|10n&n6zBT)1m4RW{;0vae_2 z;cU48C5d%9s%X4~0zG_O4v?50_2d-F;6h@id90^Ue=~&@6jo9w0JWtkGOT4i>`D=! z*^(Byn|P#t=(kK@XCWB0?9yA42OL8}z)(IMB^&0*nmJHzeV#hcT2p3?ni2=tn8anSENjVXb@pyAVeVg0U;_2#cceaqKT;J`H#`YUQcTooWCl;X!_+;WV zbk851eprce{qN@dgC#dSm~Snsqd~M*gIsGzM^L@EwZrSK#<&aPA5)hzoP@$!8pJz0 zx+M2leg}M;f0LxXF~z~3AWnlnZR)ceo5WFt!2c8qxLi0NS^VarJcL%m!eUX_h$I#f zISle7o(#fu;43yo>A$;vY=xag$9=%A*L4K} zUBReeer3*pbx1S3?!%fT@}ebQbF4l#6v>FTof={U@wy=`U`Ttt_9H{qjX2AmmR&7! zdd={&!|UaS74ph;@`{cS!>mUhmY9iN_U{a1+`xWDBAa(L%eLimbDO+;jl2dEw+De- zHA^`MW$?9ZXfcS67HeX)g}q==)oAz&6D&0f{-S~>9QTmj1j*ynW%QqLY>YFc4w7Bb z;Yw{|T&?@KO%BjE#iLcQsA(SWG!YNHGe=PN&2+iQ{j7$OrUKLk|881>)Z@|C-Nznl8C1YutL#U2ip#y91 zvN{klf5lLIFq=(4@u4E74Xs5FxNJoF_Tg<$_0=JiFpv;ps2!bL65=SiWuF}4DIqm6 z(H>HSsglXe4ynRa&19E`qQW$W$;b?8!&Jv)=7#iP8p}+W6f%UVz~mM@hzrxjY#Wcn SfvF*e+EIH}h=ZQ~EB^ delta 2670 zcmY+FeQ*=U6~J$GI_uNc`6StvESbaDmW8q7Pi$mkOSbtmAs9p%;}|1!vTPwNaVOUp zWJm}k1n7kHO%gIBP18wJw{!^Pn8s;mS_38_P3cJEGPr7B{72K$k3R&o%n+uX?#e*i zotxjjd;9io_r14ozy6+L`lKS~%j|3|h1)Bqvj@+-bs-+IN)jzS@Cw@P*o4yWh~e$tOxf!$E$PC`QD-{kGoKzM*hH;A0U!iiZNc zXC3d4495b)u|BU;2|1d4eM&3(M*GEpG!l+Msb*DHHU7U?15r(Vc`X)Gj1bs05_GCW zD;cOKXdrMBEGKA$-)Wjq0vK%-USqws7Bi^zs4I?nPi~*Jx!}CkRGkP#lSO-vd0*S{ z>W)Wg9itJ^H&Owf{^L52g}P+XbeQN%#h&sG1AWE7beQ0-HXj`ZjgChSxLdghTxv^M zjKLE!O;DXh^U`4yN8<_s^ShL2j-!wYa!X8bTxUi^GJ>q*9!r1JJx`?FjCs@_`)NBOh{6U6b%o>a2FGYqS$iYrSMU9o^{^sc&0@5 z$de`(Vo7X*ud_?g4bbMa9Qw1-o+#>?F>Xj?Z%AiRw&H}kU{+^7otM-tn&r!WqJLjM zv3)XkhHswqB>C1vwtbG}Z?a`cw(N)d&gagsb>}@vcKJ=VCCRo-Zoh^#UDvQ?<1uEI zE56B-p{(u5l72IoD0jo#fn8wrhK5xbDQ};w?$edrUQFFuiu*)dMHSPY2)I z^Y)%Ik%XZ#p{^9|c)3t&_-FOgy@)Qd1CmBwu?`b&`RQ0nHRzLkv6v{jU@hxFDxZ}#R`HA1RDu95p0H}u>xn_y<#I%b#JN6n0|{;3TDg_YJoL*PUL~TdEKZUuH-$3 zM!=Z=k>ZE~P)Uh=C*Oi-dkn#_$p*Z|su)v}tTgN6%o$41#@F7qUD5!FKp>T&iUJEolPN6{#?kM5yHk&}}{Rt6z2L<^hYLSa8k zl1ki0K-?*=1m5P*eY?G8*leq?&L2lI{yae+!486Yc+1v=S|MR;$vTADS~^+klXe>Oa~e_^Cgp_6tnG&eRDEU>UF zw7|KLGoE`e7h87COAE5WDvvimL(^Wd7B05dpnmvEE8jXWU);+Bq}uZXVPBA!0x^DQ z_(_d-R`HvCqrBjY`S@@o7{n!O*BC$O8y3O=5tg-G)_t2)YvEyA5l;UCcXdT3Zcm-= zRPh|e+7brGL|0;2#~fR9lWj<{4YMZe>8=U;q<(5QENbV=`d;r#ly*+_PCc9G z?oB*Dl;{nmDQY)bPvfqni~cu74mp@LinJH5xA&VZtE`HvR?TWHb9ISr zHN$+yFsrq)r{hht*>_ff7loTp9HfL@@6hAz@m3Och2RH8&$CE?O+AH7Ko}5$5bbF| zgYaR`HZ%nP?Q!Tr@s)8_@Er08yPexYxgVSj=D zAQ}liA(#ZOUwVA0%GdpKFntU{m4{|eke$PKrGKSf*QR|bE8YzZ=`KEk>x(Q z1^xh@P%VlacCb;p4NF23MG+;WHig)4XFBMoHkU<(F zMN4Cnm_y7m*{+1!FKy!=krAaoA_hb?vHTB#hJYiM7h&s>XN-`sHH$X07BvfiaI?zbxnP=30J3Zf9YPgmgryXNTT zLu(N#m?%h7q@S&HrD-C}IV;l)5%8^E=1i+HqME9xN^3Hrma1w_>oQ^vRbG)cWJH## qs7~i*M2;$5nl@%c6II=C-<%P>iXemdiTX4}`dR0)Gz|qWU;iKC;M`yU