Buckets:
| <meta charset="utf-8" /><meta name="hf:doc:metadata" content="{"title":"AutoPipelineBlocks","local":"autopipelineblocks","sections":[{"title":"ConditionalPipelineBlocks","local":"conditionalpipelineblocks","sections":[],"depth":2},{"title":"Flujos de trabajo","local":"workflows","sections":[],"depth":2}],"depth":1}"/> | |
| <link href="/docs/diffusers/main/en/_app/immutable/entry/start.0S0_iEoG.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/I9eooN77.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/Bupkjr9f.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/entry/app.CPdOxCbw.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/CyvZ3FS5.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/l0QnnOED.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/DnVIJfC5.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/DsnmJJEf.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/nodes/0.DteTvmQZ.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/CoSrdQax.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/nodes/318.BQ_uNe26.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/DSPDl1gz.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/main/en/_app/immutable/chunks/D5eijdnr.js" rel="modulepreload"> | |
| <!--1k4az8t--><meta name="hf:doc:metadata" content="{"title":"AutoPipelineBlocks","local":"autopipelineblocks","sections":[{"title":"ConditionalPipelineBlocks","local":"conditionalpipelineblocks","sections":[],"depth":2},{"title":"Workflows","local":"workflows","sections":[],"depth":2}],"depth":1}"/><!----> | |
| <link href="/docs/diffusers/main/en/_app/immutable/assets/0.tn0RQdqM.css" rel="modulepreload"> <!--[--><!--[0--><!--[--><!--[0--><!--[--><p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: inline-end; margin-inline-start: 10px; display: inline-flex; position: relative; z-index: 10;"><div dir="ltr" class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" 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><!----></span> <span dir="auto">Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg><!----></button></div> <!--[-1--><!--]--></div><!----> <!--[0--><h1 class="relative group"><a id="autopipelineblocks" 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="#autopipelineblocks"><span><svg 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><!---->AutoPipelineBlocks<!----></span></h1><!--]--><!----> <p><a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> es un tipo de bloque múltiple que contiene bloques que admiten diferentes flujos de trabajo. Selecciona automáticamente qué subbloques ejecutar en función de la entrada proporcionada en tiempo de ejecución. Generalmente se utiliza para empaquetar varios flujos de trabajo, como texto a imagen, imagen a imagen e inpaint, en un único pipeline para mayor comodidad.</p> <p>Esta guía muestra cómo crear <a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a>.</p> <p>Crea tres <a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks">ModularPipelineBlocks</a> para texto a imagen, imagen a imagen e inpainting. Estos representan los diferentes flujos de trabajo disponibles en el pipeline.</p> <div class="flex space-x-2 items-center my-1.5 mr-8 h-7 !pl-0 -mx-3 md:mx-0"><!--[--><div class="flex items-center border rounded-lg px-1.5 py-1 leading-none select-none text-smd border-gray-800 bg-black dark:bg-gray-700 text-white">texto a imagen</div><div class="flex items-center border rounded-lg px-1.5 py-1 leading-none select-none text-smd text-gray-500 cursor-pointer opacity-90 hover:text-gray-700 dark:hover:text-gray-200 hover:shadow-sm">image-to-image</div><div class="flex items-center border rounded-lg px-1.5 py-1 leading-none select-none text-smd text-gray-500 cursor-pointer opacity-90 hover:text-gray-700 dark:hover:text-gray-200 hover:shadow-sm">inpaint</div><!--]--></div> <div class="language-select"><div><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 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> Copiado</div><!----></button><!----></div> <pre class="language-py "><!----><span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> diffusers.modular_pipelines <span class="hljs-keyword">import</span> ModularPipelineBlocks, InputParam, OutputParam | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">TextToImageBlock</span>(<span class="hljs-title class_ inherited__">ModularPipelineBlocks</span>): | |
| model_name = <span class="hljs-string">"text2img"</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> [InputParam(name=<span class="hljs-string">"prompt"</span>)] | |
| <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> [] | |
| <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> <span class="hljs-string">"I'm a text-to-image workflow!"</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">__call__</span>(<span class="hljs-params">self, components, state</span>): | |
| block_state = <span class="hljs-variable language_">self</span>.get_block_state(state) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"running the text-to-image workflow"</span>) | |
| <span class="hljs-comment"># Add your text-to-image logic here</span> | |
| <span class="hljs-comment"># For example: generate image from prompt</span> | |
| <span class="hljs-variable language_">self</span>.set_block_state(state, block_state) | |
| <span class="hljs-keyword">return</span> components, state<!----></pre></div><!----></div><!----> <div hidden=""><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 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> Copiado</div><!----></button><!----></div> <pre class="language-py "><!----><span class="hljs-keyword">class</span> <span class="hljs-title class_">ImageToImageBlock</span>(<span class="hljs-title class_ inherited__">ModularPipelineBlocks</span>): | |
| model_name = <span class="hljs-string">"img2img"</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> [InputParam(name=<span class="hljs-string">"prompt"</span>), InputParam(name=<span class="hljs-string">"image"</span>)] | |
| <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> [] | |
| <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> <span class="hljs-string">"I'm an image-to-image workflow!"</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">__call__</span>(<span class="hljs-params">self, components, state</span>): | |
| block_state = <span class="hljs-variable language_">self</span>.get_block_state(state) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"running the image-to-image workflow"</span>) | |
| <span class="hljs-comment"># Add your image-to-image logic here</span> | |
| <span class="hljs-comment"># For example: transform input image based on prompt</span> | |
| <span class="hljs-variable language_">self</span>.set_block_state(state, block_state) | |
| <span class="hljs-keyword">return</span> components, state<!----></pre></div><!----></div><!----> <div hidden=""><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 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> Copiado</div><!----></button><!----></div> <pre class="language-py "><!----><span class="hljs-keyword">class</span> <span class="hljs-title class_">InpaintBlock</span>(<span class="hljs-title class_ inherited__">ModularPipelineBlocks</span>): | |
| model_name = <span class="hljs-string">"inpaint"</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> [InputParam(name=<span class="hljs-string">"prompt"</span>), InputParam(name=<span class="hljs-string">"image"</span>), InputParam(name=<span class="hljs-string">"mask"</span>)] | |
| <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> [] | |
| <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> <span class="hljs-string">"I'm an inpaint workflow!"</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">__call__</span>(<span class="hljs-params">self, components, state</span>): | |
| block_state = <span class="hljs-variable language_">self</span>.get_block_state(state) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"running the inpaint workflow"</span>) | |
| <span class="hljs-comment"># Add your inpainting logic here</span> | |
| <span class="hljs-comment"># For example: fill masked areas based on prompt</span> | |
| <span class="hljs-variable language_">self</span>.set_block_state(state, block_state) | |
| <span class="hljs-keyword">return</span> components, state<!----></pre></div><!----></div><!----><!----></div><!----> <p>Crea una clase <a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> que incluya una lista de las clases de subbloques y sus nombres de bloque correspondientes.</p> <p>También debe incluir <code>block_trigger_inputs</code>, una lista de nombres de entrada que activan el bloque correspondiente. Si se proporciona una entrada de activación en tiempo de ejecución, ese bloque se selecciona para ejecutarse. Use <code>None</code> para especificar el bloque predeterminado que se ejecutará si no se detectan entradas de activación.</p> <p>Por último, es importante incluir una <code>description</code> que explique claramente qué entradas activan cada flujo de trabajo. Esto ayuda a los usuarios a comprender cómo ejecutar flujos de trabajo específicos.</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 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> Copiado</div><!----></button><!----></div> <pre class="language-py "><!----><span class="hljs-keyword">from</span> diffusers.modular_pipelines <span class="hljs-keyword">import</span> AutoPipelineBlocks | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">AutoImageBlocks</span>(<span class="hljs-title class_ inherited__">AutoPipelineBlocks</span>): | |
| <span class="hljs-comment"># List of sub-block classes to choose from</span> | |
| block_classes = [InpaintBlock, ImageToImageBlock, TextToImageBlock] | |
| <span class="hljs-comment"># Names for each block in the same order</span> | |
| block_names = [<span class="hljs-string">"inpaint"</span>, <span class="hljs-string">"img2img"</span>, <span class="hljs-string">"text2img"</span>] | |
| <span class="hljs-comment"># Trigger inputs that determine which block to run</span> | |
| <span class="hljs-comment"># - "mask" triggers inpaint workflow</span> | |
| <span class="hljs-comment"># - "image" triggers img2img workflow (but only if mask is not provided)</span> | |
| <span class="hljs-comment"># - if none of above, runs the text2img workflow (default)</span> | |
| block_trigger_inputs = [<span class="hljs-string">"mask"</span>, <span class="hljs-string">"image"</span>, <span class="hljs-literal">None</span>] | |
| <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> ( | |
| <span class="hljs-string">"Pipeline generates images given different types of conditions!\n"</span> | |
| + <span class="hljs-string">"This is an auto pipeline block that works for text2img, img2img and inpainting tasks.\n"</span> | |
| + <span class="hljs-string">" - inpaint workflow is run when `mask` is provided.\n"</span> | |
| + <span class="hljs-string">" - img2img workflow is run when `image` is provided (but only when `mask` is not provided).\n"</span> | |
| + <span class="hljs-string">" - text2img workflow is run when neither `image` nor `mask` is provided.\n"</span> | |
| )<!----></pre></div><!----> <p>Es <strong>muy</strong> importante incluir una <code>description</code> para evitar cualquier confusión sobre cómo ejecutar un bloque y qué entradas se requieren. Aunque <a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> son convenientes, su lógica condicional puede ser difícil de comprender si no se explica adecuadamente.</p> <p>Cree una instancia de <code>AutoImageBlocks</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 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> Copiado</div><!----></button><!----></div> <pre class="language-py "><!---->auto_blocks = AutoImageBlocks()<!----></pre></div><!----> <p>Para composiciones más complejas, como bloques <a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> anidados cuando se usan como subbloques en pipelines más grandes, use el método <a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.SequentialPipelineBlocks.get_execution_blocks">get_execution_blocks()</a> para extraer el bloque que se ejecuta realmente en función de su entrada.</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 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> Copiado</div><!----></button><!----></div> <pre class="language-py "><!---->auto_blocks.get_execution_blocks(mask=<span class="hljs-literal">True</span>)<!----></pre></div><!----> <!--[1--><h2 class="relative group"><a id="conditionalpipelineblocks" 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="#conditionalpipelineblocks"><span><svg 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><!---->ConditionalPipelineBlocks<!----></span></h2><!--]--><!----> <p><a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> es un caso especial de <a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.ConditionalPipelineBlocks">ConditionalPipelineBlocks</a>. Mientras que <a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> selecciona bloques en función de si se proporciona una entrada de activación o no, <a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.ConditionalPipelineBlocks">ConditionalPipelineBlocks</a> puede seleccionar un bloque en función de una lógica de selección personalizada proporcionada en el método <code>select_block</code>.</p> <p>Aquí está el mismo ejemplo escrito usando <a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.ConditionalPipelineBlocks">ConditionalPipelineBlocks</a> directamente:</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 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> Copiado</div><!----></button><!----></div> <pre class="language-py "><!----><span class="hljs-keyword">from</span> diffusers.modular_pipelines <span class="hljs-keyword">import</span> ConditionalPipelineBlocks | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">AutoImageBlocks</span>(<span class="hljs-title class_ inherited__">ConditionalPipelineBlocks</span>): | |
| block_classes = [InpaintBlock, ImageToImageBlock, TextToImageBlock] | |
| block_names = [<span class="hljs-string">"inpaint"</span>, <span class="hljs-string">"img2img"</span>, <span class="hljs-string">"text2img"</span>] | |
| block_trigger_inputs = [<span class="hljs-string">"mask"</span>, <span class="hljs-string">"image"</span>] | |
| default_block_name = <span class="hljs-string">"text2img"</span> | |
| <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> ( | |
| <span class="hljs-string">"Pipeline generates images given different types of conditions!\n"</span> | |
| + <span class="hljs-string">"This is an auto pipeline block that works for text2img, img2img and inpainting tasks.\n"</span> | |
| + <span class="hljs-string">" - inpaint workflow is run when `mask` is provided.\n"</span> | |
| + <span class="hljs-string">" - img2img workflow is run when `image` is provided (but only when `mask` is not provided).\n"</span> | |
| + <span class="hljs-string">" - text2img workflow is run when neither `image` nor `mask` is provided.\n"</span> | |
| ) | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">select_block</span>(<span class="hljs-params">self, mask=<span class="hljs-literal">None</span>, image=<span class="hljs-literal">None</span></span>) -> <span class="hljs-built_in">str</span> | <span class="hljs-literal">None</span>: | |
| <span class="hljs-keyword">if</span> mask <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">None</span>: | |
| <span class="hljs-keyword">return</span> <span class="hljs-string">"inpaint"</span> | |
| <span class="hljs-keyword">if</span> image <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">None</span>: | |
| <span class="hljs-keyword">return</span> <span class="hljs-string">"img2img"</span> | |
| <span class="hljs-keyword">return</span> <span class="hljs-literal">None</span> <span class="hljs-comment"># falls back to default_block_name ("text2img")</span><!----></pre></div><!----> <p>Las entradas enumeradas en <code>block_trigger_inputs</code> se pasan como argumentos de palabra clave a <code>select_block()</code>. Cuando <code>select_block</code> devuelve <code>None</code>, se recurre a <code>default_block_name</code>. Si <code>default_block_name</code> también es <code>None</code>, se omite el bloque condicional completo; esto es útil para pasos de procesamiento opcionales que solo deben ejecutarse cuando se proporcionan entradas específicas.</p> <!--[1--><h2 class="relative group"><a id="workflows" 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="#workflows"><span><svg 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><!---->Flujos de trabajo<!----></span></h2><!--]--><!----> <p>Los pipelines que contienen bloques condicionales (<a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> o <a href="/docs/diffusers/v0.43.0/es/api/modular_diffusers/pipeline_blocks#diffusers.ConditionalPipelineBlocks">ConditionalPipelineBlocks</a>) pueden admitir múltiples flujos de trabajo; por ejemplo, nuestro pipeline modular de SDXL admite una docena de flujos de trabajo en un solo pipeline. Pero esto también significa que puede resultar confuso para los usuarios saber qué flujos de trabajo se admiten y cómo ejecutarlos. Para los creadores de pipelines, es útil poder extraer solo los bloques relevantes para un flujo de trabajo específico.</p> <p>Recomendamos definir un <code>_workflow_map</code> para asignar un nombre a cada workflow y listar explícitamente las entradas que requiere.</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 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> Copiado</div><!----></button><!----></div> <pre class="language-py "><!----><span class="hljs-keyword">from</span> diffusers.modular_pipelines <span class="hljs-keyword">import</span> SequentialPipelineBlocks | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">MyPipelineBlocks</span>(<span class="hljs-title class_ inherited__">SequentialPipelineBlocks</span>): | |
| block_classes = [TextEncoderBlock, AutoImageBlocks, DecodeBlock] | |
| block_names = [<span class="hljs-string">"text_encoder"</span>, <span class="hljs-string">"auto_image"</span>, <span class="hljs-string">"decode"</span>] | |
| _workflow_map = { | |
| <span class="hljs-string">"text2image"</span>: {<span class="hljs-string">"prompt"</span>: <span class="hljs-literal">True</span>}, | |
| <span class="hljs-string">"image2image"</span>: {<span class="hljs-string">"image"</span>: <span class="hljs-literal">True</span>, <span class="hljs-string">"prompt"</span>: <span class="hljs-literal">True</span>}, | |
| <span class="hljs-string">"inpaint"</span>: {<span class="hljs-string">"mask"</span>: <span class="hljs-literal">True</span>, <span class="hljs-string">"image"</span>: <span class="hljs-literal">True</span>, <span class="hljs-string">"prompt"</span>: <span class="hljs-literal">True</span>}, | |
| }<!----></pre></div><!----> <p>Todos nuestros pipelines modulares integrados incluyen flujos de trabajo predefinidos. La propiedad <code>available_workflows</code> enumera todos los flujos de trabajo admitidos:</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 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> Copiado</div><!----></button><!----></div> <pre class="language-py "><!---->pipeline_blocks = MyPipelineBlocks() | |
| pipeline_blocks.available_workflows | |
| <span class="hljs-comment"># ['text2image', 'image2image', 'inpaint']</span><!----></pre></div><!----> <p>Recupera un workflow específico con <code>get_workflow</code> para inspeccionar y depurar un bloque específico que ejecuta el workflow.</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 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> Copiado</div><!----></button><!----></div> <pre class="language-py "><!---->pipeline_blocks.get_workflow(<span class="hljs-string">"inpaint"</span>)<!----></pre></div><!----> <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/auto_pipeline_blocks.md" target="_blank"><svg class="mr-1" 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="M31,16l-7,7l-1.41-1.41L28.17,16l-5.58-5.59L24,9l7,7z"></path><path d="M1,16l7-7l1.41,1.41L3.83,16l5.58,5.59L8,23l-7-7z"></path><path d="M12.419,25.484L17.639,6.552l1.932,0.518L14.351,26.002z"></path></svg><!----> <span><span class="underline">Update</span> on GitHub</span></a><!----> <p></p><!--]--><!----><!--]--><!--]--><!--]--> <!--[-1--><!--]--><!--]--> | |
| <script> | |
| { | |
| __sveltekit_1qsdbwf = { | |
| base: "/docs/diffusers/main/en", | |
| assets: "/docs/diffusers/main/en" | |
| }; | |
| const element = document.currentScript.parentElement; | |
| Promise.all([ | |
| import("/docs/diffusers/main/en/_app/immutable/entry/start.0S0_iEoG.js"), | |
| import("/docs/diffusers/main/en/_app/immutable/entry/app.CPdOxCbw.js") | |
| ]).then(([kit, app]) => { | |
| kit.start(app, element, { | |
| node_ids: [0, 318], | |
| data: [null,null], | |
| form: null, | |
| error: null | |
| }); | |
| }); | |
| } | |
| </script> | |
Xet Storage Details
- Size:
- 40.1 kB
- Xet hash:
- e70ac4a993403f268f6af20570fe4c530bb6ad7a712313001ac2f24a4ad82c1b
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.