From a77c6792c00f78b7ec19b021140fd50763fbd449 Mon Sep 17 00:00:00 2001 From: akukanara Date: Sun, 31 May 2026 16:54:41 +0700 Subject: [PATCH] feat: move original plain HTML frontend to frontend-deprecated --- frontend-deprecated/app.js | Bin 0 -> 58084 bytes frontend-deprecated/index.html | Bin 0 -> 28004 bytes frontend-deprecated/styles.css | Bin 0 -> 29388 bytes lib/export_onnx.py | 134 +++++++++++++++++++++++++++++++++ 4 files changed, 134 insertions(+) create mode 100644 frontend-deprecated/app.js create mode 100644 frontend-deprecated/index.html create mode 100644 frontend-deprecated/styles.css create mode 100644 lib/export_onnx.py diff --git a/frontend-deprecated/app.js b/frontend-deprecated/app.js new file mode 100644 index 0000000000000000000000000000000000000000..135ade70aefe9b1e8e6c4b5a3d141764cb2ece35 GIT binary patch literal 58084 zcmeI5>vCMjamP=-rYdic4=Xt_Alrl~T9W09oB}~oWGsmY0ZA3BR5VF|6h)9=K*$tB z(+`pN$ZNze;8#c`PvEM2Nz%Xhqd7fu=3EvFDt7Eb0gK%|r>Cdy-P1GYfByUX-FNKg zue!hN7WTU6u6GZ+N8NqV%sv*#WR$swcJ-c( ze$eftzmkU2@;*a@<3JU>Hsu-jS4rRY&t&unZ_fB=I9B0_>Dpn!cgHZkpXh+onbTu1^fNgEPhAR|#T!{Ci37;X}ssv=neybLQ>Wt~OhTa?|7qs%}_S3DD^Rw+Z9W0M}4CAyz%(U!@QB9;S-Hoi!f^nrP@!|v--TZIh$rg?!3pLgX5 zZ4DxBA}T@F?sXs9J8bS*c#abCO^b8{dk)Qr5RVL#r|EUSyA=G&lWsfB6JK;%dsf50 znP%;t>q&RhtO~Sbj5giyg-2$a_uS>%kVBJzk|2GVXX} zP)6t%VeCBgzG z_ATeCV_58%Uam^tCk7*r0Y{bBZzf)nJ5#m5M!A;#v*F0NTlO6p`@VVYR?eU0cgwza z&mKR;vq+{r>n~xF?O!k{$oLIQd>$c6Zq$UiV`Lh9YID17GmW%xj_;?c1Gb(@&8?Tz zDrX?>JhE>O>_?Rfzen{L;CVG>&ehEB$ZYR^hwmUp8N2I=U3p~Odu*d@+kezru;fqd zzoS_Ygyp8)rz#CIK~A~fN8Y#iWYJx*Zw}LUKQOLs+V|w3&#Y#1K2>QJFD0vn1xAsE zi<8RMB8_!q@z}oI%lK%WyTsM4=PvRrp0q4K!U61Z-&c`+uRXQN-TWwDELHE98 zRMpQ_UBKX{FCMs&`Lpq`P)E-kf+>BWu>@tv>js%{$MTcjt{pNYHJY z+ud|8vWcW1Rk!Usq!mpDt7DT^-ajy^J+=4xK6C#|lcr<)k(FDwcg#~d3U{HIDzDT@ zxe9ElG$M&a_lNfX7ilas?KPABlA0eFR=`&bwXpgyngRwcPsB9)=~puCHiPl8xlTp& zK@#F|#%JB<4VqFT{@OUDyFV}t?AL+rOj6_6U$S{nd2-HO41594@7nJTgL1`Qu^ESU?Hl&LM$J-p z#o&BxI7>=Pm?f{>0{qyZ{HA-?<|K)DnkY(*84IPc9;BHQ_fi9w_10e`f5@_^0v`R3 zsBzO|6sl|+O*XrKH1EB0LYu6oKkDA8Yyy;0HdE3{lv)@TvO!apbqWWn<8B?W{>;$1 zlyQKEwN=Pel=Qj;M(^6j{p>N9Wj!!Wm6l}vtMgY@Iph_QBF7o+x@!_lys?))b^1oX zoaN57>zql7tej*p&VA959Y{x!I%El-#D8e$k=?0Lp4+SJ?X8Y0hx{bAS^9hwG@Lu| zMGtNEZjoZNp|}UTAlckA80gZAB0h%EYuBCE4C^*di|*I< zvoKsUyp}B}r2@;q&%)%0QJE2|s7E%h64oV~L-zW@R2dJmc4>+pl&Tbd8R$b;4^dK( zTTmlsFC|Rjl~#c@*0gN0vON`t&%;2`F&158`<$^2W0>|Srx^c|Q64RiaSAaN`YxG7 z;)wdu1$>5LRcr~ICo+!XMxPV;^fcKI>=_n$S(*8n-6eT>URd}RzwX$zNWjz>pBY4t zZ5@uky7b?%{Gjhc6>;*N`{7!~=kR;c{nW6Gw9CBh>!V}luT!%FZ!Gp*WxkbIDbJ%Sq}r ztNiJhG8?dDWWq;AW9+R~)Fe3( zKm5iNrPYZx<-dk#6gh$)L4!-&OKvQK`LOkLy3s>-7ML>&vK*{W{+W-tOCR(e;sz2C zf6fYbuYhe8b0~3F@1Crz=J~y*t~-8FW`?{VbM4FOINa%2N|Am`l7=MEwX{Wt99hVN zU~81KwP(n>1$Bd5jc(1bHE%@?eH`9M`P7{G$PYUQT9LE7NA}nKoEz-}`{U*+43#{h zK_Z5sjG$lr;M#~y>BIUs+_kI8g~)sRm)rMOeB zRQc5aBh9hG~!86w=Z6i38QYCUjEfDe%#5)nR1@U-4Y-9mLYMeU5FZ`8XG*S>*LUZuYL z4YO6#n2XYQG~q2Beb4IfLvcsBrvB~j+jix;Q6#UlZzOs!`ZKd5#5qt4JyylBKZgy= zM7E8_AK6u^X08fv%OHMaKbOs}?b^!SN8S4tdz7`b!=rn_bR3 zt|)F5a;sXbbDW3@-6%1}THb5KD$Le>oUgJyZ~EXU8SW`n?dr=F>z~ZJ=ADleVQpB< z2zEr}&rD{X8C@i`M5{T|AeQrPgtba09B!PAe^!o#z7w@zMKp_H&2tF;>Re^r7hX|e zxR+>M@XD4laee>=?_gB6;v-NWHIT9iIly;*p4J{p8jYe2|@Dfm%DraB}S)$}4JEvvK8>+=JBKuBMW|k1>{P1DQ2k7RP{!EmieId+Q$AXzB%Z zC_}H~-fHMBmlZs-VnufJX;f+G-m(XPxaA&U988e-#Z8TUNqVomywoFq1qJt zh)UWJyQ$~Wb-SL+vV1Ee&gHmBWP_)ycLJ@#K_r&gk<|<${7AP;_CD`7TJOm?(i^Y9 z_SN*!HMz?*?iQMNeatYwNoq6my0d;2O3Q*>F^VaslfBA4fAR+&bCeykR5yRu{kHqP zz1H2C3#+eCKT!7^S9%RoaXPD%Sg3bwjsC9jdOV7%HO${5Bjf#LjHWE)QlgyCMBOIv z+I!80`|MgWmf@27jr&x`wtk()K1$gT{_2QY4*LlA^!U4-c+K>yuFYb-@v2zV>6M7( z=(mcs%8}D5T0=GqBswqF3hTtl79Q)dYOrR%bT9WUP#N(oD???qww5e^52dIqAKPE* zop|}>{c7#cG7Xu1o-h5LiYHvhvEB6a(`6guJNH{)GmrP<^KDB+JL&^BNv7)UiV!yw z*VwTj%Rq;|;`8UtT7gs8Uu8!xnvL;1A8KGtJ))6)-L`D>L!(FTUV}qkUzePCx18=^ zeMCE0h||1k1TQb9Z~W{Q`W<|K5Ahy*GSrFfI1ar=OC3G!rde0)KfQ{M;pyVUHuvV_ zRLe>5xTJ2`OmZ#MGf1KUdMTmyv|P#`Y8=l+Bh6aXJn~6VfdBfHw>dEDSlDeZ(ZG&r z81{u4gEVhg$B}$utNuMhn7h=(tk_47m8an`=jAaG7CoF^Rp{g87!AutTi)Ub$^quA zgvEI;TeWI&7CFQBly(okI1k6`L|m6UiJTT5*UYa9m2k%7bGcbF6Fd%)Szjhf&FR;5 z#d&r?Kd}r|Jp|&FvUG>6ldASkss-+4Sn-RyVbCk>}7eY5{99Egx)gImcFl4Uuysc`T*IB+WsU z>9*=Ot#yUkdbkaG&8VN(G?!VIeC@D~QE$Cs zIk{|Z|ExWA^`PO{6rv{XQy1!5iasP^pBaT@z2ECzx0vU=)rZId=(`|Fecd{hf1Dy; zAh6e3UNNo}&cj@@@aik}wXHv1fmBu&@1i~)>EfE;I|C04cb^S+=g%VzBIa#)u`UIi z_Py@t2vQ_cgv0!YbSF?jMtxb%#1a4a@KTW z1}Qt_9&XY7-N?5ac0YPayckai0ODKrquudseqtesEWqYo(r4wH+*^LMEGefin;HTzNpQ z)Rza=eahu4hcGW|4RvlG?L+i_$fLaJdiSOMj}N|Vzu0GFz;^}7zV~aDvg6!`Jjad& z@KnqlZGE|Rui6V%j#VGe{^RwYr{(-eQN*^52q%4oqKtRS6JRbG?7U*3N;r4xlmRR( z)alm+mRSXf`tl^L_wq?z;mA5e&Aa?A%2PjMgFjQ6hvt$y9oe4wU8_TVU}GrLsiVvY zEshJfJet@@7G@s2C|4d|m9(gL?s?8Pcef#&I!<13C?@i=KCr--(=3Q|WO3G#oOnFh z&-*>r$fIo7XsViS*}Xt4`|2Vhee&RNNBjszZ zI2Q4mEHNc-*qNs8A|haRAhL^^9Y{_m*BOWEuaQ^&nd>hxs31rxUOlZf&S|K980`4j z(tKDW#;LCRhUh+=4U~1V$e&t=v^V3jNgJMka~rZvgIE2oPUmn-D}8rhTzA#Eo7iGB zpVJIDvtfK!u#eG~qE{(DKC0w3#;87OrVX}iud0Rk{r>83#`OM|wwv>sb?z>@zp?x# zQePvyNIO6K-+A8hqWk3p7HvL(J+o4sjB#5&1+U?=z=pUbC#w@p%4(y}ynbEX{tW3r zDd|3Llz9KFO$Y5}y=k+|XCeGqV*l7AHrm%$A+r(wGG23@)aDLum(?i0ZUbA9aO|wg z-9yCrXl;&S(blMg>f(s!371t1Y&5Z-p6ak+HASCE9WVP+AH1J$(cA3+EGkL-rIJi< zE76QbP^Fk?2n^L5#q5V_G4pmPXyub})Fa8h zW{nTbV=r5sgO?j-?Wyf$zfVm_Yr@#|zSqy+Z=@@y_O}pCc>c9K53)ue3sV)VIWmDX zD?=AHtUk79+8^x`o5_LEY|JVyQ&;mdtEk3O(^<1l5>~p%(AVq-%;+uYV=`3J()GYV z(#aaoIN~kO2r@;dpw6M@YTSjVUNowZMYAs#5~gl%Q<-DxlHk=HQwnt)Ph!GzZ#FG;m@JY>RbYX&O$s3pFiwf zRAszjmKl!bok*(DV!yG^>iHo;;)JBQe~c^qTGn97N+)sNp3Q?ei`r+oc2q*w6*1EE z4Cz(&9(jbTxQ|ZDoiJnJ)b9*Z)R}!4Sm#wJ?UvOZ`z_<6Rvz^fk<&&ir{|z*cC4E` zHeBR|wXW|iRtn>HQxY1QX$*U3F|HyQCj}k`6P?KYtGDJu{k-&7(Q=xTsnI9qDJ+cdj44qJ>2DEA^_*(Q%o3CQAt9 zKa!Plb=q}lx%IPLky%UebIi~b7nY;AHW6#bYcJWH^UB1weXH6Vt1_&YYfVL6Y~Ep} zdd`~Bj1E2R?=DyBeKfyg*RHE~Do(>k?maT~{h3$IUXgdfF(~G}ujkUW(0^f_1?uME zI&2#=Rxi)%={`8Fs5ja)$GL?2k-^mpcC;P&X)AN+blQ33vHb)MSuR=fXuIM(=5!LB zr4+>3MLe9ItH}V`r@biqcGh<(aV`@($$DZbOWyq<%f#tta$2c?H+4;>v{12s{PN3v zm#sPtu;$pS(?w*%9(BHzE$tDOeX6R{k0qisyOsXqh%Ck+_k-|zTaniKJ)8FcMd|+OMDi5)kKS6441c^PHb1F)X z=;*G2PV^*hr`;p01i#weywA)6P|c##oDROnRxP4uFIRZo!nQ>ZVr(|6jf4z_bJ?#NHgB>-tlFRJ45%sCL`M7V` z$S(0tkvUrO|He|t);gM>;6SBD&pz@eFxB@i z2D<7FEn5CE)kVup5g+HB2er~wsLei7W2>Z_j7%uj}+qzY5!}c zi^}oicV%4Yo~v~wI$2W2t-D{{%4)|}e%88w?f&I2e&7A4K_1Fb@j9E`&(pbLS6)`C zePn+f!{F8I*LgLR_>T!n?3gY8$exh2X;$5<_D%zTJsVok)kJp9`f@!|tEQ-Ua>uUD zHP|Q*L?2W*{9E5mb+*#)^7|^Yk~#GRW=fUi^fg+lZ~k<+z6G0tUu$Zc9QiyPJ_ z_i1`17QA6+9etcEDkn8!d#~H~e3PFZ=hnnusXHlKy_D$YRz_z7a1{}zSLpLfW&Iq> zsk6@O%)!SO7sfDnwc}@v`y|cZV|qQw^#hXQKIzvEQj*S`b3ag!egZk zNvl`)_G}HiuRlI&jL^z>MxM&Aix`(0vt^m>wd7lOZI&04hJ0$)N*Xk#AA<9y;YUqc z-VHk$_d9GQ>bdpw6)5V&SfRK_En?^vVfblO!}cJbrBRO^wWNF!$%fg7e7Xhv&KT>Q z*z&C2r#8#mX6xbA(4B9XMzkX(=Lr!hZ(u3k-O_Ufz{GcdU>(~l$=E>lwx6@SP3vb~pJ6W$t9VGaplYuty#qR( zl<%X=x^%G*{`kaGkk#qBDLatm6y0yr$+7lVR{ZD_ zh%^#!v{xNSXsn*|O|-XPT-)Bg=+ONYJFR<(UfJmbtvHS2EJtDfP}lpM+-@Vo2gx3e z%_Pd2>!oLR>zeo^wF~xSn0L}$M4by;Mc`>M zR7LgNW}lV6YIdBv;98~;v8d`Z#Fo0HRVM}o-A` zWaYt)(}g+b4Q#QNnm^V_=c%e^L49*T_s+C+yOInVs=jHfI2Viq@21_W7mO2ccRw^* zFkkX2{(m=BERiqIN1dwp8?uDVpCfyYdP}>Z<|D%a{}ZXJ+)n4d?YzX02-3OI_9}WV z(3H-&r)g_NX*tFOti3uVs9q8(fQiOx<#3JGucS=%Qg@Xk?o7-xo&*$ogT#P zt(^iccmC>e>T5>(p)<|kmsh9T^Kxjd`T2KI0&;8?DXCfHIk3mhW4L(TI1cS`E}2$P zFVh%pxE@&$=j0ucekV_8hOZuXx_s7}KSqPG?_>$K%?5C`YK{PE z)8fbS-im7`bI_EG!mrFeHP(2i<~fF++mX^gcI-z_j9WIxdW`RWjimAuqcgb| z@gg>bl^pVZx>k5X7B+{-+fVMu5xFV@+=oBJm*a2nW~}ZZiF2?ZekB6czH;rm5nay@ zL~M?~zj{XiF|=UaH+V=45U{{{{&-uqO4-)+-?iO@$ZsE~57Rv3Q=Q{ANL{{y=i2am zruMj>8D5{;C{uRDXX#O49M8{%*sz(Nw=7}4&N)=o6RAGHW%6(5<3{>~TxQE8L{(w_ zin41~Ek|mwwf$8+hd%T=HtO)|pYA$m(&_zp^8J!n^+mhn)iul^OkUW0u=m*0x%DT9 zH8u;VIYvA5SQWB|y?U#|A9@`dcRA`gmgL0Lp@_ETQ*MrS&$&i+DBJq@j4-M;Iw!nb zTZHqTL6$kSd(9jLWN+w^F7*Ln1bL89aDP>tR;C!pLKjYbc`Kf)(!ebdxQ9CW~o2Dt6Pz??5 zL7WlqorB}}tlQt#C-M0_TjMFFi#2Mm4pX7RZjdPw6>*m0yjpQP-kf)Lf7ERMvVX?o zY?zj54U5bUZ?5%<$dMa%1uJOc2AuJFMS0!`^UULv^{p1wTA#_fGa?d1{NOz#xu%iV z3-MptOV@%0&6(r2U4`5@1lOt@^|kIEi_>-IboO7?o8qjnxc!Pi3y+v_$2ySeX-Flp z>ohKZsy#I=n!5L^cQz2Gl6Cw3NP5xoswbRa4G7+$Csbh|L)Z%ea=-HOUhX40ECo=*@|Z*aC7zbn-#MikO66qfPtE zS&mSajs$9GaD}_`a}kHUB=HCM_PN~mtnw22i%hlqEr+4i`9ix|FKy9A@K`Pj(AS=4gRdWe*9ZG;|3O5F?RJ*J}8pF2=JI?EBf;sV7G-*mPW zxu^fVD-&P+d{(7v`E&Q32L6gIMx*4n>b}o%*EhCPvDdCy3D%IXx7c0Jb=~T_%~S`J zR-9Vr-9=j!CEKy{*P%GuzaPpgPIKzD!)!iwVQ28qpa1VJoJ)%1WAJGp81$`#&%*#9h=7o|%Vs2wTaM>l?TJYpKT^e?R=Z z6+!h_esy>)emFNz*UkN>9=Rh?#41N8{d81fsc>hyY}qG|QiYakNg3<7t`0$wZBxuJ z2M%#ly9c7Q22l=V5q-zRs{P+PHa_uTJ66Wp=I9PIV0T&kTWeMs|Zj0akQ>r1>y+F&=W+E=9^AXtwN}fHxc-2*%Xf@j-znW@N zq}W&#G9DF-M>%6~&px_2+o5EEP9a42YhoTo8A28p38;9j6+_D!JQxD(=2=#hMz`VzM5rxq9zavHQ|&GpCmU zOWw-E_1yIs?{69&*!J>izC<;$B+}TS=N`L_K3#WapJ!DjJh^6R=XRYpr zVMlFn&*J7?`;4wyYKy*>SH|8tU1Hb1FFVpb{~-$33ZHE0va5h_4H#7QJfg3=Gn_7D zm{f@zSFEXa9I+w@BsiE?+U7rfhNr6_1?;ZY7@E!ah;!D~;=G(r=WM>@jrEx7!()bJ zl;d&0@>V2wj3~c{>(qasH9p?=X0>vssn|-n7yT7zj*|S)!z6rYMk>rUBn{( zFMFdsbhS;cS1Q;a!9LY5j83f2GDp@g(1uK>Xi2HwyRYX8St|8Bmz`jdG8t=+laQYL z>6T%U;j#+K{8e{|5)8HIA$V+8WJ;IzhVQXOzB;pG|N9Qa8z(U9j3;BF(LBrAGRlzY zlCK=R{hlw>7iF_#{3<+`7<#1YDM`+7Xhy41;tw_AOW zcCQ=eUiTl%Px1`UW@S6#G;I@Eiy_Y-QbA@FWw7Q)#;5mn6hri+*aW*6BN}w$UXjs9 zZZZx!U3x{l#gwGC?khP_j)Ui6HStm!k(p`bzaGgYS?6Bo>$0uUdZ_Q(&HWyJR(8He zmO*u8VZ+Gi*2}t?!{>50~GCXK#BKc86#`SdCZYITVUi6=z+xa$G@n{mAT5 zos%BP%Dt=ACyxhM7283$YVE+{ju>Axgeup-2`5?>8us&i*}C6uC3=u2Dle_ zki6F8W~g{ozP)Xu=*fZHRm=Sto_HJhCF$&sghsez(wQwgtq>`aTcF1>BM8Ov=XYhH=oG^@?&Ub}W42`BilFL~46aqibv+HrdEWS6hb zCK*1lM{utj?|knqJzQ8O_IqIK7AL1Cuo~}CP15sjve8)RDd_Lmm2aDEX3sJ3H|#&wFz`*o(A#jMjecUYhyG<>5Was* zy5>l>>yeLEuX6sy+qfhr!#w>=Mn_LuEh zJlCzVgLX4pR?py!+hDh(G16Q=iCl6Xw~gxud>I=88Es-x27asKF;Zey^feiT((~N zHcsZ>B*~Eu1{WLGhnv4GeP4t?bgUD`@U?vy@%s`=)C2MEl2M80^&rd8m-;J}cKDB^ zDtmO==Uutp%du~qrHV@g0xk5^7^Iqf=&t=>M~(}7DXP*jLPmO!x~TQ+Bh6;b?!K4e z{B?_!;oT3@-?v`Y4Bj%n)&0RWRK-u!N9AkvH`5omky2y6-eG&4`O}Jr7Yr7a4WMH& z*$IHlo4M>1IHqo+Tb*z#8_tgMamRTV#S1lZ)sPDfr zXlQwVrrO;t*&~;HJFP=SDz@N}qXBQ-=B0brt2tn;FPOA=tU2_3$z30-HNJb>`)O>Q zc{#_sxmI9f-~t`|>!wL)@3WpfI|eW8+gy!l^W3lX5nQ+Dj?kKA>oa6s(Q!+wN(v6= zgl#OdHrCcm+6fQK5gbmmB;$6${e-+P@{Me>ig6H+EJpZN;_&%Yp?m9;(LkKnMv_oPW@uCSUF4tZRHmeK zWYZ!iazyMavW|u46w?EHujhzpwNDYdR))|etrp`A9w(ikjwd*q$wLq;+_2xgC&Qm^ HDc$~G{Dcu; literal 0 HcmV?d00001 diff --git a/frontend-deprecated/index.html b/frontend-deprecated/index.html new file mode 100644 index 0000000000000000000000000000000000000000..c3c6ea23a7056f80e922f095e1bd9d7c845384a8 GIT binary patch literal 28004 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 bztIS2V_ZpN4Fm47SDgM$8tzp8{j~oB==Az? literal 0 HcmV?d00001 diff --git a/frontend-deprecated/styles.css b/frontend-deprecated/styles.css new file mode 100644 index 0000000000000000000000000000000000000000..ae37a6617948127da8b0ad32ca8bcb90c6a924f5 GIT binary patch literal 29388 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�v_F zo+xi^EAM@xb(*fH-lz80?Old;rzmNQfWY`KZjXe(sNC3pYy*Yy-`lQ#*hRQF6`XHE z7WAFu8SBea-iRI2=P4_dCR&8He5SSQT0V_;wnx8@ b4|Pqe+_9PS739`0DfMVbdKvfHi1zcp9Mkp8 literal 0 HcmV?d00001 diff --git a/lib/export_onnx.py b/lib/export_onnx.py new file mode 100644 index 0000000..28c50c2 --- /dev/null +++ b/lib/export_onnx.py @@ -0,0 +1,134 @@ +import os +import sys +import torch +import argparse +import traceback + +# Menambahkan direktori aktif ke path agar lib dapat diimpor +sys.path.append(os.getcwd()) + +from lib.infer_pack.models_onnx import SynthesizerTrnMsNSFsidM + +def export_model_to_onnx(model_path, output_onnx_path): + print(f"Loading PyTorch checkpoint from: {model_path}") + try: + # Load checkpoint ke CPU + cpt = torch.load(model_path, map_location="cpu") + except Exception as e: + print(f"Error loading checkpoint: {e}") + return False + + # Ambil metadata model + tgt_sr = cpt["config"][-1] + + # Ambil jumlah spk dari bobot embedding + if "emb_g.weight" in cpt["weight"]: + n_spk = cpt["weight"]["emb_g.weight"].shape[0] + else: + n_spk = 1 + + # Sesuaikan config spk_embed_dim + cpt["config"][-3] = n_spk + + version = cpt.get("version", "v1") + if_f0 = cpt.get("f0", 1) + + print(f"Model Version: {version}") + print(f"Pitch (F0) Enabled: {if_f0}") + print(f"Target Sample Rate: {tgt_sr} Hz") + print(f"Number of Speakers: {n_spk}") + + # Inisialisasi model khusus ONNX (SynthesizerTrnMsNSFsidM) + # is_half set ke False untuk ekspor dalam FP32 demi kompabilitas ONNX Runtime yang stabil + try: + net_g = SynthesizerTrnMsNSFsidM(*cpt["config"], version=version, is_half=False) + + # Hapus bagian encoder posterior yang tidak digunakan saat inferensi + if hasattr(net_g, "enc_q"): + del net_g.enc_q + + # Muat bobot model, biarkan strict=False agar mengabaikan enc_q yang dihapus + net_g.load_state_dict(cpt["weight"], strict=False) + net_g.eval() + + print("PyTorch model loaded successfully. Preparing dummy inputs...") + except Exception as e: + print(f"Failed to initialize RVC ONNX model class: {e}") + traceback.print_exc() + return False + + # Siapkan dummy inputs untuk tracing ekspor + test_len = 10 # Panjang sekuens dummy + feat_dim = 256 if version == "v1" else 768 + + phone = torch.randn(1, test_len, feat_dim, dtype=torch.float32) + phone_lengths = torch.tensor([test_len], dtype=torch.int64) + pitch = torch.randint(1, 254, (1, test_len), dtype=torch.int64) + nsff0 = torch.randn(1, test_len, dtype=torch.float32) + g = torch.tensor([0], dtype=torch.int64) # Speaker ID 0 + rnd = torch.randn(1, 192, test_len, dtype=torch.float32) + + input_names = ["phone", "phone_lengths", "pitch", "nsff0", "g", "rnd"] + output_names = ["audio"] + + dynamic_axes = { + "phone": {1: "length"}, + "pitch": {1: "length"}, + "nsff0": {1: "length"}, + "rnd": {2: "length"}, + "audio": {1: "audio_length"} + } + + print(f"Exporting model to ONNX format at: {output_onnx_path}") + try: + torch.onnx.export( + net_g, + (phone, phone_lengths, pitch, nsff0, g, rnd), + output_onnx_path, + opset_version=17, + input_names=input_names, + output_names=output_names, + dynamic_axes=dynamic_axes, + verbose=False + ) + print("ONNX model exported successfully!") + return True + except Exception as e: + print(f"Error during ONNX export: {e}") + traceback.print_exc() + return False + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Export RVC PyTorch .pth model to ONNX") + parser.add_argument("--model_name", type=str, required=True, help="Nama model di folder weights (nama sub-folder)") + parser.add_argument("--output", type=str, default="", help="Path output file ONNX (opsional)") + + args = parser.parse_args() + + model_root = "weights" + model_dir = os.path.join(model_root, args.model_name) + + if not os.path.isdir(model_dir): + print(f"Error: Folder '{model_dir}' tidak ditemukan!") + sys.exit(1) + + pth_files = [f for f in os.listdir(model_dir) if f.endswith(".pth")] + if not pth_files: + print(f"Error: Tidak ada berkas .pth di dalam folder '{model_dir}'!") + sys.exit(1) + + pth_path = os.path.join(model_dir, pth_files[0]) + + if args.output: + onnx_path = args.output + else: + # Default simpan di dalam sub-folder weights yang sama + onnx_name = os.path.splitext(pth_files[0])[0] + ".onnx" + onnx_path = os.path.join(model_dir, onnx_name) + + success = export_model_to_onnx(pth_path, onnx_path) + if success: + print(f"\nSelesai! Model ONNX disimpan di: {onnx_path}") + else: + print("\nEkspor gagal!") + sys.exit(1)