Buckets:
| <meta charset="utf-8" /><meta name="hf:doc:metadata" content="{"title":"SequentialPipelineBlocks","local":"sequentialpipelineblocks","sections":[],"depth":1}"> | |
| <link href="/docs/diffusers/pr_11686/en/_app/immutable/assets/0.e3b0c442.css" rel="modulepreload"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/entry/start.2b9667fb.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/chunks/scheduler.8c3d61f6.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/chunks/singletons.756349ae.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/chunks/index.0997d446.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/chunks/paths.8d5937da.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/entry/app.a2a6117e.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/chunks/index.da70eac4.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/nodes/0.a31d0923.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/chunks/each.e59479a4.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/nodes/230.f24d27ab.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/chunks/Tip.1d9b8c37.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/chunks/CodeBlock.a9c4becf.js"> | |
| <link rel="modulepreload" href="/docs/diffusers/pr_11686/en/_app/immutable/chunks/getInferenceSnippets.d00e08ac.js"><!-- HEAD_svelte-u9bgzb_START --><meta name="hf:doc:metadata" content="{"title":"SequentialPipelineBlocks","local":"sequentialpipelineblocks","sections":[],"depth":1}"><!-- HEAD_svelte-u9bgzb_END --> <p></p> <h1 class="relative group"><a id="sequentialpipelineblocks" 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" href="#sequentialpipelineblocks"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>SequentialPipelineBlocks</span></h1> <div class="course-tip course-tip-orange bg-gradient-to-br dark:bg-gradient-to-r before:border-orange-500 dark:before:border-orange-800 from-orange-50 dark:from-gray-900 to-white dark:to-gray-950 border border-orange-50 text-orange-700 dark:text-gray-400"><p data-svelte-h="svelte-11qh5l3">🧪 <strong>Experimental Feature</strong>: Modular Diffusers is an experimental feature we are actively developing. The API may be subject to breaking changes.</p></div> <p data-svelte-h="svelte-lkeq7d"><code>SequentialPipelineBlocks</code> is a subclass of <code>ModularPipelineBlocks</code>. Unlike <code>PipelineBlock</code>, it is a multi-block that composes other blocks together in sequence, creating modular workflows where data flows from one block to the next. It’s one of the most common ways to build complex pipelines by combining simpler building blocks.</p> <div class="course-tip bg-gradient-to-br dark:bg-gradient-to-r before:border-green-500 dark:before:border-green-800 from-green-50 dark:from-gray-900 to-white dark:to-gray-950 border border-green-50 text-green-700 dark:text-gray-400"><p data-svelte-h="svelte-a7cb5j">Other types of multi-blocks include <a href="auto_pipeline_blocks.md">AutoPipelineBlocks</a> (for conditional block selection) and <a href="loop_sequential_pipeline_blocks.md">LoopSequentialPipelineBlocks</a> (for iterative workflows). For information on creating individual blocks, see the <a href="pipeline_block.md">PipelineBlock guide</a>.</p> <p data-svelte-h="svelte-anzuje">Additionally, like all <code>ModularPipelineBlocks</code>, <code>SequentialPipelineBlocks</code> are definitions/specifications, not runnable pipelines. You need to convert them into a <code>ModularPipeline</code> to actually execute them. For information on creating and running pipelines, see the <a href="modular_pipeline.md">Modular Pipeline guide</a>.</p></div> <p data-svelte-h="svelte-wd2mvc">In this tutorial, we will focus on how to create <code>SequentialPipelineBlocks</code> and how blocks connect and work together.</p> <p data-svelte-h="svelte-zj48j9">The key insight is that blocks connect through their intermediate inputs and outputs - the “studs and anti-studs” we discussed in the <a href="pipeline_block.md">PipelineBlock guide</a>. When one block produces an intermediate output, it becomes available as an intermediate input for subsequent blocks.</p> <p data-svelte-h="svelte-zxlpt5">Let’s explore this through an example. We will use the same helper function from the PipelineBlock guide to create blocks.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-keyword">from</span> diffusers.modular_pipelines <span class="hljs-keyword">import</span> PipelineBlock, InputParam, OutputParam | |
| <span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">make_block</span>(<span class="hljs-params">inputs=[], intermediate_inputs=[], intermediate_outputs=[], block_fn=<span class="hljs-literal">None</span>, description=<span class="hljs-literal">None</span></span>): | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">TestBlock</span>(<span class="hljs-title class_ inherited__">PipelineBlock</span>): | |
| model_name = <span class="hljs-string">"test"</span> | |
| <span class="hljs-meta"> @property</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">inputs</span>(<span class="hljs-params">self</span>): | |
| <span class="hljs-keyword">return</span> inputs | |
| <span class="hljs-meta"> @property</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">intermediate_inputs</span>(<span class="hljs-params">self</span>): | |
| <span class="hljs-keyword">return</span> intermediate_inputs | |
| <span class="hljs-meta"> @property</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">intermediate_outputs</span>(<span class="hljs-params">self</span>): | |
| <span class="hljs-keyword">return</span> intermediate_outputs | |
| <span class="hljs-meta"> @property</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">description</span>(<span class="hljs-params">self</span>): | |
| <span class="hljs-keyword">return</span> description <span class="hljs-keyword">if</span> description <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">else</span> <span class="hljs-string">""</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">__call__</span>(<span class="hljs-params">self, components, state</span>): | |
| block_state = self.get_block_state(state) | |
| <span class="hljs-keyword">if</span> block_fn <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">None</span>: | |
| block_state = block_fn(block_state, state) | |
| self.set_block_state(state, block_state) | |
| <span class="hljs-keyword">return</span> components, state | |
| <span class="hljs-keyword">return</span> TestBlock<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-1654za5">Let’s create a block that produces <code>batch_size</code>, which we’ll call “input_block”:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-keyword">def</span> <span class="hljs-title function_">input_block_fn</span>(<span class="hljs-params">block_state, pipeline_state</span>): | |
| batch_size = <span class="hljs-built_in">len</span>(block_state.prompt) | |
| block_state.batch_size = batch_size * block_state.num_images_per_prompt | |
| <span class="hljs-keyword">return</span> block_state | |
| input_block_cls = make_block( | |
| inputs=[ | |
| InputParam(name=<span class="hljs-string">"prompt"</span>, type_hint=<span class="hljs-built_in">list</span>, description=<span class="hljs-string">"list of text prompts"</span>), | |
| InputParam(name=<span class="hljs-string">"num_images_per_prompt"</span>, type_hint=<span class="hljs-built_in">int</span>, description=<span class="hljs-string">"number of images per prompt"</span>) | |
| ], | |
| intermediate_outputs=[ | |
| OutputParam(name=<span class="hljs-string">"batch_size"</span>, description=<span class="hljs-string">"calculated batch size"</span>) | |
| ], | |
| block_fn=input_block_fn, | |
| description=<span class="hljs-string">"A block that determines batch_size based on the number of prompts and num_images_per_prompt argument."</span> | |
| ) | |
| input_block = input_block_cls()<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-1m93z3e">Now let’s create a second block that uses the <code>batch_size</code> from the first block:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-keyword">def</span> <span class="hljs-title function_">image_encoder_block_fn</span>(<span class="hljs-params">block_state, pipeline_state</span>): | |
| <span class="hljs-comment"># Simulate processing the image</span> | |
| block_state.image = torch.randn(<span class="hljs-number">1</span>, <span class="hljs-number">3</span>, <span class="hljs-number">512</span>, <span class="hljs-number">512</span>) | |
| block_state.batch_size = block_state.batch_size * <span class="hljs-number">2</span> | |
| block_state.image_latents = torch.randn(<span class="hljs-number">1</span>, <span class="hljs-number">4</span>, <span class="hljs-number">64</span>, <span class="hljs-number">64</span>) | |
| <span class="hljs-keyword">return</span> block_state | |
| image_encoder_block_cls = make_block( | |
| inputs=[ | |
| InputParam(name=<span class="hljs-string">"image"</span>, type_hint=<span class="hljs-string">"PIL.Image"</span>, description=<span class="hljs-string">"raw input image to process"</span>) | |
| ], | |
| intermediate_inputs=[ | |
| InputParam(name=<span class="hljs-string">"batch_size"</span>, type_hint=<span class="hljs-built_in">int</span>) | |
| ], | |
| intermediate_outputs=[ | |
| OutputParam(name=<span class="hljs-string">"image_latents"</span>, description=<span class="hljs-string">"latents representing the image"</span>) | |
| ], | |
| block_fn=image_encoder_block_fn, | |
| description=<span class="hljs-string">"Encode raw image into its latent presentation"</span> | |
| ) | |
| image_encoder_block = image_encoder_block_cls()<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-nhjvm4">Now let’s connect these blocks to create a <code>SequentialPipelineBlocks</code>:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-keyword">from</span> diffusers.modular_pipelines <span class="hljs-keyword">import</span> SequentialPipelineBlocks, InsertableDict | |
| <span class="hljs-comment"># Define a dict mapping block names to block instances</span> | |
| blocks_dict = InsertableDict() | |
| blocks_dict[<span class="hljs-string">"input"</span>] = input_block | |
| blocks_dict[<span class="hljs-string">"image_encoder"</span>] = image_encoder_block | |
| <span class="hljs-comment"># Create the SequentialPipelineBlocks</span> | |
| blocks = SequentialPipelineBlocks.from_blocks_dict(blocks_dict)<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-13ut5ty">Now you have a <code>SequentialPipelineBlocks</code> with 2 blocks:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-meta">>>> </span>blocks | |
| SequentialPipelineBlocks( | |
| Class: ModularPipelineBlocks | |
| Description: | |
| Sub-Blocks: | |
| [<span class="hljs-number">0</span>] <span class="hljs-built_in">input</span> (TestBlock) | |
| Description: A block that determines batch_size based on the number of prompts <span class="hljs-keyword">and</span> num_images_per_prompt argument. | |
| [<span class="hljs-number">1</span>] image_encoder (TestBlock) | |
| Description: Encode raw image into its latent presentation | |
| )<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-17k1idd">When you inspect <code>blocks.doc</code>, you can see that <code>batch_size</code> is not listed as an input. The pipeline automatically detects that the <code>input_block</code> can produce <code>batch_size</code> for the <code>image_encoder_block</code>, so it doesn’t ask the user to provide it.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-meta">>>> </span><span class="hljs-built_in">print</span>(blocks.doc) | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">SequentialPipelineBlocks</span> | |
| Inputs: | |
| prompt (`<span class="hljs-literal">None</span>`, *optional*): | |
| num_images_per_prompt (`<span class="hljs-literal">None</span>`, *optional*): | |
| image (`PIL.Image`, *optional*): | |
| raw <span class="hljs-built_in">input</span> image to process | |
| Outputs: | |
| batch_size (`<span class="hljs-literal">None</span>`): | |
| image_latents (`<span class="hljs-literal">None</span>`): | |
| latents representing the image<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-spy343">At runtime, you have data flow like this:</p> <p data-svelte-h="svelte-szckjx"><img src="https://huggingface.co/datasets/YiYiXu/testing-images/resolve/main/modular_quicktour/Editor%20_%20Mermaid%20Chart-2025-06-30-092631.png" alt="Data Flow Diagram"></p> <p data-svelte-h="svelte-1h5pvg6"><strong>How SequentialPipelineBlocks Works:</strong></p> <ol data-svelte-h="svelte-1wy15br"><li>Blocks are executed in the order they’re registered in the <code>blocks_dict</code></li> <li>Outputs from one block become available as intermediate inputs to all subsequent blocks</li> <li>The pipeline automatically figures out which values need to be provided by the user and which will be generated by previous blocks</li> <li>Each block maintains its own behavior and operates through its defined interface, while collectively these interfaces determine what the entire pipeline accepts and produces</li></ol> <p data-svelte-h="svelte-xwhbre">What happens within each block follows the same pattern we described earlier: each block gets its own <code>block_state</code> with the relevant inputs and intermediate inputs, performs its computation, and updates the pipeline state with its intermediate outputs.</p> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/diffusers/blob/main/docs/source/en/modular_diffusers/sequential_pipeline_blocks.md" target="_blank"><span data-svelte-h="svelte-1kd6by1"><</span> <span data-svelte-h="svelte-x0xyl0">></span> <span data-svelte-h="svelte-1dajgef"><span class="underline ml-1.5">Update</span> on GitHub</span></a> <p></p> | |
| <script> | |
| { | |
| __sveltekit_o82a48 = { | |
| assets: "/docs/diffusers/pr_11686/en", | |
| base: "/docs/diffusers/pr_11686/en", | |
| env: {} | |
| }; | |
| const element = document.currentScript.parentElement; | |
| const data = [null,null]; | |
| Promise.all([ | |
| import("/docs/diffusers/pr_11686/en/_app/immutable/entry/start.2b9667fb.js"), | |
| import("/docs/diffusers/pr_11686/en/_app/immutable/entry/app.a2a6117e.js") | |
| ]).then(([kit, app]) => { | |
| kit.start(app, element, { | |
| node_ids: [0, 230], | |
| data, | |
| form: null, | |
| error: null | |
| }); | |
| }); | |
| } | |
| </script> | |
Xet Storage Details
- Size:
- 23.5 kB
- Xet hash:
- 4d5860440e65d7b8c65d1daa932e41cd9a8f7d284937d84ffcdda23ff73e8b6f
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.