import{S as I$,i as A$,s as q$,e as s,k as f,w as p,t as r,M as D$,c as i,d as o,m as d,a as l,x as c,h as a,b as h,N as L$,G as t,g as u,y as m,L as R$,q as y,o as g,B as v,v as T$}from"../../chunks/vendor-hf-doc-builder.js";import{I as _}from"../../chunks/IconCopyLink-hf-doc-builder.js";import{C as S}from"../../chunks/CodeBlock-hf-doc-builder.js";function O$(d_){let we,Su,be,Ze,Zr,Kt,Lp,ea,Rp,Gu,_i,Tp,Nu,Vt,Op,ki,$i,p_,Cu,te,Sp,Zt,Gp,Np,eo,Cp,Hp,Hu,Pi,Mp,Mu,Ee,et,ta,to,Fp,oa,jp,Fu,xi,Wp,ju,Ii,Up,Wu,b,sa,ia,_e,Bp,oo,Yp,zp,so,Xp,Qp,Jp,ra,Ai,qi,Kp,io,Vp,Zp,aa,Di,Li,ec,ro,tc,oc,la,Ri,ao,sc,lo,ic,rc,ac,na,Ti,no,lc,uo,nc,uc,hc,ua,Oi,Si,fc,ho,dc,pc,ha,Gi,fo,cc,po,mc,yc,gc,fa,Ni,co,vc,mo,wc,bc,Ec,da,Ci,J,_c,yo,kc,$c,go,Pc,xc,vo,Ic,Ac,Uu,tt,qc,pa,Dc,Lc,Bu,wo,Rc,Hi,Tc,Yu,ke,ot,ca,bo,Oc,ma,Sc,zu,oe,Gc,Eo,Nc,Cc,_o,Hc,Mc,Xu,w,ya,Fc,jc,ga,Wc,Uc,va,Bc,Yc,wa,zc,Xc,ba,Qc,Jc,Ea,Kc,Vc,_a,Zc,em,ka,tm,om,$a,sm,im,Pa,rm,Qu,Mi,am,Ju,k,xa,lm,nm,Ia,um,hm,Aa,fm,dm,qa,pm,cm,Da,mm,ym,La,gm,vm,Ra,wm,bm,Fi,Em,_m,Ku,K,Ta,km,$m,ko,Oa,Pm,xm,Sa,Im,Am,Vu,$e,st,Ga,$o,qm,Na,Dm,Zu,ji,Lm,eh,Wi,Rm,th,R,Tm,Ca,Om,Sm,Ha,Gm,Nm,Ma,Cm,Hm,Po,Mm,Fm,xo,jm,Wm,oh,Io,Fa,Um,Bm,sh,G,ja,Ym,zm,Wa,Xm,Qm,Ao,Jm,qo,Km,Vm,Zm,Do,ey,Ua,ty,oy,sy,Ba,iy,ih,Ui,ry,rh,Pe,it,Ya,Lo,ay,za,ly,ah,Bi,ny,lh,P,Yi,uy,Xa,hy,fy,Qa,dy,py,Ja,cy,my,rt,Ka,yy,gy,Va,vy,wy,by,Za,Ey,_y,zi,el,ky,$y,Py,Ro,xy,To,Iy,Ay,nh,at,qy,Xi,Dy,Ly,uh,lt,Ry,Oo,Ty,Oy,hh,xe,nt,tl,So,Sy,ol,Gy,fh,Qi,Ny,dh,Ji,sl,Cy,ph,se,il,Hy,My,rl,Fy,jy,al,Wy,ch,j,Go,Uy,ll,By,Yy,zy,No,Xy,nl,Qy,Jy,Ky,ul,Vy,Zy,hl,eg,mh,ut,tg,Co,og,sg,yh,Ie,ht,fl,Ho,ig,dl,rg,gh,ft,ag,Mo,lg,ng,vh,dt,ug,Fo,hg,fg,wh,Ae,pt,pl,jo,dg,cl,pg,bh,Ki,cg,Eh,ct,mg,Wo,yg,gg,_h,qe,mt,ml,Uo,vg,yl,wg,kh,Vi,bg,$h,ie,gl,Eg,_g,vl,kg,$g,wl,Pg,Ph,Zi,xg,xh,yt,Ig,Bo,Ag,qg,Ih,De,gt,bl,Yo,Dg,El,Lg,Ah,er,Rg,qh,W,_l,Tg,Og,kl,Sg,Gg,$l,Ng,Cg,Pl,Hg,Dh,Le,Mg,zo,Fg,jg,Xo,Wg,Lh,tr,Ug,Rh,vt,Bg,or,Yg,zg,Th,Re,wt,xl,Qo,Xg,sr,Qg,Il,Jg,Oh,Te,Al,Kg,Vg,Jo,Zg,ev,Sh,re,ql,tv,ov,Dl,sv,iv,Ll,rv,Gh,Oe,bt,Rl,Ko,av,Tl,lv,Nh,ae,nv,Ol,uv,hv,Sl,fv,dv,Ch,ir,pv,Hh,T,Gl,cv,mv,Nl,yv,gv,Cl,vv,wv,Hl,bv,Ev,Ml,_v,kv,Fl,$v,Mh,le,Pv,Vo,xv,Iv,Zo,Av,qv,Fh,Et,Dv,es,Lv,Rv,jh,Se,_t,jl,ts,Tv,Wl,Ov,Wh,V,os,Sv,Gv,ss,Nv,Cv,is,Hv,Mv,Uh,kt,Ul,Fv,jv,Bl,Wv,Bh,rr,Uv,Yh,O,Bv,rs,Yv,zv,Yl,Xv,Qv,zl,Jv,Kv,as,Vv,Zv,ls,ew,tw,zh,ar,ow,Xh,ne,sw,ns,iw,rw,us,aw,lw,Qh,$t,nw,hs,uw,hw,Jh,lr,fw,Kh,nr,dw,Vh,Ge,Pt,Xl,fs,pw,Ql,cw,Zh,xt,mw,ds,yw,gw,ef,ur,vw,tf,It,Jl,ww,bw,Kl,Ew,of,x,_w,ps,kw,$w,cs,Pw,xw,Vl,Iw,Aw,Zl,qw,Dw,hr,Lw,Rw,en,Tw,Ow,sf,fr,Sw,rf,ms,af,dr,Gw,lf,ys,nf,ue,Nw,tn,Cw,Hw,Ne,Mw,on,Fw,jw,Ww,uf,pr,Uw,hf,he,sn,Bw,Yw,cr,zw,rn,Xw,Qw,Ce,Jw,an,Kw,Vw,ln,Zw,eb,ff,U,tb,gs,ob,sb,vs,ib,rb,nn,ab,lb,df,fe,ws,nb,bs,ub,hb,fb,Es,db,_s,pb,cb,mb,He,yb,un,gb,vb,ks,wb,bb,pf,At,Eb,$s,_b,kb,cf,Me,qt,hn,Ps,$b,mr,Pb,fn,xb,mf,Z,dn,Ib,Ab,xs,qb,Db,Is,Lb,Rb,yf,Fe,Dt,pn,As,Tb,cn,Ob,gf,yr,Sb,vf,gr,Gb,wf,vr,Nb,bf,Lt,mn,qs,Cb,Hb,yn,Ds,Mb,Ef,de,Fb,Ls,jb,Wb,Rs,Ub,Bb,_f,wr,Yb,kf,br,zb,$f,je,Rt,gn,Ts,Xb,vn,Qb,Pf,Er,wn,Jb,xf,I,D,Kb,bn,Vb,Zb,En,e1,t1,_n,o1,s1,kn,i1,r1,$n,a1,l1,Os,n1,u1,h1,_r,Pn,f1,d1,p1,B,xn,c1,m1,In,y1,g1,An,v1,w1,qn,b1,E1,_1,kr,Dn,k1,$1,P1,Ln,x1,I1,Ss,A1,Gs,q1,D1,L1,Rn,R1,If,We,Tt,Tn,Ns,T1,On,O1,Af,E,Sn,S1,G1,Gn,N1,C1,Nn,H1,M1,Cn,F1,j1,Hn,W1,U1,Cs,B1,Mn,Y1,z1,X1,Hs,Q1,$r,J1,K1,V1,Fn,Z1,e2,jn,t2,qf,Pr,Ue,o2,Wn,s2,i2,Un,r2,a2,Df,Be,Ms,l2,Bn,n2,u2,h2,ee,f2,Yn,d2,p2,Fs,zn,c2,m2,js,y2,g2,Lf,Ye,Ot,Xn,Ws,v2,Qn,w2,Rf,xr,b2,Tf,N,E2,Jn,_2,k2,Kn,$2,P2,Vn,x2,I2,Us,A2,q2,Of,St,D2,Bs,L2,R2,Sf,pe,Zn,Ys,T2,zs,O2,S2,G2,Xs,eu,N2,C2,Qs,H2,Js,tu,M2,F2,Ks,Gf,ze,ou,j2,W2,su,U2,B2,Nf,Vs,Zs,iu,Y2,z2,ei,Cf,Gt,X2,ru,Q2,J2,Hf,ti,au,K2,Mf,Ir,V2,Ff,oi,jf,Ar,Z2,Wf,si,Uf,ce,eE,lu,tE,oE,nu,sE,iE,Bf,ii,Yf,Nt,rE,uu,aE,lE,zf,ri,Xf,me,nE,hu,uE,hE,fu,fE,dE,Qf,ai,Jf,qr,pE,Kf,li,Vf,Dr,cE,Zf,ni,ed,Xe,du,pu,mE,yE,cu,mu,gE,td,Qe,Ct,yu,ui,vE,gu,wE,od,Ht,bE,hi,EE,_E,sd,Y,kE,vu,$E,PE,wu,xE,IE,bu,AE,qE,id,fi,rd,Mt,DE,Eu,LE,RE,ad,Lr,TE,ld,ye,OE,_u,SE,GE,ku,NE,CE,nd,di,ud,pi,$u,HE,ME,hd,ci,fd,Je,Ft,Pu,mi,FE,xu,jE,dd,Rr,WE,pd,jt,Iu,UE,BE,Au,YE,cd,yi,md,Ke,Wt,qu,gi,zE,Du,XE,yd,Ut,QE,vi,JE,KE,gd;return Kt=new _({}),to=new _({}),bo=new _({}),$o=new _({}),Lo=new _({}),So=new _({}),Ho=new _({}),jo=new _({}),Uo=new _({}),Yo=new _({}),Qo=new _({}),Ko=new _({}),ts=new _({}),fs=new _({}),ms=new S({props:{code:"git clone https://github.com/huggingface/diffusers",highlighted:'git clone https:<span class="hljs-regexp">//gi</span>thub.com<span class="hljs-regexp">/huggingface/</span>diffusers'}}),ys=new S({props:{code:"pip install -r /examples/<your-example-folder>/requirements.txt",highlighted:'pip install -r <span class="hljs-regexp">/examples/</span>&lt;your-example-folder&gt;/requirements.txt'}}),Ps=new _({}),As=new _({}),Ts=new _({}),Ns=new _({}),Ws=new _({}),Qs=new S({props:{code:`$ git clone git@github.com:<your Github handle>/diffusers.git
$ cd diffusers
$ git remote add upstream https://github.com/huggingface/diffusers.git`,highlighted:`$ git <span class="hljs-built_in">clone</span> git@github.com:&lt;your Github handle&gt;/diffusers.git
$ <span class="hljs-built_in">cd</span> diffusers
$ git remote add upstream https://github.com/huggingface/diffusers.git`}}),Ks=new S({props:{code:"$ git checkout -b a-descriptive-name-for-my-changes",highlighted:"$ git checkout -b a-descriptive-name-for-my-changes"}}),ei=new S({props:{code:'$ pip install -e ".[dev]"',highlighted:'$ pip install -e <span class="hljs-string">&quot;.[dev]&quot;</span>'}}),oi=new S({props:{code:"$ pytest tests/<TEST_TO_RUN>.py",highlighted:"$ pytest tests/&lt;TEST_TO_RUN&gt;.py"}}),si=new S({props:{code:"$ make test",highlighted:'$ make <span class="hljs-built_in">test</span>'}}),ii=new S({props:{code:"$ make style",highlighted:"$ make style"}}),ri=new S({props:{code:"$ make quality",highlighted:"$ make quality"}}),ai=new S({props:{code:`$ git add modified_file.py
$ git commit`,highlighted:`$ git add modified_file.py
$ git commit`}}),li=new S({props:{code:"$ git pull upstream main",highlighted:"$ git pull upstream main"}}),ni=new S({props:{code:"$ git push -u origin a-descriptive-name-for-my-changes",highlighted:"$ git push -u origin a-descriptive-name-for-my-changes"}}),ui=new _({}),fi=new S({props:{code:"$ python -m pytest -n auto --dist=loadfile -s -v ./tests/",highlighted:"$ python -m pytest -n auto --dist=loadfile -s -v ./tests/"}}),di=new S({props:{code:"$ RUN_SLOW=yes python -m pytest -n auto --dist=loadfile -s -v ./tests/",highlighted:'$ RUN_SLOW=<span class="hljs-built_in">yes</span> python -m pytest -n auto --dist=loadfile -s -v ./tests/'}}),ci=new S({props:{code:`$ python -m unittest discover -s tests -t . -v
$ python -m unittest discover -s examples -t examples -v`,highlighted:`$ python -m unittest discover -s tests -t . -v
$ python -m unittest discover -s examples -t examples -v`}}),mi=new _({}),yi=new S({props:{code:`$ git checkout -b your-branch-for-syncing
$ git pull --squash --no-commit upstream main
$ git commit -m '<your message without GitHub references>'
$ git push --set-upstream origin your-branch-for-syncing`,highlighted:`<span class="hljs-symbol">$</span> git checkout -b your-branch-<span class="hljs-keyword">for</span>-syncing
<span class="hljs-symbol">$</span> git pull --squash --<span class="hljs-keyword">no</span>-commit upstream main
<span class="hljs-symbol">$</span> git commit -m <span class="hljs-string">&#x27;&lt;your message without GitHub references&gt;&#x27;</span>
<span class="hljs-symbol">$</span> git push --<span class="hljs-keyword">set</span>-upstream <span class="hljs-comment">origin your-branch-for-syncing</span>`}}),gi=new _({}),{c(){we=s("meta"),Su=f(),be=s("h1"),Ze=s("a"),Zr=s("span"),p(Kt.$$.fragment),Lp=f(),ea=s("span"),Rp=r("How to contribute to Diffusers \u{1F9E8}"),Gu=f(),_i=s("p"),Tp=r("We \u2764\uFE0F contributions from the open-source community! Everyone is welcome, and all types of participation \u2013not just code\u2013 are valued and appreciated. Answering questions, helping others, reaching out, and improving the documentation are all immensely valuable to the community, so don\u2019t be afraid and get involved if you\u2019re up for it!"),Nu=f(),Vt=s("p"),Op=r("Everyone is encouraged to start by saying \u{1F44B} in our public Discord channel. We discuss the latest trends in diffusion models, ask questions, show off personal projects, help each other with contributions, or just hang out \u2615. "),ki=s("a"),$i=s("img"),Cu=f(),te=s("p"),Sp=r("Whichever way you choose to contribute, we strive to be part of an open, welcoming, and kind community. Please, read our "),Zt=s("a"),Gp=r("code of conduct"),Np=r(" and be mindful to respect it during your interactions. We also recommend you become familiar with the "),eo=s("a"),Cp=r("ethical guidelines"),Hp=r(" that guide our project and ask you to adhere to the same principles of transparency and responsibility."),Hu=f(),Pi=s("p"),Mp=r("We enormously value feedback from the community, so please do not be afraid to speak up if you believe you have valuable feedback that can help improve the library - every message, comment, issue, and pull request (PR) is read and considered."),Mu=f(),Ee=s("h2"),et=s("a"),ta=s("span"),p(to.$$.fragment),Fp=f(),oa=s("span"),jp=r("Overview"),Fu=f(),xi=s("p"),Wp=r(`You can contribute in many ways ranging from answering questions on issues to adding new diffusion models to
the core library.`),ju=f(),Ii=s("p"),Up=r("In the following, we give an overview of different ways to contribute, ranked by difficulty in ascending order. All of them are valuable to the community."),Wu=f(),b=s("ul"),sa=s("li"),ia=s("ol"),_e=s("li"),Bp=r("Asking and answering questions on "),oo=s("a"),Yp=r("the Diffusers discussion forum"),zp=r(" or on "),so=s("a"),Xp=r("Discord"),Qp=r("."),Jp=f(),ra=s("li"),Ai=s("ol"),qi=s("li"),Kp=r("Opening new issues on "),io=s("a"),Vp=r("the GitHub Issues tab"),Zp=f(),aa=s("li"),Di=s("ol"),Li=s("li"),ec=r("Answering issues on "),ro=s("a"),tc=r("the GitHub Issues tab"),oc=f(),la=s("li"),Ri=s("ol"),ao=s("li"),sc=r("Fix a simple issue, marked by the \u201CGood first issue\u201D label, see "),lo=s("a"),ic=r("here"),rc=r("."),ac=f(),na=s("li"),Ti=s("ol"),no=s("li"),lc=r("Contribute to the "),uo=s("a"),nc=r("documentation"),uc=r("."),hc=f(),ua=s("li"),Oi=s("ol"),Si=s("li"),fc=r("Contribute a "),ho=s("a"),dc=r("Community Pipeline"),pc=f(),ha=s("li"),Gi=s("ol"),fo=s("li"),cc=r("Contribute to the "),po=s("a"),mc=r("examples"),yc=r("."),gc=f(),fa=s("li"),Ni=s("ol"),co=s("li"),vc=r("Fix a more difficult issue, marked by the \u201CGood second issue\u201D label, see "),mo=s("a"),wc=r("here"),bc=r("."),Ec=f(),da=s("li"),Ci=s("ol"),J=s("li"),_c=r("Add a new pipeline, model, or scheduler, see "),yo=s("a"),kc=r("\u201CNew Pipeline/Model\u201D"),$c=r(" and "),go=s("a"),Pc=r("\u201CNew scheduler\u201D"),xc=r(" issues. For this contribution, please have a look at "),vo=s("a"),Ic=r("Design Philosophy"),Ac=r("."),Uu=f(),tt=s("p"),qc=r("As said before, "),pa=s("strong"),Dc=r("all contributions are valuable to the community"),Lc=r(`.
In the following, we will explain each contribution a bit more in detail.`),Bu=f(),wo=s("p"),Rc=r("For all contributions 4.-9. you will need to open a PR. It is explained in detail how to do so in "),Hi=s("a"),Tc=r("Opening a pull requst"),Yu=f(),ke=s("h3"),ot=s("a"),ca=s("span"),p(bo.$$.fragment),Oc=f(),ma=s("span"),Sc=r("1. Asking and answering questions on the Diffusers discussion forum or on the Diffusers Discord"),zu=f(),oe=s("p"),Gc=r("Any question or comment related to the Diffusers library can be asked on the "),Eo=s("a"),Nc=r("discussion forum"),Cc=r(" or on "),_o=s("a"),Hc=r("Discord"),Mc=r(". Such questions and comments include (but are not limited to):"),Xu=f(),w=s("ul"),ya=s("li"),Fc=r("Reports of training or inference experiments in an attempt to share knowledge"),jc=f(),ga=s("li"),Wc=r("Presentation of personal projects"),Uc=f(),va=s("li"),Bc=r("Questions to non-official training examples"),Yc=f(),wa=s("li"),zc=r("Project proposals"),Xc=f(),ba=s("li"),Qc=r("General feedback"),Jc=f(),Ea=s("li"),Kc=r("Paper summaries"),Vc=f(),_a=s("li"),Zc=r("Asking for help on personal projects that build on top of the Diffusers library"),em=f(),ka=s("li"),tm=r("General questions"),om=f(),$a=s("li"),sm=r("Ethical questions regarding diffusion models"),im=f(),Pa=s("li"),rm=r("\u2026"),Qu=f(),Mi=s("p"),am=r(`Every question that is asked on the forum or on Discord actively encourages the community to publicly
share knowledge and might very well help a beginner in the future that has the same question you\u2019re
having. Please do pose any questions you might have.
In the same spirit, you are of immense help to the community by answering such questions because this way you are publicly documenting knowledge for everybody to learn from.`),Ju=f(),k=s("p"),xa=s("strong"),lm=r("Please"),nm=r(` keep in mind that the more effort you put into asking or answering a question, the higher
the quality of the publicly documented knowledge. In the same way, well-posed and well-answered questions create a high-quality knowledge database accessible to everybody, while badly posed questions or answers reduce the overall quality of the public knowledge database.
In short, a high quality question or answer is `),Ia=s("em"),um=r("precise"),hm=r(", "),Aa=s("em"),fm=r("concise"),dm=r(", "),qa=s("em"),pm=r("relevant"),cm=r(", "),Da=s("em"),mm=r("easy-to-understand"),ym=r(", "),La=s("em"),gm=r("accesible"),vm=r(", and "),Ra=s("em"),wm=r("well-formated/well-posed"),bm=r(". For more information, please have a look through the "),Fi=s("a"),Em=r("How to write a good issue"),_m=r(" section."),Ku=f(),K=s("p"),Ta=s("strong"),km=r("NOTE about channels"),$m=r(`:
`),ko=s("a"),Oa=s("em"),Pm=r("The forum"),xm=r(` is much better indexed by search engines, such as Google. Posts are ranked by popularity rather than chronologically. Hence, it\u2019s easier to look up questions and answers that we posted some time ago.
In addition, questions and answers posted in the forum can easily be linked to.
In contrast, `),Sa=s("em"),Im=r("Discord"),Am=r(` has a chat-like format that invites fast back-and-forth communication.
While it will most likely take less time for you to get an answer to your question on Discord, your
question won\u2019t be visible anymore over time. Also, it\u2019s much harder to find information that was posted a while back on Discord. We therefore strongly recommend using the forum for high-quality questions and answers in an attempt to create long-lasting knowledge for the community. If discussions on Discord lead to very interesting answers and conclusions, we recommend posting the results on the forum to make the information more available for future readers.`),Vu=f(),$e=s("h3"),st=s("a"),Ga=s("span"),p($o.$$.fragment),qm=f(),Na=s("span"),Dm=r("2. Opening new issues on the GitHub issues tab"),Zu=f(),ji=s("p"),Lm=r(`The \u{1F9E8} Diffusers library is robust and reliable thanks to the users who notify us of
the problems they encounter. So thank you for reporting an issue.`),eh=f(),Wi=s("p"),Rm=r("Remember, GitHub issues are reserved for technical questions directly related to the Diffusers library, bug reports, feature requests, or feedback on the library design."),th=f(),R=s("p"),Tm=r("In a nutshell, this means that everything that is "),Ca=s("strong"),Om=r("not"),Sm=r(" related to the "),Ha=s("strong"),Gm=r("code of the Diffusers library"),Nm=r(" (including the documentation) should "),Ma=s("strong"),Cm=r("not"),Hm=r(" be asked on GitHub, but rather on either the "),Po=s("a"),Mm=r("forum"),Fm=r(" or "),xo=s("a"),jm=r("Discord"),Wm=r("."),oh=f(),Io=s("p"),Fa=s("strong"),Um=r("Please consider the following guidelines when opening a new issue"),Bm=r(":"),sh=f(),G=s("ul"),ja=s("li"),Ym=r("Make sure you have searched whether your issue has already been asked before (use the search bar on GitHub under Issues)."),zm=f(),Wa=s("li"),Xm=r(`Please never report a new issue on another (related) issue. If another issue is highly related, please
open a new issue nevertheless and link to the related issue.`),Qm=f(),Ao=s("li"),Jm=r("Make sure your issue is written in English. Please use one of the great, free online translation services, such as "),qo=s("a"),Km=r("DeepL"),Vm=r(" to translate from your native language to English if you are not comfortable in English."),Zm=f(),Do=s("li"),ey=r("Check whether your issue might be solved by updating to the newest Diffusers version. Before posting your issue, please make sure that "),Ua=s("code"),ty=r('python -c "import diffusers; print(diffusers.__version__)"'),oy=r(" is higher or matches the latest Diffusers version."),sy=f(),Ba=s("li"),iy=r("Remember that the more effort you put into opening a new issue, the higher the quality of your answer will be and the better the overall quality of the Diffusers issues."),ih=f(),Ui=s("p"),ry=r("New issues usually include the following."),rh=f(),Pe=s("h4"),it=s("a"),Ya=s("span"),p(Lo.$$.fragment),ay=f(),za=s("span"),ly=r("2.1. Reproducible, minimal bug reports."),ah=f(),Bi=s("p"),ny=r(`A bug report should always have a reproducible code snippet and be as minimal and concise as possible.
This means in more detail:`),lh=f(),P=s("ul"),Yi=s("li"),uy=r("Narrow the bug down as much as you can, "),Xa=s("strong"),hy=r("do not just dump your whole code file"),fy=f(),Qa=s("li"),dy=r("Format your code"),py=f(),Ja=s("li"),cy=r("Do not include any external libraries except for Diffusers depending on them."),my=f(),rt=s("li"),Ka=s("strong"),yy=r("Always"),gy=r(" provide all necessary information about your environment; for this, you can run: "),Va=s("code"),vy=r("diffusers-cli env"),wy=r(" in your shell and copy-paste the displayed information to the issue."),by=f(),Za=s("li"),Ey=r("Explain the issue. If the reader doesn\u2019t know what the issue is and why it is an issue, she cannot solve it."),_y=f(),zi=s("li"),el=s("strong"),ky=r("Always"),$y=r(" make sure the reader can reproduce your issue with as little effort as possible. If your code snippet cannot be run because of missing libraries or undefined variables, the reader cannot help you. Make sure your reproducible code snippet is as minimal as possible and can be copy-pasted into a simple Python shell."),Py=f(),Ro=s("li"),xy=r("If in order to reproduce your issue a model and/or dataset is required, make sure the reader has access to that model or dataset. You can always upload your model or dataset to the "),To=s("a"),Iy=r("Hub"),Ay=r(" to make it easily downloadable. Try to keep your model and dataset as small as possible, to make the reproduction of your issue as effortless as possible."),nh=f(),at=s("p"),qy=r("For more information, please have a look through the "),Xi=s("a"),Dy=r("How to write a good issue"),Ly=r(" section."),uh=f(),lt=s("p"),Ry=r("You can open a bug report "),Oo=s("a"),Ty=r("here"),Oy=r("."),hh=f(),xe=s("h4"),nt=s("a"),tl=s("span"),p(So.$$.fragment),Sy=f(),ol=s("span"),Gy=r("2.2. Feature requests."),fh=f(),Qi=s("p"),Ny=r("A world-class feature request addresses the following points:"),dh=f(),Ji=s("ol"),sl=s("li"),Cy=r("Motivation first:"),ph=f(),se=s("ul"),il=s("li"),Hy=r(`Is it related to a problem/frustration with the library? If so, please explain
why. Providing a code snippet that demonstrates the problem is best.`),My=f(),rl=s("li"),Fy=r(`Is it related to something you would need for a project? We\u2019d love to hear
about it!`),jy=f(),al=s("li"),Wy=r(`Is it something you worked on and think could benefit the community?
Awesome! Tell us what problem it solved for you.`),ch=f(),j=s("ol"),Go=s("li"),Uy=r("Write a "),ll=s("em"),By=r("full paragraph"),Yy=r(" describing the feature;"),zy=f(),No=s("li"),Xy=r("Provide a "),nl=s("strong"),Qy=r("code snippet"),Jy=r(" that demonstrates its future use;"),Ky=f(),ul=s("li"),Vy=r("In case this is related to a paper, please attach a link;"),Zy=f(),hl=s("li"),eg=r("Attach any additional information (drawings, screenshots, etc.) you think may help."),mh=f(),ut=s("p"),tg=r("You can open a feature request "),Co=s("a"),og=r("here"),sg=r("."),yh=f(),Ie=s("h4"),ht=s("a"),fl=s("span"),p(Ho.$$.fragment),ig=f(),dl=s("span"),rg=r("2.3 Feedback."),gh=f(),ft=s("p"),ag=r("Feedback about the library design and why it is good or not good helps the core maintainers immensely to build a user-friendly library. To understand the philosophy behind the current design philosophy, please have a look "),Mo=s("a"),lg=r("here"),ng=r(`. If you feel like a certain design choice does not fit with the current design philosophy, please explain why and how it should be changed. If a certain design choice follows the design philosophy too much, hence restricting use cases, explain why and how it should be changed.
If a certain design choice is very useful for you, please also leave a note as this is great feedback for future design decisions.`),vh=f(),dt=s("p"),ug=r("You can open an issue about feedback "),Fo=s("a"),hg=r("here"),fg=r("."),wh=f(),Ae=s("h4"),pt=s("a"),pl=s("span"),p(jo.$$.fragment),dg=f(),cl=s("span"),pg=r("2.4 Technical questions."),bh=f(),Ki=s("p"),cg=r(`Technical questions are mainly about why certain code of the library was written in a certain way, or what a certain part of the code does. Please make sure to link to the code in question and please provide detail on
why this part of the code is difficult to understand.`),Eh=f(),ct=s("p"),mg=r("You can open an issue about a technical question "),Wo=s("a"),yg=r("here"),gg=r("."),_h=f(),qe=s("h4"),mt=s("a"),ml=s("span"),p(Uo.$$.fragment),vg=f(),yl=s("span"),wg=r("2.5 Proposal to add a new model, scheduler, or pipeline."),kh=f(),Vi=s("p"),bg=r("If the diffusion model community released a new model, pipeline, or scheduler that you would like to see in the Diffusers library, please provide the following information:"),$h=f(),ie=s("ul"),gl=s("li"),Eg=r("Short description of the diffusion pipeline, model, or scheduler and link to the paper or public release."),_g=f(),vl=s("li"),kg=r("Link to any of its open-source implementation."),$g=f(),wl=s("li"),Pg=r("Link to the model weights if they are available."),Ph=f(),Zi=s("p"),xg=r(`If you are willing to contribute to the model yourself, let us know so we can best guide you. Also, don\u2019t forget
to tag the original author of the component (model, scheduler, pipeline, etc.) by GitHub handle if you can find it.`),xh=f(),yt=s("p"),Ig=r("You can open a request for a model/pipeline/scheduler "),Bo=s("a"),Ag=r("here"),qg=r("."),Ih=f(),De=s("h3"),gt=s("a"),bl=s("span"),p(Yo.$$.fragment),Dg=f(),El=s("span"),Lg=r("3. Answering issues on the GitHub issues tab"),Ah=f(),er=s("p"),Rg=r(`Answering issues on GitHub might require some technical knowledge of Diffusers, but we encourage everybody to give it a try even if you are not 100% certain that your answer is correct.
Some tips to give a high-quality answer to an issue:`),qh=f(),W=s("ul"),_l=s("li"),Tg=r("Be as concise and minimal as possible"),Og=f(),kl=s("li"),Sg=r("Stay on topic. An answer to the issue should concern the issue and only the issue."),Gg=f(),$l=s("li"),Ng=r("Provide links to code, papers, or other sources that prove or encourage your point."),Cg=f(),Pl=s("li"),Hg=r("Answer in code. If a simple code snippet is the answer to the issue or shows how the issue can be solved, please provide a fully reproducible code snippet."),Dh=f(),Le=s("p"),Mg=r(`Also, many issues tend to be simply off-topic, duplicates of other issues, or irrelevant. It is of great
help to the maintainers if you can answer such issues, encouraging the author of the issue to be
more precise, provide the link to a duplicated issue or redirect them to `),zo=s("a"),Fg=r("the forum"),jg=r(" or "),Xo=s("a"),Wg=r("Discord"),Lh=f(),tr=s("p"),Ug=r(`If you have verified that the issued bug report is correct and requires a correction in the source code,
please have a look at the next sections.`),Rh=f(),vt=s("p"),Bg=r("For all of the following contributions, you will need to open a PR. It is explained in detail how to do so in the "),or=s("a"),Yg=r("Opening a pull requst"),zg=r(" section."),Th=f(),Re=s("h3"),wt=s("a"),xl=s("span"),p(Qo.$$.fragment),Xg=f(),sr=s("span"),Qg=r("4. Fixing a "),Il=s("code"),Jg=r("Good first issue"),Oh=f(),Te=s("p"),Al=s("em"),Kg=r("Good first issues"),Vg=r(" are marked by the "),Jo=s("a"),Zg=r("Good first issue"),ev=r(` label. Usually, the issue already
explains how a potential solution should look so that it is easier to fix.
If the issue hasn\u2019t been closed and you would like to try to fix this issue, you can just leave a message \u201CI would like to try this issue.\u201D. There are usually three scenarios:`),Sh=f(),re=s("ul"),ql=s("li"),tv=r("a.) The issue description already proposes a fix. In this case and if the solution makes sense to you, you can open a PR or draft PR to fix it."),ov=f(),Dl=s("li"),sv=r("b.) The issue description does not propose a fix. In this case, you can ask what a proposed fix could look like and someone from the Diffusers team should answer shortly. If you have a good idea of how to fix it, feel free to directly open a PR."),iv=f(),Ll=s("li"),rv=r("c.) There is already an open PR to fix the issue, but the issue hasn\u2019t been closed yet. If the PR has gone stale, you can simply open a new PR and link to the stale PR. PRs often go stale if the original contributor who wanted to fix the issue suddenly cannot find the time anymore to proceed. This often happens in open-source and is very normal. In this case, the community will be very happy if you give it a new try and leverage the knowledge of the existing PR. If there is already a PR and it is active, you can help the author by giving suggestions, reviewing the PR or even asking whether you can contribute to the PR."),Gh=f(),Oe=s("h3"),bt=s("a"),Rl=s("span"),p(Ko.$$.fragment),av=f(),Tl=s("span"),lv=r("5. Contribute to the documentation"),Nh=f(),ae=s("p"),nv=r("A good library "),Ol=s("strong"),uv=r("always"),hv=r(" has good documentation! The official documentation is often one of the first points of contact for new users of the library, and therefore contributing to the documentation is a "),Sl=s("strong"),fv=r(`highly
valuable contribution`),dv=r("."),Ch=f(),ir=s("p"),pv=r("Contributing to the library can have many forms:"),Hh=f(),T=s("ul"),Gl=s("li"),cv=r("Correcting spelling or grammatical errors."),mv=f(),Nl=s("li"),yv=r("Correct incorrect formatting of the docstring. If you see that the official documentation is weirdly displayed or a link is broken, we are very happy if you take some time to correct it."),gv=f(),Cl=s("li"),vv=r("Correct the shape or dimensions of a docstring input or output tensor."),wv=f(),Hl=s("li"),bv=r("Clarify documentation that is hard to understand or incorrect."),Ev=f(),Ml=s("li"),_v=r("Update outdated code examples."),kv=f(),Fl=s("li"),$v=r("Translating the documentation to another language."),Mh=f(),le=s("p"),Pv=r("Anything displayed on "),Vo=s("a"),xv=r("the official Diffusers doc page"),Iv=r(" is part of the official documentation and can be corrected, adjusted in the respective "),Zo=s("a"),Av=r("documentation source"),qv=r("."),Fh=f(),Et=s("p"),Dv=r("Please have a look at "),es=s("a"),Lv=r("this page"),Rv=r(" on how to verify changes made to the documentation locally."),jh=f(),Se=s("h3"),_t=s("a"),jl=s("span"),p(ts.$$.fragment),Tv=f(),Wl=s("span"),Ov=r("6. Contribute a community pipeline"),Wh=f(),V=s("p"),os=s("a"),Sv=r("Pipelines"),Gv=r(` are usually the first point of contact between the Diffusers library and the user.
Pipelines are examples of how to use Diffusers `),ss=s("a"),Nv=r("models"),Cv=r(" and "),is=s("a"),Hv=r("schedulers"),Mv=r(`.
We support two types of pipelines:`),Uh=f(),kt=s("ul"),Ul=s("li"),Fv=r("Official Pipelines"),jv=f(),Bl=s("li"),Wv=r("Community Pipelines"),Bh=f(),rr=s("p"),Uv=r("Both official and community pipelines follow the same design and consist of the same type of components."),Yh=f(),O=s("p"),Bv=r(`Official pipelines are tested and maintained by the core maintainers of Diffusers. Their code
resides in `),rs=s("a"),Yv=r("src/diffusers/pipelines"),zv=r(`.
In contrast, community pipelines are contributed and maintained purely by the `),Yl=s("strong"),Xv=r("community"),Qv=r(" and are "),zl=s("strong"),Jv=r("not"),Kv=r(` tested.
They reside in `),as=s("a"),Vv=r("examples/community"),Zv=r(" and while they can be accessed via the "),ls=s("a"),ew=r("PyPI diffusers package"),tw=r(", their code is not part of the PyPI distribution."),zh=f(),ar=s("p"),ow=r(`The reason for the distinction is that the core maintainers of the Diffusers library cannot maintain and test all
possible ways diffusion models can be used for inference, but some of them may be of interest to the community.
Officially released diffusion pipelines,
such as Stable Diffusion are added to the core src/diffusers/pipelines package which ensures
high quality of maintenance, no backward-breaking code changes, and testing.
More bleeding edge pipelines should be added as community pipelines. If usage for a community pipeline is high, the pipeline can be moved to the official pipelines upon request from the community. This is one of the ways we strive to be a community-driven library.`),Xh=f(),ne=s("p"),sw=r("To add a community pipeline, one should add a <name-of-the-community>.py file to "),ns=s("a"),iw=r("examples/community"),rw=r(" and adapt the "),us=s("a"),aw=r("examples/community/README.md"),lw=r(" to include an example of the new pipeline."),Qh=f(),$t=s("p"),nw=r("An example can be seen "),hs=s("a"),uw=r("here"),hw=r("."),Jh=f(),lr=s("p"),fw=r("Community pipeline PRs are only checked at a superficial level and ideally they should be maintained by their original authors."),Kh=f(),nr=s("p"),dw=r(`Contributing a community pipeline is a great way to understand how Diffusers models and schedulers work. Having contributed a community pipeline is usually the first stepping stone to contributing an official pipeline to the
core package.`),Vh=f(),Ge=s("h3"),Pt=s("a"),Xl=s("span"),p(fs.$$.fragment),pw=f(),Ql=s("span"),cw=r("7. Contribute to training examples"),Zh=f(),xt=s("p"),mw=r("Diffusers examples are a collection of training scripts that reside in "),ds=s("a"),yw=r("examples"),gw=r("."),ef=f(),ur=s("p"),vw=r("We support two types of training examples:"),tf=f(),It=s("ul"),Jl=s("li"),ww=r("Official training examples"),bw=f(),Kl=s("li"),Ew=r("Research training examples"),of=f(),x=s("p"),_w=r("Research training examples are located in "),ps=s("a"),kw=r("examples/research_projects"),$w=r(" whereas official training examples include all folders under "),cs=s("a"),Pw=r("examples"),xw=r(" except the "),Vl=s("code"),Iw=r("research_projects"),Aw=r(" and "),Zl=s("code"),qw=r("community"),Dw=r(` folders.
The official training examples are maintained by the Diffusers\u2019 core maintainers whereas the research training examples are maintained by the community.
This is because of the same reasons put forward in `),hr=s("a"),Lw=r("6. Contribute a community pipeline"),Rw=r(` for official pipelines vs. community pipelines: It is not feasible for the core maintainers to maintain all possible training methods for diffusion models.
If the Diffusers core maintainers and the community consider a certain training paradigm to be too experimental or not popular enough, the corresponding training code should be put in the `),en=s("code"),Tw=r("research_projects"),Ow=r(" folder and maintained by the author."),sf=f(),fr=s("p"),Sw=r(`Both official training and research examples consist of a directory that contains one or more training scripts, a requirements.txt file, and a README.md file. In order for the user to make use of the
training examples, it is required to clone the repository:`),rf=f(),p(ms.$$.fragment),af=f(),dr=s("p"),Gw=r("as well as to install all additional dependencies required for training:"),lf=f(),p(ys.$$.fragment),nf=f(),ue=s("p"),Nw=r("Therefore when adding an example, the "),tn=s("code"),Cw=r("requirements.txt"),Hw=r(" file shall define all pip dependencies required for your training example so that once all those are installed, the user can run the example\u2019s training script. See, for example, the "),Ne=s("a"),Mw=r("DreamBooth "),on=s("code"),Fw=r("requirements.txt"),jw=r(" file"),Ww=r("."),uf=f(),pr=s("p"),Uw=r("Training examples of the Diffusers library should adhere to the following philosophy:"),hf=f(),he=s("ul"),sn=s("li"),Bw=r("All the code necessary to run the examples should be found in a single Python file"),Yw=f(),cr=s("li"),zw=r("One should be able to run the example from the command line with "),rn=s("code"),Xw=r("python <your-example>.py --args"),Qw=f(),Ce=s("li"),Jw=r("Examples should be kept simple and serve as "),an=s("strong"),Kw=r("an example"),Vw=r(" on how to use Diffusers for training. The purpose of example scripts is "),ln=s("strong"),Zw=r("not"),eb=r(" to create state-of-the-art diffusion models, but rather to reproduce known training schemes without adding too much custom logic. As a byproduct of this point, our examples also strive to serve as good educational materials."),ff=f(),U=s("p"),tb=r("To contribute an example, it is highly recommended to look at already existing examples such as "),gs=s("a"),ob=r("dreambooth"),sb=r(` to get an idea of how they should look like.
We strongly advise contributors to make use of the `),vs=s("a"),ib=r("Accelerate library"),rb=r(` as it\u2019s tightly integrated
with Diffusers.
Once an example script works, please make sure to add a comprehensive `),nn=s("code"),ab=r("README.md"),lb=r(" that states how to use the example exactly. This README should include:"),df=f(),fe=s("ul"),ws=s("li"),nb=r("An example command on how to run the example script as shown "),bs=s("a"),ub=r("here e.g."),hb=r("."),fb=f(),Es=s("li"),db=r("A link to some training results (logs, models, \u2026) that show what the user can expect as shown "),_s=s("a"),pb=r("here e.g."),cb=r("."),mb=f(),He=s("li"),yb=r("If you are adding a non-official/research training example, "),un=s("strong"),gb=r("please don\u2019t forget"),vb=r(" to add a sentence that you are maintaining this training example which includes your git handle as shown "),ks=s("a"),wb=r("here"),bb=r("."),pf=f(),At=s("p"),Eb=r("If you are contributing to the official training examples, please also make sure to add a test to "),$s=s("a"),_b=r("examples/test_examples.py"),kb=r(". This is not necessary for non-official training examples."),cf=f(),Me=s("h3"),qt=s("a"),hn=s("span"),p(Ps.$$.fragment),$b=f(),mr=s("span"),Pb=r("8. Fixing a "),fn=s("code"),xb=r("Good second issue"),mf=f(),Z=s("p"),dn=s("em"),Ib=r("Good second issues"),Ab=r(" are marked by the "),xs=s("a"),qb=r("Good second issue"),Db=r(` label. Good second issues are
usually more complicated to solve than `),Is=s("a"),Lb=r("Good first issues"),Rb=r(`.
The issue description usually gives less guidance on how to fix the issue and requires
a decent understanding of the library by the interested contributor.
If you are interested in tackling a second good issue, feel free to open a PR to fix it and link the PR to the issue. If you see that a PR has already been opened for this issue but did not get merged, have a look to understand why it wasn\u2019t merged and try to open an improved PR.
Good second issues are usually more difficult to get merged compared to good first issues, so don\u2019t hesitate to ask for help from the core maintainers. If your PR is almost finished the core maintainers can also jump into your PR and commit to it in order to get it merged.`),yf=f(),Fe=s("h3"),Dt=s("a"),pn=s("span"),p(As.$$.fragment),Tb=f(),cn=s("span"),Ob=r("9. Adding pipelines, models, schedulers"),gf=f(),yr=s("p"),Sb=r(`Pipelines, models, and schedulers are the most important pieces of the Diffusers library.
They provide easy access to state-of-the-art diffusion technologies and thus allow the community to
build powerful generative AI applications.`),vf=f(),gr=s("p"),Gb=r("By adding a new model, pipeline, or scheduler you might enable a new powerful use case for any of the user interfaces relying on Diffusers which can be of immense value for the whole generative AI ecosystem."),wf=f(),vr=s("p"),Nb=r(`Diffusers has a couple of open feature requests for all three components - feel free to gloss over them
if you don\u2019t know yet what specific component you would like to add:`),bf=f(),Lt=s("ul"),mn=s("li"),qs=s("a"),Cb=r("Model or pipeline"),Hb=f(),yn=s("li"),Ds=s("a"),Mb=r("Scheduler"),Ef=f(),de=s("p"),Fb=r("Before adding any of the three components, it is strongly recommended that you give the "),Ls=s("a"),jb=r("Philosophy guide"),Wb=r(` a read to better understand the design of any of the three components. Please be aware that
we cannot merge model, scheduler, or pipeline additions that strongly diverge from our design philosophy
as it will lead to API inconsistencies. If you fundamentally disagree with a design choice, please
open a `),Rs=s("a"),Ub=r("Feedback issue"),Bb=r(` instead so that it can be discussed whether a certain design
pattern/design choice shall be changed everywhere in the library and whether we shall update our design philosophy. Consistency across the library is very important for us.`),_f=f(),wr=s("p"),Yb=r(`Please make sure to add links to the original codebase/paper to the PR and ideally also ping the
original author directly on the PR so that they can follow the progress and potentially help with questions.`),kf=f(),br=s("p"),zb=r("If you are unsure or stuck in the PR, don\u2019t hesitate to leave a message to ask for a first review or help."),$f=f(),je=s("h2"),Rt=s("a"),gn=s("span"),p(Ts.$$.fragment),Xb=f(),vn=s("span"),Qb=r("How to write a good issue"),Pf=f(),Er=s("p"),wn=s("strong"),Jb=r("The better your issue is written, the higher the chances that it will be quickly resolved."),xf=f(),I=s("ol"),D=s("li"),Kb=r("Make sure that you\u2019ve used the correct template for your issue. You can pick between "),bn=s("em"),Vb=r("Bug Report"),Zb=r(", "),En=s("em"),e1=r("Feature Request"),t1=r(", "),_n=s("em"),o1=r("Feedback about API Design"),s1=r(", "),kn=s("em"),i1=r("New model/pipeline/scheduler addition"),r1=r(", "),$n=s("em"),a1=r("Forum"),l1=r(", or a blank issue. Make sure to pick the correct one when opening "),Os=s("a"),n1=r("a new issue"),u1=r("."),h1=f(),_r=s("li"),Pn=s("strong"),f1=r("Be precise"),d1=r(": Give your issue a fitting title. Try to formulate your issue description as simple as possible. The more precise you are when submitting an issue, the less time it takes to understand the issue and potentially solve it. Make sure to open an issue for one issue only and not for multiple issues. If you found multiple issues, simply open multiple issues. If your issue is a bug, try to be as precise as possible about what bug it is - you should not just write \u201CError in diffusers\u201D."),p1=f(),B=s("li"),xn=s("strong"),c1=r("Reproducibility"),m1=r(": No reproducible code snippet == no solution. If you encounter a bug, maintainers "),In=s("strong"),y1=r("have to be able to reproduce"),g1=r(" it. Make sure that you include a code snippet that can be copy-pasted into a Python interpreter to reproduce the issue. Make sure that your code snippet works, "),An=s("em"),v1=r("i.e."),w1=r(" that there are no missing imports or missing links to images, \u2026 Your issue should contain an error message "),qn=s("strong"),b1=r("and"),E1=r(" a code snippet that can be copy-pasted without any changes to reproduce the exact same error message. If your issue is using local model weights or local data that cannot be accessed by the reader, the issue cannot be solved. If you cannot share your data or model, try to make a dummy model or dummy data."),_1=f(),kr=s("li"),Dn=s("strong"),k1=r("Minimalistic"),$1=r(": Try to help the reader as much as you can to understand the issue as quickly as possible by staying as concise as possible. Remove all code / all information that is irrelevant to the issue. If you have found a bug, try to create the easiest code example you can to demonstrate your issue, do not just dump your whole workflow into the issue as soon as you have found a bug. E.g., if you train a model and get an error at some point during the training, you should first try to understand what part of the training code is responsible for the error and try to reproduce it with a couple of lines. Try to use dummy data instead of full datasets."),P1=f(),Ln=s("li"),x1=r("Add links. If you are referring to a certain naming, method, or model make sure to provide a link so that the reader can better understand what you mean. If you are referring to a specific PR or issue, make sure to link it to your issue. Do not assume that the reader knows what you are talking about. The more links you add to your issue the better."),I1=f(),Ss=s("li"),A1=r("Formatting. Make sure to nicely format your issue by formatting code into Python code syntax, and error messages into normal code syntax. See the "),Gs=s("a"),q1=r("official GitHub formatting docs"),D1=r(" for more information."),L1=f(),Rn=s("li"),R1=r("Think of your issue not as a ticket to be solved, but rather as a beautiful entry to a well-written encyclopedia. Every added issue is a contribution to publicly available knowledge. By adding a nicely written issue you not only make it easier for maintainers to solve your issue, but you are helping the whole community to better understand a certain aspect of the library."),If=f(),We=s("h2"),Tt=s("a"),Tn=s("span"),p(Ns.$$.fragment),T1=f(),On=s("span"),O1=r("How to write a good PR"),Af=f(),E=s("ol"),Sn=s("li"),S1=r("Be a chameleon. Understand existing design patterns and syntax and make sure your code additions flow seamlessly into the existing code base. Pull requests that significantly diverge from existing design patterns or user interfaces will not be merged."),G1=f(),Gn=s("li"),N1=r("Be laser focused. A pull request should solve one problem and one problem only. Make sure to not fall into the trap of \u201Calso fixing another problem while we\u2019re adding it\u201D. It is much more difficult to review pull requests that solve multiple, unrelated problems at once."),C1=f(),Nn=s("li"),H1=r("If helpful, try to add a code snippet that displays an example of how your addition can be used."),M1=f(),Cn=s("li"),F1=r("The title of your pull request should be a summary of its contribution."),j1=f(),Hn=s("li"),W1=r(`If your pull request addresses an issue, please mention the issue number in
the pull request description to make sure they are linked (and people
consulting the issue know you are working on it);`),U1=f(),Cs=s("li"),B1=r("To indicate a work in progress please prefix the title with "),Mn=s("code"),Y1=r("[WIP]"),z1=r(`. These
are useful to avoid duplicated work, and to differentiate it from PRs ready
to be merged;`),X1=f(),Hs=s("li"),Q1=r("Try to formulate and format your text as explained in "),$r=s("a"),J1=r("How to write a good issue"),K1=r("."),V1=f(),Fn=s("li"),Z1=r("Make sure existing tests pass;"),e2=f(),jn=s("li"),t2=r("Add high-coverage tests. No quality testing = no merge."),qf=f(),Pr=s("ul"),Ue=s("li"),o2=r("If you are adding new "),Wn=s("code"),s2=r("@slow"),i2=r(` tests, make sure they pass using
`),Un=s("code"),r2=r("RUN_SLOW=1 python -m pytest tests/test_my_new_model.py"),a2=r(`.
CircleCI does not run the slow tests, but GitHub actions does every night!`),Df=f(),Be=s("ol"),Ms=s("li"),l2=r("All public methods must have informative docstrings that work nicely with markdown. See "),Bn=s("code"),n2=r("[pipeline_latent_diffusion.py](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion.py)"),u2=r(" for an example."),h2=f(),ee=s("li"),f2=r("Due to the rapidly growing repository, it is important to make sure that no files that would significantly weigh down the repository are added. This includes images, videos, and other non-text files. We prefer to leverage a hf.co hosted "),Yn=s("code"),d2=r("dataset"),p2=r(` like
`),Fs=s("a"),zn=s("code"),c2=r("hf-internal-testing"),m2=r(" or "),js=s("a"),y2=r("huggingface/documentation-images"),g2=r(` to place these files.
If an external contribution, feel free to add the images to your PR and ask a Hugging Face member to migrate your images
to this dataset.`),Lf=f(),Ye=s("h2"),Ot=s("a"),Xn=s("span"),p(Ws.$$.fragment),v2=f(),Qn=s("span"),w2=r("How to open a PR"),Rf=f(),xr=s("p"),b2=r(`Before writing code, we strongly advise you to search through the existing PRs or
issues to make sure that nobody is already working on the same thing. If you are
unsure, it is always a good idea to open an issue to get some feedback.`),Tf=f(),N=s("p"),E2=r("You will need basic "),Jn=s("code"),_2=r("git"),k2=r(` proficiency to be able to contribute to
\u{1F9E8} Diffusers. `),Kn=s("code"),$2=r("git"),P2=r(` is not the easiest tool to use but it has the greatest
manual. Type `),Vn=s("code"),x2=r("git --help"),I2=r(" in a shell and enjoy. If you prefer books, "),Us=s("a"),A2=r(`Pro
Git`),q2=r(" is a very good reference."),Of=f(),St=s("p"),D2=r("Follow these steps to start contributing ("),Bs=s("a"),L2=r("supported Python versions"),R2=r("):"),Sf=f(),pe=s("ol"),Zn=s("li"),Ys=s("p"),T2=r("Fork the "),zs=s("a"),O2=r("repository"),S2=r(` by
clicking on the \u2018Fork\u2019 button on the repository\u2019s page. This creates a copy of the code
under your GitHub user account.`),G2=f(),Xs=s("li"),eu=s("p"),N2=r("Clone your fork to your local disk, and add the base repository as a remote:"),C2=f(),p(Qs.$$.fragment),H2=f(),Js=s("li"),tu=s("p"),M2=r("Create a new branch to hold your development changes:"),F2=f(),p(Ks.$$.fragment),Gf=f(),ze=s("p"),ou=s("strong"),j2=r("Do not"),W2=r(" work on the "),su=s("code"),U2=r("main"),B2=r(" branch."),Nf=f(),Vs=s("ol"),Zs=s("li"),iu=s("p"),Y2=r("Set up a development environment by running the following command in a virtual environment:"),z2=f(),p(ei.$$.fragment),Cf=f(),Gt=s("p"),X2=r("If you have already cloned the repo, you might need to "),ru=s("code"),Q2=r("git pull"),J2=r(` to get the most recent changes in the
library.`),Hf=f(),ti=s("ol"),au=s("li"),K2=r("Develop the features on your branch."),Mf=f(),Ir=s("p"),V2=r(`As you work on the features, you should make sure that the test suite
passes. You should run the tests impacted by your changes like this:`),Ff=f(),p(oi.$$.fragment),jf=f(),Ar=s("p"),Z2=r(`You can also run the full suite with the following command, but it takes
a beefy machine to produce a result in a decent amount of time now that
Diffusers has grown a lot. Here is the command for it:`),Wf=f(),p(si.$$.fragment),Uf=f(),ce=s("p"),eE=r("\u{1F9E8} Diffusers relies on "),lu=s("code"),tE=r("black"),oE=r(" and "),nu=s("code"),sE=r("isort"),iE=r(` to format its source code
consistently. After you make changes, apply automatic style corrections and code verifications
that can\u2019t be automated in one go with:`),Bf=f(),p(ii.$$.fragment),Yf=f(),Nt=s("p"),rE=r("\u{1F9E8} Diffusers also uses "),uu=s("code"),aE=r("ruff"),lE=r(` and a few custom scripts to check for coding mistakes. Quality
control runs in CI, however, you can also run the same checks with:`),zf=f(),p(ri.$$.fragment),Xf=f(),me=s("p"),nE=r("Once you\u2019re happy with your changes, add changed files using "),hu=s("code"),uE=r("git add"),hE=r(` and
make a commit with `),fu=s("code"),fE=r("git commit"),dE=r(" to record your changes locally:"),Qf=f(),p(ai.$$.fragment),Jf=f(),qr=s("p"),pE=r(`It is a good idea to sync your copy of the code with the original
repository regularly. This way you can quickly account for changes:`),Kf=f(),p(li.$$.fragment),Vf=f(),Dr=s("p"),cE=r("Push the changes to your account using:"),Zf=f(),p(ni.$$.fragment),ed=f(),Xe=s("ol"),du=s("li"),pu=s("p"),mE=r(`Once you are satisfied, go to the
webpage of your fork on GitHub. Click on \u2018Pull request\u2019 to send your changes
to the project maintainers for review.`),yE=f(),cu=s("li"),mu=s("p"),gE=r(`It\u2019s ok if maintainers ask you for changes. It happens to core contributors
too! So everyone can see the changes in the Pull request, work in your local
branch and push the changes to your fork. They will automatically appear in
the pull request.`),td=f(),Qe=s("h3"),Ct=s("a"),yu=s("span"),p(ui.$$.fragment),vE=f(),gu=s("span"),wE=r("Tests"),od=f(),Ht=s("p"),bE=r(`An extensive test suite is included to test the library behavior and several examples. Library tests can be found in
the `),hi=s("a"),EE=r("tests folder"),_E=r("."),sd=f(),Y=s("p"),kE=r("We like "),vu=s("code"),$E=r("pytest"),PE=r(" and "),wu=s("code"),xE=r("pytest-xdist"),IE=r(` because it\u2019s faster. From the root of the
repository, here\u2019s how to run tests with `),bu=s("code"),AE=r("pytest"),qE=r(" for the library:"),id=f(),p(fi.$$.fragment),rd=f(),Mt=s("p"),DE=r("In fact, that\u2019s how "),Eu=s("code"),LE=r("make test"),RE=r(" is implemented!"),ad=f(),Lr=s("p"),TE=r(`You can specify a smaller set of tests in order to test only the feature
you\u2019re working on.`),ld=f(),ye=s("p"),OE=r("By default, slow tests are skipped. Set the "),_u=s("code"),SE=r("RUN_SLOW"),GE=r(` environment variable to
`),ku=s("code"),NE=r("yes"),CE=r(` to run them. This will download many gigabytes of models \u2014 make sure you
have enough disk space and a good Internet connection, or a lot of patience!`),nd=f(),p(di.$$.fragment),ud=f(),pi=s("p"),$u=s("code"),HE=r("unittest"),ME=r(" is fully supported, here\u2019s how to run tests with it:"),hd=f(),p(ci.$$.fragment),fd=f(),Je=s("h3"),Ft=s("a"),Pu=s("span"),p(mi.$$.fragment),FE=f(),xu=s("span"),jE=r("Syncing forked main with upstream (HuggingFace) main"),dd=f(),Rr=s("p"),WE=r(`To avoid pinging the upstream repository which adds reference notes to each upstream PR and sends unnecessary notifications to the developers involved in these PRs,
when syncing the main branch of a forked repository, please, follow these steps:`),pd=f(),jt=s("ol"),Iu=s("li"),UE=r("When possible, avoid syncing with the upstream using a branch and PR on the forked repository. Instead, merge directly into the forked main."),BE=f(),Au=s("li"),YE=r("If a PR is absolutely necessary, use the following steps after checking out your branch:"),cd=f(),p(yi.$$.fragment),md=f(),Ke=s("h3"),Wt=s("a"),qu=s("span"),p(gi.$$.fragment),zE=f(),Du=s("span"),XE=r("Style guide"),yd=f(),Ut=s("p"),QE=r("For documentation strings, \u{1F9E8} Diffusers follows the "),vi=s("a"),JE=r("google style"),KE=r("."),this.h()},l(e){const n=D$('[data-svelte="svelte-1phssyn"]',document.head);we=i(n,"META",{name:!0,content:!0}),n.forEach(o),Su=d(e),be=i(e,"H1",{class:!0});var vd=l(be);Ze=i(vd,"A",{id:!0,class:!0,href:!0});var c_=l(Ze);Zr=i(c_,"SPAN",{});var m_=l(Zr);c(Kt.$$.fragment,m_),m_.forEach(o),c_.forEach(o),Lp=d(vd),ea=i(vd,"SPAN",{});var y_=l(ea);Rp=a(y_,"How to contribute to Diffusers \u{1F9E8}"),y_.forEach(o),vd.forEach(o),Gu=d(e),_i=i(e,"P",{});var g_=l(_i);Tp=a(g_,"We \u2764\uFE0F contributions from the open-source community! Everyone is welcome, and all types of participation \u2013not just code\u2013 are valued and appreciated. Answering questions, helping others, reaching out, and improving the documentation are all immensely valuable to the community, so don\u2019t be afraid and get involved if you\u2019re up for it!"),g_.forEach(o),Nu=d(e),Vt=i(e,"P",{});var VE=l(Vt);Op=a(VE,"Everyone is encouraged to start by saying \u{1F44B} in our public Discord channel. We discuss the latest trends in diffusion models, ask questions, show off personal projects, help each other with contributions, or just hang out \u2615. "),ki=i(VE,"A",{href:!0});var v_=l(ki);$i=i(v_,"IMG",{alt:!0,src:!0}),v_.forEach(o),VE.forEach(o),Cu=d(e),te=i(e,"P",{});var Tr=l(te);Sp=a(Tr,"Whichever way you choose to contribute, we strive to be part of an open, welcoming, and kind community. Please, read our "),Zt=i(Tr,"A",{href:!0,rel:!0});var w_=l(Zt);Gp=a(w_,"code of conduct"),w_.forEach(o),Np=a(Tr," and be mindful to respect it during your interactions. We also recommend you become familiar with the "),eo=i(Tr,"A",{href:!0,rel:!0});var b_=l(eo);Cp=a(b_,"ethical guidelines"),b_.forEach(o),Hp=a(Tr," that guide our project and ask you to adhere to the same principles of transparency and responsibility."),Tr.forEach(o),Hu=d(e),Pi=i(e,"P",{});var E_=l(Pi);Mp=a(E_,"We enormously value feedback from the community, so please do not be afraid to speak up if you believe you have valuable feedback that can help improve the library - every message, comment, issue, and pull request (PR) is read and considered."),E_.forEach(o),Mu=d(e),Ee=i(e,"H2",{class:!0});var wd=l(Ee);et=i(wd,"A",{id:!0,class:!0,href:!0});var __=l(et);ta=i(__,"SPAN",{});var k_=l(ta);c(to.$$.fragment,k_),k_.forEach(o),__.forEach(o),Fp=d(wd),oa=i(wd,"SPAN",{});var $_=l(oa);jp=a($_,"Overview"),$_.forEach(o),wd.forEach(o),Fu=d(e),xi=i(e,"P",{});var P_=l(xi);Wp=a(P_,`You can contribute in many ways ranging from answering questions on issues to adding new diffusion models to
the core library.`),P_.forEach(o),ju=d(e),Ii=i(e,"P",{});var x_=l(Ii);Up=a(x_,"In the following, we give an overview of different ways to contribute, ranked by difficulty in ascending order. All of them are valuable to the community."),x_.forEach(o),Wu=d(e),b=i(e,"UL",{});var A=l(b);sa=i(A,"LI",{});var I_=l(sa);ia=i(I_,"OL",{});var A_=l(ia);_e=i(A_,"LI",{});var Or=l(_e);Bp=a(Or,"Asking and answering questions on "),oo=i(Or,"A",{href:!0,rel:!0});var q_=l(oo);Yp=a(q_,"the Diffusers discussion forum"),q_.forEach(o),zp=a(Or," or on "),so=i(Or,"A",{href:!0,rel:!0});var D_=l(so);Xp=a(D_,"Discord"),D_.forEach(o),Qp=a(Or,"."),Or.forEach(o),A_.forEach(o),I_.forEach(o),Jp=d(A),ra=i(A,"LI",{});var L_=l(ra);Ai=i(L_,"OL",{start:!0});var R_=l(Ai);qi=i(R_,"LI",{});var ZE=l(qi);Kp=a(ZE,"Opening new issues on "),io=i(ZE,"A",{href:!0,rel:!0});var T_=l(io);Vp=a(T_,"the GitHub Issues tab"),T_.forEach(o),ZE.forEach(o),R_.forEach(o),L_.forEach(o),Zp=d(A),aa=i(A,"LI",{});var O_=l(aa);Di=i(O_,"OL",{start:!0});var S_=l(Di);Li=i(S_,"LI",{});var e_=l(Li);ec=a(e_,"Answering issues on "),ro=i(e_,"A",{href:!0,rel:!0});var G_=l(ro);tc=a(G_,"the GitHub Issues tab"),G_.forEach(o),e_.forEach(o),S_.forEach(o),O_.forEach(o),oc=d(A),la=i(A,"LI",{});var N_=l(la);Ri=i(N_,"OL",{start:!0});var C_=l(Ri);ao=i(C_,"LI",{});var bd=l(ao);sc=a(bd,"Fix a simple issue, marked by the \u201CGood first issue\u201D label, see "),lo=i(bd,"A",{href:!0,rel:!0});var H_=l(lo);ic=a(H_,"here"),H_.forEach(o),rc=a(bd,"."),bd.forEach(o),C_.forEach(o),N_.forEach(o),ac=d(A),na=i(A,"LI",{});var M_=l(na);Ti=i(M_,"OL",{start:!0});var F_=l(Ti);no=i(F_,"LI",{});var Ed=l(no);lc=a(Ed,"Contribute to the "),uo=i(Ed,"A",{href:!0,rel:!0});var j_=l(uo);nc=a(j_,"documentation"),j_.forEach(o),uc=a(Ed,"."),Ed.forEach(o),F_.forEach(o),M_.forEach(o),hc=d(A),ua=i(A,"LI",{});var W_=l(ua);Oi=i(W_,"OL",{start:!0});var U_=l(Oi);Si=i(U_,"LI",{});var t_=l(Si);fc=a(t_,"Contribute a "),ho=i(t_,"A",{href:!0,rel:!0});var B_=l(ho);dc=a(B_,"Community Pipeline"),B_.forEach(o),t_.forEach(o),U_.forEach(o),W_.forEach(o),pc=d(A),ha=i(A,"LI",{});var Y_=l(ha);Gi=i(Y_,"OL",{start:!0});var z_=l(Gi);fo=i(z_,"LI",{});var _d=l(fo);cc=a(_d,"Contribute to the "),po=i(_d,"A",{href:!0,rel:!0});var X_=l(po);mc=a(X_,"examples"),X_.forEach(o),yc=a(_d,"."),_d.forEach(o),z_.forEach(o),Y_.forEach(o),gc=d(A),fa=i(A,"LI",{});var Q_=l(fa);Ni=i(Q_,"OL",{start:!0});var J_=l(Ni);co=i(J_,"LI",{});var kd=l(co);vc=a(kd,"Fix a more difficult issue, marked by the \u201CGood second issue\u201D label, see "),mo=i(kd,"A",{href:!0,rel:!0});var K_=l(mo);wc=a(K_,"here"),K_.forEach(o),bc=a(kd,"."),kd.forEach(o),J_.forEach(o),Q_.forEach(o),Ec=d(A),da=i(A,"LI",{});var V_=l(da);Ci=i(V_,"OL",{start:!0});var Z_=l(Ci);J=i(Z_,"LI",{});var Bt=l(J);_c=a(Bt,"Add a new pipeline, model, or scheduler, see "),yo=i(Bt,"A",{href:!0,rel:!0});var e3=l(yo);kc=a(e3,"\u201CNew Pipeline/Model\u201D"),e3.forEach(o),$c=a(Bt," and "),go=i(Bt,"A",{href:!0,rel:!0});var t3=l(go);Pc=a(t3,"\u201CNew scheduler\u201D"),t3.forEach(o),xc=a(Bt," issues. For this contribution, please have a look at "),vo=i(Bt,"A",{href:!0,rel:!0});var o3=l(vo);Ic=a(o3,"Design Philosophy"),o3.forEach(o),Ac=a(Bt,"."),Bt.forEach(o),Z_.forEach(o),V_.forEach(o),A.forEach(o),Uu=d(e),tt=i(e,"P",{});var $d=l(tt);qc=a($d,"As said before, "),pa=i($d,"STRONG",{});var s3=l(pa);Dc=a(s3,"all contributions are valuable to the community"),s3.forEach(o),Lc=a($d,`.
In the following, we will explain each contribution a bit more in detail.`),$d.forEach(o),Bu=d(e),wo=i(e,"P",{});var o_=l(wo);Rc=a(o_,"For all contributions 4.-9. you will need to open a PR. It is explained in detail how to do so in "),Hi=i(o_,"A",{href:!0});var i3=l(Hi);Tc=a(i3,"Opening a pull requst"),i3.forEach(o),o_.forEach(o),Yu=d(e),ke=i(e,"H3",{class:!0});var Pd=l(ke);ot=i(Pd,"A",{id:!0,class:!0,href:!0});var r3=l(ot);ca=i(r3,"SPAN",{});var a3=l(ca);c(bo.$$.fragment,a3),a3.forEach(o),r3.forEach(o),Oc=d(Pd),ma=i(Pd,"SPAN",{});var l3=l(ma);Sc=a(l3,"1. Asking and answering questions on the Diffusers discussion forum or on the Diffusers Discord"),l3.forEach(o),Pd.forEach(o),zu=d(e),oe=i(e,"P",{});var Sr=l(oe);Gc=a(Sr,"Any question or comment related to the Diffusers library can be asked on the "),Eo=i(Sr,"A",{href:!0,rel:!0});var n3=l(Eo);Nc=a(n3,"discussion forum"),n3.forEach(o),Cc=a(Sr," or on "),_o=i(Sr,"A",{href:!0,rel:!0});var u3=l(_o);Hc=a(u3,"Discord"),u3.forEach(o),Mc=a(Sr,". Such questions and comments include (but are not limited to):"),Sr.forEach(o),Xu=d(e),w=i(e,"UL",{});var $=l(w);ya=i($,"LI",{});var h3=l(ya);Fc=a(h3,"Reports of training or inference experiments in an attempt to share knowledge"),h3.forEach(o),jc=d($),ga=i($,"LI",{});var f3=l(ga);Wc=a(f3,"Presentation of personal projects"),f3.forEach(o),Uc=d($),va=i($,"LI",{});var d3=l(va);Bc=a(d3,"Questions to non-official training examples"),d3.forEach(o),Yc=d($),wa=i($,"LI",{});var p3=l(wa);zc=a(p3,"Project proposals"),p3.forEach(o),Xc=d($),ba=i($,"LI",{});var c3=l(ba);Qc=a(c3,"General feedback"),c3.forEach(o),Jc=d($),Ea=i($,"LI",{});var m3=l(Ea);Kc=a(m3,"Paper summaries"),m3.forEach(o),Vc=d($),_a=i($,"LI",{});var y3=l(_a);Zc=a(y3,"Asking for help on personal projects that build on top of the Diffusers library"),y3.forEach(o),em=d($),ka=i($,"LI",{});var g3=l(ka);tm=a(g3,"General questions"),g3.forEach(o),om=d($),$a=i($,"LI",{});var v3=l($a);sm=a(v3,"Ethical questions regarding diffusion models"),v3.forEach(o),im=d($),Pa=i($,"LI",{});var w3=l(Pa);rm=a(w3,"\u2026"),w3.forEach(o),$.forEach(o),Qu=d(e),Mi=i(e,"P",{});var b3=l(Mi);am=a(b3,`Every question that is asked on the forum or on Discord actively encourages the community to publicly
share knowledge and might very well help a beginner in the future that has the same question you\u2019re
having. Please do pose any questions you might have.
In the same spirit, you are of immense help to the community by answering such questions because this way you are publicly documenting knowledge for everybody to learn from.`),b3.forEach(o),Ju=d(e),k=i(e,"P",{});var L=l(k);xa=i(L,"STRONG",{});var E3=l(xa);lm=a(E3,"Please"),E3.forEach(o),nm=a(L,` keep in mind that the more effort you put into asking or answering a question, the higher
the quality of the publicly documented knowledge. In the same way, well-posed and well-answered questions create a high-quality knowledge database accessible to everybody, while badly posed questions or answers reduce the overall quality of the public knowledge database.
In short, a high quality question or answer is `),Ia=i(L,"EM",{});var _3=l(Ia);um=a(_3,"precise"),_3.forEach(o),hm=a(L,", "),Aa=i(L,"EM",{});var k3=l(Aa);fm=a(k3,"concise"),k3.forEach(o),dm=a(L,", "),qa=i(L,"EM",{});var $3=l(qa);pm=a($3,"relevant"),$3.forEach(o),cm=a(L,", "),Da=i(L,"EM",{});var P3=l(Da);mm=a(P3,"easy-to-understand"),P3.forEach(o),ym=a(L,", "),La=i(L,"EM",{});var x3=l(La);gm=a(x3,"accesible"),x3.forEach(o),vm=a(L,", and "),Ra=i(L,"EM",{});var I3=l(Ra);wm=a(I3,"well-formated/well-posed"),I3.forEach(o),bm=a(L,". For more information, please have a look through the "),Fi=i(L,"A",{href:!0});var A3=l(Fi);Em=a(A3,"How to write a good issue"),A3.forEach(o),_m=a(L," section."),L.forEach(o),Ku=d(e),K=i(e,"P",{});var wi=l(K);Ta=i(wi,"STRONG",{});var q3=l(Ta);km=a(q3,"NOTE about channels"),q3.forEach(o),$m=a(wi,`:
`),ko=i(wi,"A",{href:!0,rel:!0});var D3=l(ko);Oa=i(D3,"EM",{});var L3=l(Oa);Pm=a(L3,"The forum"),L3.forEach(o),D3.forEach(o),xm=a(wi,` is much better indexed by search engines, such as Google. Posts are ranked by popularity rather than chronologically. Hence, it\u2019s easier to look up questions and answers that we posted some time ago.
In addition, questions and answers posted in the forum can easily be linked to.
In contrast, `),Sa=i(wi,"EM",{});var R3=l(Sa);Im=a(R3,"Discord"),R3.forEach(o),Am=a(wi,` has a chat-like format that invites fast back-and-forth communication.
While it will most likely take less time for you to get an answer to your question on Discord, your
question won\u2019t be visible anymore over time. Also, it\u2019s much harder to find information that was posted a while back on Discord. We therefore strongly recommend using the forum for high-quality questions and answers in an attempt to create long-lasting knowledge for the community. If discussions on Discord lead to very interesting answers and conclusions, we recommend posting the results on the forum to make the information more available for future readers.`),wi.forEach(o),Vu=d(e),$e=i(e,"H3",{class:!0});var xd=l($e);st=i(xd,"A",{id:!0,class:!0,href:!0});var T3=l(st);Ga=i(T3,"SPAN",{});var O3=l(Ga);c($o.$$.fragment,O3),O3.forEach(o),T3.forEach(o),qm=d(xd),Na=i(xd,"SPAN",{});var S3=l(Na);Dm=a(S3,"2. Opening new issues on the GitHub issues tab"),S3.forEach(o),xd.forEach(o),Zu=d(e),ji=i(e,"P",{});var G3=l(ji);Lm=a(G3,`The \u{1F9E8} Diffusers library is robust and reliable thanks to the users who notify us of
the problems they encounter. So thank you for reporting an issue.`),G3.forEach(o),eh=d(e),Wi=i(e,"P",{});var N3=l(Wi);Rm=a(N3,"Remember, GitHub issues are reserved for technical questions directly related to the Diffusers library, bug reports, feature requests, or feedback on the library design."),N3.forEach(o),th=d(e),R=i(e,"P",{});var z=l(R);Tm=a(z,"In a nutshell, this means that everything that is "),Ca=i(z,"STRONG",{});var C3=l(Ca);Om=a(C3,"not"),C3.forEach(o),Sm=a(z," related to the "),Ha=i(z,"STRONG",{});var H3=l(Ha);Gm=a(H3,"code of the Diffusers library"),H3.forEach(o),Nm=a(z," (including the documentation) should "),Ma=i(z,"STRONG",{});var M3=l(Ma);Cm=a(M3,"not"),M3.forEach(o),Hm=a(z," be asked on GitHub, but rather on either the "),Po=i(z,"A",{href:!0,rel:!0});var F3=l(Po);Mm=a(F3,"forum"),F3.forEach(o),Fm=a(z," or "),xo=i(z,"A",{href:!0,rel:!0});var j3=l(xo);jm=a(j3,"Discord"),j3.forEach(o),Wm=a(z,"."),z.forEach(o),oh=d(e),Io=i(e,"P",{});var s_=l(Io);Fa=i(s_,"STRONG",{});var W3=l(Fa);Um=a(W3,"Please consider the following guidelines when opening a new issue"),W3.forEach(o),Bm=a(s_,":"),s_.forEach(o),sh=d(e),G=i(e,"UL",{});var ge=l(G);ja=i(ge,"LI",{});var U3=l(ja);Ym=a(U3,"Make sure you have searched whether your issue has already been asked before (use the search bar on GitHub under Issues)."),U3.forEach(o),zm=d(ge),Wa=i(ge,"LI",{});var B3=l(Wa);Xm=a(B3,`Please never report a new issue on another (related) issue. If another issue is highly related, please
open a new issue nevertheless and link to the related issue.`),B3.forEach(o),Qm=d(ge),Ao=i(ge,"LI",{});var Id=l(Ao);Jm=a(Id,"Make sure your issue is written in English. Please use one of the great, free online translation services, such as "),qo=i(Id,"A",{href:!0,rel:!0});var Y3=l(qo);Km=a(Y3,"DeepL"),Y3.forEach(o),Vm=a(Id," to translate from your native language to English if you are not comfortable in English."),Id.forEach(o),Zm=d(ge),Do=i(ge,"LI",{});var Ad=l(Do);ey=a(Ad,"Check whether your issue might be solved by updating to the newest Diffusers version. Before posting your issue, please make sure that "),Ua=i(Ad,"CODE",{});var z3=l(Ua);ty=a(z3,'python -c "import diffusers; print(diffusers.__version__)"'),z3.forEach(o),oy=a(Ad," is higher or matches the latest Diffusers version."),Ad.forEach(o),sy=d(ge),Ba=i(ge,"LI",{});var X3=l(Ba);iy=a(X3,"Remember that the more effort you put into opening a new issue, the higher the quality of your answer will be and the better the overall quality of the Diffusers issues."),X3.forEach(o),ge.forEach(o),ih=d(e),Ui=i(e,"P",{});var Q3=l(Ui);ry=a(Q3,"New issues usually include the following."),Q3.forEach(o),rh=d(e),Pe=i(e,"H4",{class:!0});var qd=l(Pe);it=i(qd,"A",{id:!0,class:!0,href:!0});var J3=l(it);Ya=i(J3,"SPAN",{});var K3=l(Ya);c(Lo.$$.fragment,K3),K3.forEach(o),J3.forEach(o),ay=d(qd),za=i(qd,"SPAN",{});var V3=l(za);ly=a(V3,"2.1. Reproducible, minimal bug reports."),V3.forEach(o),qd.forEach(o),ah=d(e),Bi=i(e,"P",{});var Z3=l(Bi);ny=a(Z3,`A bug report should always have a reproducible code snippet and be as minimal and concise as possible.
This means in more detail:`),Z3.forEach(o),lh=d(e),P=i(e,"UL",{});var C=l(P);Yi=i(C,"LI",{});var i_=l(Yi);uy=a(i_,"Narrow the bug down as much as you can, "),Xa=i(i_,"STRONG",{});var ek=l(Xa);hy=a(ek,"do not just dump your whole code file"),ek.forEach(o),i_.forEach(o),fy=d(C),Qa=i(C,"LI",{});var tk=l(Qa);dy=a(tk,"Format your code"),tk.forEach(o),py=d(C),Ja=i(C,"LI",{});var ok=l(Ja);cy=a(ok,"Do not include any external libraries except for Diffusers depending on them."),ok.forEach(o),my=d(C),rt=i(C,"LI",{});var Lu=l(rt);Ka=i(Lu,"STRONG",{});var sk=l(Ka);yy=a(sk,"Always"),sk.forEach(o),gy=a(Lu," provide all necessary information about your environment; for this, you can run: "),Va=i(Lu,"CODE",{});var ik=l(Va);vy=a(ik,"diffusers-cli env"),ik.forEach(o),wy=a(Lu," in your shell and copy-paste the displayed information to the issue."),Lu.forEach(o),by=d(C),Za=i(C,"LI",{});var rk=l(Za);Ey=a(rk,"Explain the issue. If the reader doesn\u2019t know what the issue is and why it is an issue, she cannot solve it."),rk.forEach(o),_y=d(C),zi=i(C,"LI",{});var r_=l(zi);el=i(r_,"STRONG",{});var ak=l(el);ky=a(ak,"Always"),ak.forEach(o),$y=a(r_," make sure the reader can reproduce your issue with as little effort as possible. If your code snippet cannot be run because of missing libraries or undefined variables, the reader cannot help you. Make sure your reproducible code snippet is as minimal as possible and can be copy-pasted into a simple Python shell."),r_.forEach(o),Py=d(C),Ro=i(C,"LI",{});var Dd=l(Ro);xy=a(Dd,"If in order to reproduce your issue a model and/or dataset is required, make sure the reader has access to that model or dataset. You can always upload your model or dataset to the "),To=i(Dd,"A",{href:!0,rel:!0});var lk=l(To);Iy=a(lk,"Hub"),lk.forEach(o),Ay=a(Dd," to make it easily downloadable. Try to keep your model and dataset as small as possible, to make the reproduction of your issue as effortless as possible."),Dd.forEach(o),C.forEach(o),nh=d(e),at=i(e,"P",{});var Ld=l(at);qy=a(Ld,"For more information, please have a look through the "),Xi=i(Ld,"A",{href:!0});var nk=l(Xi);Dy=a(nk,"How to write a good issue"),nk.forEach(o),Ly=a(Ld," section."),Ld.forEach(o),uh=d(e),lt=i(e,"P",{});var Rd=l(lt);Ry=a(Rd,"You can open a bug report "),Oo=i(Rd,"A",{href:!0,rel:!0});var uk=l(Oo);Ty=a(uk,"here"),uk.forEach(o),Oy=a(Rd,"."),Rd.forEach(o),hh=d(e),xe=i(e,"H4",{class:!0});var Td=l(xe);nt=i(Td,"A",{id:!0,class:!0,href:!0});var hk=l(nt);tl=i(hk,"SPAN",{});var fk=l(tl);c(So.$$.fragment,fk),fk.forEach(o),hk.forEach(o),Sy=d(Td),ol=i(Td,"SPAN",{});var dk=l(ol);Gy=a(dk,"2.2. Feature requests."),dk.forEach(o),Td.forEach(o),fh=d(e),Qi=i(e,"P",{});var pk=l(Qi);Ny=a(pk,"A world-class feature request addresses the following points:"),pk.forEach(o),dh=d(e),Ji=i(e,"OL",{});var ck=l(Ji);sl=i(ck,"LI",{});var mk=l(sl);Cy=a(mk,"Motivation first:"),mk.forEach(o),ck.forEach(o),ph=d(e),se=i(e,"UL",{});var Gr=l(se);il=i(Gr,"LI",{});var yk=l(il);Hy=a(yk,`Is it related to a problem/frustration with the library? If so, please explain
why. Providing a code snippet that demonstrates the problem is best.`),yk.forEach(o),My=d(Gr),rl=i(Gr,"LI",{});var gk=l(rl);Fy=a(gk,`Is it related to something you would need for a project? We\u2019d love to hear
about it!`),gk.forEach(o),jy=d(Gr),al=i(Gr,"LI",{});var vk=l(al);Wy=a(vk,`Is it something you worked on and think could benefit the community?
Awesome! Tell us what problem it solved for you.`),vk.forEach(o),Gr.forEach(o),ch=d(e),j=i(e,"OL",{start:!0});var Yt=l(j);Go=i(Yt,"LI",{});var Od=l(Go);Uy=a(Od,"Write a "),ll=i(Od,"EM",{});var wk=l(ll);By=a(wk,"full paragraph"),wk.forEach(o),Yy=a(Od," describing the feature;"),Od.forEach(o),zy=d(Yt),No=i(Yt,"LI",{});var Sd=l(No);Xy=a(Sd,"Provide a "),nl=i(Sd,"STRONG",{});var bk=l(nl);Qy=a(bk,"code snippet"),bk.forEach(o),Jy=a(Sd," that demonstrates its future use;"),Sd.forEach(o),Ky=d(Yt),ul=i(Yt,"LI",{});var Ek=l(ul);Vy=a(Ek,"In case this is related to a paper, please attach a link;"),Ek.forEach(o),Zy=d(Yt),hl=i(Yt,"LI",{});var _k=l(hl);eg=a(_k,"Attach any additional information (drawings, screenshots, etc.) you think may help."),_k.forEach(o),Yt.forEach(o),mh=d(e),ut=i(e,"P",{});var Gd=l(ut);tg=a(Gd,"You can open a feature request "),Co=i(Gd,"A",{href:!0,rel:!0});var kk=l(Co);og=a(kk,"here"),kk.forEach(o),sg=a(Gd,"."),Gd.forEach(o),yh=d(e),Ie=i(e,"H4",{class:!0});var Nd=l(Ie);ht=i(Nd,"A",{id:!0,class:!0,href:!0});var $k=l(ht);fl=i($k,"SPAN",{});var Pk=l(fl);c(Ho.$$.fragment,Pk),Pk.forEach(o),$k.forEach(o),ig=d(Nd),dl=i(Nd,"SPAN",{});var xk=l(dl);rg=a(xk,"2.3 Feedback."),xk.forEach(o),Nd.forEach(o),gh=d(e),ft=i(e,"P",{});var Cd=l(ft);ag=a(Cd,"Feedback about the library design and why it is good or not good helps the core maintainers immensely to build a user-friendly library. To understand the philosophy behind the current design philosophy, please have a look "),Mo=i(Cd,"A",{href:!0,rel:!0});var Ik=l(Mo);lg=a(Ik,"here"),Ik.forEach(o),ng=a(Cd,`. If you feel like a certain design choice does not fit with the current design philosophy, please explain why and how it should be changed. If a certain design choice follows the design philosophy too much, hence restricting use cases, explain why and how it should be changed.
If a certain design choice is very useful for you, please also leave a note as this is great feedback for future design decisions.`),Cd.forEach(o),vh=d(e),dt=i(e,"P",{});var Hd=l(dt);ug=a(Hd,"You can open an issue about feedback "),Fo=i(Hd,"A",{href:!0,rel:!0});var Ak=l(Fo);hg=a(Ak,"here"),Ak.forEach(o),fg=a(Hd,"."),Hd.forEach(o),wh=d(e),Ae=i(e,"H4",{class:!0});var Md=l(Ae);pt=i(Md,"A",{id:!0,class:!0,href:!0});var qk=l(pt);pl=i(qk,"SPAN",{});var Dk=l(pl);c(jo.$$.fragment,Dk),Dk.forEach(o),qk.forEach(o),dg=d(Md),cl=i(Md,"SPAN",{});var Lk=l(cl);pg=a(Lk,"2.4 Technical questions."),Lk.forEach(o),Md.forEach(o),bh=d(e),Ki=i(e,"P",{});var Rk=l(Ki);cg=a(Rk,`Technical questions are mainly about why certain code of the library was written in a certain way, or what a certain part of the code does. Please make sure to link to the code in question and please provide detail on
why this part of the code is difficult to understand.`),Rk.forEach(o),Eh=d(e),ct=i(e,"P",{});var Fd=l(ct);mg=a(Fd,"You can open an issue about a technical question "),Wo=i(Fd,"A",{href:!0,rel:!0});var Tk=l(Wo);yg=a(Tk,"here"),Tk.forEach(o),gg=a(Fd,"."),Fd.forEach(o),_h=d(e),qe=i(e,"H4",{class:!0});var jd=l(qe);mt=i(jd,"A",{id:!0,class:!0,href:!0});var Ok=l(mt);ml=i(Ok,"SPAN",{});var Sk=l(ml);c(Uo.$$.fragment,Sk),Sk.forEach(o),Ok.forEach(o),vg=d(jd),yl=i(jd,"SPAN",{});var Gk=l(yl);wg=a(Gk,"2.5 Proposal to add a new model, scheduler, or pipeline."),Gk.forEach(o),jd.forEach(o),kh=d(e),Vi=i(e,"P",{});var Nk=l(Vi);bg=a(Nk,"If the diffusion model community released a new model, pipeline, or scheduler that you would like to see in the Diffusers library, please provide the following information:"),Nk.forEach(o),$h=d(e),ie=i(e,"UL",{});var Nr=l(ie);gl=i(Nr,"LI",{});var Ck=l(gl);Eg=a(Ck,"Short description of the diffusion pipeline, model, or scheduler and link to the paper or public release."),Ck.forEach(o),_g=d(Nr),vl=i(Nr,"LI",{});var Hk=l(vl);kg=a(Hk,"Link to any of its open-source implementation."),Hk.forEach(o),$g=d(Nr),wl=i(Nr,"LI",{});var Mk=l(wl);Pg=a(Mk,"Link to the model weights if they are available."),Mk.forEach(o),Nr.forEach(o),Ph=d(e),Zi=i(e,"P",{});var Fk=l(Zi);xg=a(Fk,`If you are willing to contribute to the model yourself, let us know so we can best guide you. Also, don\u2019t forget
to tag the original author of the component (model, scheduler, pipeline, etc.) by GitHub handle if you can find it.`),Fk.forEach(o),xh=d(e),yt=i(e,"P",{});var Wd=l(yt);Ig=a(Wd,"You can open a request for a model/pipeline/scheduler "),Bo=i(Wd,"A",{href:!0,rel:!0});var jk=l(Bo);Ag=a(jk,"here"),jk.forEach(o),qg=a(Wd,"."),Wd.forEach(o),Ih=d(e),De=i(e,"H3",{class:!0});var Ud=l(De);gt=i(Ud,"A",{id:!0,class:!0,href:!0});var Wk=l(gt);bl=i(Wk,"SPAN",{});var Uk=l(bl);c(Yo.$$.fragment,Uk),Uk.forEach(o),Wk.forEach(o),Dg=d(Ud),El=i(Ud,"SPAN",{});var Bk=l(El);Lg=a(Bk,"3. Answering issues on the GitHub issues tab"),Bk.forEach(o),Ud.forEach(o),Ah=d(e),er=i(e,"P",{});var Yk=l(er);Rg=a(Yk,`Answering issues on GitHub might require some technical knowledge of Diffusers, but we encourage everybody to give it a try even if you are not 100% certain that your answer is correct.
Some tips to give a high-quality answer to an issue:`),Yk.forEach(o),qh=d(e),W=i(e,"UL",{});var zt=l(W);_l=i(zt,"LI",{});var zk=l(_l);Tg=a(zk,"Be as concise and minimal as possible"),zk.forEach(o),Og=d(zt),kl=i(zt,"LI",{});var Xk=l(kl);Sg=a(Xk,"Stay on topic. An answer to the issue should concern the issue and only the issue."),Xk.forEach(o),Gg=d(zt),$l=i(zt,"LI",{});var Qk=l($l);Ng=a(Qk,"Provide links to code, papers, or other sources that prove or encourage your point."),Qk.forEach(o),Cg=d(zt),Pl=i(zt,"LI",{});var Jk=l(Pl);Hg=a(Jk,"Answer in code. If a simple code snippet is the answer to the issue or shows how the issue can be solved, please provide a fully reproducible code snippet."),Jk.forEach(o),zt.forEach(o),Dh=d(e),Le=i(e,"P",{});var Ru=l(Le);Mg=a(Ru,`Also, many issues tend to be simply off-topic, duplicates of other issues, or irrelevant. It is of great
help to the maintainers if you can answer such issues, encouraging the author of the issue to be
more precise, provide the link to a duplicated issue or redirect them to `),zo=i(Ru,"A",{href:!0,rel:!0});var Kk=l(zo);Fg=a(Kk,"the forum"),Kk.forEach(o),jg=a(Ru," or "),Xo=i(Ru,"A",{href:!0,rel:!0});var Vk=l(Xo);Wg=a(Vk,"Discord"),Vk.forEach(o),Ru.forEach(o),Lh=d(e),tr=i(e,"P",{});var Zk=l(tr);Ug=a(Zk,`If you have verified that the issued bug report is correct and requires a correction in the source code,
please have a look at the next sections.`),Zk.forEach(o),Rh=d(e),vt=i(e,"P",{});var Bd=l(vt);Bg=a(Bd,"For all of the following contributions, you will need to open a PR. It is explained in detail how to do so in the "),or=i(Bd,"A",{href:!0});var e5=l(or);Yg=a(e5,"Opening a pull requst"),e5.forEach(o),zg=a(Bd," section."),Bd.forEach(o),Th=d(e),Re=i(e,"H3",{class:!0});var Yd=l(Re);wt=i(Yd,"A",{id:!0,class:!0,href:!0});var t5=l(wt);xl=i(t5,"SPAN",{});var o5=l(xl);c(Qo.$$.fragment,o5),o5.forEach(o),t5.forEach(o),Xg=d(Yd),sr=i(Yd,"SPAN",{});var a_=l(sr);Qg=a(a_,"4. Fixing a "),Il=i(a_,"CODE",{});var s5=l(Il);Jg=a(s5,"Good first issue"),s5.forEach(o),a_.forEach(o),Yd.forEach(o),Oh=d(e),Te=i(e,"P",{});var Tu=l(Te);Al=i(Tu,"EM",{});var i5=l(Al);Kg=a(i5,"Good first issues"),i5.forEach(o),Vg=a(Tu," are marked by the "),Jo=i(Tu,"A",{href:!0,rel:!0});var r5=l(Jo);Zg=a(r5,"Good first issue"),r5.forEach(o),ev=a(Tu,` label. Usually, the issue already
explains how a potential solution should look so that it is easier to fix.
If the issue hasn\u2019t been closed and you would like to try to fix this issue, you can just leave a message \u201CI would like to try this issue.\u201D. There are usually three scenarios:`),Tu.forEach(o),Sh=d(e),re=i(e,"UL",{});var Cr=l(re);ql=i(Cr,"LI",{});var a5=l(ql);tv=a(a5,"a.) The issue description already proposes a fix. In this case and if the solution makes sense to you, you can open a PR or draft PR to fix it."),a5.forEach(o),ov=d(Cr),Dl=i(Cr,"LI",{});var l5=l(Dl);sv=a(l5,"b.) The issue description does not propose a fix. In this case, you can ask what a proposed fix could look like and someone from the Diffusers team should answer shortly. If you have a good idea of how to fix it, feel free to directly open a PR."),l5.forEach(o),iv=d(Cr),Ll=i(Cr,"LI",{});var n5=l(Ll);rv=a(n5,"c.) There is already an open PR to fix the issue, but the issue hasn\u2019t been closed yet. If the PR has gone stale, you can simply open a new PR and link to the stale PR. PRs often go stale if the original contributor who wanted to fix the issue suddenly cannot find the time anymore to proceed. This often happens in open-source and is very normal. In this case, the community will be very happy if you give it a new try and leverage the knowledge of the existing PR. If there is already a PR and it is active, you can help the author by giving suggestions, reviewing the PR or even asking whether you can contribute to the PR."),n5.forEach(o),Cr.forEach(o),Gh=d(e),Oe=i(e,"H3",{class:!0});var zd=l(Oe);bt=i(zd,"A",{id:!0,class:!0,href:!0});var u5=l(bt);Rl=i(u5,"SPAN",{});var h5=l(Rl);c(Ko.$$.fragment,h5),h5.forEach(o),u5.forEach(o),av=d(zd),Tl=i(zd,"SPAN",{});var f5=l(Tl);lv=a(f5,"5. Contribute to the documentation"),f5.forEach(o),zd.forEach(o),Nh=d(e),ae=i(e,"P",{});var Hr=l(ae);nv=a(Hr,"A good library "),Ol=i(Hr,"STRONG",{});var d5=l(Ol);uv=a(d5,"always"),d5.forEach(o),hv=a(Hr," has good documentation! The official documentation is often one of the first points of contact for new users of the library, and therefore contributing to the documentation is a "),Sl=i(Hr,"STRONG",{});var p5=l(Sl);fv=a(p5,`highly
valuable contribution`),p5.forEach(o),dv=a(Hr,"."),Hr.forEach(o),Ch=d(e),ir=i(e,"P",{});var c5=l(ir);pv=a(c5,"Contributing to the library can have many forms:"),c5.forEach(o),Hh=d(e),T=i(e,"UL",{});var X=l(T);Gl=i(X,"LI",{});var m5=l(Gl);cv=a(m5,"Correcting spelling or grammatical errors."),m5.forEach(o),mv=d(X),Nl=i(X,"LI",{});var y5=l(Nl);yv=a(y5,"Correct incorrect formatting of the docstring. If you see that the official documentation is weirdly displayed or a link is broken, we are very happy if you take some time to correct it."),y5.forEach(o),gv=d(X),Cl=i(X,"LI",{});var g5=l(Cl);vv=a(g5,"Correct the shape or dimensions of a docstring input or output tensor."),g5.forEach(o),wv=d(X),Hl=i(X,"LI",{});var v5=l(Hl);bv=a(v5,"Clarify documentation that is hard to understand or incorrect."),v5.forEach(o),Ev=d(X),Ml=i(X,"LI",{});var w5=l(Ml);_v=a(w5,"Update outdated code examples."),w5.forEach(o),kv=d(X),Fl=i(X,"LI",{});var b5=l(Fl);$v=a(b5,"Translating the documentation to another language."),b5.forEach(o),X.forEach(o),Mh=d(e),le=i(e,"P",{});var Mr=l(le);Pv=a(Mr,"Anything displayed on "),Vo=i(Mr,"A",{href:!0,rel:!0});var E5=l(Vo);xv=a(E5,"the official Diffusers doc page"),E5.forEach(o),Iv=a(Mr," is part of the official documentation and can be corrected, adjusted in the respective "),Zo=i(Mr,"A",{href:!0,rel:!0});var _5=l(Zo);Av=a(_5,"documentation source"),_5.forEach(o),qv=a(Mr,"."),Mr.forEach(o),Fh=d(e),Et=i(e,"P",{});var Xd=l(Et);Dv=a(Xd,"Please have a look at "),es=i(Xd,"A",{href:!0,rel:!0});var k5=l(es);Lv=a(k5,"this page"),k5.forEach(o),Rv=a(Xd," on how to verify changes made to the documentation locally."),Xd.forEach(o),jh=d(e),Se=i(e,"H3",{class:!0});var Qd=l(Se);_t=i(Qd,"A",{id:!0,class:!0,href:!0});var $5=l(_t);jl=i($5,"SPAN",{});var P5=l(jl);c(ts.$$.fragment,P5),P5.forEach(o),$5.forEach(o),Tv=d(Qd),Wl=i(Qd,"SPAN",{});var x5=l(Wl);Ov=a(x5,"6. Contribute a community pipeline"),x5.forEach(o),Qd.forEach(o),Wh=d(e),V=i(e,"P",{});var bi=l(V);os=i(bi,"A",{href:!0,rel:!0});var I5=l(os);Sv=a(I5,"Pipelines"),I5.forEach(o),Gv=a(bi,` are usually the first point of contact between the Diffusers library and the user.
Pipelines are examples of how to use Diffusers `),ss=i(bi,"A",{href:!0,rel:!0});var A5=l(ss);Nv=a(A5,"models"),A5.forEach(o),Cv=a(bi," and "),is=i(bi,"A",{href:!0,rel:!0});var q5=l(is);Hv=a(q5,"schedulers"),q5.forEach(o),Mv=a(bi,`.
We support two types of pipelines:`),bi.forEach(o),Uh=d(e),kt=i(e,"UL",{});var Jd=l(kt);Ul=i(Jd,"LI",{});var D5=l(Ul);Fv=a(D5,"Official Pipelines"),D5.forEach(o),jv=d(Jd),Bl=i(Jd,"LI",{});var L5=l(Bl);Wv=a(L5,"Community Pipelines"),L5.forEach(o),Jd.forEach(o),Bh=d(e),rr=i(e,"P",{});var R5=l(rr);Uv=a(R5,"Both official and community pipelines follow the same design and consist of the same type of components."),R5.forEach(o),Yh=d(e),O=i(e,"P",{});var Q=l(O);Bv=a(Q,`Official pipelines are tested and maintained by the core maintainers of Diffusers. Their code
resides in `),rs=i(Q,"A",{href:!0,rel:!0});var T5=l(rs);Yv=a(T5,"src/diffusers/pipelines"),T5.forEach(o),zv=a(Q,`.
In contrast, community pipelines are contributed and maintained purely by the `),Yl=i(Q,"STRONG",{});var O5=l(Yl);Xv=a(O5,"community"),O5.forEach(o),Qv=a(Q," and are "),zl=i(Q,"STRONG",{});var S5=l(zl);Jv=a(S5,"not"),S5.forEach(o),Kv=a(Q,` tested.
They reside in `),as=i(Q,"A",{href:!0,rel:!0});var G5=l(as);Vv=a(G5,"examples/community"),G5.forEach(o),Zv=a(Q," and while they can be accessed via the "),ls=i(Q,"A",{href:!0,rel:!0});var N5=l(ls);ew=a(N5,"PyPI diffusers package"),N5.forEach(o),tw=a(Q,", their code is not part of the PyPI distribution."),Q.forEach(o),zh=d(e),ar=i(e,"P",{});var C5=l(ar);ow=a(C5,`The reason for the distinction is that the core maintainers of the Diffusers library cannot maintain and test all
possible ways diffusion models can be used for inference, but some of them may be of interest to the community.
Officially released diffusion pipelines,
such as Stable Diffusion are added to the core src/diffusers/pipelines package which ensures
high quality of maintenance, no backward-breaking code changes, and testing.
More bleeding edge pipelines should be added as community pipelines. If usage for a community pipeline is high, the pipeline can be moved to the official pipelines upon request from the community. This is one of the ways we strive to be a community-driven library.`),C5.forEach(o),Xh=d(e),ne=i(e,"P",{});var Fr=l(ne);sw=a(Fr,"To add a community pipeline, one should add a <name-of-the-community>.py file to "),ns=i(Fr,"A",{href:!0,rel:!0});var H5=l(ns);iw=a(H5,"examples/community"),H5.forEach(o),rw=a(Fr," and adapt the "),us=i(Fr,"A",{href:!0,rel:!0});var M5=l(us);aw=a(M5,"examples/community/README.md"),M5.forEach(o),lw=a(Fr," to include an example of the new pipeline."),Fr.forEach(o),Qh=d(e),$t=i(e,"P",{});var Kd=l($t);nw=a(Kd,"An example can be seen "),hs=i(Kd,"A",{href:!0,rel:!0});var F5=l(hs);uw=a(F5,"here"),F5.forEach(o),hw=a(Kd,"."),Kd.forEach(o),Jh=d(e),lr=i(e,"P",{});var j5=l(lr);fw=a(j5,"Community pipeline PRs are only checked at a superficial level and ideally they should be maintained by their original authors."),j5.forEach(o),Kh=d(e),nr=i(e,"P",{});var W5=l(nr);dw=a(W5,`Contributing a community pipeline is a great way to understand how Diffusers models and schedulers work. Having contributed a community pipeline is usually the first stepping stone to contributing an official pipeline to the
core package.`),W5.forEach(o),Vh=d(e),Ge=i(e,"H3",{class:!0});var Vd=l(Ge);Pt=i(Vd,"A",{id:!0,class:!0,href:!0});var U5=l(Pt);Xl=i(U5,"SPAN",{});var B5=l(Xl);c(fs.$$.fragment,B5),B5.forEach(o),U5.forEach(o),pw=d(Vd),Ql=i(Vd,"SPAN",{});var Y5=l(Ql);cw=a(Y5,"7. Contribute to training examples"),Y5.forEach(o),Vd.forEach(o),Zh=d(e),xt=i(e,"P",{});var Zd=l(xt);mw=a(Zd,"Diffusers examples are a collection of training scripts that reside in "),ds=i(Zd,"A",{href:!0,rel:!0});var z5=l(ds);yw=a(z5,"examples"),z5.forEach(o),gw=a(Zd,"."),Zd.forEach(o),ef=d(e),ur=i(e,"P",{});var X5=l(ur);vw=a(X5,"We support two types of training examples:"),X5.forEach(o),tf=d(e),It=i(e,"UL",{});var ep=l(It);Jl=i(ep,"LI",{});var Q5=l(Jl);ww=a(Q5,"Official training examples"),Q5.forEach(o),bw=d(ep),Kl=i(ep,"LI",{});var J5=l(Kl);Ew=a(J5,"Research training examples"),J5.forEach(o),ep.forEach(o),of=d(e),x=i(e,"P",{});var H=l(x);_w=a(H,"Research training examples are located in "),ps=i(H,"A",{href:!0,rel:!0});var K5=l(ps);kw=a(K5,"examples/research_projects"),K5.forEach(o),$w=a(H," whereas official training examples include all folders under "),cs=i(H,"A",{href:!0,rel:!0});var V5=l(cs);Pw=a(V5,"examples"),V5.forEach(o),xw=a(H," except the "),Vl=i(H,"CODE",{});var Z5=l(Vl);Iw=a(Z5,"research_projects"),Z5.forEach(o),Aw=a(H," and "),Zl=i(H,"CODE",{});var e4=l(Zl);qw=a(e4,"community"),e4.forEach(o),Dw=a(H,` folders.
The official training examples are maintained by the Diffusers\u2019 core maintainers whereas the research training examples are maintained by the community.
This is because of the same reasons put forward in `),hr=i(H,"A",{href:!0});var t4=l(hr);Lw=a(t4,"6. Contribute a community pipeline"),t4.forEach(o),Rw=a(H,` for official pipelines vs. community pipelines: It is not feasible for the core maintainers to maintain all possible training methods for diffusion models.
If the Diffusers core maintainers and the community consider a certain training paradigm to be too experimental or not popular enough, the corresponding training code should be put in the `),en=i(H,"CODE",{});var o4=l(en);Tw=a(o4,"research_projects"),o4.forEach(o),Ow=a(H," folder and maintained by the author."),H.forEach(o),sf=d(e),fr=i(e,"P",{});var s4=l(fr);Sw=a(s4,`Both official training and research examples consist of a directory that contains one or more training scripts, a requirements.txt file, and a README.md file. In order for the user to make use of the
training examples, it is required to clone the repository:`),s4.forEach(o),rf=d(e),c(ms.$$.fragment,e),af=d(e),dr=i(e,"P",{});var i4=l(dr);Gw=a(i4,"as well as to install all additional dependencies required for training:"),i4.forEach(o),lf=d(e),c(ys.$$.fragment,e),nf=d(e),ue=i(e,"P",{});var jr=l(ue);Nw=a(jr,"Therefore when adding an example, the "),tn=i(jr,"CODE",{});var r4=l(tn);Cw=a(r4,"requirements.txt"),r4.forEach(o),Hw=a(jr," file shall define all pip dependencies required for your training example so that once all those are installed, the user can run the example\u2019s training script. See, for example, the "),Ne=i(jr,"A",{href:!0,rel:!0});var tp=l(Ne);Mw=a(tp,"DreamBooth "),on=i(tp,"CODE",{});var a4=l(on);Fw=a(a4,"requirements.txt"),a4.forEach(o),jw=a(tp," file"),tp.forEach(o),Ww=a(jr,"."),jr.forEach(o),uf=d(e),pr=i(e,"P",{});var l4=l(pr);Uw=a(l4,"Training examples of the Diffusers library should adhere to the following philosophy:"),l4.forEach(o),hf=d(e),he=i(e,"UL",{});var Wr=l(he);sn=i(Wr,"LI",{});var n4=l(sn);Bw=a(n4,"All the code necessary to run the examples should be found in a single Python file"),n4.forEach(o),Yw=d(Wr),cr=i(Wr,"LI",{});var l_=l(cr);zw=a(l_,"One should be able to run the example from the command line with "),rn=i(l_,"CODE",{});var u4=l(rn);Xw=a(u4,"python <your-example>.py --args"),u4.forEach(o),l_.forEach(o),Qw=d(Wr),Ce=i(Wr,"LI",{});var Ur=l(Ce);Jw=a(Ur,"Examples should be kept simple and serve as "),an=i(Ur,"STRONG",{});var h4=l(an);Kw=a(h4,"an example"),h4.forEach(o),Vw=a(Ur," on how to use Diffusers for training. The purpose of example scripts is "),ln=i(Ur,"STRONG",{});var f4=l(ln);Zw=a(f4,"not"),f4.forEach(o),eb=a(Ur," to create state-of-the-art diffusion models, but rather to reproduce known training schemes without adding too much custom logic. As a byproduct of this point, our examples also strive to serve as good educational materials."),Ur.forEach(o),Wr.forEach(o),ff=d(e),U=i(e,"P",{});var Xt=l(U);tb=a(Xt,"To contribute an example, it is highly recommended to look at already existing examples such as "),gs=i(Xt,"A",{href:!0,rel:!0});var d4=l(gs);ob=a(d4,"dreambooth"),d4.forEach(o),sb=a(Xt,` to get an idea of how they should look like.
We strongly advise contributors to make use of the `),vs=i(Xt,"A",{href:!0,rel:!0});var p4=l(vs);ib=a(p4,"Accelerate library"),p4.forEach(o),rb=a(Xt,` as it\u2019s tightly integrated
with Diffusers.
Once an example script works, please make sure to add a comprehensive `),nn=i(Xt,"CODE",{});var c4=l(nn);ab=a(c4,"README.md"),c4.forEach(o),lb=a(Xt," that states how to use the example exactly. This README should include:"),Xt.forEach(o),df=d(e),fe=i(e,"UL",{});var Br=l(fe);ws=i(Br,"LI",{});var op=l(ws);nb=a(op,"An example command on how to run the example script as shown "),bs=i(op,"A",{href:!0,rel:!0});var m4=l(bs);ub=a(m4,"here e.g."),m4.forEach(o),hb=a(op,"."),op.forEach(o),fb=d(Br),Es=i(Br,"LI",{});var sp=l(Es);db=a(sp,"A link to some training results (logs, models, \u2026) that show what the user can expect as shown "),_s=i(sp,"A",{href:!0,rel:!0});var y4=l(_s);pb=a(y4,"here e.g."),y4.forEach(o),cb=a(sp,"."),sp.forEach(o),mb=d(Br),He=i(Br,"LI",{});var Yr=l(He);yb=a(Yr,"If you are adding a non-official/research training example, "),un=i(Yr,"STRONG",{});var g4=l(un);gb=a(g4,"please don\u2019t forget"),g4.forEach(o),vb=a(Yr," to add a sentence that you are maintaining this training example which includes your git handle as shown "),ks=i(Yr,"A",{href:!0,rel:!0});var v4=l(ks);wb=a(v4,"here"),v4.forEach(o),bb=a(Yr,"."),Yr.forEach(o),Br.forEach(o),pf=d(e),At=i(e,"P",{});var ip=l(At);Eb=a(ip,"If you are contributing to the official training examples, please also make sure to add a test to "),$s=i(ip,"A",{href:!0,rel:!0});var w4=l($s);_b=a(w4,"examples/test_examples.py"),w4.forEach(o),kb=a(ip,". This is not necessary for non-official training examples."),ip.forEach(o),cf=d(e),Me=i(e,"H3",{class:!0});var rp=l(Me);qt=i(rp,"A",{id:!0,class:!0,href:!0});var b4=l(qt);hn=i(b4,"SPAN",{});var E4=l(hn);c(Ps.$$.fragment,E4),E4.forEach(o),b4.forEach(o),$b=d(rp),mr=i(rp,"SPAN",{});var n_=l(mr);Pb=a(n_,"8. Fixing a "),fn=i(n_,"CODE",{});var _4=l(fn);xb=a(_4,"Good second issue"),_4.forEach(o),n_.forEach(o),rp.forEach(o),mf=d(e),Z=i(e,"P",{});var Ei=l(Z);dn=i(Ei,"EM",{});var k4=l(dn);Ib=a(k4,"Good second issues"),k4.forEach(o),Ab=a(Ei," are marked by the "),xs=i(Ei,"A",{href:!0,rel:!0});var $4=l(xs);qb=a($4,"Good second issue"),$4.forEach(o),Db=a(Ei,` label. Good second issues are
usually more complicated to solve than `),Is=i(Ei,"A",{href:!0,rel:!0});var P4=l(Is);Lb=a(P4,"Good first issues"),P4.forEach(o),Rb=a(Ei,`.
The issue description usually gives less guidance on how to fix the issue and requires
a decent understanding of the library by the interested contributor.
If you are interested in tackling a second good issue, feel free to open a PR to fix it and link the PR to the issue. If you see that a PR has already been opened for this issue but did not get merged, have a look to understand why it wasn\u2019t merged and try to open an improved PR.
Good second issues are usually more difficult to get merged compared to good first issues, so don\u2019t hesitate to ask for help from the core maintainers. If your PR is almost finished the core maintainers can also jump into your PR and commit to it in order to get it merged.`),Ei.forEach(o),yf=d(e),Fe=i(e,"H3",{class:!0});var ap=l(Fe);Dt=i(ap,"A",{id:!0,class:!0,href:!0});var x4=l(Dt);pn=i(x4,"SPAN",{});var I4=l(pn);c(As.$$.fragment,I4),I4.forEach(o),x4.forEach(o),Tb=d(ap),cn=i(ap,"SPAN",{});var A4=l(cn);Ob=a(A4,"9. Adding pipelines, models, schedulers"),A4.forEach(o),ap.forEach(o),gf=d(e),yr=i(e,"P",{});var q4=l(yr);Sb=a(q4,`Pipelines, models, and schedulers are the most important pieces of the Diffusers library.
They provide easy access to state-of-the-art diffusion technologies and thus allow the community to
build powerful generative AI applications.`),q4.forEach(o),vf=d(e),gr=i(e,"P",{});var D4=l(gr);Gb=a(D4,"By adding a new model, pipeline, or scheduler you might enable a new powerful use case for any of the user interfaces relying on Diffusers which can be of immense value for the whole generative AI ecosystem."),D4.forEach(o),wf=d(e),vr=i(e,"P",{});var L4=l(vr);Nb=a(L4,`Diffusers has a couple of open feature requests for all three components - feel free to gloss over them
if you don\u2019t know yet what specific component you would like to add:`),L4.forEach(o),bf=d(e),Lt=i(e,"UL",{});var lp=l(Lt);mn=i(lp,"LI",{});var R4=l(mn);qs=i(R4,"A",{href:!0,rel:!0});var T4=l(qs);Cb=a(T4,"Model or pipeline"),T4.forEach(o),R4.forEach(o),Hb=d(lp),yn=i(lp,"LI",{});var O4=l(yn);Ds=i(O4,"A",{href:!0,rel:!0});var S4=l(Ds);Mb=a(S4,"Scheduler"),S4.forEach(o),O4.forEach(o),lp.forEach(o),Ef=d(e),de=i(e,"P",{});var zr=l(de);Fb=a(zr,"Before adding any of the three components, it is strongly recommended that you give the "),Ls=i(zr,"A",{href:!0,rel:!0});var G4=l(Ls);jb=a(G4,"Philosophy guide"),G4.forEach(o),Wb=a(zr,` a read to better understand the design of any of the three components. Please be aware that
we cannot merge model, scheduler, or pipeline additions that strongly diverge from our design philosophy
as it will lead to API inconsistencies. If you fundamentally disagree with a design choice, please
open a `),Rs=i(zr,"A",{href:!0,rel:!0});var N4=l(Rs);Ub=a(N4,"Feedback issue"),N4.forEach(o),Bb=a(zr,` instead so that it can be discussed whether a certain design
pattern/design choice shall be changed everywhere in the library and whether we shall update our design philosophy. Consistency across the library is very important for us.`),zr.forEach(o),_f=d(e),wr=i(e,"P",{});var C4=l(wr);Yb=a(C4,`Please make sure to add links to the original codebase/paper to the PR and ideally also ping the
original author directly on the PR so that they can follow the progress and potentially help with questions.`),C4.forEach(o),kf=d(e),br=i(e,"P",{});var H4=l(br);zb=a(H4,"If you are unsure or stuck in the PR, don\u2019t hesitate to leave a message to ask for a first review or help."),H4.forEach(o),$f=d(e),je=i(e,"H2",{class:!0});var np=l(je);Rt=i(np,"A",{id:!0,class:!0,href:!0});var M4=l(Rt);gn=i(M4,"SPAN",{});var F4=l(gn);c(Ts.$$.fragment,F4),F4.forEach(o),M4.forEach(o),Xb=d(np),vn=i(np,"SPAN",{});var j4=l(vn);Qb=a(j4,"How to write a good issue"),j4.forEach(o),np.forEach(o),Pf=d(e),Er=i(e,"P",{});var W4=l(Er);wn=i(W4,"STRONG",{});var U4=l(wn);Jb=a(U4,"The better your issue is written, the higher the chances that it will be quickly resolved."),U4.forEach(o),W4.forEach(o),xf=d(e),I=i(e,"OL",{});var M=l(I);D=i(M,"LI",{});var F=l(D);Kb=a(F,"Make sure that you\u2019ve used the correct template for your issue. You can pick between "),bn=i(F,"EM",{});var B4=l(bn);Vb=a(B4,"Bug Report"),B4.forEach(o),Zb=a(F,", "),En=i(F,"EM",{});var Y4=l(En);e1=a(Y4,"Feature Request"),Y4.forEach(o),t1=a(F,", "),_n=i(F,"EM",{});var z4=l(_n);o1=a(z4,"Feedback about API Design"),z4.forEach(o),s1=a(F,", "),kn=i(F,"EM",{});var X4=l(kn);i1=a(X4,"New model/pipeline/scheduler addition"),X4.forEach(o),r1=a(F,", "),$n=i(F,"EM",{});var Q4=l($n);a1=a(Q4,"Forum"),Q4.forEach(o),l1=a(F,", or a blank issue. Make sure to pick the correct one when opening "),Os=i(F,"A",{href:!0,rel:!0});var J4=l(Os);n1=a(J4,"a new issue"),J4.forEach(o),u1=a(F,"."),F.forEach(o),h1=d(M),_r=i(M,"LI",{});var u_=l(_r);Pn=i(u_,"STRONG",{});var K4=l(Pn);f1=a(K4,"Be precise"),K4.forEach(o),d1=a(u_,": Give your issue a fitting title. Try to formulate your issue description as simple as possible. The more precise you are when submitting an issue, the less time it takes to understand the issue and potentially solve it. Make sure to open an issue for one issue only and not for multiple issues. If you found multiple issues, simply open multiple issues. If your issue is a bug, try to be as precise as possible about what bug it is - you should not just write \u201CError in diffusers\u201D."),u_.forEach(o),p1=d(M),B=i(M,"LI",{});var Ve=l(B);xn=i(Ve,"STRONG",{});var V4=l(xn);c1=a(V4,"Reproducibility"),V4.forEach(o),m1=a(Ve,": No reproducible code snippet == no solution. If you encounter a bug, maintainers "),In=i(Ve,"STRONG",{});var Z4=l(In);y1=a(Z4,"have to be able to reproduce"),Z4.forEach(o),g1=a(Ve," it. Make sure that you include a code snippet that can be copy-pasted into a Python interpreter to reproduce the issue. Make sure that your code snippet works, "),An=i(Ve,"EM",{});var e6=l(An);v1=a(e6,"i.e."),e6.forEach(o),w1=a(Ve," that there are no missing imports or missing links to images, \u2026 Your issue should contain an error message "),qn=i(Ve,"STRONG",{});var t6=l(qn);b1=a(t6,"and"),t6.forEach(o),E1=a(Ve," a code snippet that can be copy-pasted without any changes to reproduce the exact same error message. If your issue is using local model weights or local data that cannot be accessed by the reader, the issue cannot be solved. If you cannot share your data or model, try to make a dummy model or dummy data."),Ve.forEach(o),_1=d(M),kr=i(M,"LI",{});var h_=l(kr);Dn=i(h_,"STRONG",{});var o6=l(Dn);k1=a(o6,"Minimalistic"),o6.forEach(o),$1=a(h_,": Try to help the reader as much as you can to understand the issue as quickly as possible by staying as concise as possible. Remove all code / all information that is irrelevant to the issue. If you have found a bug, try to create the easiest code example you can to demonstrate your issue, do not just dump your whole workflow into the issue as soon as you have found a bug. E.g., if you train a model and get an error at some point during the training, you should first try to understand what part of the training code is responsible for the error and try to reproduce it with a couple of lines. Try to use dummy data instead of full datasets."),h_.forEach(o),P1=d(M),Ln=i(M,"LI",{});var s6=l(Ln);x1=a(s6,"Add links. If you are referring to a certain naming, method, or model make sure to provide a link so that the reader can better understand what you mean. If you are referring to a specific PR or issue, make sure to link it to your issue. Do not assume that the reader knows what you are talking about. The more links you add to your issue the better."),s6.forEach(o),I1=d(M),Ss=i(M,"LI",{});var up=l(Ss);A1=a(up,"Formatting. Make sure to nicely format your issue by formatting code into Python code syntax, and error messages into normal code syntax. See the "),Gs=i(up,"A",{href:!0,rel:!0});var i6=l(Gs);q1=a(i6,"official GitHub formatting docs"),i6.forEach(o),D1=a(up," for more information."),up.forEach(o),L1=d(M),Rn=i(M,"LI",{});var r6=l(Rn);R1=a(r6,"Think of your issue not as a ticket to be solved, but rather as a beautiful entry to a well-written encyclopedia. Every added issue is a contribution to publicly available knowledge. By adding a nicely written issue you not only make it easier for maintainers to solve your issue, but you are helping the whole community to better understand a certain aspect of the library."),r6.forEach(o),M.forEach(o),If=d(e),We=i(e,"H2",{class:!0});var hp=l(We);Tt=i(hp,"A",{id:!0,class:!0,href:!0});var a6=l(Tt);Tn=i(a6,"SPAN",{});var l6=l(Tn);c(Ns.$$.fragment,l6),l6.forEach(o),a6.forEach(o),T1=d(hp),On=i(hp,"SPAN",{});var n6=l(On);O1=a(n6,"How to write a good PR"),n6.forEach(o),hp.forEach(o),Af=d(e),E=i(e,"OL",{});var q=l(E);Sn=i(q,"LI",{});var u6=l(Sn);S1=a(u6,"Be a chameleon. Understand existing design patterns and syntax and make sure your code additions flow seamlessly into the existing code base. Pull requests that significantly diverge from existing design patterns or user interfaces will not be merged."),u6.forEach(o),G1=d(q),Gn=i(q,"LI",{});var h6=l(Gn);N1=a(h6,"Be laser focused. A pull request should solve one problem and one problem only. Make sure to not fall into the trap of \u201Calso fixing another problem while we\u2019re adding it\u201D. It is much more difficult to review pull requests that solve multiple, unrelated problems at once."),h6.forEach(o),C1=d(q),Nn=i(q,"LI",{});var f6=l(Nn);H1=a(f6,"If helpful, try to add a code snippet that displays an example of how your addition can be used."),f6.forEach(o),M1=d(q),Cn=i(q,"LI",{});var d6=l(Cn);F1=a(d6,"The title of your pull request should be a summary of its contribution."),d6.forEach(o),j1=d(q),Hn=i(q,"LI",{});var p6=l(Hn);W1=a(p6,`If your pull request addresses an issue, please mention the issue number in
the pull request description to make sure they are linked (and people
consulting the issue know you are working on it);`),p6.forEach(o),U1=d(q),Cs=i(q,"LI",{});var fp=l(Cs);B1=a(fp,"To indicate a work in progress please prefix the title with "),Mn=i(fp,"CODE",{});var c6=l(Mn);Y1=a(c6,"[WIP]"),c6.forEach(o),z1=a(fp,`. These
are useful to avoid duplicated work, and to differentiate it from PRs ready
to be merged;`),fp.forEach(o),X1=d(q),Hs=i(q,"LI",{});var dp=l(Hs);Q1=a(dp,"Try to formulate and format your text as explained in "),$r=i(dp,"A",{href:!0});var m6=l($r);J1=a(m6,"How to write a good issue"),m6.forEach(o),K1=a(dp,"."),dp.forEach(o),V1=d(q),Fn=i(q,"LI",{});var y6=l(Fn);Z1=a(y6,"Make sure existing tests pass;"),y6.forEach(o),e2=d(q),jn=i(q,"LI",{});var g6=l(jn);t2=a(g6,"Add high-coverage tests. No quality testing = no merge."),g6.forEach(o),q.forEach(o),qf=d(e),Pr=i(e,"UL",{});var v6=l(Pr);Ue=i(v6,"LI",{});var Xr=l(Ue);o2=a(Xr,"If you are adding new "),Wn=i(Xr,"CODE",{});var w6=l(Wn);s2=a(w6,"@slow"),w6.forEach(o),i2=a(Xr,` tests, make sure they pass using
`),Un=i(Xr,"CODE",{});var b6=l(Un);r2=a(b6,"RUN_SLOW=1 python -m pytest tests/test_my_new_model.py"),b6.forEach(o),a2=a(Xr,`.
CircleCI does not run the slow tests, but GitHub actions does every night!`),Xr.forEach(o),v6.forEach(o),Df=d(e),Be=i(e,"OL",{start:!0});var pp=l(Be);Ms=i(pp,"LI",{});var cp=l(Ms);l2=a(cp,"All public methods must have informative docstrings that work nicely with markdown. See "),Bn=i(cp,"CODE",{});var E6=l(Bn);n2=a(E6,"[pipeline_latent_diffusion.py](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion.py)"),E6.forEach(o),u2=a(cp," for an example."),cp.forEach(o),h2=d(pp),ee=i(pp,"LI",{});var Qt=l(ee);f2=a(Qt,"Due to the rapidly growing repository, it is important to make sure that no files that would significantly weigh down the repository are added. This includes images, videos, and other non-text files. We prefer to leverage a hf.co hosted "),Yn=i(Qt,"CODE",{});var _6=l(Yn);d2=a(_6,"dataset"),_6.forEach(o),p2=a(Qt,` like
`),Fs=i(Qt,"A",{href:!0,rel:!0});var k6=l(Fs);zn=i(k6,"CODE",{});var $6=l(zn);c2=a($6,"hf-internal-testing"),$6.forEach(o),k6.forEach(o),m2=a(Qt," or "),js=i(Qt,"A",{href:!0,rel:!0});var P6=l(js);y2=a(P6,"huggingface/documentation-images"),P6.forEach(o),g2=a(Qt,` to place these files.
If an external contribution, feel free to add the images to your PR and ask a Hugging Face member to migrate your images
to this dataset.`),Qt.forEach(o),pp.forEach(o),Lf=d(e),Ye=i(e,"H2",{class:!0});var mp=l(Ye);Ot=i(mp,"A",{id:!0,class:!0,href:!0});var x6=l(Ot);Xn=i(x6,"SPAN",{});var I6=l(Xn);c(Ws.$$.fragment,I6),I6.forEach(o),x6.forEach(o),v2=d(mp),Qn=i(mp,"SPAN",{});var A6=l(Qn);w2=a(A6,"How to open a PR"),A6.forEach(o),mp.forEach(o),Rf=d(e),xr=i(e,"P",{});var q6=l(xr);b2=a(q6,`Before writing code, we strongly advise you to search through the existing PRs or
issues to make sure that nobody is already working on the same thing. If you are
unsure, it is always a good idea to open an issue to get some feedback.`),q6.forEach(o),Tf=d(e),N=i(e,"P",{});var ve=l(N);E2=a(ve,"You will need basic "),Jn=i(ve,"CODE",{});var D6=l(Jn);_2=a(D6,"git"),D6.forEach(o),k2=a(ve,` proficiency to be able to contribute to
\u{1F9E8} Diffusers. `),Kn=i(ve,"CODE",{});var L6=l(Kn);$2=a(L6,"git"),L6.forEach(o),P2=a(ve,` is not the easiest tool to use but it has the greatest
manual. Type `),Vn=i(ve,"CODE",{});var R6=l(Vn);x2=a(R6,"git --help"),R6.forEach(o),I2=a(ve," in a shell and enjoy. If you prefer books, "),Us=i(ve,"A",{href:!0,rel:!0});var T6=l(Us);A2=a(T6,`Pro
Git`),T6.forEach(o),q2=a(ve," is a very good reference."),ve.forEach(o),Of=d(e),St=i(e,"P",{});var yp=l(St);D2=a(yp,"Follow these steps to start contributing ("),Bs=i(yp,"A",{href:!0,rel:!0});var O6=l(Bs);L2=a(O6,"supported Python versions"),O6.forEach(o),R2=a(yp,"):"),yp.forEach(o),Sf=d(e),pe=i(e,"OL",{});var Qr=l(pe);Zn=i(Qr,"LI",{});var S6=l(Zn);Ys=i(S6,"P",{});var gp=l(Ys);T2=a(gp,"Fork the "),zs=i(gp,"A",{href:!0,rel:!0});var G6=l(zs);O2=a(G6,"repository"),G6.forEach(o),S2=a(gp,` by
clicking on the \u2018Fork\u2019 button on the repository\u2019s page. This creates a copy of the code
under your GitHub user account.`),gp.forEach(o),S6.forEach(o),G2=d(Qr),Xs=i(Qr,"LI",{});var vp=l(Xs);eu=i(vp,"P",{});var N6=l(eu);N2=a(N6,"Clone your fork to your local disk, and add the base repository as a remote:"),N6.forEach(o),C2=d(vp),c(Qs.$$.fragment,vp),vp.forEach(o),H2=d(Qr),Js=i(Qr,"LI",{});var wp=l(Js);tu=i(wp,"P",{});var C6=l(tu);M2=a(C6,"Create a new branch to hold your development changes:"),C6.forEach(o),F2=d(wp),c(Ks.$$.fragment,wp),wp.forEach(o),Qr.forEach(o),Gf=d(e),ze=i(e,"P",{});var Ou=l(ze);ou=i(Ou,"STRONG",{});var H6=l(ou);j2=a(H6,"Do not"),H6.forEach(o),W2=a(Ou," work on the "),su=i(Ou,"CODE",{});var M6=l(su);U2=a(M6,"main"),M6.forEach(o),B2=a(Ou," branch."),Ou.forEach(o),Nf=d(e),Vs=i(e,"OL",{start:!0});var F6=l(Vs);Zs=i(F6,"LI",{});var bp=l(Zs);iu=i(bp,"P",{});var j6=l(iu);Y2=a(j6,"Set up a development environment by running the following command in a virtual environment:"),j6.forEach(o),z2=d(bp),c(ei.$$.fragment,bp),bp.forEach(o),F6.forEach(o),Cf=d(e),Gt=i(e,"P",{});var Ep=l(Gt);X2=a(Ep,"If you have already cloned the repo, you might need to "),ru=i(Ep,"CODE",{});var W6=l(ru);Q2=a(W6,"git pull"),W6.forEach(o),J2=a(Ep,` to get the most recent changes in the
library.`),Ep.forEach(o),Hf=d(e),ti=i(e,"OL",{start:!0});var U6=l(ti);au=i(U6,"LI",{});var B6=l(au);K2=a(B6,"Develop the features on your branch."),B6.forEach(o),U6.forEach(o),Mf=d(e),Ir=i(e,"P",{});var Y6=l(Ir);V2=a(Y6,`As you work on the features, you should make sure that the test suite
passes. You should run the tests impacted by your changes like this:`),Y6.forEach(o),Ff=d(e),c(oi.$$.fragment,e),jf=d(e),Ar=i(e,"P",{});var z6=l(Ar);Z2=a(z6,`You can also run the full suite with the following command, but it takes
a beefy machine to produce a result in a decent amount of time now that
Diffusers has grown a lot. Here is the command for it:`),z6.forEach(o),Wf=d(e),c(si.$$.fragment,e),Uf=d(e),ce=i(e,"P",{});var Jr=l(ce);eE=a(Jr,"\u{1F9E8} Diffusers relies on "),lu=i(Jr,"CODE",{});var X6=l(lu);tE=a(X6,"black"),X6.forEach(o),oE=a(Jr," and "),nu=i(Jr,"CODE",{});var Q6=l(nu);sE=a(Q6,"isort"),Q6.forEach(o),iE=a(Jr,` to format its source code
consistently. After you make changes, apply automatic style corrections and code verifications
that can\u2019t be automated in one go with:`),Jr.forEach(o),Bf=d(e),c(ii.$$.fragment,e),Yf=d(e),Nt=i(e,"P",{});var _p=l(Nt);rE=a(_p,"\u{1F9E8} Diffusers also uses "),uu=i(_p,"CODE",{});var J6=l(uu);aE=a(J6,"ruff"),J6.forEach(o),lE=a(_p,` and a few custom scripts to check for coding mistakes. Quality
control runs in CI, however, you can also run the same checks with:`),_p.forEach(o),zf=d(e),c(ri.$$.fragment,e),Xf=d(e),me=i(e,"P",{});var Kr=l(me);nE=a(Kr,"Once you\u2019re happy with your changes, add changed files using "),hu=i(Kr,"CODE",{});var K6=l(hu);uE=a(K6,"git add"),K6.forEach(o),hE=a(Kr,` and
make a commit with `),fu=i(Kr,"CODE",{});var V6=l(fu);fE=a(V6,"git commit"),V6.forEach(o),dE=a(Kr," to record your changes locally:"),Kr.forEach(o),Qf=d(e),c(ai.$$.fragment,e),Jf=d(e),qr=i(e,"P",{});var Z6=l(qr);pE=a(Z6,`It is a good idea to sync your copy of the code with the original
repository regularly. This way you can quickly account for changes:`),Z6.forEach(o),Kf=d(e),c(li.$$.fragment,e),Vf=d(e),Dr=i(e,"P",{});var e$=l(Dr);cE=a(e$,"Push the changes to your account using:"),e$.forEach(o),Zf=d(e),c(ni.$$.fragment,e),ed=d(e),Xe=i(e,"OL",{start:!0});var kp=l(Xe);du=i(kp,"LI",{});var t$=l(du);pu=i(t$,"P",{});var o$=l(pu);mE=a(o$,`Once you are satisfied, go to the
webpage of your fork on GitHub. Click on \u2018Pull request\u2019 to send your changes
to the project maintainers for review.`),o$.forEach(o),t$.forEach(o),yE=d(kp),cu=i(kp,"LI",{});var s$=l(cu);mu=i(s$,"P",{});var i$=l(mu);gE=a(i$,`It\u2019s ok if maintainers ask you for changes. It happens to core contributors
too! So everyone can see the changes in the Pull request, work in your local
branch and push the changes to your fork. They will automatically appear in
the pull request.`),i$.forEach(o),s$.forEach(o),kp.forEach(o),td=d(e),Qe=i(e,"H3",{class:!0});var $p=l(Qe);Ct=i($p,"A",{id:!0,class:!0,href:!0});var r$=l(Ct);yu=i(r$,"SPAN",{});var a$=l(yu);c(ui.$$.fragment,a$),a$.forEach(o),r$.forEach(o),vE=d($p),gu=i($p,"SPAN",{});var l$=l(gu);wE=a(l$,"Tests"),l$.forEach(o),$p.forEach(o),od=d(e),Ht=i(e,"P",{});var Pp=l(Ht);bE=a(Pp,`An extensive test suite is included to test the library behavior and several examples. Library tests can be found in
the `),hi=i(Pp,"A",{href:!0,rel:!0});var n$=l(hi);EE=a(n$,"tests folder"),n$.forEach(o),_E=a(Pp,"."),Pp.forEach(o),sd=d(e),Y=i(e,"P",{});var Jt=l(Y);kE=a(Jt,"We like "),vu=i(Jt,"CODE",{});var u$=l(vu);$E=a(u$,"pytest"),u$.forEach(o),PE=a(Jt," and "),wu=i(Jt,"CODE",{});var h$=l(wu);xE=a(h$,"pytest-xdist"),h$.forEach(o),IE=a(Jt,` because it\u2019s faster. From the root of the
repository, here\u2019s how to run tests with `),bu=i(Jt,"CODE",{});var f$=l(bu);AE=a(f$,"pytest"),f$.forEach(o),qE=a(Jt," for the library:"),Jt.forEach(o),id=d(e),c(fi.$$.fragment,e),rd=d(e),Mt=i(e,"P",{});var xp=l(Mt);DE=a(xp,"In fact, that\u2019s how "),Eu=i(xp,"CODE",{});var d$=l(Eu);LE=a(d$,"make test"),d$.forEach(o),RE=a(xp," is implemented!"),xp.forEach(o),ad=d(e),Lr=i(e,"P",{});var p$=l(Lr);TE=a(p$,`You can specify a smaller set of tests in order to test only the feature
you\u2019re working on.`),p$.forEach(o),ld=d(e),ye=i(e,"P",{});var Vr=l(ye);OE=a(Vr,"By default, slow tests are skipped. Set the "),_u=i(Vr,"CODE",{});var c$=l(_u);SE=a(c$,"RUN_SLOW"),c$.forEach(o),GE=a(Vr,` environment variable to
`),ku=i(Vr,"CODE",{});var m$=l(ku);NE=a(m$,"yes"),m$.forEach(o),CE=a(Vr,` to run them. This will download many gigabytes of models \u2014 make sure you
have enough disk space and a good Internet connection, or a lot of patience!`),Vr.forEach(o),nd=d(e),c(di.$$.fragment,e),ud=d(e),pi=i(e,"P",{});var f_=l(pi);$u=i(f_,"CODE",{});var y$=l($u);HE=a(y$,"unittest"),y$.forEach(o),ME=a(f_," is fully supported, here\u2019s how to run tests with it:"),f_.forEach(o),hd=d(e),c(ci.$$.fragment,e),fd=d(e),Je=i(e,"H3",{class:!0});var Ip=l(Je);Ft=i(Ip,"A",{id:!0,class:!0,href:!0});var g$=l(Ft);Pu=i(g$,"SPAN",{});var v$=l(Pu);c(mi.$$.fragment,v$),v$.forEach(o),g$.forEach(o),FE=d(Ip),xu=i(Ip,"SPAN",{});var w$=l(xu);jE=a(w$,"Syncing forked main with upstream (HuggingFace) main"),w$.forEach(o),Ip.forEach(o),dd=d(e),Rr=i(e,"P",{});var b$=l(Rr);WE=a(b$,`To avoid pinging the upstream repository which adds reference notes to each upstream PR and sends unnecessary notifications to the developers involved in these PRs,
when syncing the main branch of a forked repository, please, follow these steps:`),b$.forEach(o),pd=d(e),jt=i(e,"OL",{});var Ap=l(jt);Iu=i(Ap,"LI",{});var E$=l(Iu);UE=a(E$,"When possible, avoid syncing with the upstream using a branch and PR on the forked repository. Instead, merge directly into the forked main."),E$.forEach(o),BE=d(Ap),Au=i(Ap,"LI",{});var _$=l(Au);YE=a(_$,"If a PR is absolutely necessary, use the following steps after checking out your branch:"),_$.forEach(o),Ap.forEach(o),cd=d(e),c(yi.$$.fragment,e),md=d(e),Ke=i(e,"H3",{class:!0});var qp=l(Ke);Wt=i(qp,"A",{id:!0,class:!0,href:!0});var k$=l(Wt);qu=i(k$,"SPAN",{});var $$=l(qu);c(gi.$$.fragment,$$),$$.forEach(o),k$.forEach(o),zE=d(qp),Du=i(qp,"SPAN",{});var P$=l(Du);XE=a(P$,"Style guide"),P$.forEach(o),qp.forEach(o),yd=d(e),Ut=i(e,"P",{});var Dp=l(Ut);QE=a(Dp,"For documentation strings, \u{1F9E8} Diffusers follows the "),vi=i(Dp,"A",{href:!0,rel:!0});var x$=l(vi);JE=a(x$,"google style"),x$.forEach(o),KE=a(Dp,"."),Dp.forEach(o),this.h()},h(){h(we,"name","hf:doc:metadata"),h(we,"content",JSON.stringify(S$)),h(Ze,"id","how-to-contribute-to-diffusers"),h(Ze,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(Ze,"href","#how-to-contribute-to-diffusers"),h(be,"class","relative group"),h($i,"alt","Join us on Discord"),L$($i.src,p_="https://img.shields.io/Discord/823813159592001537?color=5865F2&logo=Discord&logoColor=white")||h($i,"src",p_),h(ki,"href","https://Discord.gg/G7tWnz98XR"),h(Zt,"href","https://github.com/huggingface/diffusers/blob/main/CODE_OF_CONDUCT.md"),h(Zt,"rel","nofollow"),h(eo,"href","https://huggingface.co/docs/diffusers/conceptual/ethical_guidelines"),h(eo,"rel","nofollow"),h(et,"id","overview"),h(et,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(et,"href","#overview"),h(Ee,"class","relative group"),h(oo,"href","https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers"),h(oo,"rel","nofollow"),h(so,"href","https://discord.gg/G7tWnz98XR"),h(so,"rel","nofollow"),h(io,"href","https://github.com/huggingface/diffusers/issues/new/choose"),h(io,"rel","nofollow"),h(Ai,"start","2"),h(ro,"href","https://github.com/huggingface/diffusers/issues"),h(ro,"rel","nofollow"),h(Di,"start","3"),h(lo,"href","https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22"),h(lo,"rel","nofollow"),h(Ri,"start","4"),h(uo,"href","https://github.com/huggingface/diffusers/tree/main/docs/source"),h(uo,"rel","nofollow"),h(Ti,"start","5"),h(ho,"href","https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3Acommunity-examples"),h(ho,"rel","nofollow"),h(Oi,"start","6"),h(po,"href","https://github.com/huggingface/diffusers/tree/main/examples"),h(po,"rel","nofollow"),h(Gi,"start","7"),h(mo,"href","https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+second+issue%22"),h(mo,"rel","nofollow"),h(Ni,"start","8"),h(yo,"href","https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+pipeline%2Fmodel%22"),h(yo,"rel","nofollow"),h(go,"href","https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+scheduler%22"),h(go,"rel","nofollow"),h(vo,"href","https://github.com/huggingface/diffusers/blob/main/PHILOSOPHY.md"),h(vo,"rel","nofollow"),h(Ci,"start","9"),h(Hi,"href","#how-to-open-a-pr"),h(ot,"id","1-asking-and-answering-questions-on-the-diffusers-discussion-forum-or-on-the-diffusers-discord"),h(ot,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(ot,"href","#1-asking-and-answering-questions-on-the-diffusers-discussion-forum-or-on-the-diffusers-discord"),h(ke,"class","relative group"),h(Eo,"href","https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/"),h(Eo,"rel","nofollow"),h(_o,"href","https://discord.gg/G7tWnz98XR"),h(_o,"rel","nofollow"),h(Fi,"href","#how-to-write-a-good-issue"),h(ko,"href","https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/63"),h(ko,"rel","nofollow"),h(st,"id","2-opening-new-issues-on-the-github-issues-tab"),h(st,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(st,"href","#2-opening-new-issues-on-the-github-issues-tab"),h($e,"class","relative group"),h(Po,"href","https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/63"),h(Po,"rel","nofollow"),h(xo,"href","https://discord.gg/G7tWnz98XR"),h(xo,"rel","nofollow"),h(qo,"href","https://www.deepl.com/translator"),h(qo,"rel","nofollow"),h(it,"id","21-reproducible-minimal-bug-reports"),h(it,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(it,"href","#21-reproducible-minimal-bug-reports"),h(Pe,"class","relative group"),h(To,"href","https://huggingface.co"),h(To,"rel","nofollow"),h(Xi,"href","#how-to-write-a-good-issue"),h(Oo,"href","https://github.com/huggingface/diffusers/issues/new/choose"),h(Oo,"rel","nofollow"),h(nt,"id","22-feature-requests"),h(nt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(nt,"href","#22-feature-requests"),h(xe,"class","relative group"),h(j,"start","2"),h(Co,"href","https://github.com/huggingface/diffusers/issues/new?assignees=&labels=&template=feature_request.md&title="),h(Co,"rel","nofollow"),h(ht,"id","23-feedback"),h(ht,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(ht,"href","#23-feedback"),h(Ie,"class","relative group"),h(Mo,"href","https://huggingface.co/docs/diffusers/conceptual/philosophy"),h(Mo,"rel","nofollow"),h(Fo,"href","https://github.com/huggingface/diffusers/issues/new?assignees=&labels=&template=feedback.md&title="),h(Fo,"rel","nofollow"),h(pt,"id","24-technical-questions"),h(pt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(pt,"href","#24-technical-questions"),h(Ae,"class","relative group"),h(Wo,"href","https://github.com/huggingface/diffusers/issues/new?assignees=&labels=bug&template=bug-report.yml"),h(Wo,"rel","nofollow"),h(mt,"id","25-proposal-to-add-a-new-model-scheduler-or-pipeline"),h(mt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(mt,"href","#25-proposal-to-add-a-new-model-scheduler-or-pipeline"),h(qe,"class","relative group"),h(Bo,"href","https://github.com/huggingface/diffusers/issues/new?assignees=&labels=New+model%2Fpipeline%2Fscheduler&template=new-model-addition.yml"),h(Bo,"rel","nofollow"),h(gt,"id","3-answering-issues-on-the-github-issues-tab"),h(gt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(gt,"href","#3-answering-issues-on-the-github-issues-tab"),h(De,"class","relative group"),h(zo,"href","https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/63"),h(zo,"rel","nofollow"),h(Xo,"href","https://discord.gg/G7tWnz98XR"),h(Xo,"rel","nofollow"),h(or,"href","#how-to-open-a-pr"),h(wt,"id","4-fixing-a-good-first-issue"),h(wt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(wt,"href","#4-fixing-a-good-first-issue"),h(Re,"class","relative group"),h(Jo,"href","https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22"),h(Jo,"rel","nofollow"),h(bt,"id","5-contribute-to-the-documentation"),h(bt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(bt,"href","#5-contribute-to-the-documentation"),h(Oe,"class","relative group"),h(Vo,"href","https://huggingface.co/docs/diffusers/index"),h(Vo,"rel","nofollow"),h(Zo,"href","https://github.com/huggingface/diffusers/tree/main/docs/source"),h(Zo,"rel","nofollow"),h(es,"href","https://github.com/huggingface/diffusers/tree/main/docs"),h(es,"rel","nofollow"),h(_t,"id","6-contribute-a-community-pipeline"),h(_t,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(_t,"href","#6-contribute-a-community-pipeline"),h(Se,"class","relative group"),h(os,"href","https://huggingface.co/docs/diffusers/api/pipelines/overview"),h(os,"rel","nofollow"),h(ss,"href","https://huggingface.co/docs/diffusers/api/models"),h(ss,"rel","nofollow"),h(is,"href","https://huggingface.co/docs/diffusers/api/schedulers/overview"),h(is,"rel","nofollow"),h(rs,"href","https://github.com/huggingface/diffusers/tree/main/src/diffusers/pipelines"),h(rs,"rel","nofollow"),h(as,"href","https://github.com/huggingface/diffusers/tree/main/examples/community"),h(as,"rel","nofollow"),h(ls,"href","https://pypi.org/project/diffusers/"),h(ls,"rel","nofollow"),h(ns,"href","https://github.com/huggingface/diffusers/tree/main/examples/community"),h(ns,"rel","nofollow"),h(us,"href","https://github.com/huggingface/diffusers/tree/main/examples/community/README.md"),h(us,"rel","nofollow"),h(hs,"href","https://github.com/huggingface/diffusers/pull/2400"),h(hs,"rel","nofollow"),h(Pt,"id","7-contribute-to-training-examples"),h(Pt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(Pt,"href","#7-contribute-to-training-examples"),h(Ge,"class","relative group"),h(ds,"href","https://github.com/huggingface/diffusers/tree/main/examples"),h(ds,"rel","nofollow"),h(ps,"href","https://github.com/huggingface/diffusers/tree/main/examples/research_projects"),h(ps,"rel","nofollow"),h(cs,"href","https://github.com/huggingface/diffusers/tree/main/examples"),h(cs,"rel","nofollow"),h(hr,"href","#contribute-a-community-pipeline"),h(Ne,"href","https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/requirements.txt"),h(Ne,"rel","nofollow"),h(gs,"href","https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth.py"),h(gs,"rel","nofollow"),h(vs,"href","https://github.com/huggingface/accelerate"),h(vs,"rel","nofollow"),h(bs,"href","https://github.com/huggingface/diffusers/tree/main/examples/dreambooth#running-locally-with-pytorch"),h(bs,"rel","nofollow"),h(_s,"href","https://api.wandb.ai/report/patrickvonplaten/xm6cd5q5"),h(_s,"rel","nofollow"),h(ks,"href","https://github.com/huggingface/diffusers/tree/main/examples/research_projects/intel_opts#diffusers-examples-with-intel-optimizations"),h(ks,"rel","nofollow"),h($s,"href","https://github.com/huggingface/diffusers/blob/main/examples/test_examples.py"),h($s,"rel","nofollow"),h(qt,"id","8-fixing-a-good-second-issue"),h(qt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(qt,"href","#8-fixing-a-good-second-issue"),h(Me,"class","relative group"),h(xs,"href","https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+second+issue%22"),h(xs,"rel","nofollow"),h(Is,"href","https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22"),h(Is,"rel","nofollow"),h(Dt,"id","9-adding-pipelines-models-schedulers"),h(Dt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(Dt,"href","#9-adding-pipelines-models-schedulers"),h(Fe,"class","relative group"),h(qs,"href","https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+pipeline%2Fmodel%22"),h(qs,"rel","nofollow"),h(Ds,"href","https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+scheduler%22"),h(Ds,"rel","nofollow"),h(Ls,"href","https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+second+issue%22"),h(Ls,"rel","nofollow"),h(Rs,"href","https://github.com/huggingface/diffusers/issues/new?assignees=&labels=&template=feedback.md&title="),h(Rs,"rel","nofollow"),h(Rt,"id","how-to-write-a-good-issue"),h(Rt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(Rt,"href","#how-to-write-a-good-issue"),h(je,"class","relative group"),h(Os,"href","https://github.com/huggingface/diffusers/issues/new/choose"),h(Os,"rel","nofollow"),h(Gs,"href","https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax"),h(Gs,"rel","nofollow"),h(Tt,"id","how-to-write-a-good-pr"),h(Tt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(Tt,"href","#how-to-write-a-good-pr"),h(We,"class","relative group"),h($r,"href","#how-to-write-a-good-issue"),h(Fs,"href","https://huggingface.co/hf-internal-testing"),h(Fs,"rel","nofollow"),h(js,"href","https://huggingface.co/datasets/huggingface/documentation-images"),h(js,"rel","nofollow"),h(Be,"start","10"),h(Ot,"id","how-to-open-a-pr"),h(Ot,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(Ot,"href","#how-to-open-a-pr"),h(Ye,"class","relative group"),h(Us,"href","https://git-scm.com/book/en/v2"),h(Us,"rel","nofollow"),h(Bs,"href","https://github.com/huggingface/diffusers/blob/main/setup.py#L244"),h(Bs,"rel","nofollow"),h(zs,"href","https://github.com/huggingface/diffusers"),h(zs,"rel","nofollow"),h(Vs,"start","4"),h(ti,"start","5"),h(Xe,"start","6"),h(Ct,"id","tests"),h(Ct,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(Ct,"href","#tests"),h(Qe,"class","relative group"),h(hi,"href","https://github.com/huggingface/diffusers/tree/main/tests"),h(hi,"rel","nofollow"),h(Ft,"id","syncing-forked-main-with-upstream-huggingface-main"),h(Ft,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(Ft,"href","#syncing-forked-main-with-upstream-huggingface-main"),h(Je,"class","relative group"),h(Wt,"id","style-guide"),h(Wt,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),h(Wt,"href","#style-guide"),h(Ke,"class","relative group"),h(vi,"href","https://google.github.io/styleguide/pyguide.html"),h(vi,"rel","nofollow")},m(e,n){t(document.head,we),u(e,Su,n),u(e,be,n),t(be,Ze),t(Ze,Zr),m(Kt,Zr,null),t(be,Lp),t(be,ea),t(ea,Rp),u(e,Gu,n),u(e,_i,n),t(_i,Tp),u(e,Nu,n),u(e,Vt,n),t(Vt,Op),t(Vt,ki),t(ki,$i),u(e,Cu,n),u(e,te,n),t(te,Sp),t(te,Zt),t(Zt,Gp),t(te,Np),t(te,eo),t(eo,Cp),t(te,Hp),u(e,Hu,n),u(e,Pi,n),t(Pi,Mp),u(e,Mu,n),u(e,Ee,n),t(Ee,et),t(et,ta),m(to,ta,null),t(Ee,Fp),t(Ee,oa),t(oa,jp),u(e,Fu,n),u(e,xi,n),t(xi,Wp),u(e,ju,n),u(e,Ii,n),t(Ii,Up),u(e,Wu,n),u(e,b,n),t(b,sa),t(sa,ia),t(ia,_e),t(_e,Bp),t(_e,oo),t(oo,Yp),t(_e,zp),t(_e,so),t(so,Xp),t(_e,Qp),t(b,Jp),t(b,ra),t(ra,Ai),t(Ai,qi),t(qi,Kp),t(qi,io),t(io,Vp),t(b,Zp),t(b,aa),t(aa,Di),t(Di,Li),t(Li,ec),t(Li,ro),t(ro,tc),t(b,oc),t(b,la),t(la,Ri),t(Ri,ao),t(ao,sc),t(ao,lo),t(lo,ic),t(ao,rc),t(b,ac),t(b,na),t(na,Ti),t(Ti,no),t(no,lc),t(no,uo),t(uo,nc),t(no,uc),t(b,hc),t(b,ua),t(ua,Oi),t(Oi,Si),t(Si,fc),t(Si,ho),t(ho,dc),t(b,pc),t(b,ha),t(ha,Gi),t(Gi,fo),t(fo,cc),t(fo,po),t(po,mc),t(fo,yc),t(b,gc),t(b,fa),t(fa,Ni),t(Ni,co),t(co,vc),t(co,mo),t(mo,wc),t(co,bc),t(b,Ec),t(b,da),t(da,Ci),t(Ci,J),t(J,_c),t(J,yo),t(yo,kc),t(J,$c),t(J,go),t(go,Pc),t(J,xc),t(J,vo),t(vo,Ic),t(J,Ac),u(e,Uu,n),u(e,tt,n),t(tt,qc),t(tt,pa),t(pa,Dc),t(tt,Lc),u(e,Bu,n),u(e,wo,n),t(wo,Rc),t(wo,Hi),t(Hi,Tc),u(e,Yu,n),u(e,ke,n),t(ke,ot),t(ot,ca),m(bo,ca,null),t(ke,Oc),t(ke,ma),t(ma,Sc),u(e,zu,n),u(e,oe,n),t(oe,Gc),t(oe,Eo),t(Eo,Nc),t(oe,Cc),t(oe,_o),t(_o,Hc),t(oe,Mc),u(e,Xu,n),u(e,w,n),t(w,ya),t(ya,Fc),t(w,jc),t(w,ga),t(ga,Wc),t(w,Uc),t(w,va),t(va,Bc),t(w,Yc),t(w,wa),t(wa,zc),t(w,Xc),t(w,ba),t(ba,Qc),t(w,Jc),t(w,Ea),t(Ea,Kc),t(w,Vc),t(w,_a),t(_a,Zc),t(w,em),t(w,ka),t(ka,tm),t(w,om),t(w,$a),t($a,sm),t(w,im),t(w,Pa),t(Pa,rm),u(e,Qu,n),u(e,Mi,n),t(Mi,am),u(e,Ju,n),u(e,k,n),t(k,xa),t(xa,lm),t(k,nm),t(k,Ia),t(Ia,um),t(k,hm),t(k,Aa),t(Aa,fm),t(k,dm),t(k,qa),t(qa,pm),t(k,cm),t(k,Da),t(Da,mm),t(k,ym),t(k,La),t(La,gm),t(k,vm),t(k,Ra),t(Ra,wm),t(k,bm),t(k,Fi),t(Fi,Em),t(k,_m),u(e,Ku,n),u(e,K,n),t(K,Ta),t(Ta,km),t(K,$m),t(K,ko),t(ko,Oa),t(Oa,Pm),t(K,xm),t(K,Sa),t(Sa,Im),t(K,Am),u(e,Vu,n),u(e,$e,n),t($e,st),t(st,Ga),m($o,Ga,null),t($e,qm),t($e,Na),t(Na,Dm),u(e,Zu,n),u(e,ji,n),t(ji,Lm),u(e,eh,n),u(e,Wi,n),t(Wi,Rm),u(e,th,n),u(e,R,n),t(R,Tm),t(R,Ca),t(Ca,Om),t(R,Sm),t(R,Ha),t(Ha,Gm),t(R,Nm),t(R,Ma),t(Ma,Cm),t(R,Hm),t(R,Po),t(Po,Mm),t(R,Fm),t(R,xo),t(xo,jm),t(R,Wm),u(e,oh,n),u(e,Io,n),t(Io,Fa),t(Fa,Um),t(Io,Bm),u(e,sh,n),u(e,G,n),t(G,ja),t(ja,Ym),t(G,zm),t(G,Wa),t(Wa,Xm),t(G,Qm),t(G,Ao),t(Ao,Jm),t(Ao,qo),t(qo,Km),t(Ao,Vm),t(G,Zm),t(G,Do),t(Do,ey),t(Do,Ua),t(Ua,ty),t(Do,oy),t(G,sy),t(G,Ba),t(Ba,iy),u(e,ih,n),u(e,Ui,n),t(Ui,ry),u(e,rh,n),u(e,Pe,n),t(Pe,it),t(it,Ya),m(Lo,Ya,null),t(Pe,ay),t(Pe,za),t(za,ly),u(e,ah,n),u(e,Bi,n),t(Bi,ny),u(e,lh,n),u(e,P,n),t(P,Yi),t(Yi,uy),t(Yi,Xa),t(Xa,hy),t(P,fy),t(P,Qa),t(Qa,dy),t(P,py),t(P,Ja),t(Ja,cy),t(P,my),t(P,rt),t(rt,Ka),t(Ka,yy),t(rt,gy),t(rt,Va),t(Va,vy),t(rt,wy),t(P,by),t(P,Za),t(Za,Ey),t(P,_y),t(P,zi),t(zi,el),t(el,ky),t(zi,$y),t(P,Py),t(P,Ro),t(Ro,xy),t(Ro,To),t(To,Iy),t(Ro,Ay),u(e,nh,n),u(e,at,n),t(at,qy),t(at,Xi),t(Xi,Dy),t(at,Ly),u(e,uh,n),u(e,lt,n),t(lt,Ry),t(lt,Oo),t(Oo,Ty),t(lt,Oy),u(e,hh,n),u(e,xe,n),t(xe,nt),t(nt,tl),m(So,tl,null),t(xe,Sy),t(xe,ol),t(ol,Gy),u(e,fh,n),u(e,Qi,n),t(Qi,Ny),u(e,dh,n),u(e,Ji,n),t(Ji,sl),t(sl,Cy),u(e,ph,n),u(e,se,n),t(se,il),t(il,Hy),t(se,My),t(se,rl),t(rl,Fy),t(se,jy),t(se,al),t(al,Wy),u(e,ch,n),u(e,j,n),t(j,Go),t(Go,Uy),t(Go,ll),t(ll,By),t(Go,Yy),t(j,zy),t(j,No),t(No,Xy),t(No,nl),t(nl,Qy),t(No,Jy),t(j,Ky),t(j,ul),t(ul,Vy),t(j,Zy),t(j,hl),t(hl,eg),u(e,mh,n),u(e,ut,n),t(ut,tg),t(ut,Co),t(Co,og),t(ut,sg),u(e,yh,n),u(e,Ie,n),t(Ie,ht),t(ht,fl),m(Ho,fl,null),t(Ie,ig),t(Ie,dl),t(dl,rg),u(e,gh,n),u(e,ft,n),t(ft,ag),t(ft,Mo),t(Mo,lg),t(ft,ng),u(e,vh,n),u(e,dt,n),t(dt,ug),t(dt,Fo),t(Fo,hg),t(dt,fg),u(e,wh,n),u(e,Ae,n),t(Ae,pt),t(pt,pl),m(jo,pl,null),t(Ae,dg),t(Ae,cl),t(cl,pg),u(e,bh,n),u(e,Ki,n),t(Ki,cg),u(e,Eh,n),u(e,ct,n),t(ct,mg),t(ct,Wo),t(Wo,yg),t(ct,gg),u(e,_h,n),u(e,qe,n),t(qe,mt),t(mt,ml),m(Uo,ml,null),t(qe,vg),t(qe,yl),t(yl,wg),u(e,kh,n),u(e,Vi,n),t(Vi,bg),u(e,$h,n),u(e,ie,n),t(ie,gl),t(gl,Eg),t(ie,_g),t(ie,vl),t(vl,kg),t(ie,$g),t(ie,wl),t(wl,Pg),u(e,Ph,n),u(e,Zi,n),t(Zi,xg),u(e,xh,n),u(e,yt,n),t(yt,Ig),t(yt,Bo),t(Bo,Ag),t(yt,qg),u(e,Ih,n),u(e,De,n),t(De,gt),t(gt,bl),m(Yo,bl,null),t(De,Dg),t(De,El),t(El,Lg),u(e,Ah,n),u(e,er,n),t(er,Rg),u(e,qh,n),u(e,W,n),t(W,_l),t(_l,Tg),t(W,Og),t(W,kl),t(kl,Sg),t(W,Gg),t(W,$l),t($l,Ng),t(W,Cg),t(W,Pl),t(Pl,Hg),u(e,Dh,n),u(e,Le,n),t(Le,Mg),t(Le,zo),t(zo,Fg),t(Le,jg),t(Le,Xo),t(Xo,Wg),u(e,Lh,n),u(e,tr,n),t(tr,Ug),u(e,Rh,n),u(e,vt,n),t(vt,Bg),t(vt,or),t(or,Yg),t(vt,zg),u(e,Th,n),u(e,Re,n),t(Re,wt),t(wt,xl),m(Qo,xl,null),t(Re,Xg),t(Re,sr),t(sr,Qg),t(sr,Il),t(Il,Jg),u(e,Oh,n),u(e,Te,n),t(Te,Al),t(Al,Kg),t(Te,Vg),t(Te,Jo),t(Jo,Zg),t(Te,ev),u(e,Sh,n),u(e,re,n),t(re,ql),t(ql,tv),t(re,ov),t(re,Dl),t(Dl,sv),t(re,iv),t(re,Ll),t(Ll,rv),u(e,Gh,n),u(e,Oe,n),t(Oe,bt),t(bt,Rl),m(Ko,Rl,null),t(Oe,av),t(Oe,Tl),t(Tl,lv),u(e,Nh,n),u(e,ae,n),t(ae,nv),t(ae,Ol),t(Ol,uv),t(ae,hv),t(ae,Sl),t(Sl,fv),t(ae,dv),u(e,Ch,n),u(e,ir,n),t(ir,pv),u(e,Hh,n),u(e,T,n),t(T,Gl),t(Gl,cv),t(T,mv),t(T,Nl),t(Nl,yv),t(T,gv),t(T,Cl),t(Cl,vv),t(T,wv),t(T,Hl),t(Hl,bv),t(T,Ev),t(T,Ml),t(Ml,_v),t(T,kv),t(T,Fl),t(Fl,$v),u(e,Mh,n),u(e,le,n),t(le,Pv),t(le,Vo),t(Vo,xv),t(le,Iv),t(le,Zo),t(Zo,Av),t(le,qv),u(e,Fh,n),u(e,Et,n),t(Et,Dv),t(Et,es),t(es,Lv),t(Et,Rv),u(e,jh,n),u(e,Se,n),t(Se,_t),t(_t,jl),m(ts,jl,null),t(Se,Tv),t(Se,Wl),t(Wl,Ov),u(e,Wh,n),u(e,V,n),t(V,os),t(os,Sv),t(V,Gv),t(V,ss),t(ss,Nv),t(V,Cv),t(V,is),t(is,Hv),t(V,Mv),u(e,Uh,n),u(e,kt,n),t(kt,Ul),t(Ul,Fv),t(kt,jv),t(kt,Bl),t(Bl,Wv),u(e,Bh,n),u(e,rr,n),t(rr,Uv),u(e,Yh,n),u(e,O,n),t(O,Bv),t(O,rs),t(rs,Yv),t(O,zv),t(O,Yl),t(Yl,Xv),t(O,Qv),t(O,zl),t(zl,Jv),t(O,Kv),t(O,as),t(as,Vv),t(O,Zv),t(O,ls),t(ls,ew),t(O,tw),u(e,zh,n),u(e,ar,n),t(ar,ow),u(e,Xh,n),u(e,ne,n),t(ne,sw),t(ne,ns),t(ns,iw),t(ne,rw),t(ne,us),t(us,aw),t(ne,lw),u(e,Qh,n),u(e,$t,n),t($t,nw),t($t,hs),t(hs,uw),t($t,hw),u(e,Jh,n),u(e,lr,n),t(lr,fw),u(e,Kh,n),u(e,nr,n),t(nr,dw),u(e,Vh,n),u(e,Ge,n),t(Ge,Pt),t(Pt,Xl),m(fs,Xl,null),t(Ge,pw),t(Ge,Ql),t(Ql,cw),u(e,Zh,n),u(e,xt,n),t(xt,mw),t(xt,ds),t(ds,yw),t(xt,gw),u(e,ef,n),u(e,ur,n),t(ur,vw),u(e,tf,n),u(e,It,n),t(It,Jl),t(Jl,ww),t(It,bw),t(It,Kl),t(Kl,Ew),u(e,of,n),u(e,x,n),t(x,_w),t(x,ps),t(ps,kw),t(x,$w),t(x,cs),t(cs,Pw),t(x,xw),t(x,Vl),t(Vl,Iw),t(x,Aw),t(x,Zl),t(Zl,qw),t(x,Dw),t(x,hr),t(hr,Lw),t(x,Rw),t(x,en),t(en,Tw),t(x,Ow),u(e,sf,n),u(e,fr,n),t(fr,Sw),u(e,rf,n),m(ms,e,n),u(e,af,n),u(e,dr,n),t(dr,Gw),u(e,lf,n),m(ys,e,n),u(e,nf,n),u(e,ue,n),t(ue,Nw),t(ue,tn),t(tn,Cw),t(ue,Hw),t(ue,Ne),t(Ne,Mw),t(Ne,on),t(on,Fw),t(Ne,jw),t(ue,Ww),u(e,uf,n),u(e,pr,n),t(pr,Uw),u(e,hf,n),u(e,he,n),t(he,sn),t(sn,Bw),t(he,Yw),t(he,cr),t(cr,zw),t(cr,rn),t(rn,Xw),t(he,Qw),t(he,Ce),t(Ce,Jw),t(Ce,an),t(an,Kw),t(Ce,Vw),t(Ce,ln),t(ln,Zw),t(Ce,eb),u(e,ff,n),u(e,U,n),t(U,tb),t(U,gs),t(gs,ob),t(U,sb),t(U,vs),t(vs,ib),t(U,rb),t(U,nn),t(nn,ab),t(U,lb),u(e,df,n),u(e,fe,n),t(fe,ws),t(ws,nb),t(ws,bs),t(bs,ub),t(ws,hb),t(fe,fb),t(fe,Es),t(Es,db),t(Es,_s),t(_s,pb),t(Es,cb),t(fe,mb),t(fe,He),t(He,yb),t(He,un),t(un,gb),t(He,vb),t(He,ks),t(ks,wb),t(He,bb),u(e,pf,n),u(e,At,n),t(At,Eb),t(At,$s),t($s,_b),t(At,kb),u(e,cf,n),u(e,Me,n),t(Me,qt),t(qt,hn),m(Ps,hn,null),t(Me,$b),t(Me,mr),t(mr,Pb),t(mr,fn),t(fn,xb),u(e,mf,n),u(e,Z,n),t(Z,dn),t(dn,Ib),t(Z,Ab),t(Z,xs),t(xs,qb),t(Z,Db),t(Z,Is),t(Is,Lb),t(Z,Rb),u(e,yf,n),u(e,Fe,n),t(Fe,Dt),t(Dt,pn),m(As,pn,null),t(Fe,Tb),t(Fe,cn),t(cn,Ob),u(e,gf,n),u(e,yr,n),t(yr,Sb),u(e,vf,n),u(e,gr,n),t(gr,Gb),u(e,wf,n),u(e,vr,n),t(vr,Nb),u(e,bf,n),u(e,Lt,n),t(Lt,mn),t(mn,qs),t(qs,Cb),t(Lt,Hb),t(Lt,yn),t(yn,Ds),t(Ds,Mb),u(e,Ef,n),u(e,de,n),t(de,Fb),t(de,Ls),t(Ls,jb),t(de,Wb),t(de,Rs),t(Rs,Ub),t(de,Bb),u(e,_f,n),u(e,wr,n),t(wr,Yb),u(e,kf,n),u(e,br,n),t(br,zb),u(e,$f,n),u(e,je,n),t(je,Rt),t(Rt,gn),m(Ts,gn,null),t(je,Xb),t(je,vn),t(vn,Qb),u(e,Pf,n),u(e,Er,n),t(Er,wn),t(wn,Jb),u(e,xf,n),u(e,I,n),t(I,D),t(D,Kb),t(D,bn),t(bn,Vb),t(D,Zb),t(D,En),t(En,e1),t(D,t1),t(D,_n),t(_n,o1),t(D,s1),t(D,kn),t(kn,i1),t(D,r1),t(D,$n),t($n,a1),t(D,l1),t(D,Os),t(Os,n1),t(D,u1),t(I,h1),t(I,_r),t(_r,Pn),t(Pn,f1),t(_r,d1),t(I,p1),t(I,B),t(B,xn),t(xn,c1),t(B,m1),t(B,In),t(In,y1),t(B,g1),t(B,An),t(An,v1),t(B,w1),t(B,qn),t(qn,b1),t(B,E1),t(I,_1),t(I,kr),t(kr,Dn),t(Dn,k1),t(kr,$1),t(I,P1),t(I,Ln),t(Ln,x1),t(I,I1),t(I,Ss),t(Ss,A1),t(Ss,Gs),t(Gs,q1),t(Ss,D1),t(I,L1),t(I,Rn),t(Rn,R1),u(e,If,n),u(e,We,n),t(We,Tt),t(Tt,Tn),m(Ns,Tn,null),t(We,T1),t(We,On),t(On,O1),u(e,Af,n),u(e,E,n),t(E,Sn),t(Sn,S1),t(E,G1),t(E,Gn),t(Gn,N1),t(E,C1),t(E,Nn),t(Nn,H1),t(E,M1),t(E,Cn),t(Cn,F1),t(E,j1),t(E,Hn),t(Hn,W1),t(E,U1),t(E,Cs),t(Cs,B1),t(Cs,Mn),t(Mn,Y1),t(Cs,z1),t(E,X1),t(E,Hs),t(Hs,Q1),t(Hs,$r),t($r,J1),t(Hs,K1),t(E,V1),t(E,Fn),t(Fn,Z1),t(E,e2),t(E,jn),t(jn,t2),u(e,qf,n),u(e,Pr,n),t(Pr,Ue),t(Ue,o2),t(Ue,Wn),t(Wn,s2),t(Ue,i2),t(Ue,Un),t(Un,r2),t(Ue,a2),u(e,Df,n),u(e,Be,n),t(Be,Ms),t(Ms,l2),t(Ms,Bn),t(Bn,n2),t(Ms,u2),t(Be,h2),t(Be,ee),t(ee,f2),t(ee,Yn),t(Yn,d2),t(ee,p2),t(ee,Fs),t(Fs,zn),t(zn,c2),t(ee,m2),t(ee,js),t(js,y2),t(ee,g2),u(e,Lf,n),u(e,Ye,n),t(Ye,Ot),t(Ot,Xn),m(Ws,Xn,null),t(Ye,v2),t(Ye,Qn),t(Qn,w2),u(e,Rf,n),u(e,xr,n),t(xr,b2),u(e,Tf,n),u(e,N,n),t(N,E2),t(N,Jn),t(Jn,_2),t(N,k2),t(N,Kn),t(Kn,$2),t(N,P2),t(N,Vn),t(Vn,x2),t(N,I2),t(N,Us),t(Us,A2),t(N,q2),u(e,Of,n),u(e,St,n),t(St,D2),t(St,Bs),t(Bs,L2),t(St,R2),u(e,Sf,n),u(e,pe,n),t(pe,Zn),t(Zn,Ys),t(Ys,T2),t(Ys,zs),t(zs,O2),t(Ys,S2),t(pe,G2),t(pe,Xs),t(Xs,eu),t(eu,N2),t(Xs,C2),m(Qs,Xs,null),t(pe,H2),t(pe,Js),t(Js,tu),t(tu,M2),t(Js,F2),m(Ks,Js,null),u(e,Gf,n),u(e,ze,n),t(ze,ou),t(ou,j2),t(ze,W2),t(ze,su),t(su,U2),t(ze,B2),u(e,Nf,n),u(e,Vs,n),t(Vs,Zs),t(Zs,iu),t(iu,Y2),t(Zs,z2),m(ei,Zs,null),u(e,Cf,n),u(e,Gt,n),t(Gt,X2),t(Gt,ru),t(ru,Q2),t(Gt,J2),u(e,Hf,n),u(e,ti,n),t(ti,au),t(au,K2),u(e,Mf,n),u(e,Ir,n),t(Ir,V2),u(e,Ff,n),m(oi,e,n),u(e,jf,n),u(e,Ar,n),t(Ar,Z2),u(e,Wf,n),m(si,e,n),u(e,Uf,n),u(e,ce,n),t(ce,eE),t(ce,lu),t(lu,tE),t(ce,oE),t(ce,nu),t(nu,sE),t(ce,iE),u(e,Bf,n),m(ii,e,n),u(e,Yf,n),u(e,Nt,n),t(Nt,rE),t(Nt,uu),t(uu,aE),t(Nt,lE),u(e,zf,n),m(ri,e,n),u(e,Xf,n),u(e,me,n),t(me,nE),t(me,hu),t(hu,uE),t(me,hE),t(me,fu),t(fu,fE),t(me,dE),u(e,Qf,n),m(ai,e,n),u(e,Jf,n),u(e,qr,n),t(qr,pE),u(e,Kf,n),m(li,e,n),u(e,Vf,n),u(e,Dr,n),t(Dr,cE),u(e,Zf,n),m(ni,e,n),u(e,ed,n),u(e,Xe,n),t(Xe,du),t(du,pu),t(pu,mE),t(Xe,yE),t(Xe,cu),t(cu,mu),t(mu,gE),u(e,td,n),u(e,Qe,n),t(Qe,Ct),t(Ct,yu),m(ui,yu,null),t(Qe,vE),t(Qe,gu),t(gu,wE),u(e,od,n),u(e,Ht,n),t(Ht,bE),t(Ht,hi),t(hi,EE),t(Ht,_E),u(e,sd,n),u(e,Y,n),t(Y,kE),t(Y,vu),t(vu,$E),t(Y,PE),t(Y,wu),t(wu,xE),t(Y,IE),t(Y,bu),t(bu,AE),t(Y,qE),u(e,id,n),m(fi,e,n),u(e,rd,n),u(e,Mt,n),t(Mt,DE),t(Mt,Eu),t(Eu,LE),t(Mt,RE),u(e,ad,n),u(e,Lr,n),t(Lr,TE),u(e,ld,n),u(e,ye,n),t(ye,OE),t(ye,_u),t(_u,SE),t(ye,GE),t(ye,ku),t(ku,NE),t(ye,CE),u(e,nd,n),m(di,e,n),u(e,ud,n),u(e,pi,n),t(pi,$u),t($u,HE),t(pi,ME),u(e,hd,n),m(ci,e,n),u(e,fd,n),u(e,Je,n),t(Je,Ft),t(Ft,Pu),m(mi,Pu,null),t(Je,FE),t(Je,xu),t(xu,jE),u(e,dd,n),u(e,Rr,n),t(Rr,WE),u(e,pd,n),u(e,jt,n),t(jt,Iu),t(Iu,UE),t(jt,BE),t(jt,Au),t(Au,YE),u(e,cd,n),m(yi,e,n),u(e,md,n),u(e,Ke,n),t(Ke,Wt),t(Wt,qu),m(gi,qu,null),t(Ke,zE),t(Ke,Du),t(Du,XE),u(e,yd,n),u(e,Ut,n),t(Ut,QE),t(Ut,vi),t(vi,JE),t(Ut,KE),gd=!0},p:R$,i(e){gd||(y(Kt.$$.fragment,e),y(to.$$.fragment,e),y(bo.$$.fragment,e),y($o.$$.fragment,e),y(Lo.$$.fragment,e),y(So.$$.fragment,e),y(Ho.$$.fragment,e),y(jo.$$.fragment,e),y(Uo.$$.fragment,e),y(Yo.$$.fragment,e),y(Qo.$$.fragment,e),y(Ko.$$.fragment,e),y(ts.$$.fragment,e),y(fs.$$.fragment,e),y(ms.$$.fragment,e),y(ys.$$.fragment,e),y(Ps.$$.fragment,e),y(As.$$.fragment,e),y(Ts.$$.fragment,e),y(Ns.$$.fragment,e),y(Ws.$$.fragment,e),y(Qs.$$.fragment,e),y(Ks.$$.fragment,e),y(ei.$$.fragment,e),y(oi.$$.fragment,e),y(si.$$.fragment,e),y(ii.$$.fragment,e),y(ri.$$.fragment,e),y(ai.$$.fragment,e),y(li.$$.fragment,e),y(ni.$$.fragment,e),y(ui.$$.fragment,e),y(fi.$$.fragment,e),y(di.$$.fragment,e),y(ci.$$.fragment,e),y(mi.$$.fragment,e),y(yi.$$.fragment,e),y(gi.$$.fragment,e),gd=!0)},o(e){g(Kt.$$.fragment,e),g(to.$$.fragment,e),g(bo.$$.fragment,e),g($o.$$.fragment,e),g(Lo.$$.fragment,e),g(So.$$.fragment,e),g(Ho.$$.fragment,e),g(jo.$$.fragment,e),g(Uo.$$.fragment,e),g(Yo.$$.fragment,e),g(Qo.$$.fragment,e),g(Ko.$$.fragment,e),g(ts.$$.fragment,e),g(fs.$$.fragment,e),g(ms.$$.fragment,e),g(ys.$$.fragment,e),g(Ps.$$.fragment,e),g(As.$$.fragment,e),g(Ts.$$.fragment,e),g(Ns.$$.fragment,e),g(Ws.$$.fragment,e),g(Qs.$$.fragment,e),g(Ks.$$.fragment,e),g(ei.$$.fragment,e),g(oi.$$.fragment,e),g(si.$$.fragment,e),g(ii.$$.fragment,e),g(ri.$$.fragment,e),g(ai.$$.fragment,e),g(li.$$.fragment,e),g(ni.$$.fragment,e),g(ui.$$.fragment,e),g(fi.$$.fragment,e),g(di.$$.fragment,e),g(ci.$$.fragment,e),g(mi.$$.fragment,e),g(yi.$$.fragment,e),g(gi.$$.fragment,e),gd=!1},d(e){o(we),e&&o(Su),e&&o(be),v(Kt),e&&o(Gu),e&&o(_i),e&&o(Nu),e&&o(Vt),e&&o(Cu),e&&o(te),e&&o(Hu),e&&o(Pi),e&&o(Mu),e&&o(Ee),v(to),e&&o(Fu),e&&o(xi),e&&o(ju),e&&o(Ii),e&&o(Wu),e&&o(b),e&&o(Uu),e&&o(tt),e&&o(Bu),e&&o(wo),e&&o(Yu),e&&o(ke),v(bo),e&&o(zu),e&&o(oe),e&&o(Xu),e&&o(w),e&&o(Qu),e&&o(Mi),e&&o(Ju),e&&o(k),e&&o(Ku),e&&o(K),e&&o(Vu),e&&o($e),v($o),e&&o(Zu),e&&o(ji),e&&o(eh),e&&o(Wi),e&&o(th),e&&o(R),e&&o(oh),e&&o(Io),e&&o(sh),e&&o(G),e&&o(ih),e&&o(Ui),e&&o(rh),e&&o(Pe),v(Lo),e&&o(ah),e&&o(Bi),e&&o(lh),e&&o(P),e&&o(nh),e&&o(at),e&&o(uh),e&&o(lt),e&&o(hh),e&&o(xe),v(So),e&&o(fh),e&&o(Qi),e&&o(dh),e&&o(Ji),e&&o(ph),e&&o(se),e&&o(ch),e&&o(j),e&&o(mh),e&&o(ut),e&&o(yh),e&&o(Ie),v(Ho),e&&o(gh),e&&o(ft),e&&o(vh),e&&o(dt),e&&o(wh),e&&o(Ae),v(jo),e&&o(bh),e&&o(Ki),e&&o(Eh),e&&o(ct),e&&o(_h),e&&o(qe),v(Uo),e&&o(kh),e&&o(Vi),e&&o($h),e&&o(ie),e&&o(Ph),e&&o(Zi),e&&o(xh),e&&o(yt),e&&o(Ih),e&&o(De),v(Yo),e&&o(Ah),e&&o(er),e&&o(qh),e&&o(W),e&&o(Dh),e&&o(Le),e&&o(Lh),e&&o(tr),e&&o(Rh),e&&o(vt),e&&o(Th),e&&o(Re),v(Qo),e&&o(Oh),e&&o(Te),e&&o(Sh),e&&o(re),e&&o(Gh),e&&o(Oe),v(Ko),e&&o(Nh),e&&o(ae),e&&o(Ch),e&&o(ir),e&&o(Hh),e&&o(T),e&&o(Mh),e&&o(le),e&&o(Fh),e&&o(Et),e&&o(jh),e&&o(Se),v(ts),e&&o(Wh),e&&o(V),e&&o(Uh),e&&o(kt),e&&o(Bh),e&&o(rr),e&&o(Yh),e&&o(O),e&&o(zh),e&&o(ar),e&&o(Xh),e&&o(ne),e&&o(Qh),e&&o($t),e&&o(Jh),e&&o(lr),e&&o(Kh),e&&o(nr),e&&o(Vh),e&&o(Ge),v(fs),e&&o(Zh),e&&o(xt),e&&o(ef),e&&o(ur),e&&o(tf),e&&o(It),e&&o(of),e&&o(x),e&&o(sf),e&&o(fr),e&&o(rf),v(ms,e),e&&o(af),e&&o(dr),e&&o(lf),v(ys,e),e&&o(nf),e&&o(ue),e&&o(uf),e&&o(pr),e&&o(hf),e&&o(he),e&&o(ff),e&&o(U),e&&o(df),e&&o(fe),e&&o(pf),e&&o(At),e&&o(cf),e&&o(Me),v(Ps),e&&o(mf),e&&o(Z),e&&o(yf),e&&o(Fe),v(As),e&&o(gf),e&&o(yr),e&&o(vf),e&&o(gr),e&&o(wf),e&&o(vr),e&&o(bf),e&&o(Lt),e&&o(Ef),e&&o(de),e&&o(_f),e&&o(wr),e&&o(kf),e&&o(br),e&&o($f),e&&o(je),v(Ts),e&&o(Pf),e&&o(Er),e&&o(xf),e&&o(I),e&&o(If),e&&o(We),v(Ns),e&&o(Af),e&&o(E),e&&o(qf),e&&o(Pr),e&&o(Df),e&&o(Be),e&&o(Lf),e&&o(Ye),v(Ws),e&&o(Rf),e&&o(xr),e&&o(Tf),e&&o(N),e&&o(Of),e&&o(St),e&&o(Sf),e&&o(pe),v(Qs),v(Ks),e&&o(Gf),e&&o(ze),e&&o(Nf),e&&o(Vs),v(ei),e&&o(Cf),e&&o(Gt),e&&o(Hf),e&&o(ti),e&&o(Mf),e&&o(Ir),e&&o(Ff),v(oi,e),e&&o(jf),e&&o(Ar),e&&o(Wf),v(si,e),e&&o(Uf),e&&o(ce),e&&o(Bf),v(ii,e),e&&o(Yf),e&&o(Nt),e&&o(zf),v(ri,e),e&&o(Xf),e&&o(me),e&&o(Qf),v(ai,e),e&&o(Jf),e&&o(qr),e&&o(Kf),v(li,e),e&&o(Vf),e&&o(Dr),e&&o(Zf),v(ni,e),e&&o(ed),e&&o(Xe),e&&o(td),e&&o(Qe),v(ui),e&&o(od),e&&o(Ht),e&&o(sd),e&&o(Y),e&&o(id),v(fi,e),e&&o(rd),e&&o(Mt),e&&o(ad),e&&o(Lr),e&&o(ld),e&&o(ye),e&&o(nd),v(di,e),e&&o(ud),e&&o(pi),e&&o(hd),v(ci,e),e&&o(fd),e&&o(Je),v(mi),e&&o(dd),e&&o(Rr),e&&o(pd),e&&o(jt),e&&o(cd),v(yi,e),e&&o(md),e&&o(Ke),v(gi),e&&o(yd),e&&o(Ut)}}}const S$={local:"how-to-contribute-to-diffusers",sections:[{local:"overview",sections:[{local:"1-asking-and-answering-questions-on-the-diffusers-discussion-forum-or-on-the-diffusers-discord",title:"1. Asking and answering questions on the Diffusers discussion forum or on the Diffusers Discord"},{local:"2-opening-new-issues-on-the-github-issues-tab",sections:[{local:"21-reproducible-minimal-bug-reports",title:"2.1. Reproducible, minimal bug reports."},{local:"22-feature-requests",title:"2.2. Feature requests."},{local:"23-feedback",title:"2.3 Feedback. "},{local:"24-technical-questions",title:"2.4 Technical questions. "},{local:"25-proposal-to-add-a-new-model-scheduler-or-pipeline",title:"2.5 Proposal to add a new model, scheduler, or pipeline."}],title:"2. Opening new issues on the GitHub issues tab"},{local:"3-answering-issues-on-the-github-issues-tab",title:"3. Answering issues on the GitHub issues tab"},{local:"4-fixing-a-good-first-issue",title:"4. Fixing a `Good first issue`"},{local:"5-contribute-to-the-documentation",title:"5. Contribute to the documentation"},{local:"6-contribute-a-community-pipeline",title:"6. Contribute a community pipeline"},{local:"7-contribute-to-training-examples",title:"7. Contribute to training examples"},{local:"8-fixing-a-good-second-issue",title:"8. Fixing a `Good second issue`"},{local:"9-adding-pipelines-models-schedulers",title:"9. Adding pipelines, models, schedulers"}],title:"Overview"},{local:"how-to-write-a-good-issue",title:"How to write a good issue"},{local:"how-to-write-a-good-pr",title:"How to write a good PR"},{local:"how-to-open-a-pr",sections:[{local:"tests",title:"Tests"},{local:"syncing-forked-main-with-upstream-huggingface-main",title:"Syncing forked main with upstream (HuggingFace) main"},{local:"style-guide",title:"Style guide"}],title:"How to open a PR"}],title:"How to contribute to Diffusers \u{1F9E8}"};function G$(d_){return T$(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class M$ extends I${constructor(we){super();A$(this,we,G$,O$,q$,{})}}export{M$ as default,S$ as metadata};
