From 02ee6876ce23b0d8b0369452e3e0d9c79532f0e2 Mon Sep 17 00:00:00 2001 From: Alon Burg Date: Tue, 31 Dec 2024 11:01:10 +0200 Subject: [PATCH] Deploy website - based on 1dcb6687b05b6938e29ff7956853f400fafffb45 --- 404.html | 8 +++---- ...lux-1-f3f12906fda7b314452f03151c5345ae.jpg | Bin 0 -> 69951 bytes ...lux-2-b65bcd975d60e06c8b4b03ce2ca5e468.jpg | Bin 0 -> 55214 bytes ...lux-3-ae5a9d8dfd3a7497e062184c3c43317d.jpg | Bin 0 -> 74927 bytes ...lux-4-980af874c9608220fdf738b6468a07e9.jpg | Bin 0 -> 65894 bytes assets/js/6540dd0c.3b4fc190.js | 1 + assets/js/6540dd0c.f8679019.js | 1 - ...77412.a2e1c30d.js => 6ff77412.233cd3d3.js} | 2 +- assets/js/935f2afb.807fa7f4.js | 1 - assets/js/935f2afb.f4135828.js | 1 + assets/js/97179b4d.2aef21c2.js | 1 + assets/js/97179b4d.6d9454ac.js | 1 - assets/js/9fda4f55.6ac2ebed.js | 1 - assets/js/9fda4f55.d1665bb7.js | 1 + assets/js/b4b29f2e.0dd1699d.js | 1 + assets/js/b4b29f2e.0ecefbd0.js | 1 - assets/js/ddb99303.0263c37f.js | 1 + ...7a3e9.a0caa727.js => eeb7a3e9.4d9f9475.js} | 2 +- assets/js/main.603494c6.js | 2 -- assets/js/main.a752b03d.js | 2 ++ ...CENSE.txt => main.a752b03d.js.LICENSE.txt} | 0 assets/js/runtime~main.06dcfd36.js | 1 + assets/js/runtime~main.ff135d2d.js | 1 - docs/api/flux-api/index.html | 10 ++++----- docs/api/images/inspect/index.html | 10 ++++----- docs/api/like/create/index.html | 10 ++++----- docs/api/like/delete/index.html | 10 ++++----- docs/api/overview/index.html | 10 ++++----- docs/api/pack/list/index.html | 10 ++++----- docs/api/pack/pack/index.html | 10 ++++----- docs/api/pack/tunes/create/index.html | 10 ++++----- docs/api/prompt/create/index.html | 10 ++++----- docs/api/prompt/delete/index.html | 10 ++++----- docs/api/prompt/list/index.html | 10 ++++----- docs/api/prompt/prompt/index.html | 10 ++++----- docs/api/prompt/retrieve/index.html | 10 ++++----- docs/api/sdxl-api/index.html | 10 ++++----- docs/api/themes/create/index.html | 10 ++++----- docs/api/tune/create/index.html | 12 +++++----- docs/api/tune/delete/index.html | 10 ++++----- docs/api/tune/index.html | 10 ++++----- docs/api/tune/list/index.html | 10 ++++----- docs/api/tune/retrieve/index.html | 10 ++++----- docs/category/api/index.html | 10 ++++----- docs/category/features/index.html | 10 ++++----- docs/category/images/index.html | 10 ++++----- docs/category/likes/index.html | 10 ++++----- docs/category/pack-tunes/index.html | 10 ++++----- docs/category/packs/index.html | 10 ++++----- docs/category/prompts/index.html | 10 ++++----- docs/category/themes/index.html | 10 ++++----- docs/category/tunes/index.html | 10 ++++----- docs/category/use-cases/index.html | 10 ++++----- docs/changes/index.html | 12 +++++----- docs/features/backend-v1/index.html | 10 ++++----- docs/features/face-inpainting/index.html | 10 ++++----- docs/features/face-swap/index.html | 10 ++++----- docs/features/faceid-flux/index.html | 21 ++++++++++++++++++ docs/features/faceid/index.html | 12 +++++----- docs/features/lcm/index.html | 10 ++++----- docs/features/lora/index.html | 10 ++++----- docs/features/multiperson/index.html | 10 ++++----- docs/features/prompt-masking/index.html | 10 ++++----- docs/features/styles/index.html | 10 ++++----- docs/features/tiled-upscale/index.html | 10 ++++----- docs/tags/ai-avatars/index.html | 8 +++---- docs/tags/ai-headshots/index.html | 8 +++---- docs/tags/ai-photoshoot/index.html | 8 +++---- docs/tags/animated/index.html | 8 +++---- docs/tags/api/index.html | 8 +++---- docs/tags/avatars/index.html | 8 +++---- docs/tags/backend-v-0/index.html | 8 +++---- docs/tags/background-replacement/index.html | 8 +++---- docs/tags/clarity/index.html | 8 +++---- docs/tags/clothing/index.html | 8 +++---- docs/tags/comic-book/index.html | 8 +++---- docs/tags/creative-upscaler/index.html | 8 +++---- docs/tags/e-commerce/index.html | 8 +++---- docs/tags/ecommerce/index.html | 8 +++---- docs/tags/enhance/index.html | 8 +++---- docs/tags/fantasy-art/index.html | 8 +++---- docs/tags/fashion/index.html | 8 +++---- docs/tags/fine-tuning/index.html | 8 +++---- docs/tags/flux/index.html | 8 +++---- docs/tags/garment/index.html | 8 +++---- docs/tags/headshots/index.html | 8 +++---- docs/tags/image-enhancement/index.html | 8 +++---- docs/tags/index.html | 8 +++---- docs/tags/line-art/index.html | 8 +++---- docs/tags/lineart/index.html | 8 +++---- docs/tags/lo-ra/index.html | 8 +++---- docs/tags/lora/index.html | 8 +++---- docs/tags/lowpoly/index.html | 8 +++---- docs/tags/magnific/index.html | 8 +++---- docs/tags/neonpunk/index.html | 8 +++---- docs/tags/noise-offset/index.html | 8 +++---- docs/tags/oil-painting/index.html | 8 +++---- docs/tags/photo-optimization/index.html | 8 +++---- docs/tags/photographic/index.html | 8 +++---- docs/tags/product-photo/index.html | 8 +++---- docs/tags/products/index.html | 8 +++---- docs/tags/prompt-styles/index.html | 8 +++---- docs/tags/shopify/index.html | 8 +++---- docs/tags/social-profiles/index.html | 8 +++---- docs/tags/style/index.html | 8 +++---- docs/tags/super-resolution/index.html | 8 +++---- docs/tags/templates/index.html | 8 +++---- docs/tags/training/index.html | 8 +++---- docs/tags/upscaling/index.html | 8 +++---- docs/tags/virtual-influencers/index.html | 8 +++---- docs/tags/virtual-try-on/index.html | 8 +++---- docs/tags/vton/index.html | 8 +++---- docs/use-cases/ai-photoshoot/index.html | 10 ++++----- docs/use-cases/controlnet/index.html | 10 ++++----- docs/use-cases/faq/index.html | 10 ++++----- docs/use-cases/finetuning-guide/index.html | 10 ++++----- docs/use-cases/flux-finetuning/index.html | 10 ++++----- .../inpainting-and-masking/index.html | 10 ++++----- docs/use-cases/masked-portraits/index.html | 10 ++++----- docs/use-cases/product-shots/index.html | 10 ++++----- docs/use-cases/room-redesign/index.html | 10 ++++----- docs/use-cases/sdxl-training/index.html | 10 ++++----- docs/use-cases/toonify/index.html | 10 ++++----- docs/use-cases/upscale/index.html | 10 ++++----- docs/use-cases/video-generation/index.html | 10 ++++----- docs/use-cases/virtual-try-on/index.html | 10 ++++----- index.html | 8 +++---- markdown-page/index.html | 8 +++---- sitemap.xml | 2 +- 129 files changed, 511 insertions(+), 489 deletions(-) create mode 100644 assets/images/faceid-flux-1-f3f12906fda7b314452f03151c5345ae.jpg create mode 100644 assets/images/faceid-flux-2-b65bcd975d60e06c8b4b03ce2ca5e468.jpg create mode 100644 assets/images/faceid-flux-3-ae5a9d8dfd3a7497e062184c3c43317d.jpg create mode 100644 assets/images/faceid-flux-4-980af874c9608220fdf738b6468a07e9.jpg create mode 100644 assets/js/6540dd0c.3b4fc190.js delete mode 100644 assets/js/6540dd0c.f8679019.js rename assets/js/{6ff77412.a2e1c30d.js => 6ff77412.233cd3d3.js} (98%) delete mode 100644 assets/js/935f2afb.807fa7f4.js create mode 100644 assets/js/935f2afb.f4135828.js create mode 100644 assets/js/97179b4d.2aef21c2.js delete mode 100644 assets/js/97179b4d.6d9454ac.js delete mode 100644 assets/js/9fda4f55.6ac2ebed.js create mode 100644 assets/js/9fda4f55.d1665bb7.js create mode 100644 assets/js/b4b29f2e.0dd1699d.js delete mode 100644 assets/js/b4b29f2e.0ecefbd0.js create mode 100644 assets/js/ddb99303.0263c37f.js rename assets/js/{eeb7a3e9.a0caa727.js => eeb7a3e9.4d9f9475.js} (70%) delete mode 100644 assets/js/main.603494c6.js create mode 100644 assets/js/main.a752b03d.js rename assets/js/{main.603494c6.js.LICENSE.txt => main.a752b03d.js.LICENSE.txt} (100%) create mode 100644 assets/js/runtime~main.06dcfd36.js delete mode 100644 assets/js/runtime~main.ff135d2d.js create mode 100644 docs/features/faceid-flux/index.html diff --git a/404.html b/404.html index 34c62ba2..4f19b0fb 100644 --- a/404.html +++ b/404.html @@ -7,13 +7,13 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/assets/images/faceid-flux-1-f3f12906fda7b314452f03151c5345ae.jpg b/assets/images/faceid-flux-1-f3f12906fda7b314452f03151c5345ae.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a66411d65384331522b8f15ac09b90f7ff361a65 GIT binary patch literal 69951 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 literal 0 HcmV?d00001 diff --git a/assets/images/faceid-flux-2-b65bcd975d60e06c8b4b03ce2ca5e468.jpg b/assets/images/faceid-flux-2-b65bcd975d60e06c8b4b03ce2ca5e468.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9c0518abd2be1cddcde6919df21a01901fa4d9f GIT binary patch literal 55214 zcmbTec|4Ti_dk3y_AJpTTOr#FQMPPhB-_}>ma!yD7?HgqTZ?M4@7ec#lp5JmQnpI= zC80vrkU}Cn*FE}tzTfBh>-qiaHDk$~=;`Sh85x+Eku1yy4lr|b9AZNr<>5bel!uQ`Kv+sl;P?q4K0cHJ z`ot+|IXO9gF(p++nKM$dax(Bis2CX;nGY~?v9NH-2=WQa{2%|@YlhevXu=WU2&&@{ zH9Hl8ooeq5#1GDsmWuKZ`uC5D8bL!#N6)~>bO5}e<{(5(g+Nf#AZTf6Xu!Ke!0QkV zJ1vKxvFC?bbXZvKtH>(6G|I~U|1Iq1|JBO=yRiRR*C@n{paRB2utVxl zMQqZJM8?ZKD3&-Qb`--GI=ARaI?}@MJ5P?ZZ@GsAt5RwB$W|(r%@}{Mo}v@g!aLL zr4ipZGnO@6L*5m?kK-H}^M3Y80)CE=KSft@PD+Vg-3C&JpNc0Bsm zV>j2-vA+&r#+Dw*S zj2rbBbrn^sdANT?u8*$4MPypZWFl-$%1`J$&M}907DaX2$HH}v@RiR(uN_Z!39CHh z|C;3fR(a_1_yK<45izz&05w#7wY7=SA}W)XpDTcXUub1}41DC$hgd#S-5rFAJX z!RCNq7!*_E`ucjPsj$Frm>{ePs#OXF73C8lRI4O#T&^Nu9!Fq4U}TED09;^8g3kj# z(o#VJI}-6IDl+)Gv#5h_RpD25)p$r8n)^m01C)gCA0O>jluJ`6_Z`QM;Z0YZw~4Iw_h}|Q z1-OL0(SbUfJZ3gvLd)XuKzrYepI|dS+FXat_>yAAd|;&_Br~ld4)`^MBs1Y56xcB+ z4cw8TB(h@)a9i9YIOn7DKH5sT2T~@hoQP#!$`%s?_nlZo)R9TyUTA3}@R7F$W~+Kc z=prZ1$4a-{F9yZ^@MKU|P7^TSs`b;~#rWejd(Z{D$RtJ1_R-kS!!AW(ETX1$^hn1{ za4XaV`vy<~BMBD)B2KFm0A?#Bif%R~n!vxJT9v~OG6hmBB>+PRzzuvcFfatH2FyrP z0@iIJke>pU4k8Kc?F**JA{X@ibbuG;5*=r1l9(& zOv3eow^BZg>!qMn3%C@;v4PnJOb|YLQT=7WppgJ|xlYo0#1H^Jd#;-7nAA(eoKA$J2y?5*8KNeJ z`FOc8Y%(I9%e#rEt}A#y)|!XvL2hI%kKN}X9#8ukBz>N}Tx=g|R7H7{A8OC>nG$_t zP^}t5u+3n|1H+{vn>CEui{R+T0iXrPQ~*C<7Kq6Nh5QOIMnMJ)HDDRA!DJJGR!QJw zV4F=qsEp7?Ye6F5O%&Us^5YJGCy>qX%G^QN0>P^pYikN(3K0*MDy^@L%B6;v3CA)w zDgaAx52FlAgG?*R|8F({8=gzo3vYg1VXJaNM06n>cc}OZeoL-Z;T8e18amsTZRTyW zx)oR~?+X7w002mxkFA)reath88&iA3Ejax-2Cl6u?h!w<8bX_i8e5+Y@RlJ21J)Vl&>}q9a z<51@KqD<&o7dvOk*4C0-)dO1>_9e zU?8xsF(?RxKmp_e1eH+1rT~_}0P8T}!DD1yeiCdgF0dIzFcMFJr+suCKn#>Z9ZbT3 z010A*DTWR>I0%ZcRg=gd0wKw!08DlHV5L!}m;+i!;I5-^R)ei_7G@8kC^&$QN`r@| zL1qHs(2x>RN3lLzI1?GAJ!nAQ_o_Mo)37bun7pq7|Kcc#Lx(~dfW`OSofm{&0~0De zqrzO)2fEugYocA;g{Cm0Tn`0LAUGgFK-ecKQYbh+ur=vp>EENMmjIrEE%bf* zKs-!1KZXOY2eNZvE66P2+dC#2ffc}lIaCj+Jo8} z?Sw-{CoA`$;bG50*29S>=8!k?Z=x}Ow4}rtxruO8ZT5muV{1YU08QQz9AI4cBB1b(z6pH~ZwG!cXe7|sOYjvmR6h*A|# zZk~L^{;J&SC<-AOx}K^YG?>%mVmy&9$^LNqxdR*uFpZEl0J(#VgNl&2eh~MffN4M!j4~^wqE(Ip(F7QV7Qh}vFfwEc@Buq` z9lYtbW(Q4ysUVPv{&V)QV^dHg38Ew%@F45n_$S2Z> zAjwJ0Sbzvkx1!^T^O!e=0l<$KoQF&cXe;eyj)F?S3r)CV->rWk5gXO8^P^=!enqE-|?D!(wkZr@!&@CUAe9)NBFiU$B=s;_4R z>W~Nwd~RCs0}51t$-o<>0e{mW(7-VJhY#2wjvz+U?ngD;WEzYV7#g_gArGDRY&X5VZ-tP!?$+$hJ{XU%~S|` zN>Zmp&~oJidIG$d8I=#rDi#y~tin7mms2NUFyxh>rh&f{!2%OdT2=S_?EG*U`8{ZJ z<4V!>!q2NeKpb0Z3foovG;i;Ia_je2j~uXohCZgX2&@5AU6>-+@9;DNMfs^U2)G1- zmkFpU+G>SK8e1@v%W}YL@G75$%Ei8_jWR)yEgf%xs0MrqVF>6?64c*UX6rA1Ee62m zOONca(Dh`WiJB^vA%mUy{9ewSt*vE$pO#@3*WDM5B;Nc!mn@FhBoi$qowumtx$#LL zgmD!k+S!ONr&c8mjlreMx()TYBg@x?M!4t z&&KRQCluG`+-*--Ht+tPMmMtsrQL=X z2^_B#E;0f3L?q#C24WpBZ#b|sh=#y7!Zkq9M29=V!4ep}4+25N0pN(T`)~pSmi&i0 zK#WmTa4ecjfW%`a8 zg_QF}BN+;viRzLz?(LGhkU91E$c&-^22FF!x;5F!oTwa=N>uS7%* z{5qT~eM0K=vSW3uMrYoaIH#0uBk5gv=Jc9RKP5#h)_v);%rf3cV?McJ?)IE2dari& zm(Ag6*JG1;9)V^9u01^Y6GGLAG%tl7dnJn#p8d>;e{h`2fL|5@gu*d>{{X1f&~17j9!jHQ)-_msK)vKx}J9L%Ro9HR=UlprgASiixR1d$a(&F{hW}b?9*uI$_ zX?(C!{LFR)f0!hjdbH1Hj|2m<=i^#y*{HDf-K0gg2#1Si!c8|i)$<2`=GiW^J@xU< zxAZ}ZEt8veZ&qpg9FY3s!nM0CP$^+|Z0Ym+cxQLERrYQW!mAYSRtXEpMfiPSs#bqk z7ARqc=`5&!P1f(WBgz_Vvu26!E@(7XIr&O&UMlPSI*$#HEpX|KHHP)-Fe&cTZ@b$^6AN{-&^whI7 zZF4Nto~f4W_eP$|A(UtUR7RZ&S%y3-K$ajPm+x*_5;LnX9UDvd62ELyHz0KZx@Zs% za~F``xN@nZKsiSXXL|}Q0t9BCA0YwhL6Sp3eFZx(g?yZb>j&`Ge+4?=5Pj@*vR(5z)my14}-WcEfGSy#5RZoeNuJm0~-SI(hUtRh? z!~&j-`$nN()ZbQ)Rmhy|r;9f~8{zX?JB)`cape0_-qmq&^4(I6X8vgZ)3t$?ZU@MO zu-Qz##LcNkv$p1`eVNA-sJ^4;%Xrl@L<)D!Gi?rxtSPSRmqiLaJMScP3;ii)sE|b{ zXF|2n`AazCuEmVsHR4Xa4&x`)`RdOLek?OHm&2ZGoxH?1TUZ~(pUug?T+ja%%fEZw zwoWbTBVv_vc9oD$svAp{dAxQxervGqxuJL6woAFS-Q=5mP z5{=RghpnfM-HqQNe5)!u`uXi16jnUExXDv{@0(yO%}?P6Q9D|f#z)$vJ6r1J1-ND( z%dG|9>(iUyC_MTO&<3_EK@$%M8>|v#V-GWUag^_|3?!6pP=zIR{W~5bE;I>nZ$e&b1OmO;?qsp=s;@fx>8+PEu^TR{EWq!$DG2dBSh1~Mr z_w778`BdrMS!_G`SJZBeXnOwXPaO_n52CD8H&RX}q93Qt)*R=jLwKEP{U%Yk8`o(59Ga z|DvX*L2ZC1-(s7#@$k>ex#D2%GpS7ElEK%lSYC%cX_cU?HXA_)m({1k?}cFd_hCApg|(8t+!Ws2N&N z2iYz03dnByFus7I01D0hLxPet=MCCj`WL7$8ZK-#^vY)y?Lif!Lzu{P09yz2qCv?c zJk+wvzVjMnvkbUs>Aj(~oA)Al))O3@OmC{CXr`rTLJeqN5$Fq*fm%uu$pn{HMTOv; z_w%(}f5G-z(%kM2wF-Ghc$Vbsgx}rNXzzPcCLxrc za5|p}wTM-FP?whr1}}%clHl`zJ5>q=`bY!`7Ra9PrpTC zuZ5kie=y$-1rzO$Iw^D;!o)s9y(njcvNNt_i(BSbN13aq?|e|LIGSK%)iK7fh!-t% z{4(jatS6+VNoT*RaB(TUK%C)|ud7qwn!KUZ)q`(8T~O6AZto+t2R_M42!FzF`r3j+ zpZ0b6-{|D!;z!zF2l)1&4fP#DTe>JSmQTSp?2cOBX4#vE^z~&Pk3|iGFUQtJ{EF!4 zzTjifU(#`U`SWrjo`a2ij*D-JnyjGPIS9s^fv0K%D7yCU$x3%hStS_jF=f4-%{xH4cjt<`LHFpNMFatsm zsJbZ?4-io(U^q-v+1E~}^z~o@_>T=zauOwT0OFVg)EnU5d~kjU0hABaO`yKjgP#*D z%3aH4kmujrs4{&y#7_!HPyHLrGyQ4j;?`i?Ya}3IjIEL)`*1szpAs_wMJ8_EkpfAG zLj7K@2NZg!=0F!@MXogWNsEo2|3H279jTYtSSn`u#RKRHy2oEOI zKIT=ygFsptXJssu<(O@{q%M=UMza3FCM5L7f}P9qM7yBztYM?jd5NbA<~h7hyOR;t zKIlvIk7^9BwJvjI*B8~;cI3J$mEna#KK9I|s7!17Bm}Wx*P3Jo9q)V7c_jQ;Do3$( zdd)O?T&9J5h+jz(PhSw9$Q1};AU`WdrKvwdzNZ!^Dz#86Tb8Ka0>?w(mn!L@CwX;8 zH!F^RapLB)?7f6D`u40eEy}{r=hZBAy6cvOZPI-%#2i7EOQ__lflRnxx<#sL>+wqY zT(h>(3f0?QY;VP9)98cjzNV5S>C3w8-RAzZ3=39l-e8#)Qw_2zdT+iqyJczdonb+v zjo{Va)Aaj{(YA50wH_k2XHX<@lhr3%)qJ>cVe4!Mm*>3g;iBTE#uZaL^Mwn3=|vKR z+c&=}|G}+)4{OOd<6^XarM-G)C;!l+h07-rb`<;{4=_O^M=K;hN_CxMBc#Mgn3bbb_lP49JbO1Usz z`?Y5{W9;=eTSg@N=fB%l)?aN%wXYPyD(%(s6M_=uuVshpaQ`jki|QfOQPUwfF zcxa{>!HrrIK}t6j^ihcpl1Nispi2S4DJ3BVbRv_;&GtazgFsh-QbvPfVV|8*U;#q| z+$hQt;Afz@M{##lE}Ku8+G)%MTI|4q1MU>T>Fg$_d;vYeALu<378vy{E1SRp9 z>0wxaZUDKLr*gfbt2&m9os38uMrpDyPL$dneY~1|M85Rme;BMF>&#L#;1|h(|@)pAAmL^ISQET1mg+WKlo2#dUxwT-nNy{cpAH zhxnf@FOqv&#;h{T{Q63&b6IudevGY`ngvpoQG1nYB?=evBwtco+!~;kUD-6d9kSYr z6G;py_>_J@LA4cQzJXXRSTsK#CdWpiwx6o8R8{PjEAU>+wG{i+@LMj@k>0e`>QAHj zW!CFwwt46sT{EYMq!V`<`fU%g{VGl4FVg3>_qP<2?;%#{%euCl$@NeF zgU7OOSC*JL6x*b&=RVS^DqGo+Y$C^ex_mjRIz3)wG$@LnH zCRdwgZ6>>G_*c2x?XIuKZ83RUQ&q|qOCnu011H8jFGgMEyz3!_bgd(y&cB)a^x|w7 zQ)jwY(6^^v_kB9f5Ht56@wdHFG#d>s3!dqb4?J`qN4d$@&B=V#BT}394Yg7(md2{Sj8AApi6WTh(~Fr)$;Q z)oXy1wBd-FT9BgIFzFPyK@Qhqcl52Yb6xA5 z90A8!Al5RW-BtQ}sCz*<4$=isa+OcM)H8apf>ihpu=EVf7FdfX4=G8wSwL{Y}~W`ghwbYbdIljrk>=B5k|bcLbzMsYtSM_ zGxRJn+ofltGH}smf_vs?=I$YE82j8|#AOHnRxgc?O8twqe3o5};#IQ_$g85y=Ly|< zDm*<^K8uz^QZhP2^&6`!&slB@hA$BOSLHKMW1svc%FLXV?~O4Xd7K;nnQusU*i)GQ z#9K9T&Zv)qU|T5Jmn<*bB^t-plJ;IUzRUE8(@~8Q#$Va)Nc`9V6IBA0pwLzyH>4US z4v`!Ex@b57Nqx2UKRX zVB{akzYz<6E&Al-7GK}9JinwtZIj_cL8sq`RMZZ{SXA5_xRx|*cPORa`U1;Pi5EuR zgy$*u+hF2&=Bi6a=4~^4$`dcUCXLDf#R%iPij63RWYw(@4{jmzAe~6p<71pcw{9)% zK|@u=GE9*d8iIp(zWhDuE0ihZ??awxbYs+R^DX=m8{~6I{%}zo+Wkn$ywQ@S^JyX; z>&QfLJwSiq_C2ho!rgdkppH^*fb3Ga<-)~eD_1VK2XYWxqdI~POBQ$u@LpJZF$DsT z`#>aM3UKID-~0_i=Vx{N!n*P1@4pgB>Nj=>op5*RtRp;q0=MKrw+IND(CN64uj?hi zTTzI@e)U179(hdzm>pnxq?6!*7+T#X_nX;ds_xCi9sLlAZsX5aNI^&Lfrd5E=QnpY zwt7VB^0U$Tz)=@KOBqztL^!^~O(_UWMgZ38o9S-=oJ`E$ArdUz$f z^$CI!m24tN=CK6>5ui2ZgG_?%7Ma#>7e4|a^ouv}RT0mkSO>+bOFu;$8ZDe^PG?dL zM0{SYiuv~JQ^)3P>27kjok~cJ$c6e$^sy`n(eV$X?1qGk?<19%_8{f)ACJ2>Idj6e z+;5dG+8jeZ*ip}JDK{SDb0Vau)I~~vM>VnuG~b~5t5zf0mH)J=>b=+Xd0U^c@9}4U zPAqb3{<2aJY`7`?hmSa(VP9Lz|J=u1WL2wx?}WkUNQrCpfzk=FmKQ_vcUZ%&Nn1*; z2X7jG4r?QIlC=NsWKhRTc`mEprP&&Mwv~^x()MtFA^Py~lgwku!`2t>CmRI~Ly`p@ z5_WWnXj|s=7I%MTbnR0WxkQOgi|fmQ%rhw`{&1^G+ip|`T3GwVwml&>$|pV%c`@Ag z$(vdB{GrW(ii7p?$v)g!otG5lsh-v%W~dvSxJVz|vBpluyN9m->e|9B{o?6r`b8V|g<{>?ez6&Rhb%}W(s4fRk{@N? z&ReT3?Ai|bx~FT&xn6jtQ6+)fgY2~euR5VyeHzmCAYJ()$&Si3)W+7p>M<6L0jhbN zwzrRsY?c@3kEdR?xM#zv>SLj?Gr}pu=djJxm0nQUJM*Sgnd6%L+_R_G%M*gWC_Ig_ zN2N-y^85H3^UGv6EF z%%a7DXhczefy8-=gA&8xff~RfC?YG|S114op-i=aM<&#LeN6TPpmUjS1Q-U)8$c%$ zf~z$M9IH$kFj+vE<@(H`PwykB1|X=)^u?d53UfHfe~SfJdIAbp$}kHUQ!pz78KqSO z4Y$Miui^UGUZ|0&`rKjGk=_kpMC_4c_Jnyn`K#fvfv*_8-~SNvcjwpoBg`uQR^*md z&K|_R)g#!lkDmNYG_5j7L9~)!bcP6LB)D_{Ul{>JD$u{qIxA#n~6g#SF%xC<~PVGUDYi0R#tz#5Uwb5#p&aaMk@qg6xe>Fw&zay0a zoydun_msL%b1T-zc+^%%C+W>I9k^-X*L&}DGhU<78(tWs&O1uqdlH;9cJZflQk@l%UF-1xS zQ{Jm1veX={Bs?XSTlH+p2#kF9q^LbyG{3Ef_$J7>JJ%-R+?!~n^txnROSr7=W_0um z@&k_>ZI)Wysqd_;XEe|(;*l2@)JdAMs9W!}EG}S_hcf5dKk9y43JAVeG-BPbGc?n1 zAhHTt_h`3 z$B8Tgyg*=WrsOohL1-wn3r=u&4ZyTmVBv^TKBfU?MVX5RL&2?Ju*FpCWDw+z>_g9_ z!_#h{z@XvD`5Qbe9=Zyuf%35SCf^d6c7fS}f8%97VY*R7??HQ{D6KOC|xx|_O5{@haxA1a1b)mK(UL1`zi>I9Dv0B$?XA#p=WdAgXXn!;^W7)(*Z?1I128lQ1kkF zLlIG4IUh>LcK&W#Y_zcwqT9`u(Jb6nV$+1_8g8DUjnS{lc^!XQ09B83YHQVM*;4?jeUoomzIT0cwE-t1g%YQ1uy z;Yq7voHWa=n8CLGsCr|ohgfkPJ%?A}?V%Ee146HI1nG)>l?UTptb>F#p z8)LsL4@P|$S;6Z)e8rj2>0+PRBlkvN8ACYl{7HZ_ZwOji0_p=tuL_ z_@a$;BUsUzU&u9IpLwGbE&0{goF<4y zlPQ%QXfT#12wW7N#|56QuV(<%d-yj~gMDg8DLz1%NvV(F8u{N1d@z?fiAh=u5=4$( zN50+f_OY1lsxBt0UjqmL!f2E4-IeqwTx6JS!RkeQ5GSbV1 z#j{V>xLVadt9aHY?1sd1&qTm8*v{K|8^-Li^^U7__{I~}5TF_1yq znF8d%5RrFLA#i_FeOfzr`GOb56T_62eEnJo2t^zzmjZy zpdSA`1{vQkpM~|@?pP?Y(DLn=zwEUEsSJ%bO?*-FO75g{%gG^Kc-Am&C6^y~){eD} zJGr{EqU;x+m5PVI4VQe4r=T~(G_l)BQ_JkzlBrQHT6o}IbJU=u_T{s$WD^ZC2o^E( z#~g`_?LnXWk2Ajw{Jm(spMm{FMhMoE(igKiJwzwcPWIA8MG_?wBG;JjpmcWn?Nv#IVyJuqT{ zhev|6kT?j`+F$?;bf)z|z=q@~P7Z`0Ao%Z36oHpmi;8ak~8@%!#j3S9Z*vL;f>opVEh4|gjq@8>$2 z>gj`7deZ4kGS!D`pyshc{54#!`u!$nA-zuUckECE8+`cy9d$Ok4oudWVkxXG0MJK} zAK=+4xa$Z+qt%ct7d8Hum}pSu5Gnvf-1v@wX`H&>|C<_{Z~{*FYry`%`oK|!J3DkXcA}%BksY|v?-60h14#6 z9QkOll^;@g^VBI>{Kj{SQ-l|Z92#Dw^qhef7Ju4Q7a4iA?n^}1?OLP;oTj%=_PUNS zxT#mkJO6{Bu!dKB+%_}YgJj@(koIo`xKdMNG&DK}4dH0v)L3(ad&Ott| z#03wu)i?g+0L`z81P^I;KeH!)(~#9->KZtiLtUn)1rfEy5{8MV7k2I)FLmNLDB<|= z%qLOEyFln?S)#beVcWLCAd7o#gW5+&*!t4LuVWcLa1kF@&x|qWB$o@@8hRc#mYO_r z=H3{G>Qno>ZZDe>&-h=o_bZ9xOW__>2!)38-Dcl=vz`3rlzxv`e!Ax%{f*dJW134D z$4;ZU=DW_Y`bAl`qefNwrgDr4r`!%sB;n#g)*zyQ0tsfB;W4EBb~PoTXn;b-wpR<{ z-se@o>p(}1qM}M0mf(0GgWhz8!d%)eWReM$25`z-`=DT(kRM!lxw>SVx81&Isd;!` zcKA1;1ZJ&&=^x;drdN*Hy$D2pK6FbOx&>qqj<9mV7o7=p{K^fz z-J*(H{MUBej+jnn8G>QGR&XT}+^wdlsP3SW0lHd#_)#rbUIj`V1IQd(E_!UAb6H>+ z0B8X>EBgdM_W0K*fZHF^<l=n1c~1FmGaLB>=2e> z`)c_u_RM;f%4>XTyx=px*IDnD>=JZ^O}l&tq8|=pv8DoA;$s%Ab#B$!$y5lX3Q;y? zYN}bz4EZ&wPYWZS^`v_>s1((o?~%djzZSDZH+At6kr%$1Pxse!(w`8v&y>d(XTMMS zIR1I_rO_=3j)$37yE#9+o3yM?{oN~;6m~nX^5l1xEAJ*GeN|%!&|?r(5G$C77XRlWF88}>G5c1)D9HYu#xP=Q9` z&#~sH+A;am|Kphr<+4Xg z4s4wFud7X7FS_0FHLI@6B6Sw*;_Vvr+c^@s(d><_pC!jBr8aab#|cx}W2a=TeE7Vc ze_cO#Ym-jAy!1fgKw$Bhfons8{r8V$4hCgnwZE!r@)d2KXYg~xWvac7**rk~epjxb*q+sPdI5UII4-xz63a%q#U6R%8rzJNxX5Q zaoW6JK^1mYOlekLt%9jFaG~jy&}zQ?dnd$7z+WxriO4d7VF{nXt!iGDAUfhJwYH`9 zx27-El4nz{GplOytgOA)D{1+Xt-!x|uobmzXc&`nhGBIc7udca{v1c$${TrRS6=<{ z(A<;*xXcmfAB*EoKu>J;ahhfQ$A|_CtSke1;DF;Xhl;I{o;NS;9O#tbLE@8iO z0Wwt~=*Iz>P5y1p^U#{Xg`9n4aXL%8yQ5~{%M##^0sV_|y@9~?>qUJGxWgPh24|dz z${pFA^CScYT#af9CmuPoR1)MDD!d2b24BU3BTj%UWM)ODwhFX@$xL*97N#9XgzG2w zmUMtaSi%O=)S!X_6D@!Xl1(u!IcyWf=5ad?(~oGIMe5Xoiik0{5@)F<0UA*Ig|N7V?MtA9f9JWFX+m+eW z_$|otN#5}a+fPT#UX?~wx_iC$U$Q;-vHR#NQex?-;gN2hwW{OGqvz9}I9tdDU*&$) zXIy@hzLUQ^{I6ci7!`03;Z(H}W{>p{6;(LY)C)~fYmd_bD#9Y5B zgGkIy4&ps$LGQ+Y=kU-Q$Qb|Ztwk8qeWMx67ey*}*>%Vcmr6_U=^@>MU1yD&-Ok0j zGSzf>Y^5Cf-dp?rbMT0H!wd4`ODLmxy}L|cYlwOix_e9=H^Ol>sW09Pmo;VJf9HqiIQqCb!A45+9=tL0F zTHw+`AiHA&AY?v((E(8Cz?vK2i|}dRP!D~G)BIgVMe^*iD2MM7btBMd!+!uu0%1UK z-dt*n=Y#x@q0FJ4M2dVImSU|vmM^3t zx%IN1WlEMSw8wC|NcGoqm8lJKannVPRNhm2UmXE1@p_w|J$Pwy-NIOCsGg*6#x20( z^WgG*x!ZMFX2R*O1_BgNmO?Sgy>fj^{J+Ie8hUO8rZ}G4RR*oM~w<|QPe z$GCw@1)V1Mmt%AxzJ!b@J+vb4-7EIVjwh3646=Cz_MjY+%(tsD4L`Vk#p3gWj(is$ z_gdX5Rma}(y;rdPBsBS0_U6N|QU13@QOg)EpW4h&`HZo_%kKUz7qcU(Hys%eNf-=Kcx3bF0fb^IMu&|1jeU8kw6))fCnrnH?IFMz5gf$ z@K1O)kp^x~!p$F=+_n5$n1c&pU|cHc$_tN*0r*0uVbo{P0qSt<1<-)AgvfueB(}aC`8mKHEegT}`cqWwa#_%sLA(6qyXxI4H1Z!xs2cnRUzGSObFf zt#rC5{p2wQd5n#C=WFUWziwq(d}>oUj}{s#w?Xr(dFTF6C5Wymqb0FCoo}4C*Q(sR zFA(MeK96TQJ4eOaE@=1b*MuFyX1D#i$gFKC_L%gD+2-MTGiFlcL|F2%A*vk!zRXWGYl97hN8ww(fXiqB!oB zQHRvKTIGz6Q;d~=uSZVRZHru!1A60VFH0(A*SBp_! z8u%Lc6zb+Yl&Xr8zV*}>BWMzBP6_s8#`+9|S`fC_<)6HjuD_=CWle5zB!zd;X4B|m z*4gScp^|xG0`-CCCv=3?)W2FQ3=B#|9(t@_6#C)$E*~y$oG+a1A*+vGskTELwUQoF zyde=&i?u1pD*3x>QF8Wh)Oog4MQF`Y=bNRF18C4kUYNI-evhjP_S-ZMk9(`*vOUP$ z%M-6=5ix&f-iEzC#?7i>3S4M--sATZmB&**NLo%aZ8p!Ocf##%K^z!w*CO}_t7cgj?0eoAEo8NM=8pTf%iS4P+$dJ+Ml z{~uQNG4qe5!MK5w4Y-IfA)HB5U)PQLsQ#{MG%TVmtV{1kc~E+!9gcl{`we_5%Cr^C zllI3;Zmlpub7YE;=DOeK0n;ULH-6CojPJ5~ym<-q0gZtjkH*!LTg6q#0ChZ#S`s`} zDBY5T!}TEUoFriJG^iq=jzMJd&HthV3$B*Yqn{{U&{bQ9Jb;YmJQ#ejxk5A^0jee# z*R3J|`XD{BVe_u`49>b}{5mM1JhL!1eOPS7Os~4oaoi!RFhH$_m0AocnZ1Ck*iRdlI;_GL%F5b7Ff5E-ow#}?S61Byp1sVrZ;6yRh%PxFi@+V5Rv+$qW-i*axrJuc?sRJ zL<36>)b?Pq3GE5@h>o(;eV5%2g1?-QdjAzE)n0<%EKc*#v7PdQx*`w0!RGg~qZP@o zDuNlO*HsBe46Gb2br4sbj}3bD*_FP%&OH~h&?qVHED_58AyE@ATiGk7pK)ETGvnLE zhSRDqJ1b;`u#94IUOD^z#+JBH5;ODGF0 zN7=b}pX=<1M?@?u59!C(IaSH9crG$I_7~ik)*ks1c*c_X_GQhe^$RWKyoV&Yy{0&#C3$Be@l{Iky8gCbN#2|8Xs!&A}TKcBOstXbVP77+UKc;Ihpwp(~Z8 ziBwY(FC=D4pMT6YJ{>BbD6doE=DSjR@A2Flet7)b26DvFd$Ud1&fXOniw_T79p8k3 zV<$kBmP44}<&)=3TV4yyGcqw9t?U3|5<2|9gbR+^!24mD3?4%H?+um>lKvMgM3BV^ z@K7NZ7M4}as8x+&D7dcF4mEV`KLj&?gnN{9@xKqA#P%HR4(kFv^Euv@_bZoVmzjVp z07PFDm6ob|(tm+q3V_h?4+wG$*MN!)B!MFM52+yTpbC-s5#ZvK{XwfjFb1iQVM67? ze_tVmt;uwfgtvKmN_a}Hx$oI_ekIR68X_j6A!?>jM&Jx{@7vDDrnlw|6(Db<`K6`1 zKAWa*4~ve3perrZezCQbtM)7S5}v-R^L783H_|9F=DuR?I&gm0T_D)vx{K-XOHL!} zyM#crpljoGMv?LdDIfHTu2U_x8oOWWJC*KmmX#RXW0KM<3;m=%^eni4T4~Wr7&J;5 zn#&V@wrW}T(dofWK#AJ7rk3T29V-d`&IQMhaS^PI7nVLiivTF19W*vaL28sP_(kDoRYr!yFAzd*R3(7@`OXH3APvBbAp ze@xdg_#qvxSSXXyN9U3E=#qtNpnz!qd4H|FNqI2J%56vOqV)#_Esc*^ zm+E<#xdX9BqU{ zUv;Prisnc$M#l#QvGqG_2l2&W;*&< zoJ5a#X7yC2)0_wPie}0a@_nSI;&=CPG*1dy8omhG5oSejjRD$ulvzW{@E4p9z>T8S z{)bCp|EE-mfQM}n9EmlO$mR!N>H%Eenh~*$9I-YjmS_vgl{AUUsbYQ%5 z&%&7q)Fxma0Q7g@kxK9e-|;eub6_J#C&&%9-a(z*r$av6CvZ+(`>TR&Fb zaZ4~jn2RK3#-!`UBM$4|r`9e?+d%ekH<+2(DH}|RVUCAQ9@WUbRP!SJ@xfnT zbDnJAAHUaIJf|Q%_D1;rEyTPgCQ`u01`O+g(@kqTd|Nmj?tHYXp zzxOvf(?!!4D@l|P09;D_BsoEE z74;u4`M$bVNlU%?BVfzAB2WB1RkZmx$AaZ*smHzb#O^XC7lvjY@+bW)=6Km^(ktx_u3r+ruPg(n71`E_{zK3P}PnKQzM#4S=z zqccFf-;U4*UnJ^eskD8zBJal+=PIw&u5LAzx#qTaPYH|h7ez%yW%LfQ%U_$+2~t(t zsqr|Dbc(;p;pvKP6mMi>k?pKV?oX6&dSLS1B?r}o-jD3WCc`qCl1pbIc8#r_x47CD z#Tt8-+G5+ZaK0qo!ZYe&e!`M>z>-oIXjlt}MJd*BH)L%`S$T_p#M?f=T|Hf{wtfB_v6NfUrH z|LbS~HZ#0+S_)au5@*{BtNb&tAq(3Dj*vwb-mmvTV|=%T=e?u`3^dGJfmJ|bLbfC% zK*I*~B%Dx`B8Vj0lc*8UvF``ULiGNmJArWD@}&A@88 zO!0l6$k}lLWth+)+B31o^F_?;Q*dL2^O%$DgjNbgi&|xn&$>_`QeIfzWwN&b?5{Zu_ zWwP(s>p!h6S$qEoL+@ZQc~`d)_!|hNaYJ2*2i@Z1p(>e%KIB*=f7H}0G##_BFMV>X zN&D0)QIco|c*FDv#>3L=@~x6vCO_1z1ZGBa)3E<|o?ukIuU9HrEmI?%YBk3~^({HQ z`b@)hMAyBRhxbggl1d>z!iU0tbl#NnHJUX>9>K+tZgLgl%KZl{!P}Y)%_68L#Vph$ zU4|7DX4igRgs-)$26RX+blNNNqbK{hSZxL!Nr{~phz#z3%6V>rAvn_)dQ}+y#wDnP59pzqK4HR8H@fl50h$ioRMcWH>fo+Y;sdqiNQcWhO*TE1$b3S|7W5C#v4G3 zMV9R?Eq7aU$X<3^*uXalw#@!zvH&ymza|+}0vP2;Zi#51I;lf}m)%ykyx8x&+?yv7 zlz3@pY)G;74Cyds&Kg2aPO?(RdU(;Qdj?&MZ0PX&G6kr&UBn9V#vx90})j#@fc32KI_z_d~;~QE&@3iITU(|aO zJR3;Nu27kko7~~=AmJ!lEUbIzF(>3db?}9+UsUbYpYe05>a}^%aoqXr2IHq69qUsm ze~tVm9#TvdDS4$^OYh`{Gaxdo#&W$}VU;`c$8R*)UtPw}h)T=bn{Fuy2kJ`ko5gkd z<2}eMRahvxyzc&)!oHdgORT7p&$N@am^c-{k%hNQ?YVmrr=g)>9E5OW1 z9xb)xX>gz2B9+D>=7b|DeyWS3DYT$IMRKj~&$CItai0c-{uNKAGGpl4-r~3BjQms@ zJmP0NOf}j=)rfykj3t1Pr2z|x%y5wvq&jX_ zg%4VYRSSq7%v9^4Et4*2eYb#bN_>!vrNloje56t5=Iu$c#Tw@}g)MXYm^xsGqM(gtV+^4$H zP`D&l2$boFfA|m@+E3<P_^G!u@$*6A)Ur#L%s~Jn^_=kf3L&RVf@d&`n z3RuBEj|8sTkPRUJRp&-pE5L2AJ0Ex-Kmr=+;Q%Dy|E?-6OaZ*SRwxP> zu+k}N$OCa2VEV%&D)GwU&&nmHoN=gj*6QGTmU;H>q)+?EaNgl4vMM|?@A(?&AW`|t zg^-B^mS{2U#lzS-?3nq*U51sb>bxgPb#B5VsGN^U^JLiyOMyKU>fQOIF7D$Q1i1c$ zo}IQh8~1*A74f)r@j26Xv~24{tbL;AiITM$Hd{>=x*Apaq3x$+zV-U%lv|=tx=WxS z!!o|-$cse;x1P@)vy7N(_AE=rtn$g~O8gC+=p=@>zXO$z#W-pRf-mAK(HVcEB0Hy0 zs3I#z3!xKpRl_$4= z!|S*AsiPr)O^%ebNXVuA{xRYK8{`-(65q)-> zCBI!0YcA&ekUiitIiKTTF*cxhFg8cWoA7*-BE{;2smaq+eDvE)Nf%spDr_JX^>f_G zRXBBqyFMz&v%`BZoZZQHY`u?-GX$%Pav|!P1m)oml45oV{B04Y;iy;Gf{SG`7EupIPPSZ2l7Q~ zI^u?|f){w{>S&P~U@IMvHVdmFKR9MqSGL$^XK8pgWB)8-hjsTI#{85z%r>GS%Oc}$>6gm_LgUovRGNs*X%8JZQjiQSH)>nr|=juWbw<7!qDbOW}n?_Q4h-1jI9h6bzaP)yr|zD6~*=zdU!diz-!< zuvZx5CmN_&A(Q6x;a9hRN;t(W&el!moa1_JKW$0E*!W0bdVG&GoSaghy0d9BW)*h} zT=4M$RaMfmN+IAL2Q(i=Ad`GoKX-OKLuNpsN=ZN}Lbqn6B;>xTTR+}yF(Nw{?x;Ax zumde?n|#~E=`)~Rb=LC(r_3*)6DA?~@LTQc-*EX5={m~ey`>X9e%*!Dnq72`B-(&t z1*(jd8`wU!4x}#&i^C|@#=m9)KD}bQ#c-{YENNgNCg7<+hhy6yokxII6(HY%j##zz z?*YW8$S-Y?K-9OmNU-GV*)Nv>a0l;ww?+s4myxx=@0e$;aG23nW?)=WTn>}r`H|Q{ zE}~=U%P~W9Rb43}hz_~3dlw%v{*m_H)z^qa0lPxm%$jW2RH0RL&Z;jldRq85bsquV zFb}%DAQ&qTkBVU6{&+}CRS&Ciz%aOIoar^N?XQYkcNHx&@Z?2psyD%ASO==?ISu#_ zsllSFys^y(=V`Jkz8$%j8kYk{?YD(**)sSCjxb@iykO8 z!s@znc~?5+5Fq-x!+tfz`bA!jAVy&V9R?EVYkRfU;+kL|@JkWUo|OWvTenMJ+XWu~x7!V5o!gZn@ri_LANsMF;?!>2deb$d2oR#Fa~ zo|hd!Hu-_5UFWk=&Cp#5qLv1T$I%0-Suz-DibE+@;6ju+oNhRYQxF9p-z6!cPSy(S zQhP0&VPE*MzvY)2t58-wWseRubvNEEQYhY{w);rU4rDd5h#-}@`V}1R;yl~~e3cM< zq7#`&t}N_VEh0feFENE>S>@x>z4-2t$5M>drIPZ3X(+HQkI=gNS%$@0uZkI$oU4pE z>KvR_W3%=pK5%{8ndQ2iWf~dJPBH1CKg)wHF^_^=KnvJCb zXx>hefO8xe0q@32tp{_`cMYz5!XOAJz_ofo@o{Lje$s!l;(s7lD=0#%@Rq@}ZFWJL zFNF7i+H21Oz$!Bw!2<-H`hh&&|7mc#cQCXe0Wib@8xH{oqwOfDY71F`hMvze0QicO zk|ES_Mf%66eBsZW-PGKT_%R)eGaYo2Vp zRE_HGDf}9Tr!crS(2ak|tEE}B9h|FrfziiRzIopLN_#iy{-DH)&Yu;7M8Tp*@2*Q? zCHp{5PZlTwwW;)`0*-8yjutI?7m#pmux4`s!^!7lItE~hLR`7 zLz6;cJ{9>HfBFJsa`1_LVxCEa1=zxy#5XrpL}MhgFbLyeW2At`G%_)cCHmrWkcUn+ zwoF4sWQEMl@3arZ{>$Td(})VoxR1L_IMkx=rfec|_P4+vxM-jY8`)nF_#63oc;Qs= zD$a#Y>wpt$Mj;B9-K5jCtFg8HU_pFj+_yX8iw&))FEoU((Xg2>`z z5G(kB*_>F#8;-?+slmel`_C2CN;bq2ovg6Le2x-U`9H-vF=9#Roy}^7A5a<7yJ&_v z@g3ArI_v$anwdrI&_H;{o5r;Kr9N5M6BAOrfb%HXo^ukm+G%L|STrSTj1y;s9h6R( za-ri}`XR2kg#sHRp8bf_2*JZ|Lwl@tA=NB4m=20+s+BZojLI)KI*`wm#30HWrr%(!Po{tH>nwufcLd5sUu)mCoQpb1^ytG2aQuDN7_x*Ncr3;oZfew4bW6pp= zoL}#*a{g$|%)T7epiaV02g90JA|fTYwO3T}e2a&l)*8OgHkXPD^Z?DVw2{)$eUq_` zk(Ix4HHf2TJa-*)jT|-ki7(l;F2P+VNYv)LoF@{SCfLCj&Xk8j5|k|ay{t)5;Y2K% z5Kkb>@`c}#s+sZSAh3Q+T{gf~0B<8sW4SLfJ}xvCqsb^ipnkarsfd&12 z7Q12HIDK3^rLH#At9PB)k5cpjiX5N4d1oUSil!C$;Ny1s$a&YYsyA9XHefPc`WTIi zTeE%Pdt9fsZra79byD_tn4E0v{rZP@e?fzx{x6z+MwJP``6IE0juLJEhB%Z+px*)I zcI%n_H^kjNzy?4ldNvY`0yy>dWw)YsGoVno8>csK8#Vw6B49=A>Ak5Mi)#m_!#g`Y z^39N@E5O=2k4#4arYVfHGuA&vLf#h@deNZgNE2ZsQp;Y=!t-wr+M2F&1x#08V+jC{ z?;;SAy0&?M3`eQ{D?UKa2z`ze^KSR%poYpdcp!GO;&c)QaVC2Z_k|W3HwnZ}l8L0CB2o%a9zbE+dxQq3 z%?F3S6zhfGgjFsGd==ZW#ic~A?Gt4D(H4 zsc%nr~YYM0Aqi-ufkDc93cvOZk&p-O7G#y3177p4E; z>`9!FUhAGwAr<=TcNukKW2)vT)3@}@=iYNS8$04)6YCgHV;Q`7Lbu73WvY<9*zI$@ zM}99oORso2sH{g9+WQYzP0%bd^Jqv{j`tNZx-j!ZWq17i$TkJTExvjj7ZUj`#i6ju zkO&B5p`*@Z8oHo?2dYtzXwwC@`~B6QNVKjOZmWXu6aU1cJg=I&m45C*j`sgT*G&Z3QwOZsejg_@DRAVC@B#|QEPG+j_ zE%zZpqn7cBs@@=iPP>P{SV&s3q%AEbM+lU-1a~C`o!iax-;26SbcOaTrK`@>bs>aF zM8ii%3B|^?N5&y+#y^SWOZ7B9_6Wh@j5TFe{eIZ%TKtcdZ{U#_A6zQqLyHHe8pAo% zDk04Mn9GK&3phBgn-a#B&lSVtb%}|*a*b<63ujy~?a=7NgmkRkrhu)=Qs7SCg8MkX zZNM1MV8@x`N$cfA!>-CQO-vc)y_ktYK^sy{Mb3@(oxFU%$~L#RT{8Qdpk|E#@`NDQ zDF%lE9(k0ZTXOTxX+;EhHvW%bfn-1#fQSbmJ>1HDNg5KEivT(LgC%qCH?dVbTH!AnV6w!nJQTgz383m{yivw#*=;~VQt242Zm z6Cat6mU-o4D3A}rPIMm~mIC8~0apr7Qx~!3DINJ9Y93EtwM#ets!lFNx~Be5`Ur1c z#Yx_l510k{{CqSo{YIS!Xa><)F8K4TWnycBx3Cc8F*?zfk7oRV0n|a0g}j_wdeboO zhdgSCL6Mm0r^4ko6c*c(>?1s{ee$hiC!i3eboWRf!A{!*5M3!QBLNe)x9qJ*09(XK?;GDW7TExb?we!2uzpo(GED^F(3W zG4BWzj=prF#04><;lSK4v>>z)@cQwlQos8+QpHl=_RE~Av$L$FlT_v+F-P>fTKDUQ^G9)qg;O$4*`dHq zQYgVY&jrRAS}4D2y%>S>eG+dpcJ|L>En*=vo0>ULVC$D%0)S4KkADJ zljzpGgB+HEKTSuSzmITILn$(NQ@4~+NTTo}h6a(In7)=RA2+&bHPAkRE~g_S{&C3|POz^)oWDCuc_ z`q!80s0!N z>BWeN<6jVRS5_{-&5T)c!wcBab zJko8%wilV?Zyu|5MFkM5*F3UHr%LGqmT$=!q=tWMZ>a(;0=GTtOw+b3=0llSyZg^d=n0HT zX2#3rVpCm8E^`mzc*0a;S%`I`#ED2yL0NJK-Xv*(L6jS{8iM6bSv7auz*&Gj*+#PC zTx*}byaJkcNpZzt^^=_3T3UJHi8?s&mpopuar6i3=l!g-D@X*Z9Q!I_f7Iy_qTj7hm+1IPPTPQ)_IHy2SoA5 z;q;yqP_(BGXUDwr+!N4y3+of2EF{b6{_3bk7bE^qU2$bC{+H{bxTsW3MQ34|y$4{> z^~T2_)`8_XcU@lZsU9Lv0PSl&Ex0PoDaRz?y#l=U%n#}*pLK|UqvBkZDS;(=3BC!_j}m0Di=Op? zo}ZoyGvf^N5BiN$!c%=coS)|Yge=nTWM2Du0InZZXKPK4k!wY&o3)z9s97MZ;2oNe z7H6*Ylrh{_o9+Ew=MSh&ZD%e+epPd)JGE>H5@Ctdiu)}#FVJ9HPc60f%CFD$3BYXc zb@zxRfndrs2M+^jbB)VpK>_HpW|)x{#EtL`n29oFrqSFO!p2Wt^aVtlL>XQZn43=?cB0AOO z)smUqKH1y<$AM_MdgCY_!Ym3$7$3_0`4i&(VS<3@QWH)|gw><%YjlrukDV4j9nKt-ddoucH`zBupJH zEk+l2VN@f|ZJKhe;@kDTy0e+(F9>dRW8Or$#ZX5;rl_S-_@69sN3`B*8h7L5t+o-# z@}HYW@eU2&j-|LjA)DRyVO6yg1fWZ*-$LUwpg}t$44*&%EduEC0CRMk1;s$ZVgM0W zh3w-aK+c;0V+vqmGGID=Gl)W_h)aZ{p=KDRH4YKnM*`s`Od#yG+bDB`D1MI&yAc2j zk!|2WnR6h8$i+KCc2SL}RTEgkv#+1`Zbv9|=~Lc3Vys*<@YSeBVNkbd*I8Yu6U*z7 zy>}ln>hr@=!sbqznIelFI-f-j^W?48#S03o=voca3v4UritVDtgb3v8e-o27!HZs` zv~N#IRLP&ll=rdn#=3V*x@8ahR?#$6jf#F$30AIP;zO_2R~;2Ksq@iE>}_F=>v8s~_jKKM9T!ZU4>W-Ua|Kpzh)sS` zM3R1SP3+2(WILE4&BEfO-|n+CQ;LY#o7MSaBz=&|Eqo6Ko{fuEW7P zm5zf09vyE?bv5XExB3+d{?c;K?p?|{kQdvkTO_OGbk56&n04LM=y=V(PXB?EK_s&uBJ?Y~@GpokE$4bBXsxXYd@(`r`%q+Vi{}*U{Y9cl<*1U2 z5dl1ri`WN zH=Lg2M;eiOJ?5}~nld$`=S)aa{~=l2H-M#b8ut32maH8hg$R&0cwRyGAyQVC_eizL1ggt}m43ZZq8(ztuPTvo> zG++DeRP8?~d5rJqO;qD;-yT=dC9Zn%4$kUq64T(3th3joYHfDz>1t2$Wn;MN_gne5 zYR$10^W|?yOM+f+Ya0E)(RzkQ@^Zyf%e0LTEsY{%CUW&kZy}<3_0ltqoh&Jcr#mOS z%L@35?V3I+eom0+#mUYK{2QLPt7{X8&(t>wx(>o3T{4ws$fgMk7K{(@NYyibrp zUCd(Dt}J8N*0X9Lv%jAtxJ!XCb(!$Zq~G zC{H;?AuB-vV#yl7QsZv*l;hiBI+?2=Y4@fMKM7~@QK%Cx7q8m3&aaqi0h*D>p1d0^K8g_x#SgFO1N^ezg8H-`k<+d3AVH|Pc@CnAG%WJ9O&2kUzk2>Ag@ zd-6RyExegZ!-!wZyT@6tGv+f~HQB7^vrIqj?rIe*&rAms7NP}JYFDdBvLoJOu8Dj2 zkB+F)yoaiSNZ0D?rcN9se*W5uyULCm@|UZAsWLkIV_oDF5$7T+BSV4(0e1-StNnn` z&rQ%DvP=m}QWiala^u!?BH5n*7`{&F+QBc*!Bu{3n-?xJh}s(r!*ibmsetJCO~qM*XP8Lg^?yOM*#Hyi|4bV<$Hb1_Bbtk3 zJjE*t_OU2snA9LL1_1>%jzpLrE`h+C>R7oMm3moKb3MfeEd@f@pn=+vWEXwQi}ANo z1p>s(EhMO7$59LJ5Z^3mlF+N7$4*nb(#?Wr+Zw_y5?$jEk{#b=K2*zecg;$_!T3~B zX7H1UO7Om+lsGG`tLF5y1302XcXSWUeznX@(Oft)92oc7i%#ADf;gD4#lgV6Vx@(} znZJol&EDlW?X%Tx$8MUS>T1pgU?5vKs3AaFx|5Y| z&lKdWPZo}}AJQXdg|XYK6%vC^5XiJVKxG>O;idmAZBYdO2_KKV<+aIzW{G{qaK-nq z8!(FL^r8xlkS62RrwCPBCwu|5Y=)J$me@!ivDZOio3Agt) zrD{H+v*Jojz_c)J&GPA=(X7(@;Y61pJR!2S=+VFBF}f>YGt|e?pR=eUCCuUQCibRi zfjS=aa!2~sOlTse}ncypoTUOHYyZlY${A!Xe4(;eJ>DwZ>y6%DF6v?7U@#cv)io7^Ip zYs=+Y(b{uN9`Rn4z4(+r(J=7jJmm9kl$k`ch>2Q3Dc(I)P+QYi)0)RA&!iTtZ9Dy_ z^L!lQt6_Pfm9EuwrO<~B6@3w*8NCY!3W>n1*}bjkD>5PZvxhi_)zT^axG3vDGl!2y z>E%_E->4qT+LI+%xBv$1JDak!Ln(h7c%=+YCqY$6*V6ISzmdA(Dv+-Li%z^BLi?H? z8WH8aR?;l$4kTPUK>Q$zb(E5~T!I6{dZK{qk2sjZ9Kv0O(Weo^U59GOMNm_)74o>e z2bM$Z^(&cj17#S;O|X!M$hw-(4MT3(z_2r$CblOwTs)74#s2ZGCs%dURn}FzH-hr{ ztRx8Za;d^&#+`m<26i=}_Hb9DD-X*d?xA}ZQPVZ^2@_@Evw>~p_?D>QM-=WFl@QiP zslS>~nQXb|b9fFSONUor{v%2U<8k^K=_jZ8&#Z$roX&EX3I+4gzQ&djjXBSj4SyVn z=%H{`VIn9P0KhTfFB<<5esidrU35BFg1~g(%UrnEf=&kK16m5tl6r-@2K_D>U}2d+ zV_nCSRCPyU#-(TJ!x+nDfmM0ouJKUIh`xynZM%IiBl0`lX zc8UPSc!{Ac6MLgqpP`bH56@2-usbcTm;si60K$fSxkjQN!}iOTs}z=MPCmMYsr^HF z>^yF}K1yk=7&PW^#`=BkJ%;)AWrXz6&zX;FB}ER>!4jvUiEZ(|RD>fFm)&MZ^y6vT zUR>8{ij^TZzAYavuzgEl3%tX??pM$)dwzQi+#Ln~cgg_1{x?h@nfN>Rl;Uk-`6-a1 zoSk4{x)=u*kRg?>wR(kHr7H|z;qOAtNN9olxYN0ip~`0X^>mXq?_W^8-Uc`ycuRDm z0}Wsku{FT-)s1!FH`-SLo5*TP**$@9w5n5#1c8!)vi%=lNT8oGV#qaH)&ze z>M|QHJ-7ZY#*{F=tv&qmi2btzPfDv7rBuv{j=4PXrWx)V8RBorr%b}14UGKGbVawA zdYyfyV}-oKHq@}rgE@&xa^Dl}dOBgpj}n+%l<+@a;VGuWc_1rE+;N`Sre(Y>K10SH z-{D$&77s%^-^`TWR~`~k{>9hSZ3BBmj zv*`hggQMf_q_5D@xfZT%SDZ|%W$>r=>MvvWhl9y{N$3(ap1W%9Q9O7CwOFS(?ou>= zvYCEEn;-o}C{PD{F&cmIPzIG{Ys>4!`neggXeKj0+)hP--=LmS7N0jxk+%9FcPAzh z3jMc6Bl-J@{Q{(=8X0?~I5BSeqqP&xzAg&l%p%wU>7=hZR977wY|GK2C<6KNn^^B# zPLYu8YNh-I2^P_7x@H<$h=KA&KJJef^*+Vil*d#M!!#@!IU3JO&{Q)F_p)K3U56@c ztKw%W7QvzM0Ou<2#lCm4sYt%99x|Mc7g*IUqEfy{Q^7_tBA8BU2T1Ix7_*Ytns*W9HYBZVG*@EoO;^;+ClN!OAXxQ0}kJmfSAs zr&CNKHd0_@6r9OpsrGXeE##QEeqlSP%BQrO>c#6^aY&XNLJ8s`goiF+C&x!n5{BgD z(f`Nb11#a)6Sq$y0}06O&A|PyfL2EGpUwF`u#^g!GeCLt7jz@q=jIj!@cg%EASvaPaq4Iv#w)8aalIZ3V1xMJBy061st2LRbvFk@PrBUQ zrsdlphNa;9I8k~ewa>V_8LJQ~-(#2fWOzNS==XS7pE;A>5JW~k+<4dBVlkhfbWV5K zFF;j=rNCiYh9QVf*L+CsVg*44$!8m_9S^oatNSe$BscJOiU!LHAwH{$;GqtPdxVLY!{ zRf#MQfZiGUnlat<%b`aa^L#en_a`6 z$Y~{Z5H0=`s`k|l73Io;81}Hc8Ow(Jyw|NMr+h4M+Fk10;T80iiByl=u=<4jJ;#ZF zlTKGch`B5gsCcu>Fio%K(lP#ZYj<}C-cZV0J=f6#`V8vG-pKO8MOi$y?71!gk=DOApYmmmABx7Y zanP`goct1wro-lQDC20vIB$btK*4h1k^dFPLLk?>MN}*q?ThySQ9FHtRpF1R0p2qg zpFTaWz9-p?ym(cF5+YV_-xIlx=aP2t1r#omoaUkiQ;k}s!Ky3+i9o1F6~`p`!h`S? z+}ZRoU(1$lWvum78Dc_^>XwO_sj>*hp%T=2Zn z?zU)icCWy6A01K zD7!pF#8Gt?x4Lb0|3M=fGb%A}2#*GYIJ=jjgAD<3Q z^I^Y1Ho`vd#16?6a|My%65}JNtH$6UD%NJ?P9TMmFSKd3XGI!sFktd82vW*>d|ak@ z?ry(o!_WW1UF4ivhUCU_h~u3nr*A%)yJxK)0`F?5$O5UVN&+s>z4dGZ z5`$!Ye4Vg4Q#-p7y427KMBjToO7Jex6+{o(y2`z%J=P~(~>;Pg0W?-5!Iae&^KILhQ?O$(VoAcH_&a7@0svCD(7agD(rPidOg5I z4v_Q^vXbA%>3=~vfYam++1|StS+D?ASd#qr1ch}X{Wo1O5v>?y9(=d_;*`>LnF%4o~D)a-H%fFy*9{sM8Tn>sM6PX^S z!Pc+eQWnea0WxH51&WexM%I(}KTYuYDKd`{wX3sFG}#I+KsH zgupIoYE5^%mt?`bj0PLspMr{Th~wpC$^*jLhA{C@C63lDHT)5#BhM>gfocsw*vS#m zy*{=^vcBo5U`$iHqy*ki>j=lKd4lodp*7J8*wg(s??Cg)O!?7QYmU!%MW+F%fjz~0 zA}5l)wDUts>4bsnXatVdczA9dXK;(Rm4PLEQqNy2@G2h{yDOtZ=Herk=L!P>oOxh-eWb51mRL@AN-! z`t9MR&UHKfAT36>4tV4-_1_HipWo;KK(_+>2w7MF8+;-!*4v3?nwu-CH?>)@)%>ouVdW=jD>)g=}uz_PT!AE>mKU@LSH7~ z5#N^esDuIU1B~S@46wzg-+j706wyRy95@4rCInqNATk@6e1pd6`ak8)aNX9FoBeF+ zqKzDZ%}9o}2Xf@Iv-opN0w-cg+aBs+aso0GiQ4N2L`n@0Gif%^c_IyC>P2T^GGF4F zPzv&fkITQ1r>~+;e4bHT;Z>mLfq=+)%=+#VeiVe^KW6EKA+~QArxe_pPussY zxu8*J5fXKw6U0T~{%54I1p^3Q6R@-{^Fp5Qe5Sc{mCvOzsOw<)B++&taXRTvO8LB( z`Bh9fv@Nx5T(f`V-inlw0O+M|_mdbkGe6Dy8NmOZw0q)EC2^xLhL}=5W{qxk?05H1 z;sHXrbmtI&`fnJP!^{yc+|?j8m?^cnUtay?OC?Ae%Zj@5J7Z}$6Y0QkcC>6um$+g) zSG~DV3`>GCM!zcfq`>kuT7o>)^%i+rdlW@_rt&yne{R1#ZU<@w{CQTzRRu(Jt6_j1 zF&fz)(TGU!8_y-!HI;diQ1GhLbyt_5<_I?Spk;p;+7G%=r|tSQOF<^mCfI#k6eeMG zoQMBQL>;}1D`w$_*Ed|$uJj6u20@j0l-wgim7i|%w!$21IkJGfHV`tLG0f8rU-QBi zCzR<-o_inrz0bMh()lx#gySHhy}sA~Ksjw;{r!{L$%Lt&+AHQ#;vdVLhqIMTc&5=n z?5?4p0M@m|ZR5acJ>g{LJd3pt1K}{Xa`fEc*YR>b`r?OzCAJx_vOAei9221pX|tdYOryExJ0iSDa{w(d7-v#!kGEHx1B#!rQOxw$<}L! z+7-6BpFV&<6*$Jzu9VHmOIs^4-nA&3iiL4;xU_otuHF6`_$l1fw{JwPL+}z&xo%h_ z-7h9IR+kI%K-SQn(X=@zvy4Neiy@+6CyYKifKEN*GrgIF2Uek3(aH z2fY&KC#ZZ6?aJ%_7+ZQ`79c=&d1Ij&Q$L5^e9tNT9_V2Z%{QvHtDh9GsIF9!MZpE! zJRFPrN%Dc+!zZF>kt9KiE1rFH?G45%tZkf&sHwGrG(io%SCxvx&!cS5gwmn|nUgA9 zgS9#kFZ9Tp4Sz>#wU7MFC*maG?~4aw2{i{v5m^d#RDX(3wPpo3uJ}dQC{we;W8LL1$j0j1o4=rU6S0j!hGAx;vs|=XD>pi>I*&Ttqe>RCLY%h0jRac+ON;E344w^? zZqASPhDo$rG|8?D7PdbjgjH)=gAV%a+%v=>?B6Dq01978|7ZA?4|RW&lysso{5wK? zrvWXsRNU8_QSvY7l@E2PeSw96k_(wFGcT}X_?ED_i^%~?>ljc0Zub`AJ2q*sf}H>$LoFt0RrxdB1ekPT@vb>amMo3`@xRyHY;PEV9H(q|jK0&~Dpt8E^BTmhSnpzo0sMXie=A1F85^O?!BfQ*}~Mc~G+38R0c-1a)8B zby7>Fy|{RbzAXM;+f!=8j<<90H}RTDwrguO931Zy1=il4KKe04qu%1Kr~HMEU_X^?QVUZin?NLud>!^7-Gv7SOR;NbsQlAdixbRKYg1 zkt?T6a#Mr3Wt~VQ5)&gB`_M&jeN#OJ18PP`n%lkLl!X}*5A2kg+Y!>XK+X6L4U}UN zQ3u2Pymw{QNY>KgRG)PPGWUaN4kRA3Ff~i+9W#F$E1Q0@0rxHW?Q)N?=86nvRZBk? zXI@#fi_vEz2emozbc^J2L6@(5E68WcuLsn&LxF3&X~2NQ*EMQWQCsPQiO3&H`Lff$ zLRAyrVvuOKRJ`Fy98N?f*7COo4g2oYEz@Y#l^C!oThcYjat=nlj713dMOXBZVdRjM zZ;nS#ik$EsvD4M%{~3w_T$?~ z)X4U4)rqza72<|#rKW473V=oAtM<_|{WkWw2@!@YpVX)B4uvj0MiCNv)MjR#jb~ct zD#g=+{?x2DR5N%J031|1=9`$Z=j5U%aY`OG*h(9Q)JX(W}zZv4B^P_WczAB z6X&TX1wScV8eZB#_upx@Y6|bIixiCe3%Xwb+!H2-I#OCI`mW6S$&Q%iRjgWDgN5l+ z_XHnb59`$Y^x|pQfecpfOPzrS8&oud#A{Fj(SpCAl;3WkGfEk^r@ri04_%E4nJNaD z6@+=N$F{CV#iMnrYg29x$!&spel8LP*p+KV!R+hL9doa9w9>TW-6;!ZsQdv53w*WV zkT`@u}&brI<^vU>E==5{le37V#Vt`g*2cboHbDSVUz zY#4j7ob+n4u$1RFsnPvz3O%dzgKc9ig&Hr+3OcAwU1)Xbz^5=3;|)=|2gKY@ITXqZ7!{V(xIX()zg8JM9W9w=Zsy!kKvUkAW_zUCs zsGB6z(RJ7;m}USq($BM}HJ{U`g)tXXFblI(aJiaA9NxtH0K>&*fWitw^t-8^D#?0+ zTG2^@Qd~$Au%vx(l->}Uuw5|Wj!v6(T5j#N^2JpWbkMu>I`0*<>Jku{`fNRHx9RE?r&uQIRxQUfI3f^(S%V47rEA@JG1%*X;!*0aKJrN200UP)h_F-6T(q!! z`}qWp_Ze8m3^PFB}x>A$dVEX2{qZ5FvP@+eI$)S zDJ_|G@I&7=38*(H}bPPaIEOYvpXZ9ny`-xb;Q1UvHP6$AYwr zVa&7dwY*O+iDq0RC=b=H2I~EOaP`xR)#9;VF6Eu?lyu%H-TK@jzD?p38j}MkU!1)x zY(>7&*?{f?4^zA_I}2(xp1pAaKkzXBvoYBLU;95FKq1s0gF%og7zEXpz?|?KmE0Kc z?@!Gg67>T_F!7N|F-hdLKn}(rjH`6-YpibzfT=|GrTgKd%IBPok`*qjt-2_vqaav zJa2|Bs%qR1#bI9BDlRJj;!cE7f@ZPTWU7B*{Z=~+pF;MXX_9&R-7p&ywdm=C!;;<@ zgz7_?Fyf;E`%9w7gOhz1t9n1IM59E40%}eQAL~2L7z(wh;_A;UVp zoZ*CX=#Z<~9WP~uY^^J0r4pXrTDXy>AJPkQ;JenT!Q_SBr3!GRbbL?7cnfuFjhP}D1~M0_=mq)BC;+;x5cqwXUmEt+B;W@t;) z(HHr4u1GD>oqs3SO8?BGQtnpnBenrgKJ}GfOB|7m8Ze>$x)Ovqsd<0db-4SWc1Hk7q@#E{3=3SA#UeZlHL_^PrmKX&b=|P zrC3AV_9o%O_AIk}3k9ap);jSiQcvBZ9I+rzyGmMhi|)=`Z@wpnD*1ggwP&-nUu?@W z{><`~cBA?zDY0hgYmUh$=RJ@TMDtR`hq*QbUioIZs1x5JT}%S2w(#ozAz->|@_VL- zk==i6cB}+8Ukgbn(oB+0x#0Zxdzbt7`6!w)KFa@Lj@_fu4^iu)Q_h2V^0MDAHBh%# z@UFZDJJ~6wSI>3{FqcBKPiLRbkBs+lDx)Sy_MN%rrc?h$ho*lx3@z>F=+0S`;@*F= zQaqjGT-~&r-Ukm6#_c_69^cHPg*;B`s+c+|bfMPw$>8a_qX%y3$-I8xg(T@=@aFaGDgzMbbu?f;=O(>$?VKU}&s=4sve?$bA4EK6vUuIQj5d2CCS zm}SmRz)nL5ojkr=#@(bYY*Kal+hifr8?(fbF6dY-QYNT_tu*eSYAD$Ay2a!{qvQ{B z=0^wPgfb7>MW(oflykqR79sy6a}#AWLY&WEkxn?&sD8-WS9Lg6YR`C|*O50DDm9{r z!9b(TWhs1d-tstM+DfJslTjnv+vO{pyW1=|d36^(uWf7LBxXL;CAm-K+E#SFci3*v zKea9d`KiGh&Y5!6dqNMl9fH0(rbmhtvE27~>^K>gm6~0$U^uPb#i?I@;iVZbiKCtT zP`*X)80W{OnmE)_c~V!T+IF3`LDu!NEuA&?9sPy7<*pOkW&*ZNop!0xIP9h{HPFcNMSyear&5EF@6jg04kh=7BqH$6T*v%xwwUM`I}c8qB)Z?}58Cr~PkyEm z%O#{_+TKGsJ7m$&B>1?mkX}Wf@7-*RO`<1;oWshB+S4ogC-1v`Ky;qzrh-TD*#h*EE--q=`BQ$yFkDsb;UD0r$( zR~n7x?A5tVGnULhh6@Mr*l;iuK#)h-fJ5ARbl+2F zwEX4HHoJH1%U1aoaJA=;b_HY9n`#Dj_3VZ%T|PUm|GbpbbJQIPO|)zR{MA|1xH7^w zC@O>0e;w01fx71zrW#joIYtSbz|;~F8}vbOM*Z#6LCt03beOngfFiyzr2(b= zKTZ3;>Mt0#gTfA@Z_xdxcXRmjuI*|{0vDkJ%7BT-F#BEq3|SKeRZz}3iA||l>#%IYkhHCx_ky(0=BL`?RMA9WZKE5Im)YmsSzzW#Lk&aXt>kX_34A{ z=1~#UQu0KFMPQil)+ch(;c_jK7IU^+L*hHhRNV_{@^`3RcWztn7j`@Zx*gs?l_0j8eV9i z;5NPO9*qi5kBpCZ3$~%!#UkY+jYQR)zvygQQr=k{d4MU*(GYWYM(mU~SCj;!Z^rvF zw_h*e!({@x>>Iv}+1L|K6r5~188&As=<)iSzfO11Vr68(c73^2?Bno-hK_qN?e%qj zPpFLydF7fH@_Plsl9T(ESxPM&`>V^Ev6t}jL4(4_EIMnWz^PBnOznDycAf&F$@#-& zsc7_T?|Vi8S4^5*15>`gjE<u%XA+ z@jREbT~ObRwB6PcdrzGhlDIgaJp?Ia6i6<7oW^cHT)pZ+U4jdiL%Zs!2%^>C> zLlUdOk!6o((~iS(=Z=7cM`t-t4=VPdAd8#kPx|WmV?&NGw&GQoZ_-+XELl`qZ zbu`oO94V*3OioQ~OGK@i?c;=djh-(fHFO3D17D$?jWup}bz8b5=k2aE2ygl*zU{(2 zCA9LnpO_ixw)*!usSCT$ZWW$BHXVGUnO17NPo;f~OJn+&;pjh5QZK=JIWjU|wK;Dk zXC<=#d*Ml%e9_s@I~bhQJN@#FCTG*PT;ST(a6h1`N@HkJDsmv{$Vd07A3+J7;-Bpf zd6*Pm{nYFrne3JQQz?E?N2{d2?O=1HcK4FemS?+Td`({%xD@_MZGHPy^K0;C6V2zb z=fJIxh7*IwFIgNYtIcz9NcwjA!Slyz``3}ip>-9%Gjhu2S{g5Nzd05BFnoNVwvEgA zT+jQ1nvzxxCiq^us){ZxrBJV>D9@LFty5BLAvC9qU% zLrx0jy4m39JrPv~T*JZD7iCazqTF0#Qtl!e7O+C zSvb%C+pS4w+T%E!fgC^^0dfwzjesxt3Bk@>C4fOBzy^9Fgw|g4J2Ee)El>X7jaX@t zwhi!MW_a8+=o4u1?T^#?(|aNK#y6EsZF{}!_#fE~=U_!|M-|`I3E8FaK=J7&_kSR9 zFXhNw&TK=1M6M)LqSQ+l`4l|?SXBLqD--%2mlA7sPG2X>=HE{q->P5LSbpgF7rW(3 z*YhXW?HZJ_X519j9^x(>>pML3=0|kJkLap@pqv?t&yfNgpQTj>b6@_fE^?T%_`GVr zL;1o1)+3h&w|Ay5p)#+Z6isQ%2leS4Sa<5@p3i+H=G-8PQKBf}$HnRM~3r{1V+HMcB`!@d9T@G#F5*7d&XZK`9$5j#<; z)Jw~U%!mF%-8;0d)D%jxN}NvMEqEdYYP!>HQDSLZ@B7z$cS^2j&UQ|ucdDuf(Wmxe z$2b2-x>Y-Hc;5QFSV~u}`ZE9YqE34=hhBw*T)D~GJHoP-s?o?B6 zwn!iA?180cbUVocDa$%TzS|DHvv<KI_^jmykx)^7o> zTXOnB=3fF@zI!|#)ZuM9_3~-quJ>ubbr?fa-H%EI6R-RCT8zibbgr%e8GPi9gvCmF z%Fb8K9fP~QW)W{b8k2f6-%Mh@uHG|!aL?wjjeccfMJo!xT;q)h{<~!P@0v6KxPN0E z3HiX>IR;1~HtY%54+hMp!v&N9f|+Cqh%>Nxv0MvouJ%jQ&MyB0eT94H6i0J98&a$4 z0#AIvwL@T|)0!h;b(FYcE{!I$wQj{3&U_DUOz&WxpRO1I z{c9o%7^vZd_zq-$!--&}1X4P8vV2mCSVuB{hDiSm!OcL#lj+D&l6U3L6?>P$ZtlRm zCls`^KvvOBLUK7rtPHwM@nb*r^a|@_@@hASH&K(c*P#(O*9>Q)3{fAxp{Z$lYbder zJOm)?mugSbNX_QHZfRVpJ5kA>VtF6w?yL|IC+d9k(y!`+o@V}=Dv^kyy`~Y>A|FJa zte>3}h*sutFh6x$Pveb=PG00h)naM*j!j$d2~#!V9CA6Uz30nzUXgl1<_|^-#5*y1 z)zUQ*dUQ~R_ES{#~%KFau@G_#l-D!8{LhSI! z((O~ZmrX7d$DWpNoZph4A9hAO9M38$rbfEA5MG6C-AbUB72se29y@N>SAsT%G{AA~ zUkqmnjG;E-jA)4kdp;U$b|x9#0){gy5bOOlCs&v z>%W-21VStwUh%gA0v z9~Ev6$Z>1wbFncolA86x0LCHduLbo^&jYEmiHYO%bxc7-9CMLX5>>W6z;#A{8Ax!>f<2wmiP8s zlAr9Lr}J5hTrL$y14zHF9(_{L<_n4aps8-vaaaoww(psfB7M@~u;7h+xQV`oU0I^O zx%_&elz)Kk?u%~hY3wtf4SAxs(n}hTiNdtrDP*2>!iO48 zm5mo&U+LzqNAEjd<@2fQ5Rs76<%~f@U67h83pTpyB$>tP!R`=bu4Gy7Jw~+aul7o| z=W74lWi4!$!T0J*;V1h7;I~XT z>hs{sCgrL!`j5Aq)p?~Fen4imtmzb)A6{B9U~jhnySsuSADS}3fD0#;plyOw_Z3*d zr&)<^Q1Ap@RmH$Lp$OW&*nvSjiy*DeG(V?AcdncKQ4w3Jc1wI#;V$;ZzB9z>jxqh5 z%vt60LPgnCp~{{{$|tU@efb9xvGxW$Cc1S?urV+5CJ{;t-05%aa4%LY$vbheoLYTl9ikxY$sJ-i$yuSSW?ZW|tow`5gKaY-- zX~!MYX^Q9I=Q^tsDRl-HJF)*od`#4Zu1N>fy+zLZ{k6XLHO$T^<%Gy*DCI7{6h3Yn z=@{zqajHnVsqxW+Q<)9`v0wx$f#WnlQqC!q@VkLO zrGdSih_u_e*N#s#(C0>DW#0`6coaIm_j`{OIbG^2rF=S^(%J@@+%3v3@b}t3n#GB1 zP4azZabHHFfFr*Z84Dg7!si4frC8z5);u$RD%y;^i$DFDI;^#8#GV6Hxvhai_=vJe zs^);wH1^7sKW`9UBC0JI2L(z~s#Bg8334cQM4G(RkonU(E+LvUW-G5JmzQ?DXD%1t z6IdJfN_6la$f3X7fBb;-SI)irqNH0^S<<&^+u8-ett%1s#tmG;|8`3Maj`1fn6?5113W|OV2+UI0V_6ae3_Moi-JcZ?OHAEni)%Gtde%V}6mgC1 z*)SZ1QxH3mS{7f#No-s51ewi3$_?Rp7aP!JK;y1uCXB-8T_5>g&P*tMYmSFueJ7spT&BAB^%bDCqA z4_O6%@+}b71@j^2z%VP2%y+Rll4`zVuxNX%SmliUPztkS%iN0EqWtQeQ8@7(xnf^m`-ybC z3&VKXKZ$W^#iThHHJ-GD2ifw&dk|8`B}<|Y4zFPd&epnw@BvEds-bSg7YQ? zsEwcai2QzDu5K2!MJ0?$#Sh++S;5DZ@f4+98uYmncvkpjDrZ#X^syF2@k5o|t|z7a z=l9G?4pjUyb6D@`mN(PC@o_nDac0HQB3z`3fPRf`0E4^#DRZFRw&qChfiEAk2|9R} z6AmDvEgfq*&>sGe%{?GJ>HY()8P}eGCE8QBAO9u&`VLJ-0S=4@H_jlpfW+hJVsm@Ze`0(3 zR)L6r6A#;{FdPPmdK;L~WFOphlz{m8k8v7T&rn{v;YKM*>NEs%?ZF%a(3*-OZw$sc6y$sfo(hB)<4 z1O+je5!uDNCwVZF2fXD$4Ks$g}8Pt zLfSKS5b>aJgC>ur$KJR(M%n$JKBvt>AB3!TkGtqXItuiefb*Nb1ot$a_$6U2d@|jW zWlG(;=ewEKk9yRJUo4+`u|YuB7{i2$iP9%FW+HjA{Q>?apZ`&PYydF!i1xqmihc0c z0xS5)sIm6cM%4TRu_Pv>=SU?cVE-p?6WmmSwig&ZgJK6^WYaYQ=OxKkOh#H;OsxrHg^VWbB7T(Z$N!cP_{%dl{A&F)U zvp@@iHqiwhU~C<13pib8dq&A7d-()$ocruCnXK*erbbsMnr2xHIq;m_G3PNu3i0@% z+{3JX*&lewTnAlITpQHxMFvOf3&WlfLC)uF8z+x#8D?Vd7yO?x2#Dc-O`$P9? zPho1`u4ofA6Akgbs7pCs2TmM%FY0#a2kX1!`$}m`?0(52ZZYI8x>sKOE*9cX<=gRj zk^>3y?G|tkBf7btBlE;Yqp>gA)CARxG_lagM0TN;^wV^qh-u4b<3Ylb-Lh{dlB1ZD z2F&>{=&PP@2(BFZ)0Sq8EMs{w1{8VzO6~f)PZh@c5w7hqLOE4^?H7$690;E&-fwx0 z_rCwPkF=BhWDSy~pn?qCV1hX!z}{?P4=z=pjBK2Nh7ma1eTv<8vLlMUN1hEef&U|R z2PPYY&qS61$W;oAzFLcJ!e?t@*xmER=3akPdKM}=Pgnuv z!({?Fyck5>?HA26+g7WOh$+_kXZ~)!QnQaU&IwJTT_ML0F;|$$*U_IV5x*>eYIN-zD`bjq374yX^dj3AAM43p0W=oG&xVk0JA2-VdSX}%M*PioXMnE zLY1&QF@KNuu@KW+w|4s14(&d?Mkty1>hq1<2hO4Xk)yi0)RjC5W3Ef*9erlvfV9mN zQ9-;qFJ7ClG9Wmz>9G>Nk*>4}6BT=)78mD+He~}*rv(X6}`f(NvG)qi4H+w|g zsy#(Opvnb20rv)Md*R=L0ki@ujrau6CCaikB5`AdNfJFf?7mfhT~slzgxq)P2YqtM zn+Sa#5B#CIgh`?*sG$o4Ok~#xtZeA@$WkS8-0|djswonoL2Z*67b3LB@yCPI;)|_<+@LBi+yw_a z*Q~S~6cr0*dWW*ix=2425rq=v>!g0LHi zgxq0l1kxD^(l+&j=NsT-Xzl+@G2s5r!qjhLeIDj=**YkVkJEx1!6Ud{x8{FM5>24f zTiM66_V<7oVy8y?;)@PI1PMS?(sH~MnFAKLqkG+% zOb&l}&P&~7v-pDf;rL2N0 z|71&%(ks1Hg^}b||Ad{IF_Do!kxK6l{-AtNOUqyT37NmAv635`bi2j6rD98CX@k1M z0F4(IA@J!>Tc!1AgKd%>b*)OvN##smi!v}Ti2KO#%Q`&rhd^>F>Bt<-cv?2 zANpO5GkS0kojKW`9*()W&!LdSwg0lAp!5AN&xTmQ`Q0TcDdY zZ^hxlu-hnkqWfNCI3DsWQZ`8^LfxB%BQN=rUMio=?d}ypBcJAv7D~&DPuso;_Ty+u zlb0iT|M4G)w4o#HZ!J>ZJA=cKHSx??ncs1k7W8LBg6;?jvNcjZ7hTy{E<}fBpXR_Qk?WDfQs5C{nn5#nHo&Ng4Ogo6gQ_%8k3^Ou8ShY1OW z;^31^IMaZ&#|_0SH$$8P=I`vJ)3FS?|G6cerbJNd`ph$o;SLMg>du@1>=C<(6Ngz~ zz)Vp#*eSSs>kEM2b|Zkm2OeO-b9KaC^XD;|FDW3oPl9OC;ksz2G@!G0(mqwqu93{& zhCD|GPPS-4^-t!J5)h#zdxGSL_;d$Hp`5Q;V<4_#HaBNZP>)1R+A)8GKr|sn0!Pmqu}2i1SIku+9*VQ*Y~xVil^@RjVdyXOTq5FhFT%`i>f*N0 z69dV+M{Gpgqf$-6qQi)fOWp)F6zH!6W^*nY#JJg=*j1_Imds+N`g69OgxB8L1U-zO z;3f?&Sw4T;H4qN~?PzbL9V|EK<^IJ>nQ-*L`A8h(CpMHKLRN6N+%S5m!(^kU#~Y+k z`d>zq69e!T{09Ipj^mHeY}sY#>-E{1ET_}JQl1E?d~Fk1@D*U83?7-n)vCW)D*7IP z;nrxx$+P8-R&uPkIQHWGWkUiyMKS^5^!Ks~-`{I1pX}T`EAcew#Psa~ik(SKz23Bo zj@icw^Ju-Qi)S$m`8rjj+y0)C-yQ?!IIw#TJg{l)nXy8w z$etq95}Bv?5=IWW_Bw9@?T;e$7VHwdD!reVfaXDyJ;DSR_r+NaEbAFj6{_3lo=` zjhmmd$SAgif`bU72Pq;?c;#+&VM_Jqtc5-AH1B9W)zArK{TY`p(Z^heg>o6+zbalJ znjW7%s@it)xo&3s|IE$V2t}LSvHeXpY{@-0LjjoxhX}wt8^9W5pEMez2Ilbq@4(<& z0d#q=-K!SN3!T0H7?``kOk?F%JuswE)sQk#fUVu&tOWDx2}XJ)8JE731z%~eHrM;p zirFI{kl~Qf2;miAzoF1a3cFRjnz+x2zKzJ5)d?BFosx6PV_i3D!E*0MCb}I>i_8fU zra8Q~M3kvWsD$A7+k8?!r08i2aC_TZ3!3l79|@2b$T%f;Jt0M-wYOc+ht?@I<@O8F zALrVmR<)0%b&PB72;P6!(!rzmPLFi!Y&}}`F?i;y|AD@(7L9+}sb#K+E~@?|dR{r0 z-GNdjH3eqV5&9S?k7Bsbvv+>V+|-X_JMyWZwV6AfkHS&jJB>>%c1wuR(ZE1+Sb{=` zFhn!4J_L$C`Xi?5_pNJ7=~MlFjbS|HgYT-y^0kp z(`@6AI7&+OUKYMZ?K-gd?n2rW_J#3iaxeJR%`p+jkij&K#zCd?rH?I-p`fuZsFGY{ ztF=!u=+3N&SVhz(ySDuVhK6{3u4jj3x;kd2MH?%^B}V1Pb7OA#aR?T_Nx57TI7YHB zi4%S5*~=1PQd>vU$C$C(!qw(zdv~$ueD3pBZ=#stNZ%=dPA;AOWc`NFS~%IDvA-BG zbV@zYV*OkEZ;7u(4_BWoANQT#tZes6OH2B;!?7fpCpDiNuL7uC#@t|n0FnhG73&^= zUqI&u5(>M2n}BN?jGNJ@QVaxY6)0OEG*FZYxXiI(k~I^sh3tyA4Awou)PZ8d>cYSA zg)s+rU|`OO33@<4LBfFu5*jZMgTgn|f;vI^AyuDRudRWX`aw{A4ebTvY5g>jMgMVZ z?StpX&kiVZ%cYa?u@vNY^kys|4dZM_@LOVWBLd!*+}LH#{nPU#N_}#*kSh3FnP@=4Va}z|&ptA%n2E}vf{^>1t+ZyhZamC-Mgjl?Zcep1OiMK_gok6UJ^viiY2Ah8kFb(?m6L-b2QncWT_b-KQ0 zUATXe^XdH2^IBH}^IuF#x@cIO-xHa2NJ7-aH6_%9fIY#K+#u>C-P4(k-3cA>`r$_w-fezBl)!3 z3DE$WZpN?RCV%((2@<*7?=|Y)zt(QTL>*uqShW@ekm802qP=h=MTkfzdJuH9!yo%;QI)U?6&S zen}oT+gnb7mkRAjTIOkjFAxS$0TTdjHoPvLw!xT_0quw?(`3;H-MeLBS@A}>1Wqzw zb4UOhylbQY6cAmrPNi5rKZYy}fByQ?7H?VWC4I)$-hOU?W`vsBqmkFJFHxI(R)9`3ju2N;$Ecu)w!IgEY@?np)*LaT!G8R<=wv}MA)4^2RD$NZ#y!uQu zqHVWB(kVslo}@E0ym79WXz$V2_f`yFHS&rS@lh1LE4wTsWYz+9ZJJ1)xm46pE?F%% zF5#_&q<_3^>Ci>h6wsSyU`7^^>#X7gNF%j_s>i{H@th<|J=eTj6pQ0jcWrv%>bN-G z??yaZFMi55Xd+z~eAi@ZkrV&$ELE9R`sgDU7!R>_z4D>i*KTnQ5>$3I~pu7nON!befeKfIGv6yd?tOxrS zEVswXBbVl$lyd`CYcLP`L-6c+i$qw49y$siBDt=$L^3zo+uau1m!!aFP)6N@)+O#SOuf7^2kMD zj-lVA!~Nq6$b9KT$09GJ&DY*-J-;&?J)*RB@&f0SM{3&aX2~_=U_^JKYIwf=^U7)k+KdDYBQ(T zj71q1&&w+LxK(9J^1uid*1Le$;bYf2uzZRH`zSntN2D`p5|yW5iTXi+&H%&sG~d>Z zC-jk0dX-KH4=!rJceJ>%?-_B^)gQnJ#>&{M2Txy0w*?+Ly#8P4H(>x|Ou*>Bu| zCCZDUDWi!-zHx@GBy%Cnu?bS<3;y309aOiIjDz!iNRRt0(eJmP(71y?2$_T>UpZUp z`5==6e1nOxce>+A$ETfCYnh%JZw=dyipdD@Bh|q{3pD}Ly7(8|68spZpIH8H;KER(Ib6N%vhv|vu+u8%SXG>Zw`kwTnhK`#6{=U1pPtCO%Nfg8 zx!ri$`rv83DbqLmBqBVq6S61*dU4+8P8U0!M zm>5gQP1~Z#@JrVu_L}}%ecEGw#^(s)K#^F^n#z{q%-eov?jEg|Uyme0OBeP5B0RUU zBITqkTRUUj1Gi=AJ%IeqhMRo2z`+R%Mo&Nir~vZ-Fi79rW1^q|zmX9@Ve-jf%wmD% z@ne8V9Adx-utYfc)&&#j04w|_K7&l=-+hHA7jqd*#^AB-Ie5&n0|T?7z(&6$%YXA^%ZsZZ>VO2|)N@-WEs!C0-73 zi<3cHfE-U5`mQ|lsPK)ci40o#ZgI9#;~w$OPFi&!YV%2FiY`G+(q1L+=iqT$72Hk* z<4)0F6la_%n$N4Gq7^wq2W12+aE%c*3~VZn20bF$oV_X(K$<`PC+4u>)+^dKIS z`|wF`oBe4t*;Fs|m7a!5S{tOvP%b2iu^LnR6h+qD|5#OOFhZv@J;dWbQYpt^=$=elq{gSs&Vz*}7tX%+kAk%6i5<>xWTrW)?;QMDl-#0d|uI zoRPMHK%+1~4OJw77l1JN0H#6H@p(33p>WXkbiLl~vUl&wnBx@=psxa*AG=_3Ou$_q zNOBC2J7>{^riobH({?YM8Mr&E4Z+>A?7mM@P#+kv;<1v&MB$fx&jn`w*lN+-aWtL` zgeAASrFK#FW`{Ua!uOk$6`6#A<_wiUM}PO}>~LmfhclX`)rqH5ZvgHSR)VgD(VwLNDREp%AL zXkN?s%jM?hwgH**$0e%LR(#N8jRy{9V^)7EvoS;haz(REL*`_~5&i1JcmbxkbvcH+ zdUN)NM=YpMRGEmSFCm}n38Bx$W81+Tv4F?#M~4Bvp0Ftl%U>rzXeDQwU_c4?uKS{_ zs9!0htcXcGytK8r&@sg!W(%eLD6TV9(2Y1v_D|q(A#J{NlW?`?h)BYI|DwxxMe_w+ zt&*3>&U^B}OJ00vufTLpeMdgqx_6G{gFMf!yIpYJ1 zV8~Mh-endP8LhCw-r~ZTu^bUo7M5YDgfj4xFQ#&>_C})+7cjVOrWZh#QM7~0=@eGj z`$vCyqW8i@6ECvwa=~M@fZc1|0hI5U1HMr?K8((^!J;+@T%aJBAX+m)NP$=)Xk#~#4q1=@ z`@oY0VydaE2YdnNxCTaaj~&p|^uNp7~^pA)#aWZYT(Lc&xJIn*16;Y*ir zk9PnqNVYdKSCr4&PRI}O3o}B9t88U*n1EfdWMD4-sq#sc2D;Ur>&w%|f1vG>U&q#) zh|_pl=mBN1zNFR5SNNVI={HSOj~JVxMnJm{5s*xtNco4=avQ+7fkzXyLh$59V z)2LQ(?Zgxvr=l2o+pvkTCgwF!%*%peWt{Q&xM^z$M}%UKKIzg_HNP$NUD-G9n)w4x zr#SLZH_1o>5>%o|E`zRpS9Ve_26xh)15~ZCSeq%P5 z1ga3IT;gStKg&3>%-sAW7i=jAi$UP_%RriA56PczPf8dzmyIT>UG$4f~z-pmq6IVwSa0nzD0 z%!!QxC}1ON0BWa1zY?+8#{SNfOA5y}j8A4}tQ5%!GidL}sqMg7NPO+gNv0W^7500& zGtpal8G2z3S9Ii(?KN8+;|Qh12n^I%&c#qBM(B}w_$n_pU;667iuEHF%D3t1h?6-3 z)lfVDncxXbL&1l*avC*5qdI=F__Vh=Hx!!152Ky-B0WVxV0&r^>15vTlxTU(l4^6pe098`D17iosYp z|Eo)t5~cn(9D+Dk>-;-)aIDXK)tqu95!4e{bG?LO5ej{7 z#7YXgIjndU6kVY5#DbyJd#a>Y+$Ph=1#??7%l-C<_mvcK5&g;~N6066)nO6D1VF&z z6f(3}lAZyRLM-@M<+yJUIY1?>u(n4=x6~PZ9ouv)$~!2iflpTY`7U(-hRwT=5y*UG}txpms3oG$m`k0iQzkChF8Q_xqpKye^cCk7G1rm#W`Bxno~ z<~HIKB@)zEXW;ZBVBa%6aHK>Q#gGNuMN>JaH3Nk~6km$$k0iFl3|A0M9v@7-Nrml(9I>@N-fFEHNXP{9cfF* zQYg#>2_+d$?Pva^%mL5DcpHEt4*DsQ{2(PHlVF1xjg`1iF<9iUOVQG;AW{9VGQE`= z3^H6CCu#QgSHZZ%T}lgelt0s3o~U02zSHOGn5H?4V*g{TR`(Sq(bDK9v@aJkJPB4> zb{L!m0KxZnw`^D&NbBGq`%4J%kXfWP$Rb_Tz0;5dkm&v>mmX_At z8VpXFEQW)hEI7C6(1d>)TJmuIADi%+;f91yt_P3U=&v#l^el?fCvIIO2t)}GQngtE z!pG41OVkr70e%H_RdeOwi0{CdsSV`wD7z@fW3m3gY(N0`*>C2l&)>JrrftYWtp9gM zBq2rE9>pmdzNum*3t#qN-xA|^K*Z51fonA_XP`_;vDFGNB+y{>wzV>zwn1;<|GBzFk)&Moc~rdAz91a%-~o z#RznSm oaiEf79$N+pLR`#k#$Ay?W;B`YS#W8#=4N0>2Tf!#h=1PwKZ4(b6951J literal 0 HcmV?d00001 diff --git a/assets/images/faceid-flux-3-ae5a9d8dfd3a7497e062184c3c43317d.jpg b/assets/images/faceid-flux-3-ae5a9d8dfd3a7497e062184c3c43317d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cd8023e731c56695dc5fd23eb312688d67ef7d4 GIT binary patch literal 74927 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.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),m=r,h=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return a?n.createElement(h,i(i({ref:t},u),{},{components:a})):n.createElement(h,i({ref:t},u))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{a.d(t,{Z:()=>i});var n=a(7294),r=a(6010);const o={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:a,className:i}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,i),hidden:a},t)}},4866:(e,t,a)=>{a.d(t,{Z:()=>_});var n=a(7462),r=a(7294),o=a(6010),i=a(2466),s=a(6550),l=a(1980),p=a(7392),u=a(12);function c(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function d(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??c(a);return function(e){const t=(0,p.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function m(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function f(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=d(e),[i,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[l,p]=h({queryString:a,groupId:n}),[c,f]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,u.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),g=(()=>{const e=l??c;return m({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),p(e),f(e)}),[p,f,o]),tabValues:o}}var g=a(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function k(e){let{className:t,block:a,selectedValue:s,selectValue:l,tabValues:p}=e;const u=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const t=e.currentTarget,a=u.indexOf(t),n=p[a].value;n!==s&&(c(t),l(n))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=u.indexOf(e.currentTarget)+1;t=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(e.currentTarget)-1;t=u[a]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},t)},p.map((e=>{let{value:t,label:a,attributes:i}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>u.push(e),onKeyDown:m,onClick:d},i,{className:(0,o.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":s===t})}),a??t)})))}function w(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=f(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",b.tabList)},r.createElement(k,(0,n.Z)({},e,t)),r.createElement(w,(0,n.Z)({},e,t)))}function _(e){const t=(0,g.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},4336:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>p,toc:()=>c});var n=a(7462),r=(a(7294),a(3905)),o=a(4866),i=a(5162);const s={hide_table_of_contents:!0},l="FaceID",p={unversionedId:"features/faceid",id:"features/faceid",title:"FaceID",description:"BETA",source:"@site/docs/features/faceid.md",sourceDirName:"features",slug:"/features/faceid",permalink:"/docs/features/faceid",draft:!1,tags:[],version:"current",frontMatter:{hide_table_of_contents:!0},sidebar:"tutorialSidebar",previous:{title:"FaceID for Flux",permalink:"/docs/features/faceid-flux"},next:{title:"Latent Consistency Models",permalink:"/docs/features/lcm"}},u={},c=[{value:"Overview",id:"overview",level:2},{value:"Usage",id:"usage",level:2},{value:"Notes",id:"notes",level:2},{value:"API",id:"api",level:2},{value:"Step 1: Create fine-tune",id:"step-1-create-fine-tune",level:3},{value:"POST /tunes",id:"post-tunes",level:4},{value:"Response",id:"response",level:4},{value:"Step 2: Create prompts",id:"step-2-create-prompts",level:3},{value:"POST /tunes/:id/prompts",id:"post-tunesidprompts",level:4}],d={toc:c},m="wrapper";function h(e){let{components:t,...s}=e;return(0,r.kt)(m,(0,n.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"faceid"},"FaceID"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"BETA")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Input images"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"source.png",src:a(6973).Z,width:"525",height:"671"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,(0,r.kt)("a",{href:"https://www.astria.ai/gallery?text=faceid"},"FaceID")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(8167).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(6361).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(1250).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(7432).Z,width:"1024",height:"1536"}))))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,(0,r.kt)("a",{href:"https://www.astria.ai/gallery?text=faceid_portrait"},"FaceID portrait")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(3257).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(6113).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(9814).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(8497).Z,width:"1024",height:"1536"})))))),(0,r.kt)("div",{className:"api-method"},(0,r.kt)("div",null,(0,r.kt)("p",null,"See example prompts in the ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=faceid"},"gallery")),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"FaceID is a model adapter allowing to generate image while preserving a person identity without fine-tuning. Input images can be as few as just one image. The adapter was trained on human faces and cannot be used for pets or other subjects."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Generate a placeholder fine-tune dataset which will contain the person images. The fine-tune will not go through training and will be immediately ready.\n",(0,r.kt)("img",{alt:"faceid-new-fine-tune.png",src:a(1158).Z,width:"740",height:"544"})),(0,r.kt)("li",{parentName:"ol"},"Generate the image using the FaceID adapter using a syntax similar to LoRA - ",(0,r.kt)("inlineCode",{parentName:"li"},"")," ")),(0,r.kt)("h2",{id:"notes"},"Notes"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Use ",(0,r.kt)("inlineCode",{parentName:"li"},"cfg_scale=3")),(0,r.kt)("li",{parentName:"ol"},"FaceID can work nicely together with ",(0,r.kt)("a",{parentName:"li",href:"/docs/features/face-swap"},"Face Swap")," to improve similarity."),(0,r.kt)("li",{parentName:"ol"},"Disable Face-Swap in case your prompt is animation style. Additionally, make sure to select an animated model from the ",(0,r.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes?title=pixar"},"gallery"),". "),(0,r.kt)("li",{parentName:"ol"},"For fast generation use the ",(0,r.kt)("a",{parentName:"li",href:"/docs/features/lcm"},"LCM schedulers"),"."),(0,r.kt)("li",{parentName:"ol"},"For realistic images, please consider enabling face-correct to improve facial features."),(0,r.kt)("li",{parentName:"ol"},"When creating a fine-tune: Base-model is only used as a default for UI generation but does not affect FaceID."),(0,r.kt)("li",{parentName:"ol"},"When creating a fine-tune: ",(0,r.kt)("inlineCode",{parentName:"li"},"steps")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"training_face_correct")," are not used for FaceID.")),(0,r.kt)("h2",{id:"api"},"API"),(0,r.kt)("p",null,"FaceID is an adapter loaded on top of a base model. As such the inference needs to take place on a model from the gallery.\nThe fine-tune's ",(0,r.kt)("inlineCode",{parentName:"p"},"trained_at")," is set upon creation and there is no training time. As such no callback is needed."),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"If you are receiving ",(0,r.kt)("inlineCode",{parentName:"p"},"422")," error ",(0,r.kt)("inlineCode",{parentName:"p"},"model_type=faceid is not supported. Use a checkpoint instead")," - Change the request URL to ",(0,r.kt)("a",{parentName:"p",href:"https://api.astria.ai/tunes/690204/prompts"},"https://api.astria.ai/tunes/690204/prompts")," with ",(0,r.kt)("inlineCode",{parentName:"p"},"690204")," as a hard-coded tune_id of Realistic Vision v5.1 from the gallery. See explanation above. "))),(0,r.kt)("div",null,(0,r.kt)("h3",{id:"step-1-create-fine-tune"},"Step 1: Create fine-tune"),(0,r.kt)("h4",{id:"post-tunes"},"POST /tunes"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# With images as multipart/form-data\n# Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n# https://www.astria.ai/gallery/tunes/690204/prompts\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[model_type]="faceid" \\\n -F tune[callback]="https://optional-callback-url.com/webhooks/astria?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F "tune[images][]=@1.jpg" \\\n -F "tune[images][]=@2.jpg" \\\n -F "tune[images][]=@3.jpg" \\\n -F "tune[images][]=@4.jpg"\n\n# With image_urls as form-data\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[model_type]="faceid" \\\n -F tune[callback]="https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg"\n \n# As JSON\ncat > data.json <<- EOM\n{\n "tune": {\n "title": "John Doe - UUID - 1234-6789-1234-56789",\n "name": "man",\n "model_type": "faceid",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1",\n "image_urls": [\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg"\n ]\n }\n}\nEOM\n\ncurl -X POST -H"Content-Type: application/json" -H "Authorization: Bearer $API_KEY" --data @data.json https://api.astria.ai/tunes \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"// NodeJS 16\n// With image_urls and fetch()\n// For NodeJS 18 - do NOT import the below as it is built-in\nimport fetch from \"node-fetch\";\n\nconst API_KEY = 'sd_XXXXXX';\nconst DOMAIN = 'https://api.astria.ai';\n\nfunction createTune() {\n let options = {\n method: 'POST',\n headers: { 'Authorization': 'Bearer ' + API_KEY, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tune: {\n \"title\": 'John Doe - UUID - 1234-6789-1234-56789',\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n \"base_tune_id\": 690204,\n \"name\": \"man\",\n \"model_type\": \"faceid\",\n \"image_urls\": [\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\"\n ]\n }\n })\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r))\n}\n\ncreateTune()\n\n\n/// With form-data, fetch()\n// For NodeJS 18 - do NOT import the two below as they are built-in\nimport fetch from \"node-fetch\";\nimport FormData from 'form-data';\nimport fs from 'fs';\n\nconst API_KEY = 'sd_XXXX';\nconst DOMAIN = 'https://api.astria.ai';\nfunction createTune() {\n let formData = new FormData();\n formData.append('tune[title]', 'John Doe - UUID - 1234-6789-1234-56789');\n formData.append('tune[model_type]', 'faceid');\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n formData.append('tune[base_tune_id]', 690204);\n formData.append('tune[name]', 'man');\n // Load all JPGs from ./samples directory and append to FormData\n let files = fs.readdirSync('./samples');\n files.forEach(file => {\n if(file.endsWith('.jpg')) {\n formData.append('tune[images][]', fs.createReadStream(`./samples/${file}`), file);\n }\n });\n formData.append('tune[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1');\n\n let options = {\n method: 'POST',\n headers: {\n 'Authorization': 'Bearer ' + API_KEY\n },\n body: formData\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r));\n}\n\ncreateTune();\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import requests\nheaders = {\'Authorization\': f\'Bearer {API_KEY}\'}\n\ndef load_image(file_path):\n with open(file_path, "rb") as f:\n return f.read()\n\n# Assuming `tune.images` are already defined in your context\n# If not, you should define them before the below code\n\nimage_data = load_image("assets/image.jpeg")\n\ndata = {\n "tune[title]": "John Doe - UUID - 1234-6789-1234-56789",\n "tune[name]": "man",\n "tune[base_tune_id]": 690204,\n "tune[model_type]": "faceid",\n "tune[token]": "ohwx"\n}\nfiles = []\n\nfor image in tune.images:\n image_data = load_image(image) # Assuming image is a file path\n files.append(("tune[images][]", image_data))\n\nAPI_URL = \'https://api.astria.ai/tunes\'\nresponse = requests.post(API_URL, data=data, files=files, headers=headers)\nresponse.raise_for_status()\n\n')))),(0,r.kt)("h4",{id:"response"},"Response"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'\n[\n {\n "id": 1,\n "title": "John Doe",\n "name": "woman",\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": false,\n "ckpt_url": null,\n "ckpt_urls": [],\n "eta": "2023-10-02T14:32:40.363Z",\n "trained_at": "2023-10-02T14:32:40.363Z",\n "started_training_at": "2023-10-02T14:32:05.229Z",\n "expires_at": "2023-11-01T14:32:40.363Z",\n "created_at": "2023-10-02T14:32:05.067Z",\n "branch": "sd15",\n "model_type": "faceid",\n "updated_at": "2023-10-02T14:32:40.363Z",\n "url": "https://www.astria.ai/tunes/788416.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n },\n {\n "id": 775459,\n "title": "Marry Jane",\n "name": null,\n "is_api": false,\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": null,\n "ckpt_url": "https://sdbooth2-production.s3.amazonaws.com/mock",\n "ckpt_urls": [\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ],\n "eta": "2023-09-23T16:07:49.137Z",\n "trained_at": "2023-09-23T16:07:49.137Z",\n "started_training_at": "2023-09-23T16:07:37.334Z",\n "expires_at": "2023-10-23T16:07:49.137Z",\n "created_at": "2023-09-23T16:07:36.606Z",\n "branch": "sd15",\n "model_type": "faceid",\n "updated_at": "2023-09-23T16:07:49.138Z",\n "url": "https://www.astria.ai/tunes/775459.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n }\n ]\n')),(0,r.kt)("h3",{id:"step-2-create-prompts"},"Step 2: Create prompts"),(0,r.kt)("h4",{id:"post-tunesidprompts"},"POST /tunes/:id/prompts"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes/690204/prompts \\\n -F prompt[text]=" woman trekking in the alps" \\\n -F prompt[negative_prompt]="" \\\n -F prompt[super_resolution]=true \\\n -F prompt[face_correct]=true \\\n -F prompt[face_swap]=true \\\n -F prompt[callback]="https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1" \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"const fetch = require('node-fetch');\nconst FormData = require('form-data');\n\n// Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\nconst API_URL = 'https://api.astria.ai/tunes/690204/prompts';\nconst API_KEY = 'YOUR_API_KEY'; // Replace with your actual API key\nconst headers = { Authorization: `Bearer ${API_KEY}` }\n\nconst form = new FormData();\nform.append('prompt[text]', ' woman trekking in the alps');\nform.append('prompt[negative_prompt]', '');\nform.append('prompt[super_resolution]', true);\nform.append('prompt[face_correct]', true);\nform.append('prompt[face_swap]', true);\nform.append('prompt[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1');\n\nfetch(API_URL, {\n method: 'POST',\n headers: headers,\n body: form\n}).then(response => response.json())\n\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import requests\n\n# Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\nAPI_URL = 'https://api.astria.ai/tunes/690204/prompts'\nAPI_KEY = 'YOUR_API_KEY' # Replace with your actual API key\n\nheaders = {\n 'Authorization': f'Bearer {API_KEY}'\n}\n\ndata = {\n 'prompt[text]': ' woman trekking in the alps',\n 'prompt[negative_prompt]': '',\n 'prompt[super_resolution]': True,\n 'prompt[face_correct]': True,\n 'prompt[face_swap]': True,\n 'prompt[callback]': 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1'\n}\nfiles = []\nfiles.append((f\"tune[prompts_attributes][{i}][input_image]\", load_image(prompt['input_image'])))\n\nresponse = requests.post(API_URL, headers=headers, data=data)\n")))))))}h.isMDXComponent=!0},1158:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-new-fine-tune-cc128107ac919832509e97a8ca45918b.png"},8167:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output1-aa799eba49b320b187e29cec267a3258.jpg"},6361:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output2-e44e20e05a5a6cffaba2d97ee9ac1947.jpg"},1250:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output3-b4745421562fc7a28a7be8eb46f4853e.jpg"},7432:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output4-8e3f3c0ebd0449c2adf1d12015229097.jpg"},3257:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output1-8c5ea4967162c608b58d6b56dcb60cce.jpg"},6113:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output2-890a11d787c8827591af150362b1af05.jpg"},9814:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output3-92853d1bee638e8a6785ae5961ef96b8.jpg"},8497:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output4-4d41c4f7de56b0befb40e69b89bc0190.jpg"},6973:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/ai-photoshoot-input-66e224267554a6902bfaa5e6103ae27f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/6540dd0c.f8679019.js b/assets/js/6540dd0c.f8679019.js deleted file mode 100644 index 6e1cbc3d..00000000 --- a/assets/js/6540dd0c.f8679019.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[9075],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),m=r,h=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return a?n.createElement(h,i(i({ref:t},u),{},{components:a})):n.createElement(h,i({ref:t},u))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{a.d(t,{Z:()=>i});var n=a(7294),r=a(6010);const o={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:a,className:i}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,i),hidden:a},t)}},4866:(e,t,a)=>{a.d(t,{Z:()=>_});var n=a(7462),r=a(7294),o=a(6010),i=a(2466),s=a(6550),l=a(1980),p=a(7392),u=a(12);function c(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function d(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??c(a);return function(e){const t=(0,p.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function m(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function f(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=d(e),[i,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[l,p]=h({queryString:a,groupId:n}),[c,f]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,u.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),g=(()=>{const e=l??c;return m({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),p(e),f(e)}),[p,f,o]),tabValues:o}}var g=a(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function k(e){let{className:t,block:a,selectedValue:s,selectValue:l,tabValues:p}=e;const u=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const t=e.currentTarget,a=u.indexOf(t),n=p[a].value;n!==s&&(c(t),l(n))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=u.indexOf(e.currentTarget)+1;t=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(e.currentTarget)-1;t=u[a]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},t)},p.map((e=>{let{value:t,label:a,attributes:i}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>u.push(e),onKeyDown:m,onClick:d},i,{className:(0,o.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":s===t})}),a??t)})))}function w(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=f(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",b.tabList)},r.createElement(k,(0,n.Z)({},e,t)),r.createElement(w,(0,n.Z)({},e,t)))}function _(e){const t=(0,g.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},4336:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>p,toc:()=>c});var n=a(7462),r=(a(7294),a(3905)),o=a(4866),i=a(5162);const s={hide_table_of_contents:!0},l="FaceID",p={unversionedId:"features/faceid",id:"features/faceid",title:"FaceID",description:"BETA",source:"@site/docs/features/faceid.md",sourceDirName:"features",slug:"/features/faceid",permalink:"/docs/features/faceid",draft:!1,tags:[],version:"current",frontMatter:{hide_table_of_contents:!0},sidebar:"tutorialSidebar",previous:{title:"Face Swap",permalink:"/docs/features/face-swap"},next:{title:"Latent Consistency Models",permalink:"/docs/features/lcm"}},u={},c=[{value:"Overview",id:"overview",level:2},{value:"Usage",id:"usage",level:2},{value:"Notes",id:"notes",level:2},{value:"API",id:"api",level:2},{value:"Step 1: Create fine-tune",id:"step-1-create-fine-tune",level:3},{value:"POST /tunes",id:"post-tunes",level:4},{value:"Response",id:"response",level:4},{value:"Step 2: Create prompts",id:"step-2-create-prompts",level:3},{value:"POST /tunes/:id/prompts",id:"post-tunesidprompts",level:4}],d={toc:c},m="wrapper";function h(e){let{components:t,...s}=e;return(0,r.kt)(m,(0,n.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"faceid"},"FaceID"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"BETA")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Input images"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"source.png",src:a(6973).Z,width:"525",height:"671"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,(0,r.kt)("a",{href:"https://www.astria.ai/gallery?text=faceid"},"FaceID")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(8167).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(6361).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(1250).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(7432).Z,width:"1024",height:"1536"}))))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,(0,r.kt)("a",{href:"https://www.astria.ai/gallery?text=faceid_portrait"},"FaceID portrait")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(3257).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(6113).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(9814).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(8497).Z,width:"1024",height:"1536"})))))),(0,r.kt)("div",{className:"api-method"},(0,r.kt)("div",null,(0,r.kt)("p",null,"See example prompts in the ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=faceid"},"gallery")),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"FaceID is a model adapter allowing to generate image while preserving a person identity without fine-tuning. Input images can be as few as just one image. The adapter was trained on human faces and cannot be used for pets or other subjects."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Generate a placeholder fine-tune dataset which will contain the person images. The fine-tune will not go through training and will be immediately ready.\n",(0,r.kt)("img",{alt:"faceid-new-fine-tune.png",src:a(1158).Z,width:"740",height:"544"})),(0,r.kt)("li",{parentName:"ol"},"Generate the image using the FaceID adapter using a syntax similar to LoRA - ",(0,r.kt)("inlineCode",{parentName:"li"},"")," ")),(0,r.kt)("h2",{id:"notes"},"Notes"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Use ",(0,r.kt)("inlineCode",{parentName:"li"},"cfg_scale=3")),(0,r.kt)("li",{parentName:"ol"},"FaceID can work nicely together with ",(0,r.kt)("a",{parentName:"li",href:"/docs/features/face-swap"},"Face Swap")," to improve similarity."),(0,r.kt)("li",{parentName:"ol"},"Disable Face-Swap in case your prompt is animation style. Additionally, make sure to select an animated model from the ",(0,r.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes?title=pixar"},"gallery"),". "),(0,r.kt)("li",{parentName:"ol"},"For fast generation use the ",(0,r.kt)("a",{parentName:"li",href:"/docs/features/lcm"},"LCM schedulers"),"."),(0,r.kt)("li",{parentName:"ol"},"For realistic images, please consider enabling face-correct to improve facial features."),(0,r.kt)("li",{parentName:"ol"},"When creating a fine-tune: Base-model is only used as a default for UI generation but does not affect FaceID."),(0,r.kt)("li",{parentName:"ol"},"When creating a fine-tune: ",(0,r.kt)("inlineCode",{parentName:"li"},"steps")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"training_face_correct")," are not used for FaceID.")),(0,r.kt)("h2",{id:"api"},"API"),(0,r.kt)("p",null,"FaceID is an adapter loaded on top of a base model. As such the inference needs to take place on a model from the gallery.\nThe fine-tune's ",(0,r.kt)("inlineCode",{parentName:"p"},"trained_at")," is set upon creation and there is no training time. As such no callback is needed."),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"If you are receiving ",(0,r.kt)("inlineCode",{parentName:"p"},"422")," error ",(0,r.kt)("inlineCode",{parentName:"p"},"model_type=faceid is not supported. Use a checkpoint instead")," - Change the request URL to ",(0,r.kt)("a",{parentName:"p",href:"https://api.astria.ai/tunes/690204/prompts"},"https://api.astria.ai/tunes/690204/prompts")," with ",(0,r.kt)("inlineCode",{parentName:"p"},"690204")," as a hard-coded tune_id of Realistic Vision v5.1 from the gallery. See explanation above. "))),(0,r.kt)("div",null,(0,r.kt)("h3",{id:"step-1-create-fine-tune"},"Step 1: Create fine-tune"),(0,r.kt)("h4",{id:"post-tunes"},"POST /tunes"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# With images as multipart/form-data\n# Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n# https://www.astria.ai/gallery/tunes/690204/prompts\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[model_type]="faceid" \\\n -F tune[callback]="https://optional-callback-url.com/webhooks/astria?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F "tune[images][]=@1.jpg" \\\n -F "tune[images][]=@2.jpg" \\\n -F "tune[images][]=@3.jpg" \\\n -F "tune[images][]=@4.jpg"\n\n# With image_urls as form-data\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[model_type]="faceid" \\\n -F tune[callback]="https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg"\n \n# As JSON\ncat > data.json <<- EOM\n{\n "tune": {\n "title": "John Doe - UUID - 1234-6789-1234-56789",\n "name": "man",\n "model_type": "faceid",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1",\n "image_urls": [\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg"\n ]\n }\n}\nEOM\n\ncurl -X POST -H"Content-Type: application/json" -H "Authorization: Bearer $API_KEY" --data @data.json https://api.astria.ai/tunes \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"// NodeJS 16\n// With image_urls and fetch()\n// For NodeJS 18 - do NOT import the below as it is built-in\nimport fetch from \"node-fetch\";\n\nconst API_KEY = 'sd_XXXXXX';\nconst DOMAIN = 'https://api.astria.ai';\n\nfunction createTune() {\n let options = {\n method: 'POST',\n headers: { 'Authorization': 'Bearer ' + API_KEY, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tune: {\n \"title\": 'John Doe - UUID - 1234-6789-1234-56789',\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n \"base_tune_id\": 690204,\n \"name\": \"man\",\n \"model_type\": \"faceid\",\n \"image_urls\": [\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\"\n ]\n }\n })\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r))\n}\n\ncreateTune()\n\n\n/// With form-data, fetch()\n// For NodeJS 18 - do NOT import the two below as they are built-in\nimport fetch from \"node-fetch\";\nimport FormData from 'form-data';\nimport fs from 'fs';\n\nconst API_KEY = 'sd_XXXX';\nconst DOMAIN = 'https://api.astria.ai';\nfunction createTune() {\n let formData = new FormData();\n formData.append('tune[title]', 'John Doe - UUID - 1234-6789-1234-56789');\n formData.append('tune[model_type]', 'faceid');\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n formData.append('tune[base_tune_id]', 690204);\n formData.append('tune[name]', 'man');\n // Load all JPGs from ./samples directory and append to FormData\n let files = fs.readdirSync('./samples');\n files.forEach(file => {\n if(file.endsWith('.jpg')) {\n formData.append('tune[images][]', fs.createReadStream(`./samples/${file}`), file);\n }\n });\n formData.append('tune[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1');\n\n let options = {\n method: 'POST',\n headers: {\n 'Authorization': 'Bearer ' + API_KEY\n },\n body: formData\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r));\n}\n\ncreateTune();\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import requests\nheaders = {\'Authorization\': f\'Bearer {API_KEY}\'}\n\ndef load_image(file_path):\n with open(file_path, "rb") as f:\n return f.read()\n\n# Assuming `tune.images` are already defined in your context\n# If not, you should define them before the below code\n\nimage_data = load_image("assets/image.jpeg")\n\ndata = {\n "tune[title]": "John Doe - UUID - 1234-6789-1234-56789",\n "tune[name]": "man",\n "tune[base_tune_id]": 690204,\n "tune[model_type]": "faceid",\n "tune[token]": "ohwx"\n}\nfiles = []\n\nfor image in tune.images:\n image_data = load_image(image) # Assuming image is a file path\n files.append(("tune[images][]", image_data))\n\nAPI_URL = \'https://api.astria.ai/tunes\'\nresponse = requests.post(API_URL, data=data, files=files, headers=headers)\nresponse.raise_for_status()\n\n')))),(0,r.kt)("h4",{id:"response"},"Response"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'\n[\n {\n "id": 1,\n "title": "John Doe",\n "name": "woman",\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": false,\n "ckpt_url": null,\n "ckpt_urls": [],\n "eta": "2023-10-02T14:32:40.363Z",\n "trained_at": "2023-10-02T14:32:40.363Z",\n "started_training_at": "2023-10-02T14:32:05.229Z",\n "expires_at": "2023-11-01T14:32:40.363Z",\n "created_at": "2023-10-02T14:32:05.067Z",\n "branch": "sd15",\n "model_type": "faceid",\n "updated_at": "2023-10-02T14:32:40.363Z",\n "url": "https://www.astria.ai/tunes/788416.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n },\n {\n "id": 775459,\n "title": "Marry Jane",\n "name": null,\n "is_api": false,\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": null,\n "ckpt_url": "https://sdbooth2-production.s3.amazonaws.com/mock",\n "ckpt_urls": [\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ],\n "eta": "2023-09-23T16:07:49.137Z",\n "trained_at": "2023-09-23T16:07:49.137Z",\n "started_training_at": "2023-09-23T16:07:37.334Z",\n "expires_at": "2023-10-23T16:07:49.137Z",\n "created_at": "2023-09-23T16:07:36.606Z",\n "branch": "sd15",\n "model_type": "faceid",\n "updated_at": "2023-09-23T16:07:49.138Z",\n "url": "https://www.astria.ai/tunes/775459.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n }\n ]\n')),(0,r.kt)("h3",{id:"step-2-create-prompts"},"Step 2: Create prompts"),(0,r.kt)("h4",{id:"post-tunesidprompts"},"POST /tunes/:id/prompts"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes/690204/prompts \\\n -F prompt[text]=" woman trekking in the alps" \\\n -F prompt[negative_prompt]="" \\\n -F prompt[super_resolution]=true \\\n -F prompt[face_correct]=true \\\n -F prompt[face_swap]=true \\\n -F prompt[callback]="https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1" \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"const fetch = require('node-fetch');\nconst FormData = require('form-data');\n\n// Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\nconst API_URL = 'https://api.astria.ai/tunes/690204/prompts';\nconst API_KEY = 'YOUR_API_KEY'; // Replace with your actual API key\nconst headers = { Authorization: `Bearer ${API_KEY}` }\n\nconst form = new FormData();\nform.append('prompt[text]', ' woman trekking in the alps');\nform.append('prompt[negative_prompt]', '');\nform.append('prompt[super_resolution]', true);\nform.append('prompt[face_correct]', true);\nform.append('prompt[face_swap]', true);\nform.append('prompt[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1');\n\nfetch(API_URL, {\n method: 'POST',\n headers: headers,\n body: form\n}).then(response => response.json())\n\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import requests\n\n# Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\nAPI_URL = 'https://api.astria.ai/tunes/690204/prompts'\nAPI_KEY = 'YOUR_API_KEY' # Replace with your actual API key\n\nheaders = {\n 'Authorization': f'Bearer {API_KEY}'\n}\n\ndata = {\n 'prompt[text]': ' woman trekking in the alps',\n 'prompt[negative_prompt]': '',\n 'prompt[super_resolution]': True,\n 'prompt[face_correct]': True,\n 'prompt[face_swap]': True,\n 'prompt[callback]': 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1'\n}\nfiles = []\nfiles.append((f\"tune[prompts_attributes][{i}][input_image]\", load_image(prompt['input_image'])))\n\nresponse = requests.post(API_URL, headers=headers, data=data)\n")))))))}h.isMDXComponent=!0},1158:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-new-fine-tune-cc128107ac919832509e97a8ca45918b.png"},8167:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output1-aa799eba49b320b187e29cec267a3258.jpg"},6361:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output2-e44e20e05a5a6cffaba2d97ee9ac1947.jpg"},1250:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output3-b4745421562fc7a28a7be8eb46f4853e.jpg"},7432:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output4-8e3f3c0ebd0449c2adf1d12015229097.jpg"},3257:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output1-8c5ea4967162c608b58d6b56dcb60cce.jpg"},6113:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output2-890a11d787c8827591af150362b1af05.jpg"},9814:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output3-92853d1bee638e8a6785ae5961ef96b8.jpg"},8497:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output4-4d41c4f7de56b0befb40e69b89bc0190.jpg"},6973:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/ai-photoshoot-input-66e224267554a6902bfaa5e6103ae27f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/6ff77412.a2e1c30d.js b/assets/js/6ff77412.233cd3d3.js similarity index 98% rename from assets/js/6ff77412.a2e1c30d.js rename to assets/js/6ff77412.233cd3d3.js index 099aa783..2ce653b7 100644 --- a/assets/js/6ff77412.a2e1c30d.js +++ b/assets/js/6ff77412.233cd3d3.js @@ -1 +1 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[674],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(n),m=r,h=c["".concat(s,".").concat(m)]||c[m]||d[m]||o;return n?a.createElement(h,i(i({ref:t},u),{},{components:n})):a.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var p=2;p{n.d(t,{Z:()=>i});var a=n(7294),r=n(6010);const o={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,i),hidden:n},t)}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7462),r=n(7294),o=n(6010),i=n(2466),l=n(6550),s=n(1980),p=n(7392),u=n(12);function c(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function d(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??c(n);return function(e){const t=(0,p.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=d(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[s,p]=h({queryString:n,groupId:a}),[c,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),b=(()=>{const e=s??c;return m({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),p(e),f(e)}),[p,f,o]),tabValues:o}}var b=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function k(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:p}=e;const u=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const t=e.currentTarget,n=u.indexOf(t),a=p[n].value;a!==l&&(c(t),s(a))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:i}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>u.push(e),onKeyDown:m,onClick:d},i,{className:(0,o.Z)("tabs__item",g.tabItem,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function _(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function v(e){const t=f(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",g.tabList)},r.createElement(k,(0,a.Z)({},e,t)),r.createElement(_,(0,a.Z)({},e,t)))}function w(e){const t=(0,b.Z)();return r.createElement(v,(0,a.Z)({key:String(t)},e))}},8987:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>p,toc:()=>c});var a=n(7462),r=(n(7294),n(3905)),o=n(4866),i=n(5162);const l={title:"Create a tune",hide_table_of_contents:!0},s=void 0,p={unversionedId:"api/tune/create",id:"api/tune/create",title:"Create a tune",description:"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images.",source:"@site/docs/api/0-tune/1-create.md",sourceDirName:"api/0-tune",slug:"/api/tune/create",permalink:"/docs/api/tune/create",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Create a tune",hide_table_of_contents:!0},sidebar:"tutorialSidebar",previous:{title:"The tune object",permalink:"/docs/api/tune/"},next:{title:"Retrieve a tune",permalink:"/docs/api/tune/retrieve"}},u={},c=[{value:"Parameters",id:"parameters",level:3},{value:"name (required)",id:"name-required",level:4},{value:"title (required)",id:"title-required",level:4},{value:"images (required)",id:"images-required",level:4},{value:"image_urls (required)",id:"image_urls-required",level:4},{value:"callback (optional)",id:"callback-optional",level:4},{value:"branch (optional)",id:"branch-optional",level:4},{value:"steps (optional)",id:"steps-optional",level:4},{value:"token (optional)",id:"token-optional",level:4},{value:"face_crop (optional)",id:"face_crop-optional",level:4},{value:"training_face_correct (optional)",id:"training_face_correct-optional",level:4},{value:"base_tune_id (optional)",id:"base_tune_id-optional",level:4},{value:"model_type (optional)",id:"model_type-optional",level:4},{value:"preset (optional)",id:"preset-optional",level:4},{value:"characteristics (optional)",id:"characteristics-optional",level:4},{value:"prompts_attributes (optional)",id:"prompts_attributes-optional",level:4},{value:"Returns",id:"returns",level:3},{value:"POST /tunes",id:"post-tunes",level:4},{value:"Response",id:"response",level:4}],d={toc:c},m="wrapper";function h(e){let{components:t,...n}=e;return(0,r.kt)(m,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"api-method"},(0,r.kt)("div",null,(0,r.kt)("p",null,"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images."),(0,r.kt)("h3",{id:"parameters"},"Parameters"),(0,r.kt)("h4",{id:"name-required"},(0,r.kt)("inlineCode",{parentName:"h4"},"name")," (required)"),(0,r.kt)("p",null,"A class name the describes the fine-tune. e.g: ",(0,r.kt)("inlineCode",{parentName:"p"},"man"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"woman"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"cat"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"dog"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"boy"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"girl"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"style")),(0,r.kt)("h4",{id:"title-required"},(0,r.kt)("inlineCode",{parentName:"h4"},"title")," (required)"),(0,r.kt)("p",null,"Describes the fine-tune. Ideally a UUID related to the transaction. See ",(0,r.kt)("a",{parentName:"p",href:"/docs/api/overview"},"idempotency")," for more information."),(0,r.kt)("h4",{id:"images-required"},(0,r.kt)("inlineCode",{parentName:"h4"},"images")," (required)"),(0,r.kt)("p",null,"An array of images to train the fine-tune with. The images can be uploaded as multipart/form-data or as image_urls."),(0,r.kt)("h4",{id:"image_urls-required"},(0,r.kt)("inlineCode",{parentName:"h4"},"image_urls")," (required)"),(0,r.kt)("p",null,"An array of images to train the fine-tune with. The images can be uploaded as multipart/form-data or as image_urls."),(0,r.kt)("h4",{id:"callback-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"callback")," (optional)"),(0,r.kt)("p",null,"A webhook URL to be called when the tune is finished training. The webhook will receive a POST request with the tune object. See ",(0,r.kt)("a",{parentName:"p",href:"/docs/api/overview#callbacks"},"more on callbacks"),"."),(0,r.kt)("h4",{id:"branch-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"branch")," (optional)"),(0,r.kt)("p",null,"Enum: ",(0,r.kt)("inlineCode",{parentName:"p"},"sd15"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"sdxl1"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"fast"),". Will default to the ",(0,r.kt)("inlineCode",{parentName:"p"},"base_tune")," branch if not specified, or to ",(0,r.kt)("inlineCode",{parentName:"p"},"sd15")," if ",(0,r.kt)("inlineCode",{parentName:"p"},"base_tune")," is not specified."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"branch=fast")," for ",(0,r.kt)("a",{parentName:"p",href:"https://docs.astria.ai/docs/api/overview#mock-testing"},"mock testing"))),(0,r.kt)("h4",{id:"steps-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"steps")," (optional)"),(0,r.kt)("p",null,"Training steps. Recommended leaving blank in order to allow better defaults set by the system."),(0,r.kt)("h4",{id:"token-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"token")," (optional)"),(0,r.kt)("p",null,"Unique short text to which the features will be embedded into. Default ",(0,r.kt)("inlineCode",{parentName:"p"},"ohwx")," for SDXL and ",(0,r.kt)("inlineCode",{parentName:"p"},"sks")," for SD15."),(0,r.kt)("h4",{id:"face_crop-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"face_crop")," (optional)"),(0,r.kt)("p",null,"Detects faces in training images and augments training set with cropped faces. Defaults to ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/users/edit"},"account setting")),(0,r.kt)("h4",{id:"training_face_correct-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"training_face_correct")," (optional)"),(0,r.kt)("p",null,"Enhance training images using GFPGAN. Consider enabling if input image are low quality or low resolution. May result in over-smoothing."),(0,r.kt)("h4",{id:"base_tune_id-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"base_tune_id")," (optional)"),(0,r.kt)("p",null,"Training on top of former fine-tune or a different baseline model from the ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery/tunes"},"gallery")," (id in the URL). e.g: ",(0,r.kt)("inlineCode",{parentName:"p"},"690204")," - Realistic Vision v5.1"),(0,r.kt)("h4",{id:"model_type-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"model_type")," (optional)"),(0,r.kt)("p",null,"Enum: ",(0,r.kt)("inlineCode",{parentName:"p"},"lora"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"pti"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"faceid"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"null")," for checkpoint.\nFor SDXL1 - API will default to ",(0,r.kt)("inlineCode",{parentName:"p"},"pti")," and will ignore ",(0,r.kt)("inlineCode",{parentName:"p"},"model_type")," parameter."),(0,r.kt)("h4",{id:"preset-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"preset")," (optional)"),(0,r.kt)("p",null,"Enum: ",(0,r.kt)("inlineCode",{parentName:"p"},"flux-lora-fast")," see details in the GUI, ",(0,r.kt)("inlineCode",{parentName:"p"},"null")),(0,r.kt)("h4",{id:"characteristics-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"characteristics")," (optional)"),(0,r.kt)("p",null,"A free-form object that can be used to templatize the prompts text. e.g: ",(0,r.kt)("inlineCode",{parentName:"p"},'{"eye_color": "blue eyes"}')," would than be used in the prompt text as ",(0,r.kt)("inlineCode",{parentName:"p"},"ohwx woman, {{eye_color}}, holding flowers"),"."),(0,r.kt)("h4",{id:"prompts_attributes-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"prompts_attributes")," (optional)"),(0,r.kt)("p",null,"Array of prompts entities with all attributes. See ",(0,r.kt)("a",{parentName:"p",href:"/docs/api/prompt/create"},"create prompt")," for more information."),(0,r.kt)("h3",{id:"returns"},"Returns"),(0,r.kt)("p",null,"Returns a tune object if successful which will start training immediately and call callback once training is complete.")),(0,r.kt)("div",null,(0,r.kt)("h4",{id:"post-tunes"},"POST /tunes"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# With images as multipart/form-data\n# Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n# https://www.astria.ai/gallery/tunes/690204/prompts\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[branch]="fast" \\\n -F tune[callback]="https://optional-callback-url.com/webhooks/astria?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F tune[token]=ohwx \\\n -F "tune[prompts_attributes][0][text]=ohwx man on space circa 1979 on cover of time magazine" \\\n -F tune[prompts_attributes][0][callback]="https://optional-callback-url.com/webhooks/astria?user_id=1&prompt_id=1&tune_id=1" \\\n -F "tune[images][]=@1.jpg" \\\n -F "tune[images][]=@2.jpg" \\\n -F "tune[images][]=@3.jpg" \\\n -F "tune[images][]=@4.jpg"\n\n# With image_urls as form-data\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="Grumpy cat - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=cat \\\n -F tune[branch]="fast" \\\n -F tune[callback]="https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F tune[token]=ohwx \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg"\n \n# As JSON\ncat > data.json <<- EOM\n{\n "tune": {\n "title": "Grumpy Cat - UUID - 1234-6789-1234-56789",\n "name": "cat",\n "branch": "fast",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1",\n "image_urls": [\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg"\n ],\n "prompts_attributes": [\n {\n "text": "ohwx cat in space circa 1979 French illustration",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1&prompt_id=1"\n },\n {\n "text": "ohwx cat getting into trouble viral meme",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1&prompt_id=1"\n }\n ]\n }\n}\nEOM\n\ncurl -X POST -H"Content-Type: application/json" -H "Authorization: Bearer $API_KEY" --data @data.json https://api.astria.ai/tunes \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"// NodeJS 16\n// With image_urls and fetch()\n// For NodeJS 18 - do NOT import the below as it is built-in\nimport fetch from \"node-fetch\";\n\nconst API_KEY = 'sd_XXXXXX';\nconst DOMAIN = 'https://api.astria.ai';\n\nfunction createTune() {\n let options = {\n method: 'POST',\n headers: { 'Authorization': 'Bearer ' + API_KEY, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tune: {\n \"title\": 'John Doe - UUID - 1234-6789-1234-56789',\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n \"base_tune_id\": 690204,\n \"name\": \"cat\",\n \"branch\": \"fast\",\n \"image_urls\": [\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\"\n ],\n \"prompts_attributes\": [\n {\n \"text\": \"ohwx cat in space circa 1979 French illustration\",\n \"callback\": \"https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1&prompt_id=1\"\n },\n {\n \"text\": \"ohwx cat getting into trouble viral meme\",\n \"callback\": \"https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1&prompt_id=2\"\n }\n ]\n }\n })\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r))\n}\n\ncreateTune()\n\n\n/// With form-data, fetch() and nested prompts\n// For NodeJS 18 - do NOT import the two below as they are built-in\nimport fetch from \"node-fetch\";\nimport FormData from 'form-data';\nimport fs from 'fs';\n\nconst API_KEY = 'sd_XXXX';\nconst DOMAIN = 'https://api.astria.ai';\nfunction createTune() {\n let formData = new FormData();\n formData.append('tune[title]', 'John Doe - UUID - 1234-6789-1234-56789');\n // formData.append('tune[branch]', 'fast');\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n formData.append('tune[base_tune_id]', 690204);\n formData.append('tune[name]', 'man');\n formData.append('tune[prompts_attributes][0][callback]', 'https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1&prompt_id=1');\n formData.append('tune[prompts_attributes][0][input_image]', fs.createReadStream(`./samples/pose.png`));\n formData.append('tune[prompts_attributes][0][text]',\"ohwx man inside spacesuit in space\")\n // Load all JPGs from ./samples directory and append to FormData\n let files = fs.readdirSync('./samples');\n files.forEach(file => {\n if(file.endsWith('.jpg')) {\n formData.append('tune[images][]', fs.createReadStream(`./samples/${file}`), file);\n }\n });\n formData.append('tune[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1');\n\n let options = {\n method: 'POST',\n headers: {\n 'Authorization': 'Bearer ' + API_KEY\n },\n body: formData\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r));\n}\n\ncreateTune();\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import requests\nheaders = {\'Authorization\': f\'Bearer {API_KEY}\'}\n\ndef load_image(file_path):\n with open(file_path, "rb") as f:\n return f.read()\n\n# Assuming `prompts` and `tune.images` are already defined in your context\n\nimage_data = load_image("assets/image.jpeg")\n\ndata = {\n "tune[title]": "John Doe - UUID - 1234-6789-1234-56789",\n "tune[name]": "man",\n "tune[base_tune_id]": 690204,\n "tune[branch]": "fast",\n "tune[token]": "ohwx"\n}\nfiles = []\nfor i, prompt in enumerate(prompts):\n data.update({\n f"tune[prompts_attributes][{i}][text]": prompt[\'text\'],\n f"tune[prompts_attributes][{i}][negative_prompt]": prompt[\'negative_prompt\'],\n f"tune[prompts_attributes][{i}][face_correct]": "true",\n f"tune[prompts_attributes][{i}][inpaint_faces]": "true",\n f"tune[prompts_attributes][{i}][super_resolution]": "true",\n })\n if prompt[\'image_data\']:\n data.update({\n f"tune[prompts_attributes][{i}][controlnet]" : prompt[\'controlnet\'],\n })\n files.append((f"tune[prompts_attributes][{i}][input_image]", load_image(prompt[\'input_image\'])))\n\nfor image in tune.images:\n image_data = load_image(image) # Assuming image is a file path\n files.append(("tune[images][]", image_data))\n\nAPI_URL = \'https://api.astria.ai/tunes\'\nresponse = requests.post(API_URL, data=data, files=files, headers=headers)\nresponse.raise_for_status()\n\n')))),(0,r.kt)("h4",{id:"response"},"Response"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'\n{\n "id": 1,\n "title": "John Doe - UUID - 1234-6789-1234-56789",\n "name": "woman",\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": false,\n "ckpt_url": "https://sdbooth2-production.s3.amazonaws.com/mock",\n "ckpt_urls": [\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ],\n "eta": "2023-10-02T14:32:40.363Z",\n "trained_at": "2023-10-02T14:32:40.363Z",\n "started_training_at": "2023-10-02T14:32:05.229Z",\n "expires_at": "2023-11-01T14:32:40.363Z",\n "created_at": "2023-10-02T14:32:05.067Z",\n "branch": "sdxl1",\n "model_type": "lora",\n "updated_at": "2023-10-02T14:32:40.363Z",\n "url": "https://www.astria.ai/tunes/788416.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n}\n')))))}h.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[674],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(n),m=r,h=c["".concat(s,".").concat(m)]||c[m]||d[m]||o;return n?a.createElement(h,i(i({ref:t},u),{},{components:n})):a.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var p=2;p{n.d(t,{Z:()=>i});var a=n(7294),r=n(6010);const o={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,i),hidden:n},t)}},4866:(e,t,n)=>{n.d(t,{Z:()=>w});var a=n(7462),r=n(7294),o=n(6010),i=n(2466),l=n(6550),s=n(1980),p=n(7392),u=n(12);function c(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function d(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??c(n);return function(e){const t=(0,p.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=d(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[s,p]=h({queryString:n,groupId:a}),[c,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),b=(()=>{const e=s??c;return m({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),p(e),f(e)}),[p,f,o]),tabValues:o}}var b=n(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function k(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:p}=e;const u=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const t=e.currentTarget,n=u.indexOf(t),a=p[n].value;a!==l&&(c(t),s(a))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:i}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>u.push(e),onKeyDown:m,onClick:d},i,{className:(0,o.Z)("tabs__item",g.tabItem,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function _(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function v(e){const t=f(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",g.tabList)},r.createElement(k,(0,a.Z)({},e,t)),r.createElement(_,(0,a.Z)({},e,t)))}function w(e){const t=(0,b.Z)();return r.createElement(v,(0,a.Z)({key:String(t)},e))}},8987:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>p,toc:()=>c});var a=n(7462),r=(n(7294),n(3905)),o=n(4866),i=n(5162);const l={title:"Create a tune",hide_table_of_contents:!0},s=void 0,p={unversionedId:"api/tune/create",id:"api/tune/create",title:"Create a tune",description:"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images.",source:"@site/docs/api/0-tune/1-create.md",sourceDirName:"api/0-tune",slug:"/api/tune/create",permalink:"/docs/api/tune/create",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Create a tune",hide_table_of_contents:!0},sidebar:"tutorialSidebar",previous:{title:"The tune object",permalink:"/docs/api/tune/"},next:{title:"Retrieve a tune",permalink:"/docs/api/tune/retrieve"}},u={},c=[{value:"Parameters",id:"parameters",level:3},{value:"name (required)",id:"name-required",level:4},{value:"title (required)",id:"title-required",level:4},{value:"images (required)",id:"images-required",level:4},{value:"image_urls (required)",id:"image_urls-required",level:4},{value:"callback (optional)",id:"callback-optional",level:4},{value:"branch (optional)",id:"branch-optional",level:4},{value:"steps (optional)",id:"steps-optional",level:4},{value:"token (optional)",id:"token-optional",level:4},{value:"face_crop (optional)",id:"face_crop-optional",level:4},{value:"training_face_correct (optional)",id:"training_face_correct-optional",level:4},{value:"base_tune_id (optional)",id:"base_tune_id-optional",level:4},{value:"model_type (optional)",id:"model_type-optional",level:4},{value:"preset (optional)",id:"preset-optional",level:4},{value:"characteristics (optional)",id:"characteristics-optional",level:4},{value:"prompts_attributes (optional)",id:"prompts_attributes-optional",level:4},{value:"Returns",id:"returns",level:3},{value:"POST /tunes",id:"post-tunes",level:4},{value:"Response",id:"response",level:4}],d={toc:c},m="wrapper";function h(e){let{components:t,...n}=e;return(0,r.kt)(m,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"api-method"},(0,r.kt)("div",null,(0,r.kt)("p",null,"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images."),(0,r.kt)("h3",{id:"parameters"},"Parameters"),(0,r.kt)("h4",{id:"name-required"},(0,r.kt)("inlineCode",{parentName:"h4"},"name")," (required)"),(0,r.kt)("p",null,"A class name the describes the fine-tune. e.g: ",(0,r.kt)("inlineCode",{parentName:"p"},"man"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"woman"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"cat"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"dog"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"boy"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"girl"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"style")),(0,r.kt)("h4",{id:"title-required"},(0,r.kt)("inlineCode",{parentName:"h4"},"title")," (required)"),(0,r.kt)("p",null,"Describes the fine-tune. Ideally a UUID related to the transaction. See ",(0,r.kt)("a",{parentName:"p",href:"/docs/api/overview"},"idempotency")," for more information."),(0,r.kt)("h4",{id:"images-required"},(0,r.kt)("inlineCode",{parentName:"h4"},"images")," (required)"),(0,r.kt)("p",null,"An array of images to train the fine-tune with. The images can be uploaded as multipart/form-data or as image_urls."),(0,r.kt)("h4",{id:"image_urls-required"},(0,r.kt)("inlineCode",{parentName:"h4"},"image_urls")," (required)"),(0,r.kt)("p",null,"An array of images to train the fine-tune with. The images can be uploaded as multipart/form-data or as image_urls."),(0,r.kt)("h4",{id:"callback-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"callback")," (optional)"),(0,r.kt)("p",null,"A webhook URL to be called when the tune is finished training. The webhook will receive a POST request with the tune object. See ",(0,r.kt)("a",{parentName:"p",href:"/docs/api/overview#callbacks"},"more on callbacks"),"."),(0,r.kt)("h4",{id:"branch-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"branch")," (optional)"),(0,r.kt)("p",null,"Enum: ",(0,r.kt)("inlineCode",{parentName:"p"},"sd15"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"sdxl1"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"fast"),". Will default to the ",(0,r.kt)("inlineCode",{parentName:"p"},"base_tune")," branch if not specified, or to ",(0,r.kt)("inlineCode",{parentName:"p"},"sd15")," if ",(0,r.kt)("inlineCode",{parentName:"p"},"base_tune")," is not specified."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Use ",(0,r.kt)("inlineCode",{parentName:"p"},"branch=fast")," for ",(0,r.kt)("a",{parentName:"p",href:"https://docs.astria.ai/docs/api/overview#mock-testing"},"mock testing"))),(0,r.kt)("h4",{id:"steps-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"steps")," (optional)"),(0,r.kt)("p",null,"Training steps. Recommended leaving blank in order to allow better defaults set by the system."),(0,r.kt)("h4",{id:"token-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"token")," (optional)"),(0,r.kt)("p",null,"Unique short text to which the features will be embedded into. Default ",(0,r.kt)("inlineCode",{parentName:"p"},"ohwx")," for SDXL and ",(0,r.kt)("inlineCode",{parentName:"p"},"sks")," for SD15."),(0,r.kt)("h4",{id:"face_crop-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"face_crop")," (optional)"),(0,r.kt)("p",null,"Detects faces in training images and augments training set with cropped faces. Defaults to ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/users/edit"},"account setting")),(0,r.kt)("h4",{id:"training_face_correct-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"training_face_correct")," (optional)"),(0,r.kt)("p",null,"Enhance training images using GFPGAN. Consider enabling if input image are low quality or low resolution. May result in over-smoothing."),(0,r.kt)("h4",{id:"base_tune_id-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"base_tune_id")," (optional)"),(0,r.kt)("p",null,"Training on top of former fine-tune or a different baseline model from the ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery/tunes"},"gallery")," (id in the URL). e.g: ",(0,r.kt)("inlineCode",{parentName:"p"},"690204")," - Realistic Vision v5.1"),(0,r.kt)("h4",{id:"model_type-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"model_type")," (optional)"),(0,r.kt)("p",null,"Enum: ",(0,r.kt)("inlineCode",{parentName:"p"},"lora"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"pti"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"faceid"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"null")," for checkpoint.\nFor SDXL1 - API will default to ",(0,r.kt)("inlineCode",{parentName:"p"},"pti")," and will ignore ",(0,r.kt)("inlineCode",{parentName:"p"},"model_type")," parameter."),(0,r.kt)("h4",{id:"preset-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"preset")," (optional)"),(0,r.kt)("p",null,"Enum: ",(0,r.kt)("inlineCode",{parentName:"p"},"flux-lora-portrait"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"flux-lora-fast")," see details in the GUI, ",(0,r.kt)("inlineCode",{parentName:"p"},"null"),". See ",(0,r.kt)("a",{parentName:"p",href:"/docs/use-cases/flux-finetuning/"},"Flux lora training")," for more information."),(0,r.kt)("h4",{id:"characteristics-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"characteristics")," (optional)"),(0,r.kt)("p",null,"A free-form object that can be used to templatize the prompts text. e.g: ",(0,r.kt)("inlineCode",{parentName:"p"},'{"eye_color": "blue eyes"}')," would than be used in the prompt text as ",(0,r.kt)("inlineCode",{parentName:"p"},"ohwx woman, {{eye_color}}, holding flowers"),"."),(0,r.kt)("h4",{id:"prompts_attributes-optional"},(0,r.kt)("inlineCode",{parentName:"h4"},"prompts_attributes")," (optional)"),(0,r.kt)("p",null,"Array of prompts entities with all attributes. See ",(0,r.kt)("a",{parentName:"p",href:"/docs/api/prompt/create"},"create prompt")," for more information."),(0,r.kt)("h3",{id:"returns"},"Returns"),(0,r.kt)("p",null,"Returns a tune object if successful which will start training immediately and call callback once training is complete.")),(0,r.kt)("div",null,(0,r.kt)("h4",{id:"post-tunes"},"POST /tunes"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# With images as multipart/form-data\n# Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n# https://www.astria.ai/gallery/tunes/690204/prompts\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[branch]="fast" \\\n -F tune[callback]="https://optional-callback-url.com/webhooks/astria?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F tune[token]=ohwx \\\n -F "tune[prompts_attributes][0][text]=ohwx man on space circa 1979 on cover of time magazine" \\\n -F tune[prompts_attributes][0][callback]="https://optional-callback-url.com/webhooks/astria?user_id=1&prompt_id=1&tune_id=1" \\\n -F "tune[images][]=@1.jpg" \\\n -F "tune[images][]=@2.jpg" \\\n -F "tune[images][]=@3.jpg" \\\n -F "tune[images][]=@4.jpg"\n\n# With image_urls as form-data\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="Grumpy cat - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=cat \\\n -F tune[branch]="fast" \\\n -F tune[callback]="https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F tune[token]=ohwx \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg"\n \n# As JSON\ncat > data.json <<- EOM\n{\n "tune": {\n "title": "Grumpy Cat - UUID - 1234-6789-1234-56789",\n "name": "cat",\n "branch": "fast",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1",\n "image_urls": [\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg"\n ],\n "prompts_attributes": [\n {\n "text": "ohwx cat in space circa 1979 French illustration",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1&prompt_id=1"\n },\n {\n "text": "ohwx cat getting into trouble viral meme",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1&prompt_id=1"\n }\n ]\n }\n}\nEOM\n\ncurl -X POST -H"Content-Type: application/json" -H "Authorization: Bearer $API_KEY" --data @data.json https://api.astria.ai/tunes \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"// NodeJS 16\n// With image_urls and fetch()\n// For NodeJS 18 - do NOT import the below as it is built-in\nimport fetch from \"node-fetch\";\n\nconst API_KEY = 'sd_XXXXXX';\nconst DOMAIN = 'https://api.astria.ai';\n\nfunction createTune() {\n let options = {\n method: 'POST',\n headers: { 'Authorization': 'Bearer ' + API_KEY, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tune: {\n \"title\": 'John Doe - UUID - 1234-6789-1234-56789',\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n \"base_tune_id\": 690204,\n \"name\": \"cat\",\n \"branch\": \"fast\",\n \"image_urls\": [\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\"\n ],\n \"prompts_attributes\": [\n {\n \"text\": \"ohwx cat in space circa 1979 French illustration\",\n \"callback\": \"https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1&prompt_id=1\"\n },\n {\n \"text\": \"ohwx cat getting into trouble viral meme\",\n \"callback\": \"https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1&prompt_id=2\"\n }\n ]\n }\n })\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r))\n}\n\ncreateTune()\n\n\n/// With form-data, fetch() and nested prompts\n// For NodeJS 18 - do NOT import the two below as they are built-in\nimport fetch from \"node-fetch\";\nimport FormData from 'form-data';\nimport fs from 'fs';\n\nconst API_KEY = 'sd_XXXX';\nconst DOMAIN = 'https://api.astria.ai';\nfunction createTune() {\n let formData = new FormData();\n formData.append('tune[title]', 'John Doe - UUID - 1234-6789-1234-56789');\n // formData.append('tune[branch]', 'fast');\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n formData.append('tune[base_tune_id]', 690204);\n formData.append('tune[name]', 'man');\n formData.append('tune[prompts_attributes][0][callback]', 'https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1&prompt_id=1');\n formData.append('tune[prompts_attributes][0][input_image]', fs.createReadStream(`./samples/pose.png`));\n formData.append('tune[prompts_attributes][0][text]',\"ohwx man inside spacesuit in space\")\n // Load all JPGs from ./samples directory and append to FormData\n let files = fs.readdirSync('./samples');\n files.forEach(file => {\n if(file.endsWith('.jpg')) {\n formData.append('tune[images][]', fs.createReadStream(`./samples/${file}`), file);\n }\n });\n formData.append('tune[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1');\n\n let options = {\n method: 'POST',\n headers: {\n 'Authorization': 'Bearer ' + API_KEY\n },\n body: formData\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r));\n}\n\ncreateTune();\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import requests\nheaders = {\'Authorization\': f\'Bearer {API_KEY}\'}\n\ndef load_image(file_path):\n with open(file_path, "rb") as f:\n return f.read()\n\n# Assuming `prompts` and `tune.images` are already defined in your context\n\nimage_data = load_image("assets/image.jpeg")\n\ndata = {\n "tune[title]": "John Doe - UUID - 1234-6789-1234-56789",\n "tune[name]": "man",\n "tune[base_tune_id]": 690204,\n "tune[branch]": "fast",\n "tune[token]": "ohwx"\n}\nfiles = []\nfor i, prompt in enumerate(prompts):\n data.update({\n f"tune[prompts_attributes][{i}][text]": prompt[\'text\'],\n f"tune[prompts_attributes][{i}][negative_prompt]": prompt[\'negative_prompt\'],\n f"tune[prompts_attributes][{i}][face_correct]": "true",\n f"tune[prompts_attributes][{i}][inpaint_faces]": "true",\n f"tune[prompts_attributes][{i}][super_resolution]": "true",\n })\n if prompt[\'image_data\']:\n data.update({\n f"tune[prompts_attributes][{i}][controlnet]" : prompt[\'controlnet\'],\n })\n files.append((f"tune[prompts_attributes][{i}][input_image]", load_image(prompt[\'input_image\'])))\n\nfor image in tune.images:\n image_data = load_image(image) # Assuming image is a file path\n files.append(("tune[images][]", image_data))\n\nAPI_URL = \'https://api.astria.ai/tunes\'\nresponse = requests.post(API_URL, data=data, files=files, headers=headers)\nresponse.raise_for_status()\n\n')))),(0,r.kt)("h4",{id:"response"},"Response"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'\n{\n "id": 1,\n "title": "John Doe - UUID - 1234-6789-1234-56789",\n "name": "woman",\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": false,\n "ckpt_url": "https://sdbooth2-production.s3.amazonaws.com/mock",\n "ckpt_urls": [\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ],\n "eta": "2023-10-02T14:32:40.363Z",\n "trained_at": "2023-10-02T14:32:40.363Z",\n "started_training_at": "2023-10-02T14:32:05.229Z",\n "expires_at": "2023-11-01T14:32:40.363Z",\n "created_at": "2023-10-02T14:32:05.067Z",\n "branch": "sdxl1",\n "model_type": "lora",\n "updated_at": "2023-10-02T14:32:40.363Z",\n "url": "https://www.astria.ai/tunes/788416.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n}\n')))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.807fa7f4.js b/assets/js/935f2afb.807fa7f4.js deleted file mode 100644 index f9769267..00000000 --- a/assets/js/935f2afb.807fa7f4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[2197],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Changes","href":"/docs/changes","docId":"changes"},{"type":"category","label":"Use cases","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"AI Photoshoot - fine-tuning for professional headshots","href":"/docs/use-cases/ai-photoshoot","docId":"use-cases/ai-photoshoot"},{"type":"link","label":"Fine-tuning guide","href":"/docs/use-cases/finetuning-guide","docId":"use-cases/finetuning-guide"},{"type":"link","label":"Flux training","href":"/docs/use-cases/flux-finetuning","docId":"use-cases/flux-finetuning"},{"type":"link","label":"SDXL training","href":"/docs/use-cases/sdxl-training","docId":"use-cases/sdxl-training"},{"type":"link","label":"Controlnet","href":"/docs/use-cases/controlnet","docId":"use-cases/controlnet"},{"type":"link","label":"Inpainting and masking","href":"/docs/use-cases/inpainting-and-masking","docId":"use-cases/inpainting-and-masking"},{"type":"link","label":"Virtual Try-on for Flux","href":"/docs/use-cases/virtual-try-on","docId":"use-cases/virtual-try-on"},{"type":"link","label":"Product placement","href":"/docs/use-cases/product-shots","docId":"use-cases/product-shots"},{"type":"link","label":"Toonify","href":"/docs/use-cases/toonify","docId":"use-cases/toonify"},{"type":"link","label":"Video Generation","href":"/docs/use-cases/video-generation","docId":"use-cases/video-generation"},{"type":"link","label":"FAQ","href":"/docs/use-cases/faq","docId":"use-cases/faq"},{"type":"link","label":"Masked portraits","href":"/docs/use-cases/masked-portraits","docId":"use-cases/masked-portraits"},{"type":"link","label":"AI Interior Design","href":"/docs/use-cases/room-redesign","docId":"use-cases/room-redesign"},{"type":"link","label":"Upscale","href":"/docs/use-cases/upscale","docId":"use-cases/upscale"}],"href":"/docs/category/use-cases"},{"type":"category","label":"Features","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Backend V1","href":"/docs/features/backend-v1","docId":"features/backend-v1"},{"type":"link","label":"Face Inpainting","href":"/docs/features/face-inpainting","docId":"features/face-inpainting"},{"type":"link","label":"Face Swap","href":"/docs/features/face-swap","docId":"features/face-swap"},{"type":"link","label":"FaceID","href":"/docs/features/faceid","docId":"features/faceid"},{"type":"link","label":"Latent Consistency Models","href":"/docs/features/lcm","docId":"features/lcm"},{"type":"link","label":"LoRA","href":"/docs/features/lora","docId":"features/lora"},{"type":"link","label":"Multi-Person","href":"/docs/features/multiperson","docId":"features/multiperson"},{"type":"link","label":"Prompt Masking","href":"/docs/features/prompt-masking","docId":"features/prompt-masking"},{"type":"link","label":"Styles","href":"/docs/features/styles","docId":"features/styles"},{"type":"link","label":"Tiled upscale","href":"/docs/features/tiled-upscale","docId":"features/tiled-upscale"}],"href":"/docs/category/features"},{"type":"category","label":"API","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Overview","href":"/docs/api/overview","docId":"api/overview"},{"type":"category","label":"Tunes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The tune object","href":"/docs/api/tune/","docId":"api/tune/tune"},{"type":"link","label":"Create a tune","href":"/docs/api/tune/create","docId":"api/tune/create"},{"type":"link","label":"Retrieve a tune","href":"/docs/api/tune/retrieve","docId":"api/tune/retrieve"},{"type":"link","label":"List all tunes","href":"/docs/api/tune/list","docId":"api/tune/list"},{"type":"link","label":"Delete a tune","href":"/docs/api/tune/delete","docId":"api/tune/delete"}],"href":"/docs/category/tunes"},{"type":"category","label":"Prompts","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The prompt object","href":"/docs/api/prompt/prompt","docId":"api/prompt/prompt"},{"type":"link","label":"Create a prompt","href":"/docs/api/prompt/create","docId":"api/prompt/create"},{"type":"link","label":"Retrieve a prompt","href":"/docs/api/prompt/retrieve","docId":"api/prompt/retrieve"},{"type":"link","label":"List all prompts","href":"/docs/api/prompt/list","docId":"api/prompt/list"},{"type":"link","label":"Delete a prompt","href":"/docs/api/prompt/delete","docId":"api/prompt/delete"}],"href":"/docs/category/prompts"},{"type":"category","label":"Packs","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The pack object","href":"/docs/api/pack/pack","docId":"api/pack/pack"},{"type":"link","label":"List all packs","href":"/docs/api/pack/list","docId":"api/pack/list"},{"type":"category","label":"Pack tunes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Create a tune from a pack","href":"/docs/api/pack/tunes/create","docId":"api/pack/tunes/create"}],"href":"/docs/category/pack-tunes"}],"href":"/docs/category/packs"},{"type":"category","label":"Likes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Create a like","href":"/docs/api/like/create","docId":"api/like/create"},{"type":"link","label":"Delete a like","href":"/docs/api/like/delete","docId":"api/like/delete"}],"href":"/docs/category/likes"},{"type":"category","label":"Images","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Inspect image","href":"/docs/api/images/inspect","docId":"api/images/inspect"}],"href":"/docs/category/images"},{"type":"link","label":"Flux API usage","href":"/docs/api/flux-api","docId":"api/flux-api"},{"type":"category","label":"Themes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Create a theme","href":"/docs/api/themes/create","docId":"api/themes/create"}],"href":"/docs/category/themes"},{"type":"link","label":"SDXL API usage","href":"/docs/api/sdxl-api","docId":"api/sdxl-api"}],"href":"/docs/category/api"},{"type":"category","label":"API links","items":[{"type":"link","label":"Headshots Opens-source app","href":"https://github.com/astriaai/headshots-starter"},{"type":"link","label":"Python SDK","href":"https://github.com/aronbrand/astriaclient"},{"type":"link","label":"Postman","href":"https://documenter.getpostman.com/view/273068/2s8YmSrfgD"},{"type":"link","label":"Bubble.io Plugin","href":"https://bubble.io/plugin/astria-api---stable-diffusion-1674501522435x732640117689417700"},{"type":"link","label":"API key","href":"https://www.astria.ai/users/edit#api"}],"collapsed":false,"collapsible":true}]},"docs":{"api/flux-api":{"id":"api/flux-api","title":"Flux API usage","description":"For an overview of Flux fine-tuning, see Flux fine-tuning","sidebar":"tutorialSidebar"},"api/images/inspect":{"id":"api/images/inspect","title":"Inspect image","description":"Inspects an image to extract attributes both for filtering/warning about bad training set images and as characteristics to be added to the fine tune.","sidebar":"tutorialSidebar"},"api/like/create":{"id":"api/like/create","title":"Create a like","description":"Adds a like to a prompt.","sidebar":"tutorialSidebar"},"api/like/delete":{"id":"api/like/delete","title":"Delete a like","description":"Delete a like from a prompt.","sidebar":"tutorialSidebar"},"api/overview":{"id":"api/overview","title":"Overview","description":"Billing","sidebar":"tutorialSidebar"},"api/pack/list":{"id":"api/pack/list","title":"List all packs","description":"Parameters","sidebar":"tutorialSidebar"},"api/pack/pack":{"id":"api/pack/pack","title":"The pack object","description":"A pack represents a list of grouped prompts, as well as the fine-tune to be created from the training images.","sidebar":"tutorialSidebar"},"api/pack/tunes/create":{"id":"api/pack/tunes/create","title":"Create a tune from a pack","description":"Creates a new fine-tune model from training images according to the pack base tune id, model type and adds prompts to generate images.","sidebar":"tutorialSidebar"},"api/prompt/create":{"id":"api/prompt/create","title":"Create a prompt","description":"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images.","sidebar":"tutorialSidebar"},"api/prompt/delete":{"id":"api/prompt/delete","title":"Delete a prompt","description":"Deletes a specific prompt associated with a tune.","sidebar":"tutorialSidebar"},"api/prompt/list":{"id":"api/prompt/list","title":"List all prompts","description":"Parameters","sidebar":"tutorialSidebar"},"api/prompt/prompt":{"id":"api/prompt/prompt","title":"The prompt object","description":"The prompt object is usually used as a nested resource of tune as prompts are generated using a fine-tune model. A prompt is a text that is used to generate images using a fine-tune model. The prompt object contains the generated images.","sidebar":"tutorialSidebar"},"api/prompt/retrieve":{"id":"api/prompt/retrieve","title":"Retrieve a prompt","description":"Parameters","sidebar":"tutorialSidebar"},"api/sdxl-api":{"id":"api/sdxl-api","title":"SDXL API usage","description":"For general tips on SDXL training and inference, see SDXL training","sidebar":"tutorialSidebar"},"api/themes/create":{"id":"api/themes/create","title":"Create a theme","description":"Themes API leverages a LLM (Large Language Models) to generate a variety of prompts based on a theme. The theme can be a short description of a concept, a mood, or a style. The API call will create 10 prompts which will start processing and generating images.","sidebar":"tutorialSidebar"},"api/tune/create":{"id":"api/tune/create","title":"Create a tune","description":"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images.","sidebar":"tutorialSidebar"},"api/tune/delete":{"id":"api/tune/delete","title":"Delete a tune","description":"Deletes a specific tune by its ID, and associated prompts in case of a checkpoint.","sidebar":"tutorialSidebar"},"api/tune/list":{"id":"api/tune/list","title":"List all tunes","description":"Parameters","sidebar":"tutorialSidebar"},"api/tune/retrieve":{"id":"api/tune/retrieve","title":"Retrieve a tune","description":"Parameters","sidebar":"tutorialSidebar"},"api/tune/tune":{"id":"api/tune/tune","title":"The tune object","description":"Tune (or Fine-tune) represents a model that is created using training images to learn a new concept or subject. At its core a fine-tune is a neural-network weights file (usually weights 2GB) and contains the information of the trained images.","sidebar":"tutorialSidebar"},"changes":{"id":"changes","title":"Changes","description":"* 2024-11-27 FaceID for Flux is now available.","sidebar":"tutorialSidebar"},"features/backend-v1":{"id":"features/backend-v1","title":"Backend V1","description":"BETA","sidebar":"tutorialSidebar"},"features/face-inpainting":{"id":"features/face-inpainting","title":"Face Inpainting","description":"Overview","sidebar":"tutorialSidebar"},"features/face-swap":{"id":"features/face-swap","title":"Face Swap","description":"Without face-swap","sidebar":"tutorialSidebar"},"features/faceid":{"id":"features/faceid","title":"FaceID","description":"BETA","sidebar":"tutorialSidebar"},"features/lcm":{"id":"features/lcm","title":"Latent Consistency Models","description":"DPM SDE Karras 30 steps 15 seconds for 8 images","sidebar":"tutorialSidebar"},"features/lora":{"id":"features/lora","title":"LoRA","description":"LoRA","sidebar":"tutorialSidebar"},"features/multiperson":{"id":"features/multiperson","title":"Multi-Person","description":"BETA","sidebar":"tutorialSidebar"},"features/prompt-masking":{"id":"features/prompt-masking","title":"Prompt Masking","description":"Prompt masking uses a short text to create a mask from the input image. The mask can then be used to inpaint parts of the image. Use the below parameters as part of the prompts to use auto-masking","sidebar":"tutorialSidebar"},"features/styles":{"id":"features/styles","title":"Styles","description":"Prompt style attribute allow to easily generate an image according to a preconfigured set of styles. The styles are essentially a set of weights that are applied to the model during the generation process.","sidebar":"tutorialSidebar"},"features/tiled-upscale":{"id":"features/tiled-upscale","title":"Tiled upscale","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/ai-photoshoot":{"id":"use-cases/ai-photoshoot","title":"AI Photoshoot - fine-tuning for professional headshots","description":"Overview","sidebar":"tutorialSidebar"},"use-cases/controlnet":{"id":"use-cases/controlnet","title":"Controlnet","description":"Preserve composition","sidebar":"tutorialSidebar"},"use-cases/faq":{"id":"use-cases/faq","title":"FAQ","description":"What image size should I upload? Is there a size limit to uploads?","sidebar":"tutorialSidebar"},"use-cases/finetuning-guide":{"id":"use-cases/finetuning-guide","title":"Fine-tuning guide","description":"The guide for high quality avatars and AI photography","sidebar":"tutorialSidebar"},"use-cases/flux-finetuning":{"id":"use-cases/flux-finetuning","title":"Flux training","description":"Overview","sidebar":"tutorialSidebar"},"use-cases/inpainting-and-masking":{"id":"use-cases/inpainting-and-masking","title":"Inpainting and masking","description":"Input image","sidebar":"tutorialSidebar"},"use-cases/masked-portraits":{"id":"use-cases/masked-portraits","title":"Masked portraits","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/product-shots":{"id":"use-cases/product-shots","title":"Product placement","description":"Background replacement","sidebar":"tutorialSidebar"},"use-cases/room-redesign":{"id":"use-cases/room-redesign","title":"AI Interior Design","description":"Backend V1","sidebar":"tutorialSidebar"},"use-cases/sdxl-training":{"id":"use-cases/sdxl-training","title":"SDXL training","description":"Overview","sidebar":"tutorialSidebar"},"use-cases/toonify":{"id":"use-cases/toonify","title":"Toonify","description":"Input image","sidebar":"tutorialSidebar"},"use-cases/upscale":{"id":"use-cases/upscale","title":"Upscale","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/video-generation":{"id":"use-cases/video-generation","title":"Video Generation","description":"Generate videos using text","sidebar":"tutorialSidebar"},"use-cases/virtual-try-on":{"id":"use-cases/virtual-try-on","title":"Virtual Try-on for Flux","description":"BETA. Flux + Backend V0 only feature.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.f4135828.js b/assets/js/935f2afb.f4135828.js new file mode 100644 index 00000000..532f8d47 --- /dev/null +++ b/assets/js/935f2afb.f4135828.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[2197],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Changes","href":"/docs/changes","docId":"changes"},{"type":"category","label":"Use cases","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"AI Photoshoot - fine-tuning for professional headshots","href":"/docs/use-cases/ai-photoshoot","docId":"use-cases/ai-photoshoot"},{"type":"link","label":"Fine-tuning guide","href":"/docs/use-cases/finetuning-guide","docId":"use-cases/finetuning-guide"},{"type":"link","label":"Flux training","href":"/docs/use-cases/flux-finetuning","docId":"use-cases/flux-finetuning"},{"type":"link","label":"SDXL training","href":"/docs/use-cases/sdxl-training","docId":"use-cases/sdxl-training"},{"type":"link","label":"Controlnet","href":"/docs/use-cases/controlnet","docId":"use-cases/controlnet"},{"type":"link","label":"Inpainting and masking","href":"/docs/use-cases/inpainting-and-masking","docId":"use-cases/inpainting-and-masking"},{"type":"link","label":"Virtual Try-on for Flux","href":"/docs/use-cases/virtual-try-on","docId":"use-cases/virtual-try-on"},{"type":"link","label":"Product placement","href":"/docs/use-cases/product-shots","docId":"use-cases/product-shots"},{"type":"link","label":"Toonify","href":"/docs/use-cases/toonify","docId":"use-cases/toonify"},{"type":"link","label":"Video Generation","href":"/docs/use-cases/video-generation","docId":"use-cases/video-generation"},{"type":"link","label":"FAQ","href":"/docs/use-cases/faq","docId":"use-cases/faq"},{"type":"link","label":"Masked portraits","href":"/docs/use-cases/masked-portraits","docId":"use-cases/masked-portraits"},{"type":"link","label":"AI Interior Design","href":"/docs/use-cases/room-redesign","docId":"use-cases/room-redesign"},{"type":"link","label":"Upscale","href":"/docs/use-cases/upscale","docId":"use-cases/upscale"}],"href":"/docs/category/use-cases"},{"type":"category","label":"Features","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Backend V1","href":"/docs/features/backend-v1","docId":"features/backend-v1"},{"type":"link","label":"Face Inpainting","href":"/docs/features/face-inpainting","docId":"features/face-inpainting"},{"type":"link","label":"Face Swap","href":"/docs/features/face-swap","docId":"features/face-swap"},{"type":"link","label":"FaceID for Flux","href":"/docs/features/faceid-flux","docId":"features/faceid-flux"},{"type":"link","label":"FaceID","href":"/docs/features/faceid","docId":"features/faceid"},{"type":"link","label":"Latent Consistency Models","href":"/docs/features/lcm","docId":"features/lcm"},{"type":"link","label":"LoRA","href":"/docs/features/lora","docId":"features/lora"},{"type":"link","label":"Multi-Person","href":"/docs/features/multiperson","docId":"features/multiperson"},{"type":"link","label":"Prompt Masking","href":"/docs/features/prompt-masking","docId":"features/prompt-masking"},{"type":"link","label":"Styles","href":"/docs/features/styles","docId":"features/styles"},{"type":"link","label":"Tiled upscale","href":"/docs/features/tiled-upscale","docId":"features/tiled-upscale"}],"href":"/docs/category/features"},{"type":"category","label":"API","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Overview","href":"/docs/api/overview","docId":"api/overview"},{"type":"category","label":"Tunes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The tune object","href":"/docs/api/tune/","docId":"api/tune/tune"},{"type":"link","label":"Create a tune","href":"/docs/api/tune/create","docId":"api/tune/create"},{"type":"link","label":"Retrieve a tune","href":"/docs/api/tune/retrieve","docId":"api/tune/retrieve"},{"type":"link","label":"List all tunes","href":"/docs/api/tune/list","docId":"api/tune/list"},{"type":"link","label":"Delete a tune","href":"/docs/api/tune/delete","docId":"api/tune/delete"}],"href":"/docs/category/tunes"},{"type":"category","label":"Prompts","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The prompt object","href":"/docs/api/prompt/prompt","docId":"api/prompt/prompt"},{"type":"link","label":"Create a prompt","href":"/docs/api/prompt/create","docId":"api/prompt/create"},{"type":"link","label":"Retrieve a prompt","href":"/docs/api/prompt/retrieve","docId":"api/prompt/retrieve"},{"type":"link","label":"List all prompts","href":"/docs/api/prompt/list","docId":"api/prompt/list"},{"type":"link","label":"Delete a prompt","href":"/docs/api/prompt/delete","docId":"api/prompt/delete"}],"href":"/docs/category/prompts"},{"type":"category","label":"Packs","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The pack object","href":"/docs/api/pack/pack","docId":"api/pack/pack"},{"type":"link","label":"List all packs","href":"/docs/api/pack/list","docId":"api/pack/list"},{"type":"category","label":"Pack tunes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Create a tune from a pack","href":"/docs/api/pack/tunes/create","docId":"api/pack/tunes/create"}],"href":"/docs/category/pack-tunes"}],"href":"/docs/category/packs"},{"type":"category","label":"Likes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Create a like","href":"/docs/api/like/create","docId":"api/like/create"},{"type":"link","label":"Delete a like","href":"/docs/api/like/delete","docId":"api/like/delete"}],"href":"/docs/category/likes"},{"type":"category","label":"Images","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Inspect image","href":"/docs/api/images/inspect","docId":"api/images/inspect"}],"href":"/docs/category/images"},{"type":"link","label":"Flux API usage","href":"/docs/api/flux-api","docId":"api/flux-api"},{"type":"category","label":"Themes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Create a theme","href":"/docs/api/themes/create","docId":"api/themes/create"}],"href":"/docs/category/themes"},{"type":"link","label":"SDXL API usage","href":"/docs/api/sdxl-api","docId":"api/sdxl-api"}],"href":"/docs/category/api"},{"type":"category","label":"API links","items":[{"type":"link","label":"Headshots Opens-source app","href":"https://github.com/astriaai/headshots-starter"},{"type":"link","label":"Python SDK","href":"https://github.com/aronbrand/astriaclient"},{"type":"link","label":"Postman","href":"https://documenter.getpostman.com/view/273068/2s8YmSrfgD"},{"type":"link","label":"Bubble.io Plugin","href":"https://bubble.io/plugin/astria-api---stable-diffusion-1674501522435x732640117689417700"},{"type":"link","label":"API key","href":"https://www.astria.ai/users/edit#api"}],"collapsed":false,"collapsible":true}]},"docs":{"api/flux-api":{"id":"api/flux-api","title":"Flux API usage","description":"For an overview of Flux fine-tuning, see Flux fine-tuning","sidebar":"tutorialSidebar"},"api/images/inspect":{"id":"api/images/inspect","title":"Inspect image","description":"Inspects an image to extract attributes both for filtering/warning about bad training set images and as characteristics to be added to the fine tune.","sidebar":"tutorialSidebar"},"api/like/create":{"id":"api/like/create","title":"Create a like","description":"Adds a like to a prompt.","sidebar":"tutorialSidebar"},"api/like/delete":{"id":"api/like/delete","title":"Delete a like","description":"Delete a like from a prompt.","sidebar":"tutorialSidebar"},"api/overview":{"id":"api/overview","title":"Overview","description":"Billing","sidebar":"tutorialSidebar"},"api/pack/list":{"id":"api/pack/list","title":"List all packs","description":"Parameters","sidebar":"tutorialSidebar"},"api/pack/pack":{"id":"api/pack/pack","title":"The pack object","description":"A pack represents a list of grouped prompts, as well as the fine-tune to be created from the training images.","sidebar":"tutorialSidebar"},"api/pack/tunes/create":{"id":"api/pack/tunes/create","title":"Create a tune from a pack","description":"Creates a new fine-tune model from training images according to the pack base tune id, model type and adds prompts to generate images.","sidebar":"tutorialSidebar"},"api/prompt/create":{"id":"api/prompt/create","title":"Create a prompt","description":"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images.","sidebar":"tutorialSidebar"},"api/prompt/delete":{"id":"api/prompt/delete","title":"Delete a prompt","description":"Deletes a specific prompt associated with a tune.","sidebar":"tutorialSidebar"},"api/prompt/list":{"id":"api/prompt/list","title":"List all prompts","description":"Parameters","sidebar":"tutorialSidebar"},"api/prompt/prompt":{"id":"api/prompt/prompt","title":"The prompt object","description":"The prompt object is usually used as a nested resource of tune as prompts are generated using a fine-tune model. A prompt is a text that is used to generate images using a fine-tune model. The prompt object contains the generated images.","sidebar":"tutorialSidebar"},"api/prompt/retrieve":{"id":"api/prompt/retrieve","title":"Retrieve a prompt","description":"Parameters","sidebar":"tutorialSidebar"},"api/sdxl-api":{"id":"api/sdxl-api","title":"SDXL API usage","description":"For general tips on SDXL training and inference, see SDXL training","sidebar":"tutorialSidebar"},"api/themes/create":{"id":"api/themes/create","title":"Create a theme","description":"Themes API leverages a LLM (Large Language Models) to generate a variety of prompts based on a theme. The theme can be a short description of a concept, a mood, or a style. The API call will create 10 prompts which will start processing and generating images.","sidebar":"tutorialSidebar"},"api/tune/create":{"id":"api/tune/create","title":"Create a tune","description":"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images.","sidebar":"tutorialSidebar"},"api/tune/delete":{"id":"api/tune/delete","title":"Delete a tune","description":"Deletes a specific tune by its ID, and associated prompts in case of a checkpoint.","sidebar":"tutorialSidebar"},"api/tune/list":{"id":"api/tune/list","title":"List all tunes","description":"Parameters","sidebar":"tutorialSidebar"},"api/tune/retrieve":{"id":"api/tune/retrieve","title":"Retrieve a tune","description":"Parameters","sidebar":"tutorialSidebar"},"api/tune/tune":{"id":"api/tune/tune","title":"The tune object","description":"Tune (or Fine-tune) represents a model that is created using training images to learn a new concept or subject. At its core a fine-tune is a neural-network weights file (usually weights 2GB) and contains the information of the trained images.","sidebar":"tutorialSidebar"},"changes":{"id":"changes","title":"Changes","description":"* 2024-12-30 New portrait flux training preset is available for fine-tuning for better portrait results.","sidebar":"tutorialSidebar"},"features/backend-v1":{"id":"features/backend-v1","title":"Backend V1","description":"BETA","sidebar":"tutorialSidebar"},"features/face-inpainting":{"id":"features/face-inpainting","title":"Face Inpainting","description":"Overview","sidebar":"tutorialSidebar"},"features/face-swap":{"id":"features/face-swap","title":"Face Swap","description":"Without face-swap","sidebar":"tutorialSidebar"},"features/faceid":{"id":"features/faceid","title":"FaceID","description":"BETA","sidebar":"tutorialSidebar"},"features/faceid-flux":{"id":"features/faceid-flux","title":"FaceID for Flux","description":"BETA","sidebar":"tutorialSidebar"},"features/lcm":{"id":"features/lcm","title":"Latent Consistency Models","description":"DPM SDE Karras 30 steps 15 seconds for 8 images","sidebar":"tutorialSidebar"},"features/lora":{"id":"features/lora","title":"LoRA","description":"LoRA","sidebar":"tutorialSidebar"},"features/multiperson":{"id":"features/multiperson","title":"Multi-Person","description":"BETA","sidebar":"tutorialSidebar"},"features/prompt-masking":{"id":"features/prompt-masking","title":"Prompt Masking","description":"Prompt masking uses a short text to create a mask from the input image. The mask can then be used to inpaint parts of the image. Use the below parameters as part of the prompts to use auto-masking","sidebar":"tutorialSidebar"},"features/styles":{"id":"features/styles","title":"Styles","description":"Prompt style attribute allow to easily generate an image according to a preconfigured set of styles. The styles are essentially a set of weights that are applied to the model during the generation process.","sidebar":"tutorialSidebar"},"features/tiled-upscale":{"id":"features/tiled-upscale","title":"Tiled upscale","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/ai-photoshoot":{"id":"use-cases/ai-photoshoot","title":"AI Photoshoot - fine-tuning for professional headshots","description":"Overview","sidebar":"tutorialSidebar"},"use-cases/controlnet":{"id":"use-cases/controlnet","title":"Controlnet","description":"Preserve composition","sidebar":"tutorialSidebar"},"use-cases/faq":{"id":"use-cases/faq","title":"FAQ","description":"What image size should I upload? Is there a size limit to uploads?","sidebar":"tutorialSidebar"},"use-cases/finetuning-guide":{"id":"use-cases/finetuning-guide","title":"Fine-tuning guide","description":"The guide for high quality avatars and AI photography","sidebar":"tutorialSidebar"},"use-cases/flux-finetuning":{"id":"use-cases/flux-finetuning","title":"Flux training","description":"Overview","sidebar":"tutorialSidebar"},"use-cases/inpainting-and-masking":{"id":"use-cases/inpainting-and-masking","title":"Inpainting and masking","description":"Input image","sidebar":"tutorialSidebar"},"use-cases/masked-portraits":{"id":"use-cases/masked-portraits","title":"Masked portraits","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/product-shots":{"id":"use-cases/product-shots","title":"Product placement","description":"Background replacement","sidebar":"tutorialSidebar"},"use-cases/room-redesign":{"id":"use-cases/room-redesign","title":"AI Interior Design","description":"Backend V1","sidebar":"tutorialSidebar"},"use-cases/sdxl-training":{"id":"use-cases/sdxl-training","title":"SDXL training","description":"Overview","sidebar":"tutorialSidebar"},"use-cases/toonify":{"id":"use-cases/toonify","title":"Toonify","description":"Input image","sidebar":"tutorialSidebar"},"use-cases/upscale":{"id":"use-cases/upscale","title":"Upscale","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/video-generation":{"id":"use-cases/video-generation","title":"Video Generation","description":"Generate videos using text","sidebar":"tutorialSidebar"},"use-cases/virtual-try-on":{"id":"use-cases/virtual-try-on","title":"Virtual Try-on for Flux","description":"BETA. Flux + Backend V0 only feature.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/97179b4d.2aef21c2.js b/assets/js/97179b4d.2aef21c2.js new file mode 100644 index 00000000..409d93cc --- /dev/null +++ b/assets/js/97179b4d.2aef21c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[5139],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(n),m=r,h=c["".concat(s,".").concat(m)]||c[m]||d[m]||o;return n?a.createElement(h,i(i({ref:t},p),{},{components:n})):a.createElement(h,i({ref:t},p))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var u=2;u{n.d(t,{Z:()=>i});var a=n(7294),r=n(6010);const o={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,i),hidden:n},t)}},4866:(e,t,n)=>{n.d(t,{Z:()=>_});var a=n(7462),r=n(7294),o=n(6010),i=n(2466),l=n(6550),s=n(1980),u=n(7392),p=n(12);function c(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function d(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??c(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=d(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[s,u]=h({queryString:n,groupId:a}),[c,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,p.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),g=(()=>{const e=s??c;return m({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),f(e)}),[u,f,o]),tabValues:o}}var g=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function y(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==l&&(c(t),s(a))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:i}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>p.push(e),onKeyDown:m,onClick:d},i,{className:(0,o.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function v(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function k(e){const t=f(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",b.tabList)},r.createElement(y,(0,a.Z)({},e,t)),r.createElement(v,(0,a.Z)({},e,t)))}function _(e){const t=(0,g.Z)();return r.createElement(k,(0,a.Z)({key:String(t)},e))}},3714:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var a=n(7462),r=(n(7294),n(3905)),o=n(4866),i=n(5162);const l={hide_table_of_contents:!0,tags:["flux","api","training","fine-tuning","lora"]},s="Flux API usage",u={unversionedId:"api/flux-api",id:"api/flux-api",title:"Flux API usage",description:"For an overview of Flux fine-tuning, see Flux fine-tuning",source:"@site/docs/api/05-flux-api.md",sourceDirName:"api",slug:"/api/flux-api",permalink:"/docs/api/flux-api",draft:!1,tags:[{label:"flux",permalink:"/docs/tags/flux"},{label:"api",permalink:"/docs/tags/api"},{label:"training",permalink:"/docs/tags/training"},{label:"fine-tuning",permalink:"/docs/tags/fine-tuning"},{label:"lora",permalink:"/docs/tags/lora"}],version:"current",sidebarPosition:5,frontMatter:{hide_table_of_contents:!0,tags:["flux","api","training","fine-tuning","lora"]},sidebar:"tutorialSidebar",previous:{title:"Inspect image",permalink:"/docs/api/images/inspect"},next:{title:"Themes",permalink:"/docs/category/themes"}},p={},c=[{value:"Step 1: Fine-tune a lora model",id:"step-1-fine-tune-a-lora-model",level:3},{value:"POST /tunes",id:"post-tunes",level:4},{value:"Step 2: Generate images using the fine-tuned model",id:"step-2-generate-images-using-the-fine-tuned-model",level:3},{value:"POST /tunes/:id/prompts",id:"post-tunesidprompts",level:4}],d={toc:c},m="wrapper";function h(e){let{components:t,...n}=e;return(0,r.kt)(m,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"flux-api-usage"},"Flux API usage"),(0,r.kt)("p",null,"For an overview of Flux fine-tuning, see ",(0,r.kt)("a",{parentName:"p",href:"/docs/use-cases/flux-finetuning/"},"Flux fine-tuning")),(0,r.kt)("div",{className:"api-method"},(0,r.kt)("div",null,(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Unlike SD15 checkpoint training, Flux is trained as a LoRA model type. As such, inference is taking place on a base model such as Flux1.dev and ",(0,r.kt)("inlineCode",{parentName:"li"},"prompt.text")," should specify the loaded lora such as ",(0,r.kt)("inlineCode",{parentName:"li"},"")," - will load lora with id=123456 and strength=1"),(0,r.kt)("li",{parentName:"ul"},"Flux1.Dev requires commercial license which Astria provides to its customers, and as such LoRA downloading is not available for API usage.")),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/features/lora"},"LoRA docs")," on lora syntax"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"To avoid cloning inference details of different model types such as Flux LoRA vs SD1.5 checkpoint, please consider using the ",(0,r.kt)("a",{parentName:"p",href:"/docs/api/pack/pack/"},"Packs API"),". Packs will help you abstract the inference logic so that you do not have to hard-code prompts and parameters such as ",(0,r.kt)("inlineCode",{parentName:"p"},"w,h, cfg_scale")," in your backend. Moreover this will allow the creative department to launch packs, make modifications and even track likes, without needing to touch the backend code."))),(0,r.kt)("div",null,(0,r.kt)("h3",{id:"step-1-fine-tune-a-lora-model"},"Step 1: Fine-tune a lora model"),(0,r.kt)("h4",{id:"post-tunes"},"POST /tunes"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# With images as multipart/form-data\n# Hard coded tune id of Flux1.dev from the gallery - https://www.astria.ai/gallery/tunes \n# https://www.astria.ai/gallery/tunes/1504944/prompts\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[preset]=flux-lora-portrait \\\n -F tune[callback]="https://optional-callback-url.com/webhooks/astria?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=1504944 \\\n -F tune[model_type]="lora" \\\n -F "tune[images][]=@1.jpg" \\\n -F "tune[images][]=@2.jpg" \\\n -F "tune[images][]=@3.jpg" \\\n -F "tune[images][]=@4.jpg"\n\n# With image_urls as form-data\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="Grumpy cat - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=cat \\\n -F tune[preset]=flux-lora-portrait \\\n -F tune[callback]="https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=1504944 \\\n -F tune[model_type]="lora" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg"\n \n# As JSON\ncat > data.json <<- EOM\n{\n "tune": {\n "title": "Grumpy Cat - UUID - 1234-6789-1234-56789",\n "name": "cat",\n "base_tune_id": 1504944,\n "model_type": "lora",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1",\n "image_urls": [\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg"\n ]\n }\n}\nEOM\n\ncurl -X POST -H"Content-Type: application/json" -H "Authorization: Bearer $API_KEY" --data @data.json https://api.astria.ai/tunes \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"// NodeJS 16\n// With image_urls and fetch()\n// For NodeJS 18 - do NOT import the below as it is built-in\nimport fetch from \"node-fetch\";\n\nconst API_KEY = 'sd_XXXXXX';\nconst DOMAIN = 'https://api.astria.ai';\n\nfunction createTune() {\n let options = {\n method: 'POST',\n headers: { 'Authorization': 'Bearer ' + API_KEY, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tune: {\n \"title\": 'John Doe - UUID - 1234-6789-1234-56789',\n // Hard coded tune id of Flux1.dev from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/1504944/prompts\n \"base_tune_id\": 1504944,\n \"model_type\": \"lora\",\n \"name\": \"cat\",\n \"preet\": \"flux-lora-portrait\",\n \"image_urls\": [\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\"\n ],\n }\n })\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r))\n}\n\ncreateTune()\n\n\n/// With form-data, fetch() and nested prompts\n// For NodeJS 18 - do NOT import the two below as they are built-in\nimport fetch from \"node-fetch\";\nimport FormData from 'form-data';\nimport fs from 'fs';\n\nconst API_KEY = 'sd_XXXX';\nconst DOMAIN = 'https://api.astria.ai';\nfunction createTune() {\n let formData = new FormData();\n formData.append('tune[title]', 'John Doe - UUID - 1234-6789-1234-56789');\n // Hard coded tune id of Flux1.dev from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/1504944/prompts\n formData.append('tune[base_tune_id]', 1504944);\n formData.append('tune[model_type]', 'lora');\n formData.append('tune[name]', 'man');\n formData.append('tune[preset]', 'flux-lora-portrait');\n // Load all JPGs from ./samples directory and append to FormData\n let files = fs.readdirSync('./samples');\n files.forEach(file => {\n if(file.endsWith('.jpg')) {\n formData.append('tune[images][]', fs.createReadStream(`./samples/${file}`), file);\n }\n });\n formData.append('tune[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1');\n\n let options = {\n method: 'POST',\n headers: {\n 'Authorization': 'Bearer ' + API_KEY\n },\n body: formData\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r));\n}\n\ncreateTune();\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import requests\nheaders = {\'Authorization\': f\'Bearer {API_KEY}\'}\n\ndef load_image(file_path):\n with open(file_path, "rb") as f:\n return f.read()\n\n# Assuming `prompts` and `tune.images` are already defined in your context\n\nimage_data = load_image("assets/image.jpeg")\n\ndata = {\n "tune[title]": "John Doe - UUID - 1234-6789-1234-56789",\n "tune[name]": "man",\n "tune[preset]": "flux-lora-portrait",\n "tune[base_tune_id]": 1504944,\n "tune[model_type]": "lora",\n}\nfiles = []\n\nfor image in tune.images:\n image_data = load_image(image) # Assuming image is a file path\n files.append(("tune[images][]", image_data))\n\nAPI_URL = \'https://api.astria.ai/tunes\'\nresponse = requests.post(API_URL, data=data, files=files, headers=headers)\nresponse.raise_for_status()\n\n')))),(0,r.kt)("h3",{id:"step-2-generate-images-using-the-fine-tuned-model"},"Step 2: Generate images using the fine-tuned model"),(0,r.kt)("h4",{id:"post-tunesidprompts"},"POST /tunes/:id/prompts"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# Note the hard-coded 1504944 which is the tune_id of Flux1.dev from the gallery\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes/1504944/prompts \\\n -F prompt[text]=" a painting of ohwx man in the style of Van Gogh" \\\n -F prompt[callback]="https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1" \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"const fetch = require('node-fetch');\nconst FormData = require('form-data');\n\n// Note the hard-coded 1504944 which is the tune_id of Flux1.dev from the gallery\nconst API_URL = 'https://api.astria.ai/tunes/1504944/prompts';\nconst API_KEY = 'YOUR_API_KEY'; // Replace with your actual API key\nconst headers = { Authorization: `Bearer ${API_KEY}` }\n\nconst form = new FormData();\nform.append('prompt[text]', ' a painting of ohwx man in the style of Van Gogh');\nform.append('prompt[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1');\n\nfetch(API_URL, {\n method: 'POST',\n headers: headers,\n body: form\n}).then(response => response.json())\n\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import requests\n\n# Note the hard-coded 1504944 which is the tune_id of Flux1.dev from the gallery\nAPI_URL = 'https://api.astria.ai/tunes/1504944/prompts'\nAPI_KEY = 'YOUR_API_KEY' # Replace with your actual API key\n\nheaders = {\n 'Authorization': f'Bearer {API_KEY}'\n}\n\ndata = {\n 'prompt[text]': ' a painting of ohwx man in the style of Van Gogh',\n 'prompt[callback]': 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1'\n}\nfiles = []\n\nresponse = requests.post(API_URL, headers=headers, data=data)\n")))))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/97179b4d.6d9454ac.js b/assets/js/97179b4d.6d9454ac.js deleted file mode 100644 index 285bb8e0..00000000 --- a/assets/js/97179b4d.6d9454ac.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[5139],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(n),m=r,h=c["".concat(s,".").concat(m)]||c[m]||d[m]||o;return n?a.createElement(h,i(i({ref:t},p),{},{components:n})):a.createElement(h,i({ref:t},p))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var u=2;u{n.d(t,{Z:()=>i});var a=n(7294),r=n(6010);const o={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,i),hidden:n},t)}},4866:(e,t,n)=>{n.d(t,{Z:()=>_});var a=n(7462),r=n(7294),o=n(6010),i=n(2466),l=n(6550),s=n(1980),u=n(7392),p=n(12);function c(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function d(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??c(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,l.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,s._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=d(e),[i,l]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[s,u]=h({queryString:n,groupId:a}),[c,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,p.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),g=(()=>{const e=s??c;return m({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{g&&l(g)}),[g]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);l(e),u(e),f(e)}),[u,f,o]),tabValues:o}}var g=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function y(e){let{className:t,block:n,selectedValue:l,selectValue:s,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==l&&(c(t),s(a))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:i}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>p.push(e),onKeyDown:m,onClick:d},i,{className:(0,o.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":l===t})}),n??t)})))}function v(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function k(e){const t=f(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",b.tabList)},r.createElement(y,(0,a.Z)({},e,t)),r.createElement(v,(0,a.Z)({},e,t)))}function _(e){const t=(0,g.Z)();return r.createElement(k,(0,a.Z)({key:String(t)},e))}},3714:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>u,toc:()=>c});var a=n(7462),r=(n(7294),n(3905)),o=n(4866),i=n(5162);const l={hide_table_of_contents:!0,tags:["flux","api","training","fine-tuning","lora"]},s="Flux API usage",u={unversionedId:"api/flux-api",id:"api/flux-api",title:"Flux API usage",description:"For an overview of Flux fine-tuning, see Flux fine-tuning",source:"@site/docs/api/05-flux-api.md",sourceDirName:"api",slug:"/api/flux-api",permalink:"/docs/api/flux-api",draft:!1,tags:[{label:"flux",permalink:"/docs/tags/flux"},{label:"api",permalink:"/docs/tags/api"},{label:"training",permalink:"/docs/tags/training"},{label:"fine-tuning",permalink:"/docs/tags/fine-tuning"},{label:"lora",permalink:"/docs/tags/lora"}],version:"current",sidebarPosition:5,frontMatter:{hide_table_of_contents:!0,tags:["flux","api","training","fine-tuning","lora"]},sidebar:"tutorialSidebar",previous:{title:"Inspect image",permalink:"/docs/api/images/inspect"},next:{title:"Themes",permalink:"/docs/category/themes"}},p={},c=[{value:"Step 1: Fine-tune a lora model",id:"step-1-fine-tune-a-lora-model",level:3},{value:"POST /tunes",id:"post-tunes",level:4},{value:"Step 2: Generate images using the fine-tuned model",id:"step-2-generate-images-using-the-fine-tuned-model",level:3},{value:"POST /tunes/:id/prompts",id:"post-tunesidprompts",level:4}],d={toc:c},m="wrapper";function h(e){let{components:t,...n}=e;return(0,r.kt)(m,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"flux-api-usage"},"Flux API usage"),(0,r.kt)("p",null,"For an overview of Flux fine-tuning, see ",(0,r.kt)("a",{parentName:"p",href:"/docs/use-cases/flux-finetuning/"},"Flux fine-tuning")),(0,r.kt)("div",{className:"api-method"},(0,r.kt)("div",null,(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Unlike SD15 checkpoint training, Flux is trained as a LoRA model type. As such, inference is taking place a on a base line model such as Flux1.dev and ",(0,r.kt)("inlineCode",{parentName:"li"},"prompt.text")," should specify the loaded lora such as ",(0,r.kt)("inlineCode",{parentName:"li"},"")," - will load lora with id=123456 and strength=1"),(0,r.kt)("li",{parentName:"ul"},"Flux1.Dev requires commercial licensing which Astria provides to its customers, and as such LoRA downloading is not available for API usage.")),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"/docs/features/lora"},"LoRA docs")," on lora syntax"),(0,r.kt)("p",null,"With Flux you cannot combine multiple LoRAs."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"To avoid cloning inference details of different model types such as Flux LoRA vs SD1.5 checkpoint, please consider using the ",(0,r.kt)("a",{parentName:"p",href:"/docs/api/pack/pack/"},"Packs API"),". Packs will help you abstract the inference logic so that you do not have to hard-code prompts and parameters such as ",(0,r.kt)("inlineCode",{parentName:"p"},"w,h, cfg_scale")," in your backend. Moreover this will allow the creative department to launch packs, make modifications and even track likes, without needing to touch the backend code.")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"If you are receiving ",(0,r.kt)("inlineCode",{parentName:"p"},"422")," error ",(0,r.kt)("inlineCode",{parentName:"p"},"model_type=lora is not supported. Use a checkpoint instead")," - Change the request URL to ",(0,r.kt)("a",{parentName:"p",href:"https://api.astria.ai/tunes/1504944/prompts"},"https://api.astria.ai/tunes/1504944/prompts")," with ",(0,r.kt)("inlineCode",{parentName:"p"},"1504944")," as a hard-coded tune_id of Flux1.Dev from the gallery. See explanation above."))),(0,r.kt)("div",null,(0,r.kt)("h3",{id:"step-1-fine-tune-a-lora-model"},"Step 1: Fine-tune a lora model"),(0,r.kt)("h4",{id:"post-tunes"},"POST /tunes"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# With images as multipart/form-data\n# Hard coded tune id of Flux1.dev from the gallery - https://www.astria.ai/gallery/tunes \n# https://www.astria.ai/gallery/tunes/1504944/prompts\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[callback]="https://optional-callback-url.com/webhooks/astria?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=1504944 \\\n -F tune[model_type]="lora" \\\n -F "tune[images][]=@1.jpg" \\\n -F "tune[images][]=@2.jpg" \\\n -F "tune[images][]=@3.jpg" \\\n -F "tune[images][]=@4.jpg"\n\n# With image_urls as form-data\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="Grumpy cat - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=cat \\\n -F tune[callback]="https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=1504944 \\\n -F tune[model_type]="lora" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg"\n \n# As JSON\ncat > data.json <<- EOM\n{\n "tune": {\n "title": "Grumpy Cat - UUID - 1234-6789-1234-56789",\n "name": "cat",\n "base_tune_id": 1504944,\n "model_type": "lora",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1",\n "image_urls": [\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg"\n ]\n }\n}\nEOM\n\ncurl -X POST -H"Content-Type: application/json" -H "Authorization: Bearer $API_KEY" --data @data.json https://api.astria.ai/tunes \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"// NodeJS 16\n// With image_urls and fetch()\n// For NodeJS 18 - do NOT import the below as it is built-in\nimport fetch from \"node-fetch\";\n\nconst API_KEY = 'sd_XXXXXX';\nconst DOMAIN = 'https://api.astria.ai';\n\nfunction createTune() {\n let options = {\n method: 'POST',\n headers: { 'Authorization': 'Bearer ' + API_KEY, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tune: {\n \"title\": 'John Doe - UUID - 1234-6789-1234-56789',\n // Hard coded tune id of Flux1.dev from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/1504944/prompts\n \"base_tune_id\": 1504944,\n \"model_type\": \"lora\",\n \"name\": \"cat\",\n \"image_urls\": [\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\"\n ],\n }\n })\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r))\n}\n\ncreateTune()\n\n\n/// With form-data, fetch() and nested prompts\n// For NodeJS 18 - do NOT import the two below as they are built-in\nimport fetch from \"node-fetch\";\nimport FormData from 'form-data';\nimport fs from 'fs';\n\nconst API_KEY = 'sd_XXXX';\nconst DOMAIN = 'https://api.astria.ai';\nfunction createTune() {\n let formData = new FormData();\n formData.append('tune[title]', 'John Doe - UUID - 1234-6789-1234-56789');\n // Hard coded tune id of Flux1.dev from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/1504944/prompts\n formData.append('tune[base_tune_id]', 1504944);\n formData.append('tune[model_type]', 'lora');\n formData.append('tune[name]', 'man');\n // Load all JPGs from ./samples directory and append to FormData\n let files = fs.readdirSync('./samples');\n files.forEach(file => {\n if(file.endsWith('.jpg')) {\n formData.append('tune[images][]', fs.createReadStream(`./samples/${file}`), file);\n }\n });\n formData.append('tune[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1');\n\n let options = {\n method: 'POST',\n headers: {\n 'Authorization': 'Bearer ' + API_KEY\n },\n body: formData\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r));\n}\n\ncreateTune();\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import requests\nheaders = {\'Authorization\': f\'Bearer {API_KEY}\'}\n\ndef load_image(file_path):\n with open(file_path, "rb") as f:\n return f.read()\n\n# Assuming `prompts` and `tune.images` are already defined in your context\n\nimage_data = load_image("assets/image.jpeg")\n\ndata = {\n "tune[title]": "John Doe - UUID - 1234-6789-1234-56789",\n "tune[name]": "man",\n "tune[base_tune_id]": 1504944,\n "tune[model_type]": "lora",\n}\nfiles = []\n\nfor image in tune.images:\n image_data = load_image(image) # Assuming image is a file path\n files.append(("tune[images][]", image_data))\n\nAPI_URL = \'https://api.astria.ai/tunes\'\nresponse = requests.post(API_URL, data=data, files=files, headers=headers)\nresponse.raise_for_status()\n\n')))),(0,r.kt)("h3",{id:"step-2-generate-images-using-the-fine-tuned-model"},"Step 2: Generate images using the fine-tuned model"),(0,r.kt)("h4",{id:"post-tunesidprompts"},"POST /tunes/:id/prompts"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# Note the hard-coded 1504944 which is the tune_id of Flux1.dev from the gallery\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes/1504944/prompts \\\n -F prompt[text]=" a painting of ohwx man in the style of Van Gogh" \\\n -F prompt[callback]="https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1" \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"const fetch = require('node-fetch');\nconst FormData = require('form-data');\n\n// Note the hard-coded 1504944 which is the tune_id of Flux1.dev from the gallery\nconst API_URL = 'https://api.astria.ai/tunes/1504944/prompts';\nconst API_KEY = 'YOUR_API_KEY'; // Replace with your actual API key\nconst headers = { Authorization: `Bearer ${API_KEY}` }\n\nconst form = new FormData();\nform.append('prompt[text]', ' a painting of ohwx man in the style of Van Gogh');\nform.append('prompt[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1');\n\nfetch(API_URL, {\n method: 'POST',\n headers: headers,\n body: form\n}).then(response => response.json())\n\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import requests\n\n# Note the hard-coded 1504944 which is the tune_id of Flux1.dev from the gallery\nAPI_URL = 'https://api.astria.ai/tunes/1504944/prompts'\nAPI_KEY = 'YOUR_API_KEY' # Replace with your actual API key\n\nheaders = {\n 'Authorization': f'Bearer {API_KEY}'\n}\n\ndata = {\n 'prompt[text]': ' a painting of ohwx man in the style of Van Gogh',\n 'prompt[callback]': 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1'\n}\nfiles = []\n\nresponse = requests.post(API_URL, headers=headers, data=data)\n")))))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9fda4f55.6ac2ebed.js b/assets/js/9fda4f55.6ac2ebed.js deleted file mode 100644 index 302e10b4..00000000 --- a/assets/js/9fda4f55.6ac2ebed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[4868],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),p=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),d=p(a),u=n,f=d["".concat(s,".").concat(u)]||d[u]||m[u]||i;return a?r.createElement(f,l(l({ref:t},c),{},{components:a})):r.createElement(f,l({ref:t},c))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,l=new Array(i);l[0]=u;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[d]="string"==typeof e?e:n,l[1]=o;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var r=a(7462),n=(a(7294),a(3905));const i={},l="Changes",o={unversionedId:"changes",id:"changes",title:"Changes",description:"* 2024-11-27 FaceID for Flux is now available.",source:"@site/docs/0-changes.md",sourceDirName:".",slug:"/changes",permalink:"/docs/changes",draft:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{},sidebar:"tutorialSidebar",next:{title:"Use cases",permalink:"/docs/category/use-cases"}},s={},p=[],c={toc:p},d="wrapper";function m(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"changes"},"Changes"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"2024-11-27 FaceID for Flux is now available."),(0,n.kt)("li",{parentName:"ul"},"2024-11-27 Flux fine-tuning allows uploading .TXT file captions for multi concept fine-tuning."),(0,n.kt)("li",{parentName:"ul"},"2024-11-24 Added film grain and color grading support for Flux Backend V0."),(0,n.kt)("li",{parentName:"ul"},"2024-11-20 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/virtual-try-on/"},"Virtual try-on")," with Flux is now in BETA."),(0,n.kt)("li",{parentName:"ul"},"2024-11-15 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/face-inpainting"},"Face inpainting")," with Flux and improved super-resolution"),(0,n.kt)("li",{parentName:"ul"},"2024-10-27 Added ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/themes/create/"},"Theme API")," to allow users to easily create variation and write their own ideas while augmenting them and adding variation."),(0,n.kt)("li",{parentName:"ul"},"2024-10-12 Added ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/images/inspect/"},"Image inspect")," API to 1) filter/warn about bad training images 2) detect characteristics of the training images for templating with ",(0,n.kt)("inlineCode",{parentName:"li"},"characteristics"),"."),(0,n.kt)("li",{parentName:"ul"},"2024-10-09 Flux controlnet pose is available with Backend V0 but is still not recommended for production use."),(0,n.kt)("li",{parentName:"ul"},"2024-09-26 Added ",(0,n.kt)("inlineCode",{parentName:"li"},"prompts_callback")," for ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/pack/tunes/create/"},"creating a tune with a pack")),(0,n.kt)("li",{parentName:"ul"},"2024-09-03 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/flux-finetuning/"},"Flux fine-tuning")," docs and ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/flux-api"},"Flux API usage")),(0,n.kt)("li",{parentName:"ul"},"2024-07-29 Added ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/styles"},"Styles")," option for prompt"),(0,n.kt)("li",{parentName:"ul"},"2024-06-26 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/tiled-upscale"},"Tiled upscale V2")," preserves identity and similarity while adding details and skin tones."),(0,n.kt)("li",{parentName:"ul"},"2024-06-26 Added controlnet ",(0,n.kt)("inlineCode",{parentName:"li"},"relight")," for SD15 with Backend V1 to allow better composition and blending for ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/product-shots/"},"background replacement"),"."),(0,n.kt)("li",{parentName:"ul"},"2024-05-26 Added ",(0,n.kt)("inlineCode",{parentName:"li"},"--improve_similarity 0.5")," flag for Checkpoint/LoRA models which dramatically improves similarity/identity."),(0,n.kt)("li",{parentName:"ul"},"2024-05-22 Improved SDXL FaceID"),(0,n.kt)("li",{parentName:"ul"},"2024-05-22 Added Controlnet Style for SDXL1 "),(0,n.kt)("li",{parentName:"ul"},"2024-05-10 Added Controlnet Lineart for SDXL1 "),(0,n.kt)("li",{parentName:"ul"},"2024-05-06 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/room-redesign"},"Interior design"),' - improved "Segment Room" (',(0,n.kt)("inlineCode",{parentName:"li"},"segroom"),") controlnet to handle empty rooms. "),(0,n.kt)("li",{parentName:"ul"},"2024-05-05 ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/pack/pack/"},"Packs")," + ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/like/create/"},"Likes")," API - Control prompts from within Astria and experiment faster. "),(0,n.kt)("li",{parentName:"ul"},"2024-04-20 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/room-redesign"},"Interior design"),' - Added "Segment Room" controlnet for Backend V1, and MLSD for SDXL to be used. '),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 Added support for face-inpainting, hires-fix and tiled upscale for faceid on Backend V1. "),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 Lightning schedulers for Backend V1 to support lightning models such as ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes/1194447/prompts"},"RealVis XL Lightning")," "),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 V1: Lightning schedulers to support lightning models such as ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes/1194447/prompts"},"RealVis XL Lightning")," "),(0,n.kt)("li",{parentName:"ul"},"2024-03-27 Upgraded ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/themes"},"Themes")," to use Claude Opus and adjust for both SDXL and SD15 prompting."),(0,n.kt)("li",{parentName:"ul"},"2024-03-20 ",(0,n.kt)("a",{parentName:"li",href:"https://astria.ai/upscale"},"Free Upscale")," tool"),(0,n.kt)("li",{parentName:"ul"},"2024-03-17 Controlnet ",(0,n.kt)("inlineCode",{parentName:"li"},"composition")," support for Backend V1. Examples in the ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery?controlnet=composition"},"gallery")),(0,n.kt)("li",{parentName:"ul"},"2024-03-10 New ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/backend-v1"},"Backend version v1")," for inference - Higher quality, better samplers, faster inference, and more features."),(0,n.kt)("li",{parentName:"ul"},"2024-03-05 ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jabir-zheng/TCD"},"TCD")," sampler gets better results than LCM in 4-8 steps for SDXL models and is available on the samplers dropdown in the Advanced settings of the prompt."),(0,n.kt)("li",{parentName:"ul"},"2024-02-16 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/faceid"},"FaceID Portrait")," has better color balance and similarity and is well suited for portraits."),(0,n.kt)("li",{parentName:"ul"},"2024-02-08 Deprecate prompt aspect-ratio. Use width and height instead for better results (backward compatability available)."),(0,n.kt)("li",{parentName:"ul"},"2024-02-08 Added ",(0,n.kt)("inlineCode",{parentName:"li"},"--fix_bindi")," to remove dot on the forehead."),(0,n.kt)("li",{parentName:"ul"},"2024-01-30 Deprecated prompt expansion."),(0,n.kt)("li",{parentName:"ul"},"2024-01-25 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/upscale"},"Upscale only")," Allows you to upscale an existing image."),(0,n.kt)("li",{parentName:"ul"},"2024-01-17 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/faceid"},"FaceID")," Preserve identity without fine-tuning."),(0,n.kt)("li",{parentName:"ul"},"2024-01-03 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/tiled-upscale"},"Tiled upscale")," improved upscaling."),(0,n.kt)("li",{parentName:"ul"},"2023-12-14 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/prompt-masking"},"Prompt masking")," feature added - to support ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/product-shots"},"product shots")," and ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/masked-portraits"},"Masked Portraits")),(0,n.kt)("li",{parentName:"ul"},"2023-11-27 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/lcm"},"LCM")," (Latent Consistency Models) scheduler allows inference in 6 steps "),(0,n.kt)("li",{parentName:"ul"},"2023-10-29 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/face-swap"},"Face-Swap")," feature added - uses training images to improve inference time similarity"),(0,n.kt)("li",{parentName:"ul"},"2023-10-22 ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/themes"},"Themes")," - Have ChatGPT create 10 prompts for you from a short 2-4 word theme description.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9fda4f55.d1665bb7.js b/assets/js/9fda4f55.d1665bb7.js new file mode 100644 index 00000000..6a50eb2e --- /dev/null +++ b/assets/js/9fda4f55.d1665bb7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[4868],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),p=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),d=p(a),m=n,f=d["".concat(s,".").concat(m)]||d[m]||u[m]||i;return a?r.createElement(f,l(l({ref:t},c),{},{components:a})):r.createElement(f,l({ref:t},c))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,l=new Array(i);l[0]=m;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[d]="string"==typeof e?e:n,l[1]=o;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var r=a(7462),n=(a(7294),a(3905));const i={},l="Changes",o={unversionedId:"changes",id:"changes",title:"Changes",description:"* 2024-12-30 New portrait flux training preset is available for fine-tuning for better portrait results.",source:"@site/docs/0-changes.md",sourceDirName:".",slug:"/changes",permalink:"/docs/changes",draft:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{},sidebar:"tutorialSidebar",next:{title:"Use cases",permalink:"/docs/category/use-cases"}},s={},p=[],c={toc:p},d="wrapper";function u(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"changes"},"Changes"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"2024-12-30 New ",(0,n.kt)("inlineCode",{parentName:"li"},"portrait")," flux training preset is available for ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/flux-finetuning/#training-presets"},"fine-tuning")," for better portrait results."),(0,n.kt)("li",{parentName:"ul"},"2024-11-27 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/faceid-flux"},"FaceID")," for Flux is now available."),(0,n.kt)("li",{parentName:"ul"},"2024-11-27 Flux fine-tuning allows uploading .TXT file captions for multi concept fine-tuning."),(0,n.kt)("li",{parentName:"ul"},"2024-11-24 Added film grain and color grading support for Flux Backend V0."),(0,n.kt)("li",{parentName:"ul"},"2024-11-20 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/virtual-try-on/"},"Virtual try-on")," with Flux is now in BETA."),(0,n.kt)("li",{parentName:"ul"},"2024-11-15 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/face-inpainting"},"Face inpainting")," with Flux and improved super-resolution"),(0,n.kt)("li",{parentName:"ul"},"2024-10-27 Added ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/themes/create/"},"Theme API")," to allow users to easily create variation and write their own ideas while augmenting them and adding variation."),(0,n.kt)("li",{parentName:"ul"},"2024-10-12 Added ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/images/inspect/"},"Image inspect")," API to 1) filter/warn about bad training images 2) detect characteristics of the training images for templating with ",(0,n.kt)("inlineCode",{parentName:"li"},"characteristics"),"."),(0,n.kt)("li",{parentName:"ul"},"2024-10-09 Flux controlnet pose is available with Backend V0 but is still not recommended for production use."),(0,n.kt)("li",{parentName:"ul"},"2024-09-26 Added ",(0,n.kt)("inlineCode",{parentName:"li"},"prompts_callback")," for ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/pack/tunes/create/"},"creating a tune with a pack")),(0,n.kt)("li",{parentName:"ul"},"2024-09-03 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/flux-finetuning/"},"Flux fine-tuning")," docs and ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/flux-api"},"Flux API usage")),(0,n.kt)("li",{parentName:"ul"},"2024-07-29 Added ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/styles"},"Styles")," option for prompt"),(0,n.kt)("li",{parentName:"ul"},"2024-06-26 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/tiled-upscale"},"Tiled upscale V2")," preserves identity and similarity while adding details and skin tones."),(0,n.kt)("li",{parentName:"ul"},"2024-06-26 Added controlnet ",(0,n.kt)("inlineCode",{parentName:"li"},"relight")," for SD15 with Backend V1 to allow better composition and blending for ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/product-shots/"},"background replacement"),"."),(0,n.kt)("li",{parentName:"ul"},"2024-05-26 Added ",(0,n.kt)("inlineCode",{parentName:"li"},"--improve_similarity 0.5")," flag for Checkpoint/LoRA models which dramatically improves similarity/identity."),(0,n.kt)("li",{parentName:"ul"},"2024-05-22 Improved SDXL FaceID"),(0,n.kt)("li",{parentName:"ul"},"2024-05-22 Added Controlnet Style for SDXL1 "),(0,n.kt)("li",{parentName:"ul"},"2024-05-10 Added Controlnet Lineart for SDXL1 "),(0,n.kt)("li",{parentName:"ul"},"2024-05-06 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/room-redesign"},"Interior design"),' - improved "Segment Room" (',(0,n.kt)("inlineCode",{parentName:"li"},"segroom"),") controlnet to handle empty rooms. "),(0,n.kt)("li",{parentName:"ul"},"2024-05-05 ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/pack/pack/"},"Packs")," + ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/like/create/"},"Likes")," API - Control prompts from within Astria and experiment faster. "),(0,n.kt)("li",{parentName:"ul"},"2024-04-20 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/room-redesign"},"Interior design"),' - Added "Segment Room" controlnet for Backend V1, and MLSD for SDXL to be used. '),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 Added support for face-inpainting, hires-fix and tiled upscale for faceid on Backend V1. "),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 Lightning schedulers for Backend V1 to support lightning models such as ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes/1194447/prompts"},"RealVis XL Lightning")," "),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 V1: Lightning schedulers to support lightning models such as ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes/1194447/prompts"},"RealVis XL Lightning")," "),(0,n.kt)("li",{parentName:"ul"},"2024-03-27 Upgraded ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/themes"},"Themes")," to use Claude Opus and adjust for both SDXL and SD15 prompting."),(0,n.kt)("li",{parentName:"ul"},"2024-03-20 ",(0,n.kt)("a",{parentName:"li",href:"https://astria.ai/upscale"},"Free Upscale")," tool"),(0,n.kt)("li",{parentName:"ul"},"2024-03-17 Controlnet ",(0,n.kt)("inlineCode",{parentName:"li"},"composition")," support for Backend V1. Examples in the ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery?controlnet=composition"},"gallery")),(0,n.kt)("li",{parentName:"ul"},"2024-03-10 New ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/backend-v1"},"Backend version v1")," for inference - Higher quality, better samplers, faster inference, and more features."),(0,n.kt)("li",{parentName:"ul"},"2024-03-05 ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jabir-zheng/TCD"},"TCD")," sampler gets better results than LCM in 4-8 steps for SDXL models and is available on the samplers dropdown in the Advanced settings of the prompt."),(0,n.kt)("li",{parentName:"ul"},"2024-02-16 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/faceid"},"FaceID Portrait")," has better color balance and similarity and is well suited for portraits."),(0,n.kt)("li",{parentName:"ul"},"2024-02-08 Deprecate prompt aspect-ratio. Use width and height instead for better results (backward compatability available)."),(0,n.kt)("li",{parentName:"ul"},"2024-02-08 Added ",(0,n.kt)("inlineCode",{parentName:"li"},"--fix_bindi")," to remove dot on the forehead."),(0,n.kt)("li",{parentName:"ul"},"2024-01-30 Deprecated prompt expansion."),(0,n.kt)("li",{parentName:"ul"},"2024-01-25 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/upscale"},"Upscale only")," Allows you to upscale an existing image."),(0,n.kt)("li",{parentName:"ul"},"2024-01-17 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/faceid"},"FaceID")," Preserve identity without fine-tuning."),(0,n.kt)("li",{parentName:"ul"},"2024-01-03 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/tiled-upscale"},"Tiled upscale")," improved upscaling."),(0,n.kt)("li",{parentName:"ul"},"2023-12-14 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/prompt-masking"},"Prompt masking")," feature added - to support ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/product-shots"},"product shots")," and ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/masked-portraits"},"Masked Portraits")),(0,n.kt)("li",{parentName:"ul"},"2023-11-27 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/lcm"},"LCM")," (Latent Consistency Models) scheduler allows inference in 6 steps "),(0,n.kt)("li",{parentName:"ul"},"2023-10-29 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/face-swap"},"Face-Swap")," feature added - uses training images to improve inference time similarity"),(0,n.kt)("li",{parentName:"ul"},"2023-10-22 ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/themes"},"Themes")," - Have ChatGPT create 10 prompts for you from a short 2-4 word theme description.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b4b29f2e.0dd1699d.js b/assets/js/b4b29f2e.0dd1699d.js new file mode 100644 index 00000000..a6e747c1 --- /dev/null +++ b/assets/js/b4b29f2e.0dd1699d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[4653],{3905:(e,t,i)=>{i.d(t,{Zo:()=>u,kt:()=>d});var n=i(7294);function r(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function a(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function o(e){for(var t=1;t=0||(r[i]=e[i]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},m="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var i=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=p(i),c=r,d=m["".concat(l,".").concat(c)]||m[c]||g[c]||a;return i?n.createElement(d,o(o({ref:t},u),{},{components:i})):n.createElement(d,o({ref:t},u))}));function d(e,t){var i=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=i.length,o=new Array(a);o[0]=c;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:r,o[1]=s;for(var p=2;p{i.r(t),i.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>p,toc:()=>m});var n=i(7462),r=(i(7294),i(3905));const a=i.p+"assets/images/ai-photoshoot-output-79da8a3cef6fc255171431261d38c892.jpg";var o=i(118);const s={tags:["flux","training","fine-tuning","lora"]},l="Flux training",p={unversionedId:"use-cases/flux-finetuning",id:"use-cases/flux-finetuning",title:"Flux training",description:"Overview",source:"@site/docs/use-cases/05-flux-finetuning.md",sourceDirName:"use-cases",slug:"/use-cases/flux-finetuning",permalink:"/docs/use-cases/flux-finetuning",draft:!1,tags:[{label:"flux",permalink:"/docs/tags/flux"},{label:"training",permalink:"/docs/tags/training"},{label:"fine-tuning",permalink:"/docs/tags/fine-tuning"},{label:"lora",permalink:"/docs/tags/lora"}],version:"current",sidebarPosition:5,frontMatter:{tags:["flux","training","fine-tuning","lora"]},sidebar:"tutorialSidebar",previous:{title:"Fine-tuning guide",permalink:"/docs/use-cases/finetuning-guide"},next:{title:"SDXL training",permalink:"/docs/use-cases/sdxl-training"}},u={},m=[{value:"Overview",id:"overview",level:2},{value:"Training presets",id:"training-presets",level:2},{value:"Training tips",id:"training-tips",level:2},{value:"Inference tips",id:"inference-tips",level:2},{value:"API usage",id:"api-usage",level:2}],g={toc:m},c="wrapper";function d(e){let{components:t,...i}=e;return(0,r.kt)(c,(0,n.Z)({},g,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"flux-training"},"Flux training"),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"Flux")," is a family of generative image models created by ",(0,r.kt)("a",{parentName:"p",href:"https://blackforestlabs.ai/announcing-black-forest-labs/"},"Black Forest Labs")," making use of some of the latest AI advancement such as diffusion, transformer (MMDiT), Flow-matching and a large T5 text encoder. "),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"The large text encoder allows the text2img model to better align the image with the given prompt and create complex images with a single prompt. ")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"The model base resolution is 1024x1024 however unlike previous models, was trained on a variety of aspect ratios its neural-network architecture is able to better cope with different aspect ratios both in training and inference. ")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Flux1.dev requires commercial licensing which is provided to Astria customers."))),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,"Input training images",(0,r.kt)("img",{src:o.Z,alt:"generated.png"})),(0,r.kt)("div",null,"Output images",(0,r.kt)("img",{src:a,alt:"generated.png"}))),(0,r.kt)("h2",{id:"training-presets"},"Training presets"),(0,r.kt)("p",null,"Astria uses training presets to evolve its training strategies and provide better results while also providing a stable API for its customers."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Our current recommendation is to use the ",(0,r.kt)("inlineCode",{parentName:"p"},"portrait")," preset for training Flux models.")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Portrait")," - API ",(0,r.kt)("inlineCode",{parentName:"li"},"flux-lora-portrait")," - This preset is generally recommended for any kind of training including non portraits, except for ",(0,r.kt)("inlineCode",{parentName:"li"},"style")," training. With the latest ",(0,r.kt)("inlineCode",{parentName:"li"},"portrait")," we now use more precise hyper-parameters for training, improved pre-processing, better handling of blurred/low-res images, face-cropping and focusing on learning face features, less overfitting to clothing and background. You will get more diverse images with better prompt alignment while better preserving identity and face. For this preset we default to 27 steps per image for training, with minimum steps of 300. You may override the number of steps depending on price and quality requirements."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Fast")," API ",(0,r.kt)("inlineCode",{parentName:"li"},"flux-lora-fast")," - Legacy preset. Provides an alternative for the high preset, with faster training and lower cost. Similarly to the ",(0,r.kt)("inlineCode",{parentName:"li"},"portrait")," preset, it uses 27 steps per image for training, with minimum steps of 300. "),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"High")," API ",(0,r.kt)("inlineCode",{parentName:"li"},"null")," - High steps, low-learning rate. Should be used for ",(0,r.kt)("inlineCode",{parentName:"li"},"style")," training or training sets with 20+ images. With the high preset, we default to 100 steps per image for training, with minimum steps of 300. You may override the number of steps depending on price and quality requirements.")),(0,r.kt)("h2",{id:"training-tips"},"Training tips"),(0,r.kt)("p",null,"Default token for SDXL should be ",(0,r.kt)("inlineCode",{parentName:"p"},"ohwx")," and will be set automatically if none is specified"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"As with other models, a good training set is critical to getting great results. See ",(0,r.kt)("a",{parentName:"li",href:"/docs/use-cases/ai-photoshoot/"},"AI photoshoot guide")),(0,r.kt)("li",{parentName:"ol"},"Astria currently defaults to 100 steps per image for training a Flux lora for the high preset, and 27 steps per image for the fast preset. Fast preset is recommended when training on people or headshots. "),(0,r.kt)("li",{parentName:"ol"},"You may opt to override the number of training steps in order to reduce costs and processing time. Reducing the steps can produce good results when the target inference images are similar to the input training images (like headshots). Example lower steps could be 600, 1000 or 1200 (roughly 50-70 * number of training images )")),(0,r.kt)("h2",{id:"inference-tips"},"Inference tips"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Dense prompts")," - Flux works best when the prompt is descriptive and detailed, but as in most models, be concise. Overdoing the description can create conflicts in the inference."),(0,r.kt)("li",{parentName:"ol"},"*",(0,r.kt)("em",{parentName:"li"},"No negatives")," - Flux doesn\u2019t work with negatives, instead we suggest using positive prompts. For example, instead of writing \u2018cartoon\u2019 in the negative, write \u2018realistic settings and characters\u2019 in the prompt. "),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"No weighted prompts")," - using weights or parentheses () to emphasis certain parts of a prompt doesn\u2019t work with Flux. Instead, make sure the important parts at the beginning of the prompt."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Adding text in the image")," - One of the advantages of Flux is the ability to add text to an image. There are a few ways to do that, like \u201cohwx man holding a sign with the words \u2018Hello\u2019\u201c."),(0,r.kt)("li",{parentName:"ol"},"Looking for prompt ideas? Try the ",(0,r.kt)("a",{parentName:"li",href:"https://www.astria.ai/themes"},"Themes")," feature. Themes uses Claude GPT to help write prompts for the specific model. You can add a theme and write any topic on your mind, and themes will produce 10 prompts on it.")),(0,r.kt)("h2",{id:"api-usage"},"API usage"),(0,r.kt)("p",null,"See here for ",(0,r.kt)("a",{parentName:"p",href:"/docs/api/flux-api"},"API usage")))}d.isMDXComponent=!0},118:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/ai-photoshoot-input-66e224267554a6902bfaa5e6103ae27f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/b4b29f2e.0ecefbd0.js b/assets/js/b4b29f2e.0ecefbd0.js deleted file mode 100644 index cf28823e..00000000 --- a/assets/js/b4b29f2e.0ecefbd0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[4653],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(n),m=a,d=c["".concat(l,".").concat(m)]||c[m]||g[m]||i;return n?r.createElement(d,o(o({ref:t},u),{},{components:n})):r.createElement(d,o({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:a,o[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>p,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));const i=n.p+"assets/images/ai-photoshoot-output-79da8a3cef6fc255171431261d38c892.jpg";var o=n(118);const s={tags:["flux","training","fine-tuning","lora"]},l="Flux training",p={unversionedId:"use-cases/flux-finetuning",id:"use-cases/flux-finetuning",title:"Flux training",description:"Overview",source:"@site/docs/use-cases/05-flux-finetuning.md",sourceDirName:"use-cases",slug:"/use-cases/flux-finetuning",permalink:"/docs/use-cases/flux-finetuning",draft:!1,tags:[{label:"flux",permalink:"/docs/tags/flux"},{label:"training",permalink:"/docs/tags/training"},{label:"fine-tuning",permalink:"/docs/tags/fine-tuning"},{label:"lora",permalink:"/docs/tags/lora"}],version:"current",sidebarPosition:5,frontMatter:{tags:["flux","training","fine-tuning","lora"]},sidebar:"tutorialSidebar",previous:{title:"Fine-tuning guide",permalink:"/docs/use-cases/finetuning-guide"},next:{title:"SDXL training",permalink:"/docs/use-cases/sdxl-training"}},u={},c=[{value:"Overview",id:"overview",level:2},{value:"Training tips",id:"training-tips",level:2},{value:"Inference tips",id:"inference-tips",level:2},{value:"API usage",id:"api-usage",level:2}],g={toc:c},m="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(m,(0,r.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"flux-training"},"Flux training"),(0,a.kt)("h2",{id:"overview"},"Overview"),(0,a.kt)("p",null,(0,a.kt)("em",{parentName:"p"},"Flux")," is a family of generative image models created by ",(0,a.kt)("a",{parentName:"p",href:"https://blackforestlabs.ai/announcing-black-forest-labs/"},"Black Forest Labs")," making use of some of the latest AI advancement such as diffusion, transformer (MMDiT), Flow-matching and a large T5 text encoder. "),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"The large text encoder allows the text2img model to better align the image with the given prompt and create complex images with a single prompt. ")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"The model base resolution is 1024x1024 however unlike previous models, was trained on a variety of aspect ratios its neural-network architecture is able to better cope with different aspect ratios both in training and inference. ")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Flux1.dev requires commercial licensing which is provided to Astria customers."))),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,a.kt)("div",null,"Input training images",(0,a.kt)("img",{src:o.Z,alt:"generated.png"})),(0,a.kt)("div",null,"Output images",(0,a.kt)("img",{src:i,alt:"generated.png"}))),(0,a.kt)("h2",{id:"training-tips"},"Training tips"),(0,a.kt)("p",null,"Default token for SDXL should be ",(0,a.kt)("inlineCode",{parentName:"p"},"ohwx")," and will be set automatically if none is specified"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"As with other models, a good training set is critical to getting great results. See ",(0,a.kt)("a",{parentName:"li",href:"/docs/use-cases/ai-photoshoot/"},"AI photoshoot guide")),(0,a.kt)("li",{parentName:"ol"},"Astria currently defaults to 100 steps per image for training a Flux lora for the high preset, and 27 steps per image for the fast preset. Fast preset is recommended when training on people or headshots. "),(0,a.kt)("li",{parentName:"ol"},"You may opt to override the number of training steps in order to reduce costs and processing time. Reducing the steps can produce good results when the target inference images are similar to the input training images (like headshots). Example lower steps could be 600, 1000 or 1200 (roughly 50-70 * number of training images )")),(0,a.kt)("h2",{id:"inference-tips"},"Inference tips"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"Dense prompts")," - Flux works best when the prompt is descriptive and detailed, but as in most models, be concise. Overdoing the description can create conflicts in the inference."),(0,a.kt)("li",{parentName:"ol"},"*",(0,a.kt)("em",{parentName:"li"},"No negatives")," - Flux doesn\u2019t work with negatives, instead we suggest using positive prompts. For example, instead of writing \u2018cartoon\u2019 in the negative, write \u2018realistic settings and characters\u2019 in the prompt. "),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"No weighted prompts")," - using weights or parentheses () to emphasis certain parts of a prompt doesn\u2019t work with Flux. Instead, make sure the important parts at the beginning of the prompt."),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"Adding text in the image")," - One of the advantages of Flux is the ability to add text to an image. There are a few ways to do that, like \u201cohwx man holding a sign with the words \u2018Hello\u2019\u201c."),(0,a.kt)("li",{parentName:"ol"},"Looking for prompt ideas? Try the ",(0,a.kt)("a",{parentName:"li",href:"https://www.astria.ai/themes"},"Themes")," feature. Themes uses Claude GPT to help write prompts for the specific model. You can add a theme and write any topic on your mind, and themes will produce 10 prompts on it.")),(0,a.kt)("h2",{id:"api-usage"},"API usage"),(0,a.kt)("p",null,"See here for ",(0,a.kt)("a",{parentName:"p",href:"/docs/api/flux-api"},"API usage")))}d.isMDXComponent=!0},118:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-photoshoot-input-66e224267554a6902bfaa5e6103ae27f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/ddb99303.0263c37f.js b/assets/js/ddb99303.0263c37f.js new file mode 100644 index 00000000..818b0522 --- /dev/null +++ b/assets/js/ddb99303.0263c37f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[297],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),u=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},p=function(e){var t=u(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=u(n),m=r,h=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return n?a.createElement(h,s(s({ref:t},p),{},{components:n})):a.createElement(h,s({ref:t},p))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,s=new Array(o);s[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:r,s[1]=i;for(var u=2;u{n.d(t,{Z:()=>s});var a=n(7294),r=n(6010);const o={tabItem:"tabItem_Ymn6"};function s(e){let{children:t,hidden:n,className:s}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,s),hidden:n},t)}},4866:(e,t,n)=>{n.d(t,{Z:()=>y});var a=n(7462),r=n(7294),o=n(6010),s=n(2466),i=n(6550),l=n(1980),u=n(7392),p=n(12);function c(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function d(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??c(n);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=d(e),[s,i]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[l,u]=h({queryString:n,groupId:a}),[c,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,p.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),g=(()=>{const e=l??c;return m({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{g&&i(g)}),[g]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),f(e)}),[u,f,o]),tabValues:o}}var g=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function k(e){let{className:t,block:n,selectedValue:i,selectValue:l,tabValues:u}=e;const p=[],{blockElementScrollPositionUntilNextRender:c}=(0,s.o5)(),d=e=>{const t=e.currentTarget,n=p.indexOf(t),a=u[n].value;a!==i&&(c(t),l(a))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=p.indexOf(e.currentTarget)+1;t=p[n]??p[0];break}case"ArrowLeft":{const n=p.indexOf(e.currentTarget)-1;t=p[n]??p[p.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},u.map((e=>{let{value:t,label:n,attributes:s}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>p.push(e),onKeyDown:m,onClick:d},s,{className:(0,o.Z)("tabs__item",b.tabItem,s?.className,{"tabs__item--active":i===t})}),n??t)})))}function _(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function w(e){const t=f(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",b.tabList)},r.createElement(k,(0,a.Z)({},e,t)),r.createElement(_,(0,a.Z)({},e,t)))}function y(e){const t=(0,g.Z)();return r.createElement(w,(0,a.Z)({key:String(t)},e))}},7580:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>u,toc:()=>c});var a=n(7462),r=(n(7294),n(3905)),o=n(4866),s=n(5162);const i={hide_table_of_contents:!0},l="FaceID for Flux",u={unversionedId:"features/faceid-flux",id:"features/faceid-flux",title:"FaceID for Flux",description:"BETA",source:"@site/docs/features/faceid-flux.md",sourceDirName:"features",slug:"/features/faceid-flux",permalink:"/docs/features/faceid-flux",draft:!1,tags:[],version:"current",frontMatter:{hide_table_of_contents:!0},sidebar:"tutorialSidebar",previous:{title:"Face Swap",permalink:"/docs/features/face-swap"},next:{title:"FaceID",permalink:"/docs/features/faceid"}},p={},c=[{value:"Overview",id:"overview",level:2},{value:"Usage",id:"usage",level:2},{value:"Notes",id:"notes",level:2},{value:"API",id:"api",level:2},{value:"Step 1: Create fine-tune",id:"step-1-create-fine-tune",level:3},{value:"POST /tunes",id:"post-tunes",level:4},{value:"Response",id:"response",level:4},{value:"Step 2: Create prompts",id:"step-2-create-prompts",level:3},{value:"POST /tunes/:id/prompts",id:"post-tunesidprompts",level:4}],d={toc:c},m="wrapper";function h(e){let{components:t,...i}=e;return(0,r.kt)(m,(0,a.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"faceid-for-flux"},"FaceID for Flux"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"BETA")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("figcaption",null,(0,r.kt)("a",{href:"https://www.astria.ai/gallery?text=faceid&branch=flux1"},"FaceID")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:n(2558).Z,width:"896",height:"1152"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:n(8912).Z,width:"896",height:"1152"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:n(5533).Z,width:"896",height:"1152"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:n(2889).Z,width:"896",height:"1152"})))))),(0,r.kt)("div",{className:"api-method"},(0,r.kt)("div",null,(0,r.kt)("p",null,"See example prompts in the ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=faceid&branch=flux1"},"gallery")),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"FaceID is a model adapter allowing to generate image while preserving a person identity without fine-tuning. Input images can be as few as just one image. The adapter was trained on human faces and cannot be used for pets or other subjects."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Generate a placeholder fine-tune dataset which will contain the person images. The fine-tune will not go through training and will be immediately ready.\n",(0,r.kt)("img",{alt:"faceid-new-fine-tune.png",src:n(1158).Z,width:"740",height:"544"})),(0,r.kt)("li",{parentName:"ol"},"Generate the image using the FaceID adapter using a syntax similar to LoRA - ",(0,r.kt)("inlineCode",{parentName:"li"},"")," ")),(0,r.kt)("h2",{id:"notes"},"Notes"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"For realistic images, please consider enabling face-correct to improve facial features.")),(0,r.kt)("h2",{id:"api"},"API"),(0,r.kt)("p",null,"FaceID is an adapter loaded on top of a base model. As such the inference needs to take place on a model from the gallery.\nThe fine-tune's ",(0,r.kt)("inlineCode",{parentName:"p"},"trained_at")," is set upon creation and there is no training time. As such no callback is needed.")),(0,r.kt)("div",null,(0,r.kt)("h3",{id:"step-1-create-fine-tune"},"Step 1: Create fine-tune"),(0,r.kt)("h4",{id:"post-tunes"},"POST /tunes"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(s.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# With images as multipart/form-data\n# Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n# https://www.astria.ai/gallery/tunes/690204/prompts\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[model_type]="faceid" \\\n -F tune[callback]="https://optional-callback-url.com/webhooks/astria?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F "tune[images][]=@1.jpg" \\\n -F "tune[images][]=@2.jpg" \\\n -F "tune[images][]=@3.jpg" \\\n -F "tune[images][]=@4.jpg"\n\n# With image_urls as form-data\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[model_type]="faceid" \\\n -F tune[callback]="https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg"\n \n# As JSON\ncat > data.json <<- EOM\n{\n "tune": {\n "title": "John Doe - UUID - 1234-6789-1234-56789",\n "name": "man",\n "model_type": "faceid",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1",\n "image_urls": [\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg"\n ]\n }\n}\nEOM\n\ncurl -X POST -H"Content-Type: application/json" -H "Authorization: Bearer $API_KEY" --data @data.json https://api.astria.ai/tunes \n'))),(0,r.kt)(s.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"// NodeJS 16\n// With image_urls and fetch()\n// For NodeJS 18 - do NOT import the below as it is built-in\nimport fetch from \"node-fetch\";\n\nconst API_KEY = 'sd_XXXXXX';\nconst DOMAIN = 'https://api.astria.ai';\n\nfunction createTune() {\n let options = {\n method: 'POST',\n headers: { 'Authorization': 'Bearer ' + API_KEY, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tune: {\n \"title\": 'John Doe - UUID - 1234-6789-1234-56789',\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n \"base_tune_id\": 690204,\n \"name\": \"man\",\n \"model_type\": \"faceid\",\n \"image_urls\": [\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\"\n ]\n }\n })\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r))\n}\n\ncreateTune()\n\n\n/// With form-data, fetch()\n// For NodeJS 18 - do NOT import the two below as they are built-in\nimport fetch from \"node-fetch\";\nimport FormData from 'form-data';\nimport fs from 'fs';\n\nconst API_KEY = 'sd_XXXX';\nconst DOMAIN = 'https://api.astria.ai';\nfunction createTune() {\n let formData = new FormData();\n formData.append('tune[title]', 'John Doe - UUID - 1234-6789-1234-56789');\n formData.append('tune[model_type]', 'faceid');\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n formData.append('tune[base_tune_id]', 690204);\n formData.append('tune[name]', 'man');\n // Load all JPGs from ./samples directory and append to FormData\n let files = fs.readdirSync('./samples');\n files.forEach(file => {\n if(file.endsWith('.jpg')) {\n formData.append('tune[images][]', fs.createReadStream(`./samples/${file}`), file);\n }\n });\n formData.append('tune[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1');\n\n let options = {\n method: 'POST',\n headers: {\n 'Authorization': 'Bearer ' + API_KEY\n },\n body: formData\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r));\n}\n\ncreateTune();\n\n"))),(0,r.kt)(s.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import requests\nheaders = {\'Authorization\': f\'Bearer {API_KEY}\'}\n\ndef load_image(file_path):\n with open(file_path, "rb") as f:\n return f.read()\n\n# Assuming `tune.images` are already defined in your context\n# If not, you should define them before the below code\n\nimage_data = load_image("assets/image.jpeg")\n\ndata = {\n "tune[title]": "John Doe - UUID - 1234-6789-1234-56789",\n "tune[name]": "man",\n "tune[base_tune_id]": 690204,\n "tune[model_type]": "faceid",\n "tune[token]": "ohwx"\n}\nfiles = []\n\nfor image in tune.images:\n image_data = load_image(image) # Assuming image is a file path\n files.append(("tune[images][]", image_data))\n\nAPI_URL = \'https://api.astria.ai/tunes\'\nresponse = requests.post(API_URL, data=data, files=files, headers=headers)\nresponse.raise_for_status()\n\n')))),(0,r.kt)("h4",{id:"response"},"Response"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'\n[\n {\n "id": 1,\n "title": "John Doe",\n "name": "woman",\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": false,\n "ckpt_url": null,\n "ckpt_urls": [],\n "eta": "2023-10-02T14:32:40.363Z",\n "trained_at": "2023-10-02T14:32:40.363Z",\n "started_training_at": "2023-10-02T14:32:05.229Z",\n "expires_at": "2023-11-01T14:32:40.363Z",\n "created_at": "2023-10-02T14:32:05.067Z",\n "branch": "sd15",\n "model_type": "faceid",\n "updated_at": "2023-10-02T14:32:40.363Z",\n "url": "https://www.astria.ai/tunes/788416.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n },\n {\n "id": 775459,\n "title": "Marry Jane",\n "name": null,\n "is_api": false,\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": null,\n "ckpt_url": "https://sdbooth2-production.s3.amazonaws.com/mock",\n "ckpt_urls": [\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ],\n "eta": "2023-09-23T16:07:49.137Z",\n "trained_at": "2023-09-23T16:07:49.137Z",\n "started_training_at": "2023-09-23T16:07:37.334Z",\n "expires_at": "2023-10-23T16:07:49.137Z",\n "created_at": "2023-09-23T16:07:36.606Z",\n "branch": "sd15",\n "model_type": "faceid",\n "updated_at": "2023-09-23T16:07:49.138Z",\n "url": "https://www.astria.ai/tunes/775459.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n }\n ]\n')),(0,r.kt)("h3",{id:"step-2-create-prompts"},"Step 2: Create prompts"),(0,r.kt)("h4",{id:"post-tunesidprompts"},"POST /tunes/:id/prompts"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(s.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# Note the hard-coded 150494 which is the tune_id of Realistic Vision v5.1 from the gallery\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes/690204/prompts \\\n -F prompt[text]=" woman trekking in the alps" \\\n -F prompt[negative_prompt]="" \\\n -F prompt[super_resolution]=true \\\n -F prompt[face_correct]=true \\\n -F prompt[face_swap]=true \\\n -F prompt[callback]="https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1" \n'))),(0,r.kt)(s.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"const fetch = require('node-fetch');\nconst FormData = require('form-data');\n\n// Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\nconst API_URL = 'https://api.astria.ai/tunes/690204/prompts';\nconst API_KEY = 'YOUR_API_KEY'; // Replace with your actual API key\nconst headers = { Authorization: `Bearer ${API_KEY}` }\n\nconst form = new FormData();\nform.append('prompt[text]', ' woman trekking in the alps');\nform.append('prompt[negative_prompt]', '');\nform.append('prompt[super_resolution]', true);\nform.append('prompt[face_correct]', true);\nform.append('prompt[face_swap]', true);\nform.append('prompt[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1');\n\nfetch(API_URL, {\n method: 'POST',\n headers: headers,\n body: form\n}).then(response => response.json())\n\n\n"))),(0,r.kt)(s.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import requests\n\n# Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\nAPI_URL = 'https://api.astria.ai/tunes/690204/prompts'\nAPI_KEY = 'YOUR_API_KEY' # Replace with your actual API key\n\nheaders = {\n 'Authorization': f'Bearer {API_KEY}'\n}\n\ndata = {\n 'prompt[text]': ' woman trekking in the alps',\n 'prompt[negative_prompt]': '',\n 'prompt[super_resolution]': True,\n 'prompt[face_correct]': True,\n 'prompt[face_swap]': True,\n 'prompt[callback]': 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1'\n}\nfiles = []\nfiles.append((f\"tune[prompts_attributes][{i}][input_image]\", load_image(prompt['input_image'])))\n\nresponse = requests.post(API_URL, headers=headers, data=data)\n")))))))}h.isMDXComponent=!0},2558:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/faceid-flux-1-f3f12906fda7b314452f03151c5345ae.jpg"},8912:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/faceid-flux-2-b65bcd975d60e06c8b4b03ce2ca5e468.jpg"},5533:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/faceid-flux-3-ae5a9d8dfd3a7497e062184c3c43317d.jpg"},2889:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/faceid-flux-4-980af874c9608220fdf738b6468a07e9.jpg"},1158:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/faceid-new-fine-tune-cc128107ac919832509e97a8ca45918b.png"}}]); \ No newline at end of file diff --git a/assets/js/eeb7a3e9.a0caa727.js b/assets/js/eeb7a3e9.4d9f9475.js similarity index 70% rename from assets/js/eeb7a3e9.a0caa727.js rename to assets/js/eeb7a3e9.4d9f9475.js index f848851e..84203b75 100644 --- a/assets/js/eeb7a3e9.a0caa727.js +++ b/assets/js/eeb7a3e9.4d9f9475.js @@ -1 +1 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[6468],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},l=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,c=e.originalType,s=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),u=p(r),d=a,m=u["".concat(s,".").concat(d)]||u[d]||f[d]||c;return r?n.createElement(m,o(o({ref:t},l),{},{components:r})):n.createElement(m,o({ref:t},l))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var c=r.length,o=new Array(c);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:a,o[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>f,frontMatter:()=>c,metadata:()=>i,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const c={},o="Face Swap",i={unversionedId:"features/face-swap",id:"features/face-swap",title:"Face Swap",description:"Without face-swap",source:"@site/docs/features/face-swap.md",sourceDirName:"features",slug:"/features/face-swap",permalink:"/docs/features/face-swap",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Face Inpainting",permalink:"/docs/features/face-inpainting"},next:{title:"FaceID",permalink:"/docs/features/faceid"}},s={},p=[],l={toc:p},u="wrapper";function f(e){let{components:t,...c}=e;return(0,a.kt)(u,(0,n.Z)({},l,c,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"face-swap"},"Face Swap"),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Without face-swap"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"source.png",src:r(5369).Z,width:"512",height:"640"}))),(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"With face-swap"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"generated.png",src:r(117).Z,width:"512",height:"640"})))),(0,a.kt)("p",null,"Face-swap uses training images to further enhance resemblance to the subject. It is recommended to use face-swap in conjunction with face-inpainting and super-resolution."))}f.isMDXComponent=!0},117:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/face-swap-after-d63dc108cb39d66fd732681de221198d.png"},5369:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/face-swap-before-bfce7608266c9946d32d7d3306a3b1b4.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[6468],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},l=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,c=e.originalType,s=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),u=p(r),d=a,m=u["".concat(s,".").concat(d)]||u[d]||f[d]||c;return r?n.createElement(m,o(o({ref:t},l),{},{components:r})):n.createElement(m,o({ref:t},l))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var c=r.length,o=new Array(c);o[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:a,o[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>f,frontMatter:()=>c,metadata:()=>i,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const c={},o="Face Swap",i={unversionedId:"features/face-swap",id:"features/face-swap",title:"Face Swap",description:"Without face-swap",source:"@site/docs/features/face-swap.md",sourceDirName:"features",slug:"/features/face-swap",permalink:"/docs/features/face-swap",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Face Inpainting",permalink:"/docs/features/face-inpainting"},next:{title:"FaceID for Flux",permalink:"/docs/features/faceid-flux"}},s={},p=[],l={toc:p},u="wrapper";function f(e){let{components:t,...c}=e;return(0,a.kt)(u,(0,n.Z)({},l,c,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"face-swap"},"Face Swap"),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Without face-swap"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"source.png",src:r(5369).Z,width:"512",height:"640"}))),(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"With face-swap"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"generated.png",src:r(117).Z,width:"512",height:"640"})))),(0,a.kt)("p",null,"Face-swap uses training images to further enhance resemblance to the subject. It is recommended to use face-swap in conjunction with face-inpainting and super-resolution."))}f.isMDXComponent=!0},117:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/face-swap-after-d63dc108cb39d66fd732681de221198d.png"},5369:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/face-swap-before-bfce7608266c9946d32d7d3306a3b1b4.png"}}]); \ No newline at end of file diff --git a/assets/js/main.603494c6.js b/assets/js/main.603494c6.js deleted file mode 100644 index 58381d5d..00000000 --- a/assets/js/main.603494c6.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.603494c6.js.LICENSE.txt */ -(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"0036dbab":[()=>n.e(6688).then(n.bind(n,3213)),"@site/docs/features/styles.md",3213],"05fe89fc":[()=>n.e(3198).then(n.bind(n,4943)),"@site/docs/features/lcm.md",4943],"0770fcbe":[()=>Promise.all([n.e(532),n.e(293)]).then(n.bind(n,3973)),"@site/docs/api/3-like/0-create.md",3973],"084d163f":[()=>n.e(7721).then(n.bind(n,9873)),"@site/docs/use-cases/0-ai-photoshoot.md",9873],"103e863f":[()=>Promise.all([n.e(532),n.e(8830)]).then(n.bind(n,243)),"@site/docs/api/4-images/1-inspect.md",243],14200528:[()=>n.e(7018).then(n.t.bind(n,2063,19)),"~docs/default/tag-docs-tags-creative-upscaler-b29.json",2063],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,4228)),"@theme/DocCategoryGeneratedIndexPage",4228],17896441:[()=>Promise.all([n.e(532),n.e(9455),n.e(7918)]).then(n.bind(n,7372)),"@theme/DocItem",7372],"17ccf213":[()=>n.e(772).then(n.t.bind(n,8707,19)),"~docs/default/tag-docs-tags-clothing-855.json",8707],"18678e9e":[()=>n.e(6667).then(n.bind(n,9313)),"@site/docs/use-cases/room-redesign.md",9313],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1dc92360":[()=>n.e(3469).then(n.t.bind(n,8059,19)),"~docs/default/tag-docs-tags-clarity-085.json",8059],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.bind(n,8391)),"@site/src/pages/index.tsx",8391],"1f391b9e":[()=>Promise.all([n.e(532),n.e(9455),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"203b99fb":[()=>n.e(180).then(n.t.bind(n,2310,19)),"~docs/default/tag-docs-tags-training-690.json",2310],"2052cc0c":[()=>n.e(1073).then(n.t.bind(n,9312,19)),"~docs/default/tag-docs-tags-virtual-influencers-a63.json",9312],"20b43957":[()=>Promise.all([n.e(532),n.e(4694)]).then(n.bind(n,6757)),"@site/docs/api/1-prompt/5-delete.md",6757],"228c0e9a":[()=>n.e(2956).then(n.bind(n,7980)),"@site/docs/api/2-pack/0-pack.md",7980],"233522bf":[()=>n.e(1777).then(n.t.bind(n,7709,19)),"~docs/default/tag-docs-tags-lowpoly-a3d.json",7709],"2880056d":[()=>Promise.all([n.e(532),n.e(4071)]).then(n.bind(n,3432)),"@site/docs/api/3-like/1-delete.md",3432],"2ad457a3":[()=>n.e(4353).then(n.t.bind(n,2547,19)),"~docs/default/tag-docs-tags-ecommerce-b43.json",2547],"2c5729fd":[()=>n.e(4046).then(n.t.bind(n,7952,19)),"~docs/default/tag-docs-tags-neonpunk-400.json",7952],"318e8f3b":[()=>n.e(2912).then(n.t.bind(n,3769,19)),"/Users/burg/git/astria-docs2/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"351982cc":[()=>n.e(2923).then(n.t.bind(n,6834,19)),"~docs/default/tag-docs-tags-ai-headshots-a59.json",6834],"35a689f5":[()=>n.e(738).then(n.t.bind(n,5861,19)),"~docs/default/tag-docs-tags-product-photo-ac7.json",5861],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,9861)),"@theme/DocTagsListPage",9861],"38b454c5":[()=>n.e(9211).then(n.t.bind(n,4456,19)),"~docs/default/tag-docs-tags-lora-9aa.json",4456],"38faaa9d":[()=>n.e(3443).then(n.t.bind(n,9302,19)),"~docs/default/tag-docs-tags-style-7b5.json",9302],"393be207":[()=>n.e(7414).then(n.bind(n,3123)),"@site/src/pages/markdown-page.md",3123],"397ab8ba":[()=>n.e(1929).then(n.bind(n,8723)),"@site/docs/use-cases/70-faq.md",8723],"3a5c991a":[()=>n.e(3186).then(n.t.bind(n,6594,19)),"~docs/default/tag-docs-tags-prompt-styles-1a8.json",6594],"3b57aab9":[()=>n.e(9410).then(n.bind(n,6286)),"@site/docs/api/0-tune/0-tune.md",6286],"3ee62890":[()=>n.e(2247).then(n.bind(n,1034)),"@site/docs/use-cases/05-finetuning-guide.md",1034],"41484b8f":[()=>n.e(2532).then(n.bind(n,1954)),"@site/docs/use-cases/60-video-generation.md",1954],"4700e527":[()=>n.e(317).then(n.t.bind(n,8141,19)),"~docs/default/tag-docs-tags-vton-057.json",8141],"4f2e3443":[()=>n.e(6896).then(n.t.bind(n,8622,19)),"~docs/default/tag-docs-tags-virtual-try-on-80a.json",8622],"501cbb42":[()=>n.e(4930).then(n.t.bind(n,9492,19)),"~docs/default/tag-docs-tags-shopify-d9d.json",9492],"55960ee5":[()=>n.e(4121).then(n.t.bind(n,8070,19)),"~docs/default/tags-list-current-prop-15a.json",8070],"55d868c3":[()=>n.e(4786).then(n.t.bind(n,7214,19)),"~docs/default/tag-docs-tags-image-enhancement-cf2.json",7214],"57d2d9a8":[()=>n.e(3911).then(n.bind(n,1313)),"@site/docs/features/prompt-masking.md",1313],"5bc49099":[()=>Promise.all([n.e(532),n.e(9735)]).then(n.bind(n,2650)),"@site/docs/api/5-themes/1-create.md",2650],"5e544de0":[()=>n.e(1960).then(n.t.bind(n,821,19)),"~docs/default/tag-docs-tags-templates-218.json",821],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"61744cd4":[()=>n.e(492).then(n.bind(n,9511)),"@site/docs/features/lora.md",9511],"6540dd0c":[()=>Promise.all([n.e(532),n.e(9075)]).then(n.bind(n,4336)),"@site/docs/features/faceid.md",4336],"67a124c0":[()=>n.e(9743).then(n.t.bind(n,9040,19)),"~docs/default/tag-docs-tags-lineart-83f.json",9040],"6e98b2b4":[()=>n.e(3731).then(n.t.bind(n,5002,19)),"~docs/default/tag-docs-tags-fine-tuning-9b3.json",5002],"6f719c7f":[()=>n.e(9558).then(n.t.bind(n,4531,19)),"~docs/default/category-docs-tutorialsidebar-category-use-cases-1f0.json",4531],"6ff77412":[()=>Promise.all([n.e(532),n.e(674)]).then(n.bind(n,8987)),"@site/docs/api/0-tune/1-create.md",8987],"72ea4575":[()=>n.e(2499).then(n.t.bind(n,6292,19)),"~docs/default/tag-docs-tags-background-replacement-b86.json",6292],"73eac7f9":[()=>n.e(6158).then(n.t.bind(n,9076,19)),"~docs/default/tag-docs-tags-headshots-16b.json",9076],"76161ddb":[()=>n.e(1433).then(n.bind(n,7254)),"@site/docs/features/tiled-upscale.md",7254],"7b50a5fa":[()=>n.e(2831).then(n.t.bind(n,4318,19)),"~docs/default/tag-docs-tags-photographic-d5e.json",4318],"7c7bf7c7":[()=>n.e(2276).then(n.t.bind(n,3946,19)),"~docs/default/tag-docs-tags-avatars-1a3.json",3946],"7e146cad":[()=>n.e(6471).then(n.t.bind(n,765,19)),"~docs/default/category-docs-tutorialsidebar-category-likes-fdf.json",765],"7f726b58":[()=>n.e(2656).then(n.t.bind(n,8578,19)),"~docs/default/category-docs-tutorialsidebar-category-prompts-e72.json",8578],"82dff655":[()=>Promise.all([n.e(532),n.e(2255)]).then(n.bind(n,3788)),"@site/docs/api/0-tune/5-delete.md",3788],"85356aeb":[()=>n.e(111).then(n.t.bind(n,3942,19)),"~docs/default/tag-docs-tags-super-resolution-7b1.json",3942],"85848f58":[()=>n.e(53).then(n.bind(n,7877)),"@site/docs/api/1-prompt/0-prompt.md",7877],"85dffb37":[()=>n.e(6577).then(n.t.bind(n,8816,19)),"~docs/default/tag-docs-tags-noise-offset-e8c.json",8816],"874195bf":[()=>n.e(3358).then(n.t.bind(n,5775,19)),"~docs/default/category-docs-tutorialsidebar-category-pack-tunes-b69.json",5775],"87a50603":[()=>n.e(7723).then(n.t.bind(n,9602,19)),"~docs/default/tag-docs-tags-api-a37.json",9602],"91b5ff9c":[()=>n.e(8824).then(n.t.bind(n,4284,19)),"~docs/default/tag-docs-tags-oil-painting-a0e.json",4284],"935f2afb":[()=>n.e(2197).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"944a3ab9":[()=>n.e(4820).then(n.t.bind(n,1468,19)),"~docs/default/tag-docs-tags-ai-avatars-cd7.json",1468],"96713d40":[()=>Promise.all([n.e(532),n.e(4762)]).then(n.bind(n,6856)),"@site/docs/api/1-prompt/1-create.md",6856],"96b27e6a":[()=>Promise.all([n.e(532),n.e(9418)]).then(n.bind(n,4252)),"@site/docs/api/0-tune/2-retrieve.md",4252],"97179b4d":[()=>Promise.all([n.e(532),n.e(5139)]).then(n.bind(n,3714)),"@site/docs/api/05-flux-api.md",3714],"988781e2":[()=>n.e(9493).then(n.t.bind(n,6800,19)),"~docs/default/category-docs-tutorialsidebar-category-api-2c3.json",6800],"989eb559":[()=>Promise.all([n.e(532),n.e(6868)]).then(n.bind(n,2334)),"@site/docs/api/1-prompt/2-retrieve.md",2334],"9955188a":[()=>n.e(3543).then(n.t.bind(n,7716,19)),"~docs/default/category-docs-tutorialsidebar-category-images-45d.json",7716],"9a7541ec":[()=>n.e(254).then(n.t.bind(n,4418,19)),"~docs/default/tag-docs-tags-e-commerce-36b.json",4418],"9c06740a":[()=>n.e(9473).then(n.t.bind(n,1009,19)),"~docs/default/tag-docs-tags-garment-f55.json",1009],"9cceef76":[()=>n.e(6567).then(n.t.bind(n,7933,19)),"~docs/default/category-docs-tutorialsidebar-category-tunes-1e7.json",7933],"9ec5805d":[()=>Promise.all([n.e(532),n.e(6194)]).then(n.bind(n,5602)),"@site/docs/api/2-pack/1-list.md",5602],"9fda4f55":[()=>n.e(4868).then(n.bind(n,2713)),"@site/docs/0-changes.md",2713],a06d9ba5:[()=>n.e(4158).then(n.t.bind(n,7590,19)),"~docs/default/tag-docs-tags-products-166.json",7590],a175974d:[()=>n.e(4274).then(n.bind(n,6810)),"@site/docs/use-cases/35-virtual-try-on.md",6810],b2a96a7b:[()=>n.e(2747).then(n.t.bind(n,52,19)),"~docs/default/tag-docs-tags-social-profiles-450.json",52],b4b29f2e:[()=>n.e(4653).then(n.bind(n,7687)),"@site/docs/use-cases/05-flux-finetuning.md",7687],b5bb8785:[()=>n.e(3597).then(n.t.bind(n,3321,19)),"~docs/default/category-docs-tutorialsidebar-category-themes-bef.json",3321],b83527cb:[()=>n.e(2062).then(n.bind(n,4319)),"@site/docs/use-cases/10-sdxl-training.md",4319],b8f8227f:[()=>n.e(9706).then(n.t.bind(n,327,19)),"~docs/default/tag-docs-tags-animated-c7b.json",327],bb6383b9:[()=>n.e(6095).then(n.t.bind(n,5136,19)),"~docs/default/tag-docs-tags-comic-book-40a.json",5136],be959570:[()=>n.e(6547).then(n.t.bind(n,5583,19)),"~docs/default/tag-docs-tags-enhance-40f.json",5583],c2261996:[()=>n.e(1462).then(n.t.bind(n,1293,19)),"~docs/default/tag-docs-tags-backend-v-0-285.json",1293],c231ecf4:[()=>n.e(1599).then(n.bind(n,7020)),"@site/docs/use-cases/50-toonify.md",7020],c2e19196:[()=>n.e(5653).then(n.t.bind(n,2654,19)),"~docs/default/tag-docs-tags-flux-513.json",2654],c438833c:[()=>n.e(7076).then(n.t.bind(n,7018,19)),"~docs/default/tag-docs-tags-ai-photoshoot-31d.json",7018],c6576fc4:[()=>n.e(6599).then(n.t.bind(n,4750,19)),"~docs/default/tag-docs-tags-magnific-6dc.json",4750],c97295c9:[()=>n.e(6708).then(n.t.bind(n,9866,19)),"~docs/default/tag-docs-tags-fantasy-art-cf7.json",9866],cee787f4:[()=>n.e(9586).then(n.t.bind(n,3773,19)),"~docs/default/tag-docs-tags-fashion-606.json",3773],cfcbef4e:[()=>Promise.all([n.e(532),n.e(8500)]).then(n.bind(n,2948)),"@site/docs/api/2-pack/2-tunes/0-create.md",2948],d0ae32ce:[()=>n.e(8999).then(n.t.bind(n,8264,19)),"~docs/default/category-docs-tutorialsidebar-category-features-af9.json",8264],d1f3e2f8:[()=>n.e(1293).then(n.bind(n,6864)),"@site/docs/features/backend-v1.md",6864],d2543681:[()=>n.e(6346).then(n.t.bind(n,5209,19)),"~docs/default/tag-docs-tags-line-art-750.json",5209],d3225ce8:[()=>n.e(1124).then(n.bind(n,5050)),"@site/docs/use-cases/masked-portraits.md",5050],d351f0f4:[()=>n.e(9748).then(n.t.bind(n,5114,19)),"~docs/default/tag-docs-tags-upscaling-63d.json",5114],d361fb24:[()=>n.e(9694).then(n.t.bind(n,1700,19)),"~docs/default/tag-docs-tags-lo-ra-433.json",1700],d46b3c8b:[()=>n.e(1807).then(n.t.bind(n,4813,19)),"~docs/default/category-docs-tutorialsidebar-category-packs-15d.json",4813],d537b4da:[()=>n.e(2366).then(n.t.bind(n,5745,19)),"/Users/burg/git/astria-docs2/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],dae0e962:[()=>n.e(1213).then(n.bind(n,3150)),"@site/docs/use-cases/upscale.md",3150],dc0d6ca4:[()=>Promise.all([n.e(532),n.e(9611)]).then(n.bind(n,9919)),"@site/docs/api/1-prompt/4-list.md",9919],df203c0f:[()=>n.e(9924).then(n.bind(n,7068)),"@theme/DocTagDocListPage",7068],e0403869:[()=>n.e(6861).then(n.t.bind(n,2391,19)),"~docs/default/tag-docs-tags-photo-optimization-100.json",2391],e2fc4889:[()=>n.e(6995).then(n.bind(n,9619)),"@site/docs/features/multiperson.md",9619],e4fcfa79:[()=>n.e(8772).then(n.bind(n,2510)),"@site/docs/use-cases/40-product-shots.md",2510],e8766d5f:[()=>n.e(6450).then(n.bind(n,859)),"@site/docs/use-cases/30-inpainting-and-masking.md",859],eb3f1c80:[()=>n.e(7757).then(n.bind(n,5764)),"@site/docs/features/face-inpainting.md",5764],eeb7a3e9:[()=>n.e(6468).then(n.bind(n,3864)),"@site/docs/features/face-swap.md",3864],f2bb83c3:[()=>n.e(1716).then(n.bind(n,7428)),"@site/docs/use-cases/20-controlnet.md",7428],f994835d:[()=>n.e(6614).then(n.bind(n,480)),"@site/docs/api/0-overview.md",480],fac6c085:[()=>Promise.all([n.e(532),n.e(8154)]).then(n.bind(n,9894)),"@site/docs/api/0-tune/4-list.md",9894],fb723fd6:[()=>Promise.all([n.e(532),n.e(8946)]).then(n.bind(n,6440)),"@site/docs/api/20-sdxl-api.md",6440]};function c(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:c,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,u.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:c,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/docs/tags/",component:f("/docs/tags/","5fd"),exact:!0},{path:"/docs/tags/ai-avatars/",component:f("/docs/tags/ai-avatars/","b6a"),exact:!0},{path:"/docs/tags/ai-headshots/",component:f("/docs/tags/ai-headshots/","896"),exact:!0},{path:"/docs/tags/ai-photoshoot/",component:f("/docs/tags/ai-photoshoot/","069"),exact:!0},{path:"/docs/tags/animated/",component:f("/docs/tags/animated/","5bc"),exact:!0},{path:"/docs/tags/api/",component:f("/docs/tags/api/","bbd"),exact:!0},{path:"/docs/tags/avatars/",component:f("/docs/tags/avatars/","01d"),exact:!0},{path:"/docs/tags/backend-v-0/",component:f("/docs/tags/backend-v-0/","47a"),exact:!0},{path:"/docs/tags/background-replacement/",component:f("/docs/tags/background-replacement/","b02"),exact:!0},{path:"/docs/tags/clarity/",component:f("/docs/tags/clarity/","109"),exact:!0},{path:"/docs/tags/clothing/",component:f("/docs/tags/clothing/","eab"),exact:!0},{path:"/docs/tags/comic-book/",component:f("/docs/tags/comic-book/","aec"),exact:!0},{path:"/docs/tags/creative-upscaler/",component:f("/docs/tags/creative-upscaler/","73f"),exact:!0},{path:"/docs/tags/e-commerce/",component:f("/docs/tags/e-commerce/","b62"),exact:!0},{path:"/docs/tags/ecommerce/",component:f("/docs/tags/ecommerce/","7bd"),exact:!0},{path:"/docs/tags/enhance/",component:f("/docs/tags/enhance/","77c"),exact:!0},{path:"/docs/tags/fantasy-art/",component:f("/docs/tags/fantasy-art/","621"),exact:!0},{path:"/docs/tags/fashion/",component:f("/docs/tags/fashion/","492"),exact:!0},{path:"/docs/tags/fine-tuning/",component:f("/docs/tags/fine-tuning/","33a"),exact:!0},{path:"/docs/tags/flux/",component:f("/docs/tags/flux/","a4f"),exact:!0},{path:"/docs/tags/garment/",component:f("/docs/tags/garment/","69a"),exact:!0},{path:"/docs/tags/headshots/",component:f("/docs/tags/headshots/","eae"),exact:!0},{path:"/docs/tags/image-enhancement/",component:f("/docs/tags/image-enhancement/","abd"),exact:!0},{path:"/docs/tags/line-art/",component:f("/docs/tags/line-art/","fd2"),exact:!0},{path:"/docs/tags/lineart/",component:f("/docs/tags/lineart/","fc8"),exact:!0},{path:"/docs/tags/lo-ra/",component:f("/docs/tags/lo-ra/","88d"),exact:!0},{path:"/docs/tags/lora/",component:f("/docs/tags/lora/","22c"),exact:!0},{path:"/docs/tags/lowpoly/",component:f("/docs/tags/lowpoly/","efb"),exact:!0},{path:"/docs/tags/magnific/",component:f("/docs/tags/magnific/","bbf"),exact:!0},{path:"/docs/tags/neonpunk/",component:f("/docs/tags/neonpunk/","512"),exact:!0},{path:"/docs/tags/noise-offset/",component:f("/docs/tags/noise-offset/","9c1"),exact:!0},{path:"/docs/tags/oil-painting/",component:f("/docs/tags/oil-painting/","8bc"),exact:!0},{path:"/docs/tags/photo-optimization/",component:f("/docs/tags/photo-optimization/","514"),exact:!0},{path:"/docs/tags/photographic/",component:f("/docs/tags/photographic/","876"),exact:!0},{path:"/docs/tags/product-photo/",component:f("/docs/tags/product-photo/","a8c"),exact:!0},{path:"/docs/tags/products/",component:f("/docs/tags/products/","397"),exact:!0},{path:"/docs/tags/prompt-styles/",component:f("/docs/tags/prompt-styles/","b46"),exact:!0},{path:"/docs/tags/shopify/",component:f("/docs/tags/shopify/","7dd"),exact:!0},{path:"/docs/tags/social-profiles/",component:f("/docs/tags/social-profiles/","60f"),exact:!0},{path:"/docs/tags/style/",component:f("/docs/tags/style/","b47"),exact:!0},{path:"/docs/tags/super-resolution/",component:f("/docs/tags/super-resolution/","c52"),exact:!0},{path:"/docs/tags/templates/",component:f("/docs/tags/templates/","737"),exact:!0},{path:"/docs/tags/training/",component:f("/docs/tags/training/","515"),exact:!0},{path:"/docs/tags/upscaling/",component:f("/docs/tags/upscaling/","501"),exact:!0},{path:"/docs/tags/virtual-influencers/",component:f("/docs/tags/virtual-influencers/","ca5"),exact:!0},{path:"/docs/tags/virtual-try-on/",component:f("/docs/tags/virtual-try-on/","34b"),exact:!0},{path:"/docs/tags/vton/",component:f("/docs/tags/vton/","633"),exact:!0},{path:"/markdown-page/",component:f("/markdown-page/","693"),exact:!0},{path:"/docs/",component:f("/docs/","5c0"),routes:[{path:"/docs/api/flux-api/",component:f("/docs/api/flux-api/","bdc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/images/inspect/",component:f("/docs/api/images/inspect/","b19"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/like/create/",component:f("/docs/api/like/create/","9bc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/like/delete/",component:f("/docs/api/like/delete/","d1e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/overview/",component:f("/docs/api/overview/","e2d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/pack/list/",component:f("/docs/api/pack/list/","55c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/pack/pack/",component:f("/docs/api/pack/pack/","765"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/pack/tunes/create/",component:f("/docs/api/pack/tunes/create/","4dd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/prompt/create/",component:f("/docs/api/prompt/create/","919"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/prompt/delete/",component:f("/docs/api/prompt/delete/","a57"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/prompt/list/",component:f("/docs/api/prompt/list/","eb3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/prompt/prompt/",component:f("/docs/api/prompt/prompt/","6e0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/prompt/retrieve/",component:f("/docs/api/prompt/retrieve/","603"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/sdxl-api/",component:f("/docs/api/sdxl-api/","054"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/themes/create/",component:f("/docs/api/themes/create/","07d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/tune/",component:f("/docs/api/tune/","e82"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/tune/create/",component:f("/docs/api/tune/create/","f94"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/tune/delete/",component:f("/docs/api/tune/delete/","d50"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/tune/list/",component:f("/docs/api/tune/list/","724"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/tune/retrieve/",component:f("/docs/api/tune/retrieve/","b05"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/api/",component:f("/docs/category/api/","009"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/features/",component:f("/docs/category/features/","787"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/images/",component:f("/docs/category/images/","f29"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/likes/",component:f("/docs/category/likes/","286"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/pack-tunes/",component:f("/docs/category/pack-tunes/","b98"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/packs/",component:f("/docs/category/packs/","f98"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/prompts/",component:f("/docs/category/prompts/","e9f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/themes/",component:f("/docs/category/themes/","57e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/tunes/",component:f("/docs/category/tunes/","954"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/use-cases/",component:f("/docs/category/use-cases/","285"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/changes/",component:f("/docs/changes/","6f9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/backend-v1/",component:f("/docs/features/backend-v1/","626"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/face-inpainting/",component:f("/docs/features/face-inpainting/","df1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/face-swap/",component:f("/docs/features/face-swap/","283"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/faceid/",component:f("/docs/features/faceid/","2f4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/lcm/",component:f("/docs/features/lcm/","b2b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/lora/",component:f("/docs/features/lora/","0c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/multiperson/",component:f("/docs/features/multiperson/","abe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/prompt-masking/",component:f("/docs/features/prompt-masking/","d75"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/styles/",component:f("/docs/features/styles/","577"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/tiled-upscale/",component:f("/docs/features/tiled-upscale/","359"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/ai-photoshoot/",component:f("/docs/use-cases/ai-photoshoot/","2bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/controlnet/",component:f("/docs/use-cases/controlnet/","211"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/faq/",component:f("/docs/use-cases/faq/","d58"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/finetuning-guide/",component:f("/docs/use-cases/finetuning-guide/","263"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/flux-finetuning/",component:f("/docs/use-cases/flux-finetuning/","9e6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/inpainting-and-masking/",component:f("/docs/use-cases/inpainting-and-masking/","bc4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/masked-portraits/",component:f("/docs/use-cases/masked-portraits/","d48"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/product-shots/",component:f("/docs/use-cases/product-shots/","57e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/room-redesign/",component:f("/docs/use-cases/room-redesign/","9f8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/sdxl-training/",component:f("/docs/use-cases/sdxl-training/","d13"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/toonify/",component:f("/docs/use-cases/toonify/","7dd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/upscale/",component:f("/docs/use-cases/upscale/","dda"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/video-generation/",component:f("/docs/use-cases/video-generation/","9c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/virtual-try-on/",component:f("/docs/use-cases/virtual-try-on/","6ef"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/",component:f("/","c50"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},7221:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(6657),n(2497),n(3310),n(8320),n(2295),n(8203)];var c=n(723),u=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),k=n(3320),E=n(8780),S=n(197);function _(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.Z)(),{pathname:r}=(0,u.TH)();return e+(0,E.applyTrailingSlash)((0,h.Z)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(_,null),r.createElement(S.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var L=n(8934),O=n(8940);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const R=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),P("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(R,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const D=I,M="__docusaurus-base-url-issue-banner-container",j="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${M}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n

\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[F]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,B(e))),r.createElement("div",{id:M}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement(U,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var q=n(4763),G=n(2389);function Z(){const e=(0,G.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function V(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement(q.Z,null,r.createElement(O.M,null,r.createElement(L.t,null,r.createElement(f,null,r.createElement(H,null),r.createElement(C,null),r.createElement($,null),r.createElement(D,{location:A(t)},e)),r.createElement(Z,null))))}var W=n(6887);const Y=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(9670);const X=new Set,Q=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!Q.has(e)&&!X.has(e))(e))return!1;X.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Y(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!Q.has(e))(e)&&(Q.add(e),N(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=a.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(V,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-S3TGRCPBP8"],"anonymizeIP":false,"id":"default"}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"changes","docs":[{"id":"api/flux-api","path":"/docs/api/flux-api","sidebar":"tutorialSidebar"},{"id":"api/images/inspect","path":"/docs/api/images/inspect","sidebar":"tutorialSidebar"},{"id":"api/like/create","path":"/docs/api/like/create","sidebar":"tutorialSidebar"},{"id":"api/like/delete","path":"/docs/api/like/delete","sidebar":"tutorialSidebar"},{"id":"api/overview","path":"/docs/api/overview","sidebar":"tutorialSidebar"},{"id":"api/pack/list","path":"/docs/api/pack/list","sidebar":"tutorialSidebar"},{"id":"api/pack/pack","path":"/docs/api/pack/pack","sidebar":"tutorialSidebar"},{"id":"api/pack/tunes/create","path":"/docs/api/pack/tunes/create","sidebar":"tutorialSidebar"},{"id":"api/prompt/create","path":"/docs/api/prompt/create","sidebar":"tutorialSidebar"},{"id":"api/prompt/delete","path":"/docs/api/prompt/delete","sidebar":"tutorialSidebar"},{"id":"api/prompt/list","path":"/docs/api/prompt/list","sidebar":"tutorialSidebar"},{"id":"api/prompt/prompt","path":"/docs/api/prompt/prompt","sidebar":"tutorialSidebar"},{"id":"api/prompt/retrieve","path":"/docs/api/prompt/retrieve","sidebar":"tutorialSidebar"},{"id":"api/sdxl-api","path":"/docs/api/sdxl-api","sidebar":"tutorialSidebar"},{"id":"api/themes/create","path":"/docs/api/themes/create","sidebar":"tutorialSidebar"},{"id":"api/tune/create","path":"/docs/api/tune/create","sidebar":"tutorialSidebar"},{"id":"api/tune/delete","path":"/docs/api/tune/delete","sidebar":"tutorialSidebar"},{"id":"api/tune/list","path":"/docs/api/tune/list","sidebar":"tutorialSidebar"},{"id":"api/tune/retrieve","path":"/docs/api/tune/retrieve","sidebar":"tutorialSidebar"},{"id":"api/tune/tune","path":"/docs/api/tune/","sidebar":"tutorialSidebar"},{"id":"changes","path":"/docs/changes","sidebar":"tutorialSidebar"},{"id":"features/backend-v1","path":"/docs/features/backend-v1","sidebar":"tutorialSidebar"},{"id":"features/face-inpainting","path":"/docs/features/face-inpainting","sidebar":"tutorialSidebar"},{"id":"features/face-swap","path":"/docs/features/face-swap","sidebar":"tutorialSidebar"},{"id":"features/faceid","path":"/docs/features/faceid","sidebar":"tutorialSidebar"},{"id":"features/lcm","path":"/docs/features/lcm","sidebar":"tutorialSidebar"},{"id":"features/lora","path":"/docs/features/lora","sidebar":"tutorialSidebar"},{"id":"features/multiperson","path":"/docs/features/multiperson","sidebar":"tutorialSidebar"},{"id":"features/prompt-masking","path":"/docs/features/prompt-masking","sidebar":"tutorialSidebar"},{"id":"features/styles","path":"/docs/features/styles","sidebar":"tutorialSidebar"},{"id":"features/tiled-upscale","path":"/docs/features/tiled-upscale","sidebar":"tutorialSidebar"},{"id":"use-cases/ai-photoshoot","path":"/docs/use-cases/ai-photoshoot","sidebar":"tutorialSidebar"},{"id":"use-cases/controlnet","path":"/docs/use-cases/controlnet","sidebar":"tutorialSidebar"},{"id":"use-cases/faq","path":"/docs/use-cases/faq","sidebar":"tutorialSidebar"},{"id":"use-cases/finetuning-guide","path":"/docs/use-cases/finetuning-guide","sidebar":"tutorialSidebar"},{"id":"use-cases/flux-finetuning","path":"/docs/use-cases/flux-finetuning","sidebar":"tutorialSidebar"},{"id":"use-cases/inpainting-and-masking","path":"/docs/use-cases/inpainting-and-masking","sidebar":"tutorialSidebar"},{"id":"use-cases/masked-portraits","path":"/docs/use-cases/masked-portraits","sidebar":"tutorialSidebar"},{"id":"use-cases/product-shots","path":"/docs/use-cases/product-shots","sidebar":"tutorialSidebar"},{"id":"use-cases/room-redesign","path":"/docs/use-cases/room-redesign","sidebar":"tutorialSidebar"},{"id":"use-cases/sdxl-training","path":"/docs/use-cases/sdxl-training","sidebar":"tutorialSidebar"},{"id":"use-cases/toonify","path":"/docs/use-cases/toonify","sidebar":"tutorialSidebar"},{"id":"use-cases/upscale","path":"/docs/use-cases/upscale","sidebar":"tutorialSidebar"},{"id":"use-cases/video-generation","path":"/docs/use-cases/video-generation","sidebar":"tutorialSidebar"},{"id":"use-cases/virtual-try-on","path":"/docs/use-cases/virtual-try-on","sidebar":"tutorialSidebar"},{"id":"/category/use-cases","path":"/docs/category/use-cases","sidebar":"tutorialSidebar"},{"id":"/category/features","path":"/docs/category/features","sidebar":"tutorialSidebar"},{"id":"/category/api","path":"/docs/category/api","sidebar":"tutorialSidebar"},{"id":"/category/tunes","path":"/docs/category/tunes","sidebar":"tutorialSidebar"},{"id":"/category/prompts","path":"/docs/category/prompts","sidebar":"tutorialSidebar"},{"id":"/category/packs","path":"/docs/category/packs","sidebar":"tutorialSidebar"},{"id":"/category/pack-tunes","path":"/docs/category/pack-tunes","sidebar":"tutorialSidebar"},{"id":"/category/likes","path":"/docs/category/likes","sidebar":"tutorialSidebar"},{"id":"/category/images","path":"/docs/category/images","sidebar":"tutorialSidebar"},{"id":"/category/themes","path":"/docs/category/themes","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/changes","label":"changes"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-plugin-image-zoom":{"type":"package","name":"docusaurus-plugin-image-zoom","version":"1.0.1"}}}'),c={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(412),o=n(5742),i=n(8780),l=n(7961);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(u,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),c=n(412);const u=a.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:k}=(0,d.C)(),E=(0,a.useContext)(u),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const _=f||p;const x=(0,s.Z)(_),C=_?.replace("pathname://","");let T=void 0!==C?(A=C,b&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;T&&x&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const L=(0,a.useRef)(!1),O=n?o.OL:o.rU,P=c.Z.canUseIntersectionObserver,R=(0,a.useRef)(),N=()=>{L.current||null==T||(window.docusaurus.preload(T),L.current=!0)};(0,a.useEffect)((()=>(!P&&x&&null!=T&&window.docusaurus.prefetch(T),()=>{P&&R.current&&R.current.disconnect()})),[R,T,P,x]);const I=T?.startsWith("#")??!1,D=!T||!x||I;return D||h||E.collectLink(T),D?a.createElement("a",(0,r.Z)({ref:S,href:T},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(O,(0,r.Z)({},v,{onMouseEnter:N,onTouchStart:N,innerRef:e=>{S.current=e,P&&e&&x&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),R.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const p=a.forwardRef(f)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>f,_r:()=>u,Jo:()=>h,zh:()=>d,yW:()=>m,gB:()=>p});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6657:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},7961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(7462),s=n(6550),c=n(5999),u=n(5936);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var h=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(g,{className:v.skipToContent})}var w=n(6668),k=n(9689);function E(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(C,{className:T.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:T.announcementBarClose}))}var L=n(3163),O=n(2466);var P=n(902),R=n(3102);const N=r.createContext(null);function I(e){let{children:t}=e;const n=function(){const e=(0,L.e)(),t=(0,R.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,P.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(N.Provider,{value:n},t)}function D(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function M(){const e=(0,r.useContext)(N);if(!e)throw new P.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,R.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:D(o)})),[a,o,t])}function j(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=M();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var z=n(2949),F=n(2389);function B(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const l=(0,F.Z)(),s=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)($.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",$.toggleButton,!l&&$.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(B,{className:(0,a.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(U,{className:(0,a.Z)($.toggleIcon,$.darkToggleIcon)})))}const q=r.memo(H),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Z(e){let{className:t}=e;const n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,z.I)();return a?null:r.createElement(q,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var V=n(1327);function W(){return r.createElement(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,L.e)();return r.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(W,null),r.createElement(Z,{className:"margin-right--md"}),r.createElement(Y,null))}var X=n(9960),Q=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const f=(0,Q.Z)(a),p=(0,Q.Z)(t),m=(0,Q.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,J.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(te.Z,c&&{width:12,height:12}))};return o?r.createElement(X.Z,(0,l.Z)({href:u?m:o},d,h)):r.createElement(X.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,h))}function re(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ae(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function oe(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ae:re;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),le=n(8596),se=n(2263);function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),r.createElement("div",{ref:c,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(_e,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:o,onClick:i,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),p()}}),c.children??c.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(_e,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const a=t?de:ue;return r.createElement(a,n)}var pe=n(4711);function me(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ge="iconLanguage_nlXk";var he=n(1875);const be={searchBox:"searchBox_ZlJk"};function ve(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,be.searchBox)},t)}var ye=n(143),we=n(3438);var ke=n(373);const Ee=e=>e.docs.find((t=>t.id===e.mainDocId));const Se={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),g=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:ge}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ve,{className:n},r.createElement(he.Z,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.vY)(t,a);return null===s?null:r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,we.lO)(a)[0],s=t??i.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(oe,(0,l.Z)({},o,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...u}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,ye.Iw)(n),m=(0,ye.gB)(n),{savePreferredVersionName:g}=(0,ke.J)(n),h=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??Ee(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...i],b=(0,we.lO)(n)[0],v=t&&h.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:Ee(b).path;return h.length<=1?r.createElement(oe,(0,l.Z)({},u,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},u,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function _e(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Se[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function xe(){const e=(0,L.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(_e,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ce(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Te(){const e=0===(0,w.L)().navbar.items.length,t=M();return r.createElement(r.Fragment,null,!e&&r.createElement(Ce,{onClick:()=>t.hide()}),t.content)}function Ae(){const e=(0,L.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(j,{header:r.createElement(K,null),primaryMenu:r.createElement(xe,null),secondaryMenu:r.createElement(Te,null)}):null}const Le={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Oe(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Pe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,L.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,O.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Le.navbarHideable,!s&&Le.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Oe,{onClick:i.toggle}),r.createElement(Ae,null))}var Re=n(8780);const Ne={errorBoundaryError:"errorBoundaryError_a6uf"};function Ie(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function De(e){let{error:t}=e;const n=(0,Re.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Ne.errorBoundaryError},n)}class Me extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const je="right";function ze(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Fe(){const{toggle:e,shown:t}=(0,L.e)();return r.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(ze,null))}const Be={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Me,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(_e,e)))))}function $e(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function He(){const e=(0,L.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??je)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement($e,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Fe,null),r.createElement(W,null),r.createElement(Ue,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ue,{items:a}),r.createElement(Z,{className:Be.colorModeToggle}),!o&&r.createElement(ve,null,r.createElement(he.Z,null)))})}function qe(){return r.createElement(Pe,null,r.createElement(He,null))}function Ge(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,c=(0,Q.Z)(n),u=(0,Q.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(X.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?u:a}:{to:c},s),o,a&&!(0,J.Z)(a)&&r.createElement(te.Z,null))}function Ze(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ge,{item:t}))}function Ve(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ze,{key:t,item:e})))))}function We(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Ve,{key:t,column:e}))))}function Ye(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ke(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ge,{item:t})}function Xe(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ke,{item:e}),t.length!==n+1&&r.createElement(Ye,null))))))}function Qe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(We,{columns:t}):r.createElement(Xe,{links:t})}var Je=n(941);const et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Q.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Je.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?r.createElement(X.Z,{href:t.href,className:et.footerLogoLink,target:t.target},r.createElement(tt,{logo:t})):r.createElement(tt,{logo:t})}function rt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function ot(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(at,{style:o,links:n&&n.length>0&&r.createElement(Qe,{links:n}),logo:a&&r.createElement(nt,{logo:a}),copyright:t&&r.createElement(rt,{copyright:t})})}const it=r.memo(ot),lt=(0,P.Qc)([z.S,k.pl,O.OC,ke.L5,i.VC,function(e){let{children:t}=e;return r.createElement(R.n2,null,r.createElement(L.M,null,r.createElement(I,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ct(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Ie,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(De,{error:t})))))}const ut={mainWrapper:"mainWrapper_z2l0"};function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:c}=e;return(0,b.t)(),r.createElement(st,null,r.createElement(i.d,{title:s,description:c}),r.createElement(y,null),r.createElement(A,null),r.createElement(qe,null),r.createElement("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,ut.mainWrapper,l)},r.createElement(o.Z,{fallback:e=>r.createElement(ct,e)},t)),!n&&r.createElement(it,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),c=n(941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(c.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:c}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(c?.href||"/"),g=n?"":t,h=c?.alt??g;return a.createElement(o.Z,(0,r.Z)({to:m},p,c?.target&&{target:c.target}),c&&a.createElement(u,{logo:c,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:c,className:u,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],u)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>h});var r=n(7462),a=n(7294),o=n(412),i=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return d(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!o.Z.canUseDOM)return e?c:u}function m(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const c=(0,a.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:o}),a.createElement(t,{ref:c,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(c.current,n),i?.(n))},className:l},r)}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function h(e){let{lazy:t,...n}=e;const r=t?g:m;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.WA)("docusaurus.announcement.dismiss"),c=(0,o.WA)("docusaurus.announcement.id"),u=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{o(u())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),c="theme",u=(0,i.WA)(c),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{u.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>h});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(3438),s=n(902),c=n(12);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function h(e){let{children:t}=e;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(null===e)throw new a.i6("DocsVersionProvider");return e}},3163:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),a=n(3102),o=n(7524),i=n(1980),l=n(6668),s=n(902);const c=r.createContext(void 0);function u(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[s,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:s})),[e,n,u,s])}function d(e){let{children:t}=e;const n=u();return r.createElement(c.Provider,{value:n},t)}function f(){const e=r.useContext(c);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function c(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},3438:(e,t,n)=>{"use strict";n.d(t,{MN:()=>x,Wl:()=>m,_F:()=>v,cE:()=>f,hI:()=>_,jA:()=>g,lO:()=>k,oz:()=>E,s1:()=>w,vY:()=>S,xz:()=>p});var r=n(7294),a=n(6550),o=n(8790),i=n(143),l=n(373),s=n(4477),c=n(1116),u=n(7392),d=n(8596);const f=!!i._r;function p(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function g(){const{pathname:e}=(0,a.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>v(e,t)));function v(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||b(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function w(){const e=(0,c.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function E(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,c=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:c}}function x(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},1980:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),a=n(6550),o=n(1688),i=n(902);function l(e){!function(e){const t=(0,a.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,a.k6)();return(0,o.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},7392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>u,VC:()=>p});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),c=n(2263);function u(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const u=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>c,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(u()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=c(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function p(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>u});var r=n(7294),a=n(1688);const o="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function l(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const c={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?c:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?c:u(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,a.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(2263),a=n(6550),o=n(8780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,a.TH)(),c=(0,o.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),u=l===i?e:e.replace(`/${l}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},8203:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(7582),a=r.__importDefault(n(6809)),o=r.__importDefault(n(2557)),{themeConfig:i}=a.default;function l(e){var t,n;return document.querySelector('html[data-theme="dark"]')?(null===(t=e.background)||void 0===t?void 0:t.dark)||"rgb(50, 50, 50)":(null===(n=e.background)||void 0===n?void 0:n.light)||"rgb(255, 255, 255)"}t.default=function(){if("undefined"==typeof window)return null;let e;const{zoom:t}=i,{selector:n=".markdown img",config:r={}}=t||{};if(!t)return null;r.background=l(t);var a=new MutationObserver((function(){e&&e.update({background:l(t)})}));const s=document.querySelector("html");return a.observe(s,{attributes:!0,attributeFilter:["data-theme"]}),setTimeout((()=>{e&&e.detach(),e=(0,o.default)(n,r)}),1e3),{onRouteUpdate(){setTimeout((()=>{e&&e.detach(),e=(0,o.default)(n,r)}),1e3)}}}()},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>S,q_:()=>L,ob:()=>g,PP:()=>P,Ep:()=>m,Hp:()=>h});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function l(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const s=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=l(t),a=l(n);return r!==t||a!==n?e(r,a):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var c=n(8776);function u(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function g(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function h(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&s(e.state,t.state)}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=g(e,t,f(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,l],u=0;(s=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2557:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var r=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},a=window.Promise||function(e){function t(){}e(t,t)},c=function(){for(var e=arguments.length,t=Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:{}).target,t=function(){var e={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},t=void 0,n=void 0;if(b.container)if(b.container instanceof Object)t=(e=r({},e,b.container)).width-e.left-e.right-2*b.margin,n=e.height-e.top-e.bottom-2*b.margin;else{var a=(o(b.container)?b.container:document.querySelector(b.container)).getBoundingClientRect(),l=a.width,s=a.height,c=a.left,u=a.top;e=r({},e,{width:l,height:s,left:c,top:u})}t=t||e.width-2*b.margin,n=n||e.height-2*b.margin;var d=v.zoomedHd||v.original,f=i(d)?t:d.naturalWidth||t,p=i(d)?n:d.naturalHeight||n,m=d.getBoundingClientRect(),g=m.top,h=m.left,y=m.width,w=m.height,k=Math.min(Math.max(y,f),t)/y,E=Math.min(Math.max(w,p),n)/w,S=Math.min(k,E),_="scale("+S+") translate3d("+((t-y)/2-h+b.margin+e.left)/S+"px, "+((n-w)/2-g+b.margin+e.top)/S+"px, 0)";v.zoomed.style.transform=_,v.zoomedHd&&(v.zoomedHd.style.transform=_)};return new a((function(n){if(e&&-1===p.indexOf(e))n(w);else{if(v.zoomed)n(w);else{if(e)v.original=e;else{if(!(p.length>0))return void n(w);var r=p;v.original=r[0]}if(v.original.dispatchEvent(s("medium-zoom:open",{detail:{zoom:w}})),h=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,g=!0,v.zoomed=function(e){var t=e.getBoundingClientRect(),n=t.top,r=t.left,a=t.width,o=t.height,i=e.cloneNode(),l=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,s=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;return i.removeAttribute("id"),i.style.position="absolute",i.style.top=n+l+"px",i.style.left=r+s+"px",i.style.width=a+"px",i.style.height=o+"px",i.style.transform="",i}(v.original),document.body.appendChild(y),b.template){var a=o(b.template)?b.template:document.querySelector(b.template);v.template=document.createElement("div"),v.template.appendChild(a.content.cloneNode(!0)),document.body.appendChild(v.template)}if(v.original.parentElement&&"PICTURE"===v.original.parentElement.tagName&&v.original.currentSrc&&(v.zoomed.src=v.original.currentSrc),document.body.appendChild(v.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),v.original.classList.add("medium-zoom-image--hidden"),v.zoomed.classList.add("medium-zoom-image--opened"),v.zoomed.addEventListener("click",d),v.zoomed.addEventListener("transitionend",(function e(){g=!1,v.zoomed.removeEventListener("transitionend",e),v.original.dispatchEvent(s("medium-zoom:opened",{detail:{zoom:w}})),n(w)})),v.original.getAttribute("data-zoom-src")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("srcset"),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.removeAttribute("loading"),v.zoomedHd.src=v.zoomed.getAttribute("data-zoom-src"),v.zoomedHd.onerror=function(){clearInterval(i),console.warn("Unable to reach the zoom image target "+v.zoomedHd.src),v.zoomedHd=null,t()};var i=setInterval((function(){v.zoomedHd.complete&&(clearInterval(i),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",d),document.body.appendChild(v.zoomedHd),t())}),10)}else if(v.original.hasAttribute("srcset")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.removeAttribute("loading");var l=v.zoomedHd.addEventListener("load",(function(){v.zoomedHd.removeEventListener("load",l),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",d),document.body.appendChild(v.zoomedHd),t()}))}else t()}}}))},d=function(){return new a((function(e){if(!g&&v.original){g=!0,document.body.classList.remove("medium-zoom--opened"),v.zoomed.style.transform="",v.zoomedHd&&(v.zoomedHd.style.transform=""),v.template&&(v.template.style.transition="opacity 150ms",v.template.style.opacity=0),v.original.dispatchEvent(s("medium-zoom:close",{detail:{zoom:w}})),v.zoomed.addEventListener("transitionend",(function t(){v.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(v.zoomed),v.zoomedHd&&document.body.removeChild(v.zoomedHd),document.body.removeChild(y),v.zoomed.classList.remove("medium-zoom-image--opened"),v.template&&document.body.removeChild(v.template),g=!1,v.zoomed.removeEventListener("transitionend",t),v.original.dispatchEvent(s("medium-zoom:closed",{detail:{zoom:w}})),v.original=null,v.zoomed=null,v.zoomedHd=null,v.template=null,e(w)}))}else e(w)}))},f=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).target;return v.original?d():u({target:e})},p=[],m=[],g=!1,h=0,b=n,v={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(t)?b=t:(t||"string"==typeof t)&&c(t);var y=function(e){var t=document.createElement("div");return t.classList.add("medium-zoom-overlay"),t.style.background=e,t}((b=r({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},b)).background);document.addEventListener("click",(function(e){var t=e.target;t!==y?-1!==p.indexOf(t)&&f({target:t}):d()})),document.addEventListener("keyup",(function(e){var t=e.key||e.keyCode;"Escape"!==t&&"Esc"!==t&&27!==t||d()})),document.addEventListener("scroll",(function(){if(!g&&v.original){var e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(h-e)>b.scrollOffset&&setTimeout(d,150)}})),window.addEventListener("resize",d);var w={open:u,close:d,toggle:f,update:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e;if(e.background&&(y.style.background=e.background),e.container&&e.container instanceof Object&&(t.container=r({},b.container,e.container)),e.template){var n=o(e.template)?e.template:document.querySelector(e.template);t.template=n}return b=r({},b,t),p.forEach((function(e){e.dispatchEvent(s("medium-zoom:update",{detail:{zoom:w}}))})),w},clone:function(){return e(r({},b,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}))},attach:c,detach:function(){for(var e=arguments.length,t=Array(e),n=0;n0?t.reduce((function(e,t){return[].concat(e,l(t))}),[]):p;return r.forEach((function(e){e.classList.remove("medium-zoom-image"),e.dispatchEvent(s("medium-zoom:detach",{detail:{zoom:w}}))})),p=p.filter((function(e){return-1===r.indexOf(e)})),w},on:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return p.forEach((function(r){r.addEventListener("medium-zoom:"+e,t,n)})),m.push({type:"medium-zoom:"+e,listener:t,options:n}),w},off:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return p.forEach((function(r){r.removeEventListener("medium-zoom:"+e,t,n)})),m=m.filter((function(n){return!(n.type==="medium-zoom:"+e&&n.listener.toString()===t.toString())})),w},getOptions:function(){return b},getImages:function(){return p},getZoomedImage:function(){return v.original}};return w}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,i(e,u,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=E.value.length,E=E.next){var _=E.value;if(t.length>e.length)return;if(!(_ instanceof a)){var x,C=1;if(v){if(!(x=o(k,S,e,b))||x.index>=e.length)break;var T=x.index,A=x.index+x[0].length,L=S;for(L+=E.value.length;T>=L;)L+=(E=E.next).value.length;if(S=L-=E.value.length,E.value instanceof a)continue;for(var O=E;O!==t.tail&&(Ld.reach&&(d.reach=I);var D=E.prev;if(R&&(D=s(t,D,R),S+=R.length),c(t,D,C),E=s(t,D,new a(f,h?r.tokenize(P,h):P,y,P)),N&&s(t,E,N),C>1){var M={cause:f+","+m,reach:I};i(e,t,n,E.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function c(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function u(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,u={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return u[n]=a,n})).join(""),n,r),f=Object.keys(u);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=c(u[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],f="string"==typeof c?c:c.content,p=t(r,u),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof c?l.splice.apply(l,[s,1].concat(v)):c.content=v}}else c.content&&i(c.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),a=n(9642),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),o.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6726},6500:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,c),t(s.optional,c),t(s.modify,c)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(s);i=i.map(c),l=(l||[]).map(c);var u=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var f,p=r(s),m=u;a(m);){for(var g in f={},m){var h=s[g];t(h&&h.modify,(function(e){e in d&&(f[e]=!0)}))}for(var b in d)if(!(b in u))for(var v in p(b))if(v in u){f[b]=!0;break}for(var y in m=f)u[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,l={},s={};function c(e){if(e in l)return l[e];s[e]=!0;var a,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)a=r(e);else{var f=i(u.map((function(e){var t=c(e);return delete s[e],t})));o?a=o(f,(function(){return r(e)})):r(e)}return l[e]=a}for(var u in n)c(u);var d=[];for(var f in s)d.push(l[f]);return i(d)}(p,u,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n