Buckets:

rtrm's picture
download
raw
16 kB
import{s as je,f as me,n as Ge,o as Be}from"../chunks/scheduler.37c15a92.js";import{S as ve,i as Ze,g as n,s as i,r as d,A as xe,h as o,f as t,c as r,j as R,u as J,x as M,k as s,y as Ve,a,v as g,d as y,t as T,w as b}from"../chunks/index.2bf4358c.js";import{C as ce}from"../chunks/CodeBlock.4e987730.js";import{C as ke}from"../chunks/CourseFloatingBanner.6add7356.js";import{H as ue,E as He}from"../chunks/getInferenceSnippets.ebf8be91.js";function ze(pe){let p,S,C,Y,w,F,h,q,f,Me=`Pour vous rendre la vie encore plus facile, <em>Gradio</em> s’intègre directement avec <em>Hub</em> et <em>Spaces</em>.
Vous pouvez charger des démos depuis le <em>Hub</em> et les <em>Spaces</em> avec seulement <em>une ligne de code</em>.`,X,I,N,U,de='Pour commencer, choisissez un des milliers de modèles qu’<em>Hugging Face</em> offre à travers le <em>Hub</em>, comme décrit dans le <a href="/course/fr/chapter4/2">chapitre 4</a>.',Q,j,Je=`En utilisant la méthode spéciale <code>Interface.load()</code>, vous passez <code>&quot;model/&quot;</code> (ou, de manière équivalente, <code>&quot;huggingface/&quot;</code>) suivi du nom du modèle.
Par exemple, voici le code pour construire une démo pour le <a href="https://huggingface.co/EleutherAI/gpt-j-6B" rel="nofollow">GPT-J</a>, un grand modèle de langue, ajouter quelques exemples d’entrées :`,A,G,_,B,ge="Le code ci-dessus produira l’interface ci-dessous :",L,m,ye,P,v,Te='Le chargement d’un modèle de cette manière utilise l’<a href="https://huggingface.co/inference-api" rel="nofollow">API d’Inference</a> de <em>Hugging Face</em> au lieu de charger le modèle en mémoire. C’est idéal pour les modèles énormes comme GPT-J ou T0pp qui nécessitent beaucoup de RAM.',D,Z,O,x,be="Pour charger n’importe quel <em>Space</em> depuis le <em>Hub</em> et le recréer localement, vous pouvez passer <code>spaces/</code> à l’<code>Interface</code>, suivi du nom du <em>Space</em>.",K,V,we="Vous vous souvenez de la démo de la section 1 qui supprime le fond d’une image ? Chargeons-la à partir de <em>Hugging Face Spaces</em> :",ee,k,le,c,he,te,H,fe="L’un des avantages du chargement de démos à partir du <em>Hub</em> ou de <em>Spaces</em> est que vous pouvez les personnaliser en remplaçant n’importe lequel des paramètres. Ici, nous ajoutons un titre et faisons en sorte qu’elle fonctionne avec une webcam à la place :",ae,z,se,u,Ie,ie,W,Ue="Maintenant que nous avons exploré quelques façons d’intégrer <em>Gradio</em> avec le <em>Hub</em>, jetons un coup d’oeil à certaines fonctionnalités avancées de la classe <code>Interface</code>. C’est le sujet de la prochaine section !",re,$,ne,E,oe;return w=new ue({props:{title:"Intégrations avec le <i> Hub d’Hugging Face </i>",local:"intégrations-avec-le-i-hub-dhugging-face-i",headingTag:"h1"}}),h=new ke({props:{chapter:9,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter9/section5.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter9/section5.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter9/section5.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter9/section5.ipynb"}]}}),I=new ue({props:{title:"Chargement de modèles depuis le <i> Hub d’Hugging Face </i>",local:"chargement-de-modèles-depuis-le-i-hub-dhugging-face-i",headingTag:"h3"}}),G=new ce({props:{code:"aW1wb3J0JTIwZ3JhZGlvJTIwYXMlMjBnciUwQSUwQXRpdGxlJTIwJTNEJTIwJTIyR1BULUotNkIlMjIlMEFkZXNjcmlwdGlvbiUyMCUzRCUyMCUyMkdyYWRpbyUyMERlbW8lMjBmb3IlMjBHUFQtSiUyMDZCJTJDJTIwYSUyMHRyYW5zZm9ybWVyJTIwbW9kZWwlMjB0cmFpbmVkJTIwdXNpbmclMjBCZW4lMjBXYW5nJ3MlMjBNZXNoJTIwVHJhbnNmb3JtZXIlMjBKQVguJTIwJ0dQVC1KJyUyMHJlZmVycyUyMHRvJTIwdGhlJTIwY2xhc3MlMjBvZiUyMG1vZGVsJTJDJTIwd2hpbGUlMjAnNkInJTIwcmVwcmVzZW50cyUyMHRoZSUyMG51bWJlciUyMG9mJTIwdHJhaW5hYmxlJTIwcGFyYW1ldGVycy4lMjBUbyUyMHVzZSUyMGl0JTJDJTIwc2ltcGx5JTIwYWRkJTIweW91ciUyMHRleHQlMkMlMjBvciUyMGNsaWNrJTIwb25lJTIwb2YlMjB0aGUlMjBleGFtcGxlcyUyMHRvJTIwbG9hZCUyMHRoZW0uJTIwUmVhZCUyMG1vcmUlMjBhdCUyMHRoZSUyMGxpbmtzJTIwYmVsb3cuJTIyJTBBJTIzJTIwRCVDMyVBOW1vJTIwR3JhZGlvJTIwcG91ciUyMEdQVC1KJTIwNkIlMkMlMjB1biUyMG1vZCVDMyVBOGxlJTIwZGUlMjB0cmFuc2Zvcm1lciUyMGVudHJhJUMzJUFFbiVDMyVBOSUyMGF2ZWMlMjBsZSUyME1lc2glMjBUcmFuc2Zvcm1lciUyMEpBWCUyMGRlJTIwQmVuJTIwV2FuZy4lMjBHUFQtSiUyMGZhaXQlMjByJUMzJUE5ZiVDMyVBOXJlbmNlJTIwJUMzJUEwJTIwbGElMjBjbGFzc2UlMjBkdSUyMG1vZCVDMyVBOGxlJTJDJTIwdGFuZGlzJTIwcXVlJTIwJzZCJyUyMHJlcHIlQzMlQTlzZW50ZSUyMGxlJTIwbm9tYnJlJTIwZGUlMjBwYXJhbSVDMyVBOHRyZXMlMjBlbnRyYSVDMyVBRW5hYmxlcy4lMjBQb3VyJTIwbCd1dGlsaXNlciUyQyUyMGlsJTIwc3VmZml0JTIwZCdham91dGVyJTIwdm90cmUlMjB0ZXh0ZSUyQyUyMG91JTIwZGUlMjBjbGlxdWVyJTIwc3VyJTIwbCd1biUyMGRlcyUyMGV4ZW1wbGVzJTIwcG91ciUyMGxlJTIwY2hhcmdlci4lMjBQb3VyJTIwZW4lMjBzYXZvaXIlMjBwbHVzJTJDJTIwY29uc3VsdGV6JTIwbGVzJTIwbGllbnMlMjBjaS1kZXNzb3VzLiUwQWFydGljbGUlMjAlM0QlMjAlMjIlM0NwJTIwc3R5bGUlM0QndGV4dC1hbGlnbiUzQSUyMGNlbnRlciclM0UlM0NhJTIwaHJlZiUzRCdodHRwcyUzQSUyRiUyRmdpdGh1Yi5jb20lMkZraW5nb2Zsb2x6JTJGbWVzaC10cmFuc2Zvcm1lci1qYXgnJTIwdGFyZ2V0JTNEJ19ibGFuayclM0VHUFQtSi02QiUzQSUyMEElMjA2JTIwQmlsbGlvbiUyMFBhcmFtZXRlciUyMEF1dG9yZWdyZXNzaXZlJTIwTGFuZ3VhZ2UlMjBNb2RlbCUzQyUyRmElM0UlM0MlMkZwJTNFJTIyJTBBJTIzJTIwR1BULUotNkIlMjAlM0ElMjBVbiUyMG1vZCVDMyVBOGxlJTIwbGluZ3Vpc3RpcXVlJTIwYXV0b3IlQzMlQTlncmVzc2lmJTIwJUMzJUEwJTIwNiUyMG1pbGxpYXJkcyUyMGRlJTIwcGFyYW0lQzMlQTh0cmVzJTBBZXhhbXBsZXMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIlMjJUaGUlMjB0b3dlciUyMGlzJTIwMzI0JTIwbWV0cmVzJTIwKDElMkMwNjMlMjBmdCklMjB0YWxsJTJDJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIzJTIwTGElMjB0b3VyJTIwbWVzdXJlJTIwMzI0JTIwbSVDMyVBOHRyZXMlMjAoMSUyMDA2MyUyMHBpZWRzKSUyMGRlJTIwaGF1dCUyQyUwQSUyMCUyMCUyMCUyMCU1QiUyMlRoZSUyME1vb24ncyUyMG9yYml0JTIwYXJvdW5kJTIwRWFydGglMjBoYXMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjMlMjBMJ29yYml0ZSUyMGRlJTIwbGElMjBMdW5lJTIwYXV0b3VyJTIwZGUlMjBsYSUyMFRlcnJlJTIwYSUwQSUyMCUyMCUyMCUyMCU1QiUyMlRoZSUyMHNtb290aCUyMEJvcmVhbGlzJTIwYmFzaW4lMjBpbiUyMHRoZSUyME5vcnRoZXJuJTIwSGVtaXNwaGVyZSUyMGNvdmVycyUyMDQwJTI1JTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIzJTIwTGUlMjBiYXNzaW4lMjBkZSUyMEJvcmVhbGlzJTIwZGFucyUyMGwnaCVDMyVBOW1pc3BoJUMzJUE4cmUlMjBub3JkJTIwY291dnJlJTIwNDAlMjAlMjUuJTBBJTVEJTBBZ3IuSW50ZXJmYWNlLmxvYWQoJTBBJTIwJTIwJTIwJTIwJTIyaHVnZ2luZ2ZhY2UlMkZFbGV1dGhlckFJJTJGZ3B0LWotNkIlMjIlMkMlMEElMjAlMjAlMjAlMjBpbnB1dHMlM0Rnci5UZXh0Ym94KGxpbmVzJTNENSUyQyUyMGxhYmVsJTNEJTIySW5wdXQlMjBUZXh0JTIyKSUyQyUwQSUyMCUyMCUyMCUyMHRpdGxlJTNEdGl0bGUlMkMlMEElMjAlMjAlMjAlMjBkZXNjcmlwdGlvbiUzRGRlc2NyaXB0aW9uJTJDJTBBJTIwJTIwJTIwJTIwYXJ0aWNsZSUzRGFydGljbGUlMkMlMEElMjAlMjAlMjAlMjBleGFtcGxlcyUzRGV4YW1wbGVzJTJDJTBBJTIwJTIwJTIwJTIwZW5hYmxlX3F1ZXVlJTNEVHJ1ZSUyQyUwQSkubGF1bmNoKCk=",highlighted:`<span class="hljs-keyword">import</span> gradio <span class="hljs-keyword">as</span> gr
title = <span class="hljs-string">&quot;GPT-J-6B&quot;</span>
description = <span class="hljs-string">&quot;Gradio Demo for GPT-J 6B, a transformer model trained using Ben Wang&#x27;s Mesh Transformer JAX. &#x27;GPT-J&#x27; refers to the class of model, while &#x27;6B&#x27; represents the number of trainable parameters. To use it, simply add your text, or click one of the examples to load them. Read more at the links below.&quot;</span>
<span class="hljs-comment"># Démo Gradio pour GPT-J 6B, un modèle de transformer entraîné avec le Mesh Transformer JAX de Ben Wang. GPT-J fait référence à la classe du modèle, tandis que &#x27;6B&#x27; représente le nombre de paramètres entraînables. Pour l&#x27;utiliser, il suffit d&#x27;ajouter votre texte, ou de cliquer sur l&#x27;un des exemples pour le charger. Pour en savoir plus, consultez les liens ci-dessous.</span>
article = <span class="hljs-string">&quot;&lt;p style=&#x27;text-align: center&#x27;&gt;&lt;a href=&#x27;https://github.com/kingoflolz/mesh-transformer-jax&#x27; target=&#x27;_blank&#x27;&gt;GPT-J-6B: A 6 Billion Parameter Autoregressive Language Model&lt;/a&gt;&lt;/p&gt;&quot;</span>
<span class="hljs-comment"># GPT-J-6B : Un modèle linguistique autorégressif à 6 milliards de paramètres</span>
examples = [
[<span class="hljs-string">&quot;The tower is 324 metres (1,063 ft) tall,&quot;</span>],
<span class="hljs-comment"># La tour mesure 324 mètres (1 063 pieds) de haut,</span>
[<span class="hljs-string">&quot;The Moon&#x27;s orbit around Earth has&quot;</span>],
<span class="hljs-comment"># L&#x27;orbite de la Lune autour de la Terre a</span>
[<span class="hljs-string">&quot;The smooth Borealis basin in the Northern Hemisphere covers 40%&quot;</span>],
<span class="hljs-comment"># Le bassin de Borealis dans l&#x27;hémisphère nord couvre 40 %.</span>
]
gr.Interface.load(
<span class="hljs-string">&quot;huggingface/EleutherAI/gpt-j-6B&quot;</span>,
inputs=gr.Textbox(lines=<span class="hljs-number">5</span>, label=<span class="hljs-string">&quot;Input Text&quot;</span>),
title=title,
description=description,
article=article,
examples=examples,
enable_queue=<span class="hljs-literal">True</span>,
).launch()`,wrap:!1}}),Z=new ue({props:{title:"Chargement depuis <i> Hugging Face Spaces </i>",local:"chargement-depuis-i-hugging-face-spaces-i",headingTag:"h3"}}),k=new ce({props:{code:"Z3IuSW50ZXJmYWNlLmxvYWQoJTIyc3BhY2VzJTJGYWJpZGxhYnMlMkZyZW1vdmUtYmclMjIpLmxhdW5jaCgp",highlighted:'gr.Interface.load(<span class="hljs-string">&quot;spaces/abidlabs/remove-bg&quot;</span>).launch()',wrap:!1}}),z=new ce({props:{code:"Z3IuSW50ZXJmYWNlLmxvYWQoJTBBJTIwJTIwJTIwJTIwJTIyc3BhY2VzJTJGYWJpZGxhYnMlMkZyZW1vdmUtYmclMjIlMkMlMjBpbnB1dHMlM0QlMjJ3ZWJjYW0lMjIlMkMlMjB0aXRsZSUzRCUyMlJlbW92ZSUyMHlvdXIlMjB3ZWJjYW0lMjBiYWNrZ3JvdW5kISUyMiUwQSkubGF1bmNoKCk=",highlighted:`gr.Interface.load(
<span class="hljs-string">&quot;spaces/abidlabs/remove-bg&quot;</span>, inputs=<span class="hljs-string">&quot;webcam&quot;</span>, title=<span class="hljs-string">&quot;Remove your webcam background!&quot;</span>
).launch()`,wrap:!1}}),$=new He({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter9/5.mdx"}}),{c(){p=n("meta"),S=i(),C=n("p"),Y=i(),d(w.$$.fragment),F=i(),d(h.$$.fragment),q=i(),f=n("p"),f.innerHTML=Me,X=i(),d(I.$$.fragment),N=i(),U=n("p"),U.innerHTML=de,Q=i(),j=n("p"),j.innerHTML=Je,A=i(),d(G.$$.fragment),_=i(),B=n("p"),B.textContent=ge,L=i(),m=n("iframe"),P=i(),v=n("p"),v.innerHTML=Te,D=i(),d(Z.$$.fragment),O=i(),x=n("p"),x.innerHTML=be,K=i(),V=n("p"),V.innerHTML=we,ee=i(),d(k.$$.fragment),le=i(),c=n("iframe"),te=i(),H=n("p"),H.innerHTML=fe,ae=i(),d(z.$$.fragment),se=i(),u=n("iframe"),ie=i(),W=n("p"),W.innerHTML=Ue,re=i(),d($.$$.fragment),ne=i(),E=n("p"),this.h()},l(e){const l=xe("svelte-u9bgzb",document.head);p=o(l,"META",{name:!0,content:!0}),l.forEach(t),S=r(e),C=o(e,"P",{}),R(C).forEach(t),Y=r(e),J(w.$$.fragment,e),F=r(e),J(h.$$.fragment,e),q=r(e),f=o(e,"P",{"data-svelte-h":!0}),M(f)!=="svelte-1u7du8r"&&(f.innerHTML=Me),X=r(e),J(I.$$.fragment,e),N=r(e),U=o(e,"P",{"data-svelte-h":!0}),M(U)!=="svelte-azmpzc"&&(U.innerHTML=de),Q=r(e),j=o(e,"P",{"data-svelte-h":!0}),M(j)!=="svelte-be60uu"&&(j.innerHTML=Je),A=r(e),J(G.$$.fragment,e),_=r(e),B=o(e,"P",{"data-svelte-h":!0}),M(B)!=="svelte-1x6fprf"&&(B.textContent=ge),L=r(e),m=o(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),R(m).forEach(t),P=r(e),v=o(e,"P",{"data-svelte-h":!0}),M(v)!=="svelte-1pgca6g"&&(v.innerHTML=Te),D=r(e),J(Z.$$.fragment,e),O=r(e),x=o(e,"P",{"data-svelte-h":!0}),M(x)!=="svelte-9bl6v9"&&(x.innerHTML=be),K=r(e),V=o(e,"P",{"data-svelte-h":!0}),M(V)!=="svelte-q3bfqw"&&(V.innerHTML=we),ee=r(e),J(k.$$.fragment,e),le=r(e),c=o(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),R(c).forEach(t),te=r(e),H=o(e,"P",{"data-svelte-h":!0}),M(H)!=="svelte-1aeu0m8"&&(H.innerHTML=fe),ae=r(e),J(z.$$.fragment,e),se=r(e),u=o(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),R(u).forEach(t),ie=r(e),W=o(e,"P",{"data-svelte-h":!0}),M(W)!=="svelte-1urnxch"&&(W.innerHTML=Ue),re=r(e),J($.$$.fragment,e),ne=r(e),E=o(e,"P",{}),R(E).forEach(t),this.h()},h(){s(p,"name","hf:doc:metadata"),s(p,"content",We),me(m.src,ye="https://hf.space/gradioiframe/akhaliq/gpt-j-6B/+")||s(m,"src",ye),s(m,"frameborder","0"),s(m,"height","750"),s(m,"title","Gradio app"),s(m,"class","container p-0 flex-grow space-iframe"),s(m,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),s(m,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),me(c.src,he="https://hf.space/gradioiframe/abidlabs/remove-bg/+")||s(c,"src",he),s(c,"frameborder","0"),s(c,"height","650"),s(c,"title","Gradio app"),s(c,"class","container p-0 flex-grow space-iframe"),s(c,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),s(c,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),me(u.src,Ie="https://course-demos-Remove-bg.hf.space")||s(u,"src",Ie),s(u,"frameborder","0"),s(u,"height","550"),s(u,"title","Gradio app"),s(u,"class","container p-0 flex-grow space-iframe"),s(u,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),s(u,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads")},m(e,l){Ve(document.head,p),a(e,S,l),a(e,C,l),a(e,Y,l),g(w,e,l),a(e,F,l),g(h,e,l),a(e,q,l),a(e,f,l),a(e,X,l),g(I,e,l),a(e,N,l),a(e,U,l),a(e,Q,l),a(e,j,l),a(e,A,l),g(G,e,l),a(e,_,l),a(e,B,l),a(e,L,l),a(e,m,l),a(e,P,l),a(e,v,l),a(e,D,l),g(Z,e,l),a(e,O,l),a(e,x,l),a(e,K,l),a(e,V,l),a(e,ee,l),g(k,e,l),a(e,le,l),a(e,c,l),a(e,te,l),a(e,H,l),a(e,ae,l),g(z,e,l),a(e,se,l),a(e,u,l),a(e,ie,l),a(e,W,l),a(e,re,l),g($,e,l),a(e,ne,l),a(e,E,l),oe=!0},p:Ge,i(e){oe||(y(w.$$.fragment,e),y(h.$$.fragment,e),y(I.$$.fragment,e),y(G.$$.fragment,e),y(Z.$$.fragment,e),y(k.$$.fragment,e),y(z.$$.fragment,e),y($.$$.fragment,e),oe=!0)},o(e){T(w.$$.fragment,e),T(h.$$.fragment,e),T(I.$$.fragment,e),T(G.$$.fragment,e),T(Z.$$.fragment,e),T(k.$$.fragment,e),T(z.$$.fragment,e),T($.$$.fragment,e),oe=!1},d(e){e&&(t(S),t(C),t(Y),t(F),t(q),t(f),t(X),t(N),t(U),t(Q),t(j),t(A),t(_),t(B),t(L),t(m),t(P),t(v),t(D),t(O),t(x),t(K),t(V),t(ee),t(le),t(c),t(te),t(H),t(ae),t(se),t(u),t(ie),t(W),t(re),t(ne),t(E)),t(p),b(w,e),b(h,e),b(I,e),b(G,e),b(Z,e),b(k,e),b(z,e),b($,e)}}}const We='{"title":"Intégrations avec le <i> Hub d’Hugging Face </i>","local":"intégrations-avec-le-i-hub-dhugging-face-i","sections":[{"title":"Chargement de modèles depuis le <i> Hub d’Hugging Face </i>","local":"chargement-de-modèles-depuis-le-i-hub-dhugging-face-i","sections":[],"depth":3},{"title":"Chargement depuis <i> Hugging Face Spaces </i>","local":"chargement-depuis-i-hugging-face-spaces-i","sections":[],"depth":3}],"depth":1}';function $e(pe){return Be(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Fe extends ve{constructor(p){super(),Ze(this,p,$e,ze,je,{})}}export{Fe as component};

Xet Storage Details

Size:
16 kB
·
Xet hash:
bf26169fbc773c6b954348ff950b20b1510423c8ab5a2c373d7f92f1cd60921f

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.