Buckets:

hf-doc-build/doc / diffusers /v0.43.0 /ar /modular_diffusers /auto_pipeline_blocks.html
mishig's picture
download
raw
41.3 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;AutoPipelineBlocks&quot;,&quot;local&quot;:&quot;autopipelineblocks&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;ConditionalPipelineBlocks&quot;,&quot;local&quot;:&quot;conditionalpipelineblocks&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;سير العمل&quot;,&quot;local&quot;:&quot;workflows&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;: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="{&quot;title&quot;:&quot;AutoPipelineBlocks&quot;,&quot;local&quot;:&quot;autopipelineblocks&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;ConditionalPipelineBlocks&quot;,&quot;local&quot;:&quot;conditionalpipelineblocks&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Workflows&quot;,&quot;local&quot;:&quot;workflows&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;: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/ar/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> نوعًا متعدد الكتل يحتوي على كتل تدعم سير عمل مختلفة. يقوم تلقائيًا باختيار الكتل الفرعية التي يجب تشغيلها بناءً على المدخلات المُقدمة وقت التشغيل. يُستخدم هذا عادةً لتجميع عدة سير عمل - من النص إلى الصورة، من الصورة إلى الصورة، وإعادة الرسم - في خط أنابيب واحد لتسهيل الاستخدام.</p> <p>يُظهر هذا الدليل كيفية إنشاء <a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a>.</p> <p>أنشئ ثلاثة <a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks">ModularPipelineBlocks</a> لتحويل النص إلى صورة، وتحويل الصورة إلى صورة، والتعبئة (Inpainting). تمثل هذه الكتل سير العمل المختلفة المتاحة في خط الأنابيب.</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">النص إلى صورة</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">صورة إلى صورة</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> تم النسخ</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">&quot;text2img&quot;</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">&quot;prompt&quot;</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">&quot;I&#x27;m a text-to-image workflow!&quot;</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">&quot;running the text-to-image workflow&quot;</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> تم النسخ</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">&quot;img2img&quot;</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">&quot;prompt&quot;</span>), InputParam(name=<span class="hljs-string">&quot;image&quot;</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">&quot;I&#x27;m an image-to-image workflow!&quot;</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">&quot;running the image-to-image workflow&quot;</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> تم النسخ</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">&quot;inpaint&quot;</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">&quot;prompt&quot;</span>), InputParam(name=<span class="hljs-string">&quot;image&quot;</span>), InputParam(name=<span class="hljs-string">&quot;mask&quot;</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">&quot;I&#x27;m an inpaint workflow!&quot;</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">&quot;running the inpaint workflow&quot;</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>أنشئ فئة <a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> تتضمن قائمة بفئات الأجزاء الفرعية وأسماء الأجزاء المقابلة لها.</p> <p>يجب أيضًا تضمين <code>block_trigger_inputs</code>، وهو قائمة بأسماء المدخلات التي تُطلق الكتلة المقابلة. إذا تم توفير مدخل محفّز وقت التشغيل، فسيتم اختيار تلك الكتلة للتشغيل. استخدم <code>None</code> لتحديد الكتلة الافتراضية للتشغيل إذا لم يتم اكتشاف أي مدخلات محفّزة.</p> <p>أخيرًا، من المهم تضمين <code>description</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> تم النسخ</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">&quot;inpaint&quot;</span>, <span class="hljs-string">&quot;img2img&quot;</span>, <span class="hljs-string">&quot;text2img&quot;</span>]
<span class="hljs-comment"># Trigger inputs that determine which block to run</span>
<span class="hljs-comment"># - &quot;mask&quot; triggers inpaint workflow</span>
<span class="hljs-comment"># - &quot;image&quot; 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">&quot;mask&quot;</span>, <span class="hljs-string">&quot;image&quot;</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">&quot;Pipeline generates images given different types of conditions!\n&quot;</span>
+ <span class="hljs-string">&quot;This is an auto pipeline block that works for text2img, img2img and inpainting tasks.\n&quot;</span>
+ <span class="hljs-string">&quot; - inpaint workflow is run when `mask` is provided.\n&quot;</span>
+ <span class="hljs-string">&quot; - img2img workflow is run when `image` is provided (but only when `mask` is not provided).\n&quot;</span>
+ <span class="hljs-string">&quot; - text2img workflow is run when neither `image` nor `mask` is provided.\n&quot;</span>
)<!----></pre></div><!----> <p>من <strong>الهام</strong> للغاية تضمين <code>description</code> لتجنب أي لبس حول كيفية تشغيل الكتلة وما هي المدخلات المطلوبة. وعلى الرغم من أن <a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> مريحة، إلا أن منطقها الشرطي قد يكون صعب الفهم إذا لم يتم شرحه بشكل صحيح.</p> <p>أنشئ مثيلًا من <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> تم النسخ</div><!----></button><!----></div> <pre class="language-py "><!---->auto_blocks = AutoImageBlocks()<!----></pre></div><!----> <p>في حالات التركيبات الأكثر تعقيدًا، مثل كتل <a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> المتداخلة عندما تُستخدم ككتل فرعية في خطوط أنابيب أكبر، استخدم طريقة <a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.SequentialPipelineBlocks.get_execution_blocks">get_execution_blocks()</a> لاستخراج الكتلة التي يتم تشغيلها فعليًا بناءً على مدخلاتك.</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> تم النسخ</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/ar/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> حالة خاصة من <a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.ConditionalPipelineBlocks">ConditionalPipelineBlocks</a>. بينما يختار <a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> الكتل بناءً على ما إذا كان مدخل المحفّز مُقدَّمًا أم لا، فإن <a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.ConditionalPipelineBlocks">ConditionalPipelineBlocks</a> قادر على اختيار كتلة بناءً على منطق اختيار مخصص مُقدَّم في طريقة <code>select_block</code>.</p> <p>إليك المثال نفسه مكتوبًا باستخدام <a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.ConditionalPipelineBlocks">ConditionalPipelineBlocks</a> مباشرةً:</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> تم النسخ</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">&quot;inpaint&quot;</span>, <span class="hljs-string">&quot;img2img&quot;</span>, <span class="hljs-string">&quot;text2img&quot;</span>]
block_trigger_inputs = [<span class="hljs-string">&quot;mask&quot;</span>, <span class="hljs-string">&quot;image&quot;</span>]
default_block_name = <span class="hljs-string">&quot;text2img&quot;</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">&quot;Pipeline generates images given different types of conditions!\n&quot;</span>
+ <span class="hljs-string">&quot;This is an auto pipeline block that works for text2img, img2img and inpainting tasks.\n&quot;</span>
+ <span class="hljs-string">&quot; - inpaint workflow is run when `mask` is provided.\n&quot;</span>
+ <span class="hljs-string">&quot; - img2img workflow is run when `image` is provided (but only when `mask` is not provided).\n&quot;</span>
+ <span class="hljs-string">&quot; - text2img workflow is run when neither `image` nor `mask` is provided.\n&quot;</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>) -&gt; <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">&quot;inpaint&quot;</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">&quot;img2img&quot;</span>
<span class="hljs-keyword">return</span> <span class="hljs-literal">None</span> <span class="hljs-comment"># falls back to default_block_name (&quot;text2img&quot;)</span><!----></pre></div><!----> <p>تُمرَّر المدخلات المدرجة في <code>block_trigger_inputs</code> كحجج اسمية إلى <code>select_block()</code>. عند إرجاع <code>select_block</code> القيمة <code>None</code>، يتم الرجوع إلى <code>default_block_name</code>. وإذا كانت <code>default_block_name</code> هي أيضاً <code>None</code>، يتم تجاوز الكتلة الشرطية بأكملها — وهذا مفيد لخطوات المعالجة الاختيارية التي يجب أن تعمل فقط عند توفير مدخلات محددة.</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><!---->سير العمل<!----></span></h2><!--]--><!----> <p>يمكن أن تدعم خطوط الأنابيب التي تحتوي على كتل شرطية (<a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.AutoPipelineBlocks">AutoPipelineBlocks</a> أو <a href="/docs/diffusers/v0.43.0/ar/api/modular_diffusers/pipeline_blocks#diffusers.ConditionalPipelineBlocks">ConditionalPipelineBlocks</a>) سير عمل متعددة — على سبيل المثال، يدعم خط أنابيب SDXL المعياري لدينا اثني عشر سير عمل في خط أنابيب واحد. لكن هذا يعني أيضًا أنه قد يكون من الصعب على المستخدمين معرفة سلاسل العمل المدعومة وكيفية تشغيلها. وبالنسبة لمطوري خطوط الأنابيب، فمن المفيد القدرة على استخراج الكتل ذات الصلة بسير عمل محدد فقط.</p> <p>نوصي بتعريف <code>_workflow_map</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> تم النسخ</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">&quot;text_encoder&quot;</span>, <span class="hljs-string">&quot;auto_image&quot;</span>, <span class="hljs-string">&quot;decode&quot;</span>]
_workflow_map = {
<span class="hljs-string">&quot;text2image&quot;</span>: {<span class="hljs-string">&quot;prompt&quot;</span>: <span class="hljs-literal">True</span>},
<span class="hljs-string">&quot;image2image&quot;</span>: {<span class="hljs-string">&quot;image&quot;</span>: <span class="hljs-literal">True</span>, <span class="hljs-string">&quot;prompt&quot;</span>: <span class="hljs-literal">True</span>},
<span class="hljs-string">&quot;inpaint&quot;</span>: {<span class="hljs-string">&quot;mask&quot;</span>: <span class="hljs-literal">True</span>, <span class="hljs-string">&quot;image&quot;</span>: <span class="hljs-literal">True</span>, <span class="hljs-string">&quot;prompt&quot;</span>: <span class="hljs-literal">True</span>},
}<!----></pre></div><!----> <p>جميع خطوط الأنابيب المعيارية المدمجة لدينا تأتي مع مسارات عمل محددة مسبقًا. يحدد خاصية <code>available_workflows</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> تم النسخ</div><!----></button><!----></div> <pre class="language-py "><!---->pipeline_blocks = MyPipelineBlocks()
pipeline_blocks.available_workflows
<span class="hljs-comment"># [&#x27;text2image&#x27;, &#x27;image2image&#x27;, &#x27;inpaint&#x27;]</span><!----></pre></div><!----> <p>استرجع مسار عمل محددًا باستخدام <code>get_workflow</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> تم النسخ</div><!----></button><!----></div> <pre class="language-py "><!---->pipeline_blocks.get_workflow(<span class="hljs-string">&quot;inpaint&quot;</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:
41.3 kB
·
Xet hash:
05d0ac0e07236254de4b3691acc7fc910ab518e294e9420e228b250916e79769

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