Buckets:

rtrm's picture
download
raw
19.4 kB
import{s as Pe,o as Ne,n as Ie}from"../chunks/scheduler.8c3d61f6.js";import{S as Ze,i as We,g as c,s as i,r as h,A as Le,h as l,f as n,c as a,j as E,u as _,x as w,k as J,y as t,a as g,v as b,d as x,t as v,w as y}from"../chunks/index.589a98e8.js";import{T as Re}from"../chunks/Tip.42aa8582.js";import{D as K}from"../chunks/Docstring.27406313.js";import{C as Ge}from"../chunks/CodeBlock.36627b28.js";import{E as He}from"../chunks/ExampleCodeBlock.3dc467a7.js";import{H as Je,E as Ve}from"../chunks/EditOnGithub.e5a8d9cb.js";function Fe(V){let o,M='To use private or <a href="https://huggingface.co/docs/hub/models-gated#gated-models" rel="nofollow">gated</a> models, log-in with <code>huggingface-cli login</code>.';return{c(){o=c("p"),o.innerHTML=M},l(u){o=l(u,"P",{"data-svelte-h":!0}),w(o)!=="svelte-i4hp16"&&(o.innerHTML=M)},m(u,m){g(u,o,m)},p:Ie,d(u){u&&n(o)}}}function Ae(V){let o,M="Examples:",u,m,p;return m=new Ge({props:{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMEREUE1TY2hlZHVsZXIlMkMlMjBERElNU2NoZWR1bGVyJTJDJTIwUE5ETVNjaGVkdWxlciUwQSUwQSUyMyUyMERvd25sb2FkJTIwc2NoZWR1bGVyJTIwZnJvbSUyMGh1Z2dpbmdmYWNlLmNvJTIwYW5kJTIwY2FjaGUuJTBBc2NoZWR1bGVyJTIwJTNEJTIwRERQTVNjaGVkdWxlci5mcm9tX3ByZXRyYWluZWQoJTIyZ29vZ2xlJTJGZGRwbS1jaWZhcjEwLTMyJTIyKSUwQSUwQSUyMyUyMEluc3RhbnRpYXRlJTIwRERJTSUyMHNjaGVkdWxlciUyMGNsYXNzJTIwd2l0aCUyMHNhbWUlMjBjb25maWclMjBhcyUyMEREUE0lMEFzY2hlZHVsZXIlMjAlM0QlMjBERElNU2NoZWR1bGVyLmZyb21fY29uZmlnKHNjaGVkdWxlci5jb25maWcpJTBBJTBBJTIzJTIwSW5zdGFudGlhdGUlMjBQTkRNJTIwc2NoZWR1bGVyJTIwY2xhc3MlMjB3aXRoJTIwc2FtZSUyMGNvbmZpZyUyMGFzJTIwRERQTSUwQXNjaGVkdWxlciUyMCUzRCUyMFBORE1TY2hlZHVsZXIuZnJvbV9jb25maWcoc2NoZWR1bGVyLmNvbmZpZyk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DDPMScheduler, DDIMScheduler, PNDMScheduler
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># Download scheduler from huggingface.co and cache.</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>scheduler = DDPMScheduler.from_pretrained(<span class="hljs-string">&quot;google/ddpm-cifar10-32&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># Instantiate DDIM scheduler class with same config as DDPM</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>scheduler = DDIMScheduler.from_config(scheduler.config)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-comment"># Instantiate PNDM scheduler class with same config as DDPM</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>scheduler = PNDMScheduler.from_config(scheduler.config)`,wrap:!1}}),{c(){o=c("p"),o.textContent=M,u=i(),h(m.$$.fragment)},l(f){o=l(f,"P",{"data-svelte-h":!0}),w(o)!=="svelte-kvfsh7"&&(o.textContent=M),u=a(f),_(m.$$.fragment,f)},m(f,$){g(f,o,$),g(f,u,$),b(m,f,$),p=!0},p:Ie,i(f){p||(x(m.$$.fragment,f),p=!0)},o(f){v(m.$$.fragment,f),p=!1},d(f){f&&(n(o),n(u)),y(m,f)}}}function Be(V){let o,M,u,m,p,f,$,Me='Schedulers from <a href="/docs/diffusers/pr_7976/en/api/schedulers/overview#diffusers.SchedulerMixin">SchedulerMixin</a> and models from <a href="/docs/diffusers/pr_7976/en/api/models/overview#diffusers.ModelMixin">ModelMixin</a> inherit from <a href="/docs/diffusers/pr_7976/en/api/configuration#diffusers.ConfigMixin">ConfigMixin</a> which stores all the parameters that are passed to their respective <code>__init__</code> methods in a JSON-configuration file.',te,k,oe,I,ne,r,P,le,F,Ce=`Base class for all configuration classes. All configuration parameters are stored under <code>self.config</code>. Also
provides the <a href="/docs/diffusers/pr_7976/en/api/configuration#diffusers.ConfigMixin.from_config">from_config()</a> and <a href="/docs/diffusers/pr_7976/en/api/configuration#diffusers.ConfigMixin.save_config">save_config()</a> methods for loading, downloading, and
saving classes that inherit from <a href="/docs/diffusers/pr_7976/en/api/configuration#diffusers.ConfigMixin">ConfigMixin</a>.`,fe,A,ke="Class attributes:",ue,B,Te=`<li><strong>config_name</strong> (<code>str</code>) — A filename under which the config should stored when calling
<a href="/docs/diffusers/pr_7976/en/api/configuration#diffusers.ConfigMixin.save_config">save_config()</a> (should be overridden by parent class).</li> <li><strong>ignore_for_config</strong> (<code>List[str]</code>) — A list of attributes that should not be saved in the config (should be
overridden by subclass).</li> <li><strong>has_compatibles</strong> (<code>bool</code>) — Whether the class has compatible classes (should be overridden by subclass).</li> <li><strong>_deprecated_kwargs</strong> (<code>List[str]</code>) — Keyword arguments that are deprecated. Note that the <code>init</code> function
should only have a <code>kwargs</code> argument if at least one argument is deprecated (should be overridden by
subclass).</li>`,ge,T,N,me,Y,je="Load a model or scheduler configuration.",pe,C,Z,he,z,De="Instantiate a Python class from a config dictionary.",_e,j,be,D,W,xe,Q,Se=`Save a configuration object to the directory specified in <code>save_directory</code> so that it can be reloaded using the
<a href="/docs/diffusers/pr_7976/en/api/configuration#diffusers.ConfigMixin.from_config">from_config()</a> class method.`,ve,S,L,ye,q,Ue="Save the configuration instance’s parameters to a JSON file.",$e,U,R,we,O,Ee="Serializes the configuration instance to a JSON string.",se,G,re,ee,ie;return p=new Je({props:{title:"Configuration",local:"configuration",headingTag:"h1"}}),k=new Re({props:{$$slots:{default:[Fe]},$$scope:{ctx:V}}}),I=new Je({props:{title:"ConfigMixin",local:"diffusers.ConfigMixin",headingTag:"h2"}}),P=new K({props:{name:"class diffusers.ConfigMixin",anchor:"diffusers.ConfigMixin",parameters:[],source:"https://github.com/huggingface/diffusers/blob/vr_7976/src/diffusers/configuration_utils.py#L87"}}),N=new K({props:{name:"load_config",anchor:"diffusers.ConfigMixin.load_config",parameters:[{name:"pretrained_model_name_or_path",val:": Union"},{name:"return_unused_kwargs",val:" = False"},{name:"return_commit_hash",val:" = False"},{name:"**kwargs",val:""}],parametersDescription:[{anchor:"diffusers.ConfigMixin.load_config.pretrained_model_name_or_path",description:`<strong>pretrained_model_name_or_path</strong> (<code>str</code> or <code>os.PathLike</code>, <em>optional</em>) &#x2014;
Can be either:</p>
<ul>
<li>A string, the <em>model id</em> (for example <code>google/ddpm-celebahq-256</code>) of a pretrained model hosted on
the Hub.</li>
<li>A path to a <em>directory</em> (for example <code>./my_model_directory</code>) containing model weights saved with
<a href="/docs/diffusers/pr_7976/en/api/configuration#diffusers.ConfigMixin.save_config">save_config()</a>.</li>
</ul>`,name:"pretrained_model_name_or_path"},{anchor:"diffusers.ConfigMixin.load_config.cache_dir",description:`<strong>cache_dir</strong> (<code>Union[str, os.PathLike]</code>, <em>optional</em>) &#x2014;
Path to a directory where a downloaded pretrained model configuration is cached if the standard cache
is not used.`,name:"cache_dir"},{anchor:"diffusers.ConfigMixin.load_config.force_download",description:`<strong>force_download</strong> (<code>bool</code>, <em>optional</em>, defaults to <code>False</code>) &#x2014;
Whether or not to force the (re-)download of the model weights and configuration files, overriding the
cached versions if they exist.
resume_download &#x2014;
Deprecated and ignored. All downloads are now resumed by default when possible. Will be removed in v1
of Diffusers.`,name:"force_download"},{anchor:"diffusers.ConfigMixin.load_config.proxies",description:`<strong>proxies</strong> (<code>Dict[str, str]</code>, <em>optional</em>) &#x2014;
A dictionary of proxy servers to use by protocol or endpoint, for example, <code>{&apos;http&apos;: &apos;foo.bar:3128&apos;, &apos;http://hostname&apos;: &apos;foo.bar:4012&apos;}</code>. The proxies are used on each request.`,name:"proxies"},{anchor:"diffusers.ConfigMixin.load_config.output_loading_info(bool,",description:`<strong>output_loading_info(<code>bool</code>,</strong> <em>optional</em>, defaults to <code>False</code>) &#x2014;
Whether or not to also return a dictionary containing missing keys, unexpected keys and error messages.`,name:"output_loading_info(bool,"},{anchor:"diffusers.ConfigMixin.load_config.local_files_only",description:`<strong>local_files_only</strong> (<code>bool</code>, <em>optional</em>, defaults to <code>False</code>) &#x2014;
Whether to only load local model weights and configuration files or not. If set to <code>True</code>, the model
won&#x2019;t be downloaded from the Hub.`,name:"local_files_only"},{anchor:"diffusers.ConfigMixin.load_config.token",description:`<strong>token</strong> (<code>str</code> or <em>bool</em>, <em>optional</em>) &#x2014;
The token to use as HTTP bearer authorization for remote files. If <code>True</code>, the token generated from
<code>diffusers-cli login</code> (stored in <code>~/.huggingface</code>) is used.`,name:"token"},{anchor:"diffusers.ConfigMixin.load_config.revision",description:`<strong>revision</strong> (<code>str</code>, <em>optional</em>, defaults to <code>&quot;main&quot;</code>) &#x2014;
The specific model version to use. It can be a branch name, a tag name, a commit id, or any identifier
allowed by Git.`,name:"revision"},{anchor:"diffusers.ConfigMixin.load_config.subfolder",description:`<strong>subfolder</strong> (<code>str</code>, <em>optional</em>, defaults to <code>&quot;&quot;</code>) &#x2014;
The subfolder location of a model file within a larger model repository on the Hub or locally.`,name:"subfolder"},{anchor:"diffusers.ConfigMixin.load_config.return_unused_kwargs",description:"<strong>return_unused_kwargs</strong> (<code>bool</code>, <em>optional</em>, defaults to `False) &#x2014;\nWhether unused keyword arguments of the config are returned.",name:"return_unused_kwargs"},{anchor:"diffusers.ConfigMixin.load_config.return_commit_hash",description:"<strong>return_commit_hash</strong> (<code>bool</code>, <em>optional</em>, defaults to <code>False) -- Whether the </code>commit_hash` of the loaded configuration are returned.",name:"return_commit_hash"}],source:"https://github.com/huggingface/diffusers/blob/vr_7976/src/diffusers/configuration_utils.py#L286",returnDescription:`<script context="module">export const metadata = 'undefined';<\/script>
<p>A dictionary of all the parameters stored in a JSON configuration file.</p>
`,returnType:`<script context="module">export const metadata = 'undefined';<\/script>
<p><code>dict</code></p>
`}}),Z=new K({props:{name:"from_config",anchor:"diffusers.ConfigMixin.from_config",parameters:[{name:"config",val:": Union = None"},{name:"return_unused_kwargs",val:" = False"},{name:"**kwargs",val:""}],parametersDescription:[{anchor:"diffusers.ConfigMixin.from_config.config",description:`<strong>config</strong> (<code>Dict[str, Any]</code>) &#x2014;
A config dictionary from which the Python class is instantiated. Make sure to only load configuration
files of compatible classes.`,name:"config"},{anchor:"diffusers.ConfigMixin.from_config.return_unused_kwargs",description:`<strong>return_unused_kwargs</strong> (<code>bool</code>, <em>optional</em>, defaults to <code>False</code>) &#x2014;
Whether kwargs that are not consumed by the Python class should be returned or not.`,name:"return_unused_kwargs"},{anchor:"diffusers.ConfigMixin.from_config.kwargs",description:`<strong>kwargs</strong> (remaining dictionary of keyword arguments, <em>optional</em>) &#x2014;
Can be used to update the configuration object (after it is loaded) and initiate the Python class.
<code>**kwargs</code> are passed directly to the underlying scheduler/model&#x2019;s <code>__init__</code> method and eventually
overwrite the same named arguments in <code>config</code>.`,name:"kwargs"}],source:"https://github.com/huggingface/diffusers/blob/vr_7976/src/diffusers/configuration_utils.py#L187",returnDescription:`<script context="module">export const metadata = 'undefined';<\/script>
<p>A model or scheduler object instantiated from a config dictionary.</p>
`,returnType:`<script context="module">export const metadata = 'undefined';<\/script>
<p><a
href="/docs/diffusers/pr_7976/en/api/models/overview#diffusers.ModelMixin"
>ModelMixin</a> or <a
href="/docs/diffusers/pr_7976/en/api/schedulers/overview#diffusers.SchedulerMixin"
>SchedulerMixin</a></p>
`}}),j=new He({props:{anchor:"diffusers.ConfigMixin.from_config.example",$$slots:{default:[Ae]},$$scope:{ctx:V}}}),W=new K({props:{name:"save_config",anchor:"diffusers.ConfigMixin.save_config",parameters:[{name:"save_directory",val:": Union"},{name:"push_to_hub",val:": bool = False"},{name:"**kwargs",val:""}],parametersDescription:[{anchor:"diffusers.ConfigMixin.save_config.save_directory",description:`<strong>save_directory</strong> (<code>str</code> or <code>os.PathLike</code>) &#x2014;
Directory where the configuration JSON file is saved (will be created if it does not exist).`,name:"save_directory"},{anchor:"diffusers.ConfigMixin.save_config.push_to_hub",description:`<strong>push_to_hub</strong> (<code>bool</code>, <em>optional</em>, defaults to <code>False</code>) &#x2014;
Whether or not to push your model to the Hugging Face Hub after saving it. You can specify the
repository you want to push to with <code>repo_id</code> (will default to the name of <code>save_directory</code> in your
namespace).`,name:"push_to_hub"},{anchor:"diffusers.ConfigMixin.save_config.kwargs",description:`<strong>kwargs</strong> (<code>Dict[str, Any]</code>, <em>optional</em>) &#x2014;
Additional keyword arguments passed along to the <a href="/docs/diffusers/pr_7976/en/api/schedulers/overview#diffusers.utils.PushToHubMixin.push_to_hub">push_to_hub()</a> method.`,name:"kwargs"}],source:"https://github.com/huggingface/diffusers/blob/vr_7976/src/diffusers/configuration_utils.py#L145"}}),L=new K({props:{name:"to_json_file",anchor:"diffusers.ConfigMixin.to_json_file",parameters:[{name:"json_file_path",val:": Union"}],parametersDescription:[{anchor:"diffusers.ConfigMixin.to_json_file.json_file_path",description:`<strong>json_file_path</strong> (<code>str</code> or <code>os.PathLike</code>) &#x2014;
Path to the JSON file to save a configuration instance&#x2019;s parameters.`,name:"json_file_path"}],source:"https://github.com/huggingface/diffusers/blob/vr_7976/src/diffusers/configuration_utils.py#L601"}}),R=new K({props:{name:"to_json_string",anchor:"diffusers.ConfigMixin.to_json_string",parameters:[],source:"https://github.com/huggingface/diffusers/blob/vr_7976/src/diffusers/configuration_utils.py#L575",returnDescription:`<script context="module">export const metadata = 'undefined';<\/script>
<p>String containing all the attributes that make up the configuration instance in JSON format.</p>
`,returnType:`<script context="module">export const metadata = 'undefined';<\/script>
<p><code>str</code></p>
`}}),G=new Ve({props:{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/en/api/configuration.md"}}),{c(){o=c("meta"),M=i(),u=c("p"),m=i(),h(p.$$.fragment),f=i(),$=c("p"),$.innerHTML=Me,te=i(),h(k.$$.fragment),oe=i(),h(I.$$.fragment),ne=i(),r=c("div"),h(P.$$.fragment),le=i(),F=c("p"),F.innerHTML=Ce,fe=i(),A=c("p"),A.textContent=ke,ue=i(),B=c("ul"),B.innerHTML=Te,ge=i(),T=c("div"),h(N.$$.fragment),me=i(),Y=c("p"),Y.textContent=je,pe=i(),C=c("div"),h(Z.$$.fragment),he=i(),z=c("p"),z.textContent=De,_e=i(),h(j.$$.fragment),be=i(),D=c("div"),h(W.$$.fragment),xe=i(),Q=c("p"),Q.innerHTML=Se,ve=i(),S=c("div"),h(L.$$.fragment),ye=i(),q=c("p"),q.textContent=Ue,$e=i(),U=c("div"),h(R.$$.fragment),we=i(),O=c("p"),O.textContent=Ee,se=i(),h(G.$$.fragment),re=i(),ee=c("p"),this.h()},l(e){const s=Le("svelte-u9bgzb",document.head);o=l(s,"META",{name:!0,content:!0}),s.forEach(n),M=a(e),u=l(e,"P",{}),E(u).forEach(n),m=a(e),_(p.$$.fragment,e),f=a(e),$=l(e,"P",{"data-svelte-h":!0}),w($)!=="svelte-12sjyhf"&&($.innerHTML=Me),te=a(e),_(k.$$.fragment,e),oe=a(e),_(I.$$.fragment,e),ne=a(e),r=l(e,"DIV",{class:!0});var d=E(r);_(P.$$.fragment,d),le=a(d),F=l(d,"P",{"data-svelte-h":!0}),w(F)!=="svelte-kfucdx"&&(F.innerHTML=Ce),fe=a(d),A=l(d,"P",{"data-svelte-h":!0}),w(A)!=="svelte-wz8va1"&&(A.textContent=ke),ue=a(d),B=l(d,"UL",{"data-svelte-h":!0}),w(B)!=="svelte-e9v4iw"&&(B.innerHTML=Te),ge=a(d),T=l(d,"DIV",{class:!0});var H=E(T);_(N.$$.fragment,H),me=a(H),Y=l(H,"P",{"data-svelte-h":!0}),w(Y)!=="svelte-k51ly"&&(Y.textContent=je),H.forEach(n),pe=a(d),C=l(d,"DIV",{class:!0});var X=E(C);_(Z.$$.fragment,X),he=a(X),z=l(X,"P",{"data-svelte-h":!0}),w(z)!=="svelte-1vaeeyi"&&(z.textContent=De),_e=a(X),_(j.$$.fragment,X),X.forEach(n),be=a(d),D=l(d,"DIV",{class:!0});var ae=E(D);_(W.$$.fragment,ae),xe=a(ae),Q=l(ae,"P",{"data-svelte-h":!0}),w(Q)!=="svelte-fegkbs"&&(Q.innerHTML=Se),ae.forEach(n),ve=a(d),S=l(d,"DIV",{class:!0});var de=E(S);_(L.$$.fragment,de),ye=a(de),q=l(de,"P",{"data-svelte-h":!0}),w(q)!=="svelte-if97l3"&&(q.textContent=Ue),de.forEach(n),$e=a(d),U=l(d,"DIV",{class:!0});var ce=E(U);_(R.$$.fragment,ce),we=a(ce),O=l(ce,"P",{"data-svelte-h":!0}),w(O)!=="svelte-tueex0"&&(O.textContent=Ee),ce.forEach(n),d.forEach(n),se=a(e),_(G.$$.fragment,e),re=a(e),ee=l(e,"P",{}),E(ee).forEach(n),this.h()},h(){J(o,"name","hf:doc:metadata"),J(o,"content",Ye),J(T,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"),J(C,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"),J(D,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"),J(S,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"),J(U,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"),J(r,"class","docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8")},m(e,s){t(document.head,o),g(e,M,s),g(e,u,s),g(e,m,s),b(p,e,s),g(e,f,s),g(e,$,s),g(e,te,s),b(k,e,s),g(e,oe,s),b(I,e,s),g(e,ne,s),g(e,r,s),b(P,r,null),t(r,le),t(r,F),t(r,fe),t(r,A),t(r,ue),t(r,B),t(r,ge),t(r,T),b(N,T,null),t(T,me),t(T,Y),t(r,pe),t(r,C),b(Z,C,null),t(C,he),t(C,z),t(C,_e),b(j,C,null),t(r,be),t(r,D),b(W,D,null),t(D,xe),t(D,Q),t(r,ve),t(r,S),b(L,S,null),t(S,ye),t(S,q),t(r,$e),t(r,U),b(R,U,null),t(U,we),t(U,O),g(e,se,s),b(G,e,s),g(e,re,s),g(e,ee,s),ie=!0},p(e,[s]){const d={};s&2&&(d.$$scope={dirty:s,ctx:e}),k.$set(d);const H={};s&2&&(H.$$scope={dirty:s,ctx:e}),j.$set(H)},i(e){ie||(x(p.$$.fragment,e),x(k.$$.fragment,e),x(I.$$.fragment,e),x(P.$$.fragment,e),x(N.$$.fragment,e),x(Z.$$.fragment,e),x(j.$$.fragment,e),x(W.$$.fragment,e),x(L.$$.fragment,e),x(R.$$.fragment,e),x(G.$$.fragment,e),ie=!0)},o(e){v(p.$$.fragment,e),v(k.$$.fragment,e),v(I.$$.fragment,e),v(P.$$.fragment,e),v(N.$$.fragment,e),v(Z.$$.fragment,e),v(j.$$.fragment,e),v(W.$$.fragment,e),v(L.$$.fragment,e),v(R.$$.fragment,e),v(G.$$.fragment,e),ie=!1},d(e){e&&(n(M),n(u),n(m),n(f),n($),n(te),n(oe),n(ne),n(r),n(se),n(re),n(ee)),n(o),y(p,e),y(k,e),y(I,e),y(P),y(N),y(Z),y(j),y(W),y(L),y(R),y(G,e)}}}const Ye='{"title":"Configuration","local":"configuration","sections":[{"title":"ConfigMixin","local":"diffusers.ConfigMixin","sections":[],"depth":2}],"depth":1}';function ze(V){return Ne(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ot extends Ze{constructor(o){super(),We(this,o,ze,Be,Pe,{})}}export{ot as component};

Xet Storage Details

Size:
19.4 kB
·
Xet hash:
8b8ba1906d4b3c79fb76e24d6049389cb4967426f4eb95c713774b522a076933

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