Buckets:

mishig's picture
download
raw
126 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Cómo contribuir a Diffusers 🧨&quot;,&quot;local&quot;:&quot;how-to-contribute-to-diffusers-&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Resumen&quot;,&quot;local&quot;:&quot;overview&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;1. Hacer y responder preguntas en GitHub Discussions o en Discord&quot;,&quot;local&quot;:&quot;1-asking-and-answering-questions-on-github-discussions-or-on-discord&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;2. Abrir nuevos problemas en la pestaña de problemas de GitHub&quot;,&quot;local&quot;:&quot;2-opening-new-issues-on-the-github-issues-tab&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;2.1. Informes de errores reproducibles y mínimos&quot;,&quot;local&quot;:&quot;21-reproducible-minimal-bug-reports&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;2.2. Solicitudes de funciones&quot;,&quot;local&quot;:&quot;22-feature-requests&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;2.3 Retroalimentación&quot;,&quot;local&quot;:&quot;23-feedback&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;2.4 Preguntas técnicas&quot;,&quot;local&quot;:&quot;24-technical-questions&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;2.5 Propuesta para añadir un nuevo modelo, programador o pipeline&quot;,&quot;local&quot;:&quot;25-proposal-to-add-a-new-model-scheduler-or-pipeline&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4}],&quot;depth&quot;:3},{&quot;title&quot;:&quot;3. Responder a los problemas en la pestaña de problemas de GitHub&quot;,&quot;local&quot;:&quot;3-answering-issues-on-the-github-issues-tab&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;4. Corregir un “Good first issue”&quot;,&quot;local&quot;:&quot;4-fixing-a-good-first-issue&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;5. Contribuir a la documentación&quot;,&quot;local&quot;:&quot;5-contribute-to-the-documentation&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;6. Publicar un pipeline o un modelo en el Hub&quot;,&quot;local&quot;:&quot;6-publish-a-pipeline-or-model-on-the-hub&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;7. Contribuir con ejemplos de entrenamiento&quot;,&quot;local&quot;:&quot;7-contribute-to-training-examples&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;8. Corregir un “Good second issue”&quot;,&quot;local&quot;:&quot;8-fixing-a-good-second-issue&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;9. Asumir un problema MVP de Diffusers&quot;,&quot;local&quot;:&quot;9-taking-on-a-diffusers-mvp-issue&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;10. Agregar pipelines, modelos y programadores&quot;,&quot;local&quot;:&quot;10-adding-pipelines-models-schedulers&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Cuando se libera el soporte para un nuevo modelo o pipeline&quot;,&quot;local&quot;:&quot;when-new-model-or-pipeline-support-is-released&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;Copiado de mechanism&quot;,&quot;local&quot;:&quot;copied-from-mechanism&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4}],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Cómo escribir un buen issue&quot;,&quot;local&quot;:&quot;how-to-write-a-good-issue&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Cómo escribir un buen PR&quot;,&quot;local&quot;:&quot;how-to-write-a-good-pr&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Cómo abrir una PR&quot;,&quot;local&quot;:&quot;how-to-open-a-pr&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Pruebas&quot;,&quot;local&quot;:&quot;tests&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Sincronizar el main bifurcado con el main de upstream (HuggingFace)&quot;,&quot;local&quot;:&quot;syncing-forked-main-with-upstream-huggingface-main&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Guía de estilo&quot;,&quot;local&quot;:&quot;style-guide&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Programación con agentes de IA&quot;,&quot;local&quot;:&quot;coding-with-ai-agents&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Contribuciones asistidas por IA y agénticas&quot;,&quot;local&quot;:&quot;ai-assisted-and-agentic-contributions&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2}],&quot;depth&quot;:1}"/>
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/entry/start.1gaXe03k.js" rel="modulepreload">
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/BObs6oQO.js" rel="modulepreload">
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/DPnyVmXs.js" rel="modulepreload">
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/entry/app.BwdYRbCn.js" rel="modulepreload">
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/DSGUT_OW.js" rel="modulepreload">
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/C045MWWx.js" rel="modulepreload">
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/6tuJ3nyi.js" rel="modulepreload">
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/DsnmJJEf.js" rel="modulepreload">
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/nodes/0.CornNeQR.js" rel="modulepreload">
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/IaDvMxLQ.js" rel="modulepreload">
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/nodes/304.D7A4xAiG.js" rel="modulepreload">
<link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/bKdwVYpU.js" rel="modulepreload">
<!--110sasa--><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;How to contribute to Diffusers 🧨&quot;,&quot;local&quot;:&quot;how-to-contribute-to-diffusers-&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Overview&quot;,&quot;local&quot;:&quot;overview&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;1. Asking and answering questions on GitHub Discussions or on Discord&quot;,&quot;local&quot;:&quot;1-asking-and-answering-questions-on-github-discussions-or-on-discord&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;2. Opening new issues on the GitHub issues tab&quot;,&quot;local&quot;:&quot;2-opening-new-issues-on-the-github-issues-tab&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;2.1. Reproducible, minimal bug reports&quot;,&quot;local&quot;:&quot;21-reproducible-minimal-bug-reports&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;2.2. Feature requests&quot;,&quot;local&quot;:&quot;22-feature-requests&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;2.3 Feedback&quot;,&quot;local&quot;:&quot;23-feedback&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;2.4 Technical questions&quot;,&quot;local&quot;:&quot;24-technical-questions&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;2.5 Proposal to add a new model, scheduler, or pipeline&quot;,&quot;local&quot;:&quot;25-proposal-to-add-a-new-model-scheduler-or-pipeline&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4}],&quot;depth&quot;:3},{&quot;title&quot;:&quot;3. Answering issues on the GitHub issues tab&quot;,&quot;local&quot;:&quot;3-answering-issues-on-the-github-issues-tab&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;4. Fixing a “Good first issue”&quot;,&quot;local&quot;:&quot;4-fixing-a-good-first-issue&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;5. Contribute to the documentation&quot;,&quot;local&quot;:&quot;5-contribute-to-the-documentation&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;6. Publish a pipeline or model on the Hub&quot;,&quot;local&quot;:&quot;6-publish-a-pipeline-or-model-on-the-hub&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;7. Contribute to training examples&quot;,&quot;local&quot;:&quot;7-contribute-to-training-examples&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;8. Fixing a “Good second issue”&quot;,&quot;local&quot;:&quot;8-fixing-a-good-second-issue&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;9. Taking on a Diffusers MVP issue&quot;,&quot;local&quot;:&quot;9-taking-on-a-diffusers-mvp-issue&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;10. Adding pipelines, models, schedulers&quot;,&quot;local&quot;:&quot;10-adding-pipelines-models-schedulers&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;When new model or pipeline support is released&quot;,&quot;local&quot;:&quot;when-new-model-or-pipeline-support-is-released&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4},{&quot;title&quot;:&quot;Copied from mechanism&quot;,&quot;local&quot;:&quot;copied-from-mechanism&quot;,&quot;sections&quot;:[],&quot;depth&quot;:4}],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;How to write a good issue&quot;,&quot;local&quot;:&quot;how-to-write-a-good-issue&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;How to write a good PR&quot;,&quot;local&quot;:&quot;how-to-write-a-good-pr&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2},{&quot;title&quot;:&quot;How to open a PR&quot;,&quot;local&quot;:&quot;how-to-open-a-pr&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;Tests&quot;,&quot;local&quot;:&quot;tests&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Syncing forked main with upstream (HuggingFace) main&quot;,&quot;local&quot;:&quot;syncing-forked-main-with-upstream-huggingface-main&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3},{&quot;title&quot;:&quot;Style guide&quot;,&quot;local&quot;:&quot;style-guide&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2},{&quot;title&quot;:&quot;Coding with AI agents&quot;,&quot;local&quot;:&quot;coding-with-ai-agents&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;AI-assisted and agentic contributions&quot;,&quot;local&quot;:&quot;ai-assisted-and-agentic-contributions&quot;,&quot;sections&quot;:[],&quot;depth&quot;:3}],&quot;depth&quot;:2}],&quot;depth&quot;:1}"/><!---->
<link href="/docs/diffusers/v0.43.0/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="how-to-contribute-to-diffusers-" 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="#how-to-contribute-to-diffusers-"><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><!---->Cómo contribuir a Diffusers 🧨<!----></span></h1><!--]--><!----> <blockquote class="tip"><p>Si usas un agente de IA para contribuir, asegúrate de leer la sección <a href="#ai-assisted-and-agentic-contributions">Contribuciones asistidas por IA y agénticas</a> para conocer nuestras expectativas y directrices.</p></blockquote> <p>¡Amamos ❤️ las contribuciones de la comunidad de código abierto! Todos son bienvenidos y se valoran y agradecen todos los tipos de participación, no solo el código. Responder preguntas, ayudar a otros, establecer contacto y mejorar la documentación son de inmenso valor para la comunidad, así que no tengas miedo y participa si te animas.</p> <p>Se anima a todos a empezar saludando con 👋 en nuestro canal público de Discord. Hablamos de las últimas tendencias en modelos de difusión, hacemos preguntas, mostramos proyectos personales, nos ayudamos mutuamente con contribuciones o simplemente pasamos el rato ☕. <a href="https://Discord.gg/G7tWnz98XR"><img alt="Join us on Discord" src="https://img.shields.io/discord/823813159592001537?color=5865F2&amp;logo=discord&amp;logoColor=white"/></a></p> <p>Sea cual sea la forma en que decidas contribuir, nos esforzamos por ser parte de una comunidad abierta, acogedora y amable. Por favor, lee nuestro <a href="https://github.com/huggingface/diffusers/blob/main/CODE_OF_CONDUCT.md" rel="nofollow">código de conducta</a> y ten en cuenta respetarlo durante tus interacciones. También te recomendamos que te familiarices con las <a href="https://huggingface.co/docs/diffusers/conceptual/ethical_guidelines" rel="nofollow">directrices éticas</a> que guían nuestro proyecto y te pedimos que te apegues a los mismos principios de transparencia y responsabilidad.</p> <p>Valoramos enormemente la retroalimentación de la comunidad, así que no tengas miedo de expresarte si crees que tienes comentarios valiosos que puedan ayudar a mejorar la biblioteca: cada mensaje, comentario, issue y pull request (PR) se lee y se considera.</p> <!--[1--><h2 class="relative group"><a id="overview" 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="#overview"><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><!---->Resumen<!----></span></h2><!--]--><!----> <p>Puedes contribuir de muchas maneras, desde responder preguntas en issues y discusiones hasta añadir nuevos modelos de difusión a la biblioteca principal.</p> <p>A continuación, presentamos un resumen de las diferentes formas de contribuir, ordenadas por el tiempo de dedicación requerido, en orden ascendente. Todas son valiosas para la comunidad.</p> <ul><li><ol><li>Hacer y responder preguntas en <a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow">GitHub Discussions</a> o en <a href="https://discord.gg/G7tWnz98XR" rel="nofollow">Discord</a>.</li></ol></li> <li><ol start="2"><li>Abriendo nuevos problemas en <a href="https://github.com/huggingface/diffusers/issues/new/choose" rel="nofollow">la pestaña GitHub Issues</a>.</li></ol></li> <li><ol start="3"><li>Responder a los problemas en <a href="https://github.com/huggingface/diffusers/issues" rel="nofollow">la pestaña GitHub Issues</a>.</li></ol></li> <li><ol start="4"><li>Corrige un problema sencillo, marcado con la etiqueta “Good first issue”, ver <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="nofollow">aquí</a>.</li></ol></li> <li><ol start="5"><li>Contribuir a la <a href="https://github.com/huggingface/diffusers/tree/main/docs/source" rel="nofollow">documentación</a>.</li></ol></li> <li><ol start="6"><li>Publica un pipeline o un modelo en el Hub como código remoto con <a href="../modular_diffusers/overview">Modular Diffusers</a>.</li></ol></li> <li><ol start="7"><li>Contribuye a los <a href="https://github.com/huggingface/diffusers/tree/main/examples" rel="nofollow">examples</a>.</li></ol></li> <li><ol start="8"><li>Corrige un problema más difícil, marcado con la etiqueta “Good second issue”, ver <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+second+issue%22" rel="nofollow">aquí</a>.</li></ol></li> <li><ol start="9"><li>Asumir un problema del <a href="https://github.com/huggingface/diffusers/issues/12635" rel="nofollow">programa MVP de Diffusers</a>.</li></ol></li> <li><ol start="10"><li>Añade un nuevo pipeline, modelo o scheduler a la biblioteca. Para esta contribución, normalmente trabajamos directamente con los autores del modelo; como contribuidor de la comunidad, comienza en el Hub (6) en su lugar. Consulta los issues abiertos <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+pipeline%2Fmodel%22" rel="nofollow">“New Pipeline/Model”</a> y <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+scheduler%22" rel="nofollow">“New scheduler”</a>, y lee primero la <a href="https://huggingface.co/docs/diffusers/main/en/conceptual/philosophy" rel="nofollow">Design Philosophy</a>.</li></ol></li></ul> <p>Como se dijo antes, <strong>todas las contribuciones son valiosas para la comunidad</strong>.
A continuación, explicaremos cada contribución con un poco más de detalle.</p> <p>Para las contribuciones 4 a 10, excepto la 6, que se encuentra en el Hub, será necesario abrir un PR. Se explica en detalle cómo hacerlo en <a href="#how-to-open-a-pr">Opening a pull request</a>.</p> <!--[2--><h3 class="relative group"><a id="1-asking-and-answering-questions-on-github-discussions-or-on-discord" 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="#1-asking-and-answering-questions-on-github-discussions-or-on-discord"><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><!---->1. Hacer y responder preguntas en GitHub Discussions o en Discord<!----></span></h3><!--]--><!----> <p>Cualquier pregunta o comentario relacionado con la biblioteca Diffusers puede hacerse en <a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow">GitHub Discussions</a> o en <a href="https://discord.gg/G7tWnz98XR" rel="nofollow">Discord</a>. Dichas preguntas y comentarios incluyen (pero no se limitan a):</p> <ul><li>Informes de experimentos de entrenamiento o inferencia con el objetivo de compartir conocimientos</li> <li>Presentación de proyectos personales</li> <li>Preguntas sobre ejemplos de entrenamiento no oficiales</li> <li>Propuestas de proyecto</li> <li>Comentarios generales</li> <li>Resúmenes de artículos</li> <li>Solicitar ayuda en proyectos personales que se construyen sobre la biblioteca Diffusers</li> <li>Preguntas generales</li> <li>Preguntas éticas sobre los modelos de difusión</li> <li>…</li></ul> <p>Cada pregunta que se formula en GitHub Discussions o en Discord fomenta activamente que la comunidad comparta conocimiento de forma pública y, muy probablemente, le será de gran ayuda a un principiante en el futuro que tenga la misma duda que tú. Por favor, no dudes en plantear cualquier pregunta que tengas.
En el mismo espíritu, ayudas enormemente a la comunidad al responder a este tipo de preguntas, ya que de esta manera documentas públicamente el conocimiento para que todos puedan aprender de él.</p> <p><strong>Tenga en cuenta</strong> que cuanto más esfuerzo invierta en formular o responder una pregunta, mayor será la calidad del conocimiento documentado públicamente. De la misma manera, las preguntas bien formuladas y bien respondidas crean una base de datos de conocimiento de alta calidad accesible para todos, mientras que las preguntas o respuestas mal formuladas reducen la calidad general de la base de datos de conocimiento público.
En resumen, una pregunta o respuesta de alta calidad es <em>precisa</em>, <em>concisa</em>, <em>relevante</em>, <em>fácil de entender</em>, <em>accesible</em> y <em>con un buen formato/bien formulada</em>. Para obtener más información, consulte la sección <a href="#how-to-write-a-good-issue">Cómo escribir un buen issue</a>.</p> <p><strong>NOTA sobre canales</strong>: <a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow"><em>GitHub Discussions</em></a> está indexado por los motores de búsqueda y cada hilo puede enlazarse, por lo que las preguntas y respuestas publicadas allí siguen siendo localizables para la siguiente persona que tenga el mismo problema.
En cambio, <em>Discord</em> tiene un formato de chat que invita a una comunicación rápida de ida y vuelta.
Si bien es probable que te tome menos tiempo obtener una respuesta a tu pregunta en Discord, tu
pregunta dejará de ser visible con el tiempo y resulta mucho más difícil encontrar información publicada hace un tiempo. Por lo tanto, recomendamos GitHub Discussions para preguntas y respuestas destinadas a perdurar. Si una conversación en Discord conduce a una conclusión interesante, publica el resultado como una discusión para que los lectores futuros puedan encontrarlo.</p> <!--[2--><h3 class="relative group"><a id="2-opening-new-issues-on-the-github-issues-tab" 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="#2-opening-new-issues-on-the-github-issues-tab"><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><!---->2. Abrir nuevos problemas en la pestaña de problemas de GitHub<!----></span></h3><!--]--><!----> <p>La biblioteca 🧨 Diffusers es robusta y fiable gracias a los usuarios que nos notifican los problemas que encuentran. Así que, gracias por reportar un problema.</p> <p>Recuerda que los issues de GitHub están reservados para preguntas técnicas directamente relacionadas con la biblioteca Diffusers, informes de errores, solicitudes de funciones o comentarios sobre el diseño de la biblioteca.</p> <p>En pocas palabras, esto significa que todo lo que <strong>no</strong> esté relacionado con el <strong>código de la biblioteca Diffusers</strong> (incluida la documentación) no debe <strong>no</strong> plantearse como un issue, sino en <a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow">GitHub Discussions</a> o <a href="https://discord.gg/G7tWnz98XR" rel="nofollow">Discord</a>.</p> <p><strong>Tenga en cuenta las siguientes directrices al abrir un nuevo problema</strong>:</p> <ul><li>Asegúrate de haber buscado si tu problema ya fue planteado antes (usa la barra de búsqueda de GitHub en Issues).</li> <li>Por favor, no informes un problema nuevo en otro problema (relacionado). Si otro problema está altamente relacionado, abre un problema nuevo de todos modos y enlázalo con el problema relacionado.</li> <li>Asegúrate de que tu problema esté escrito en inglés.</li> <li>Comprueba si tu problema podría resolverse actualizando a la última versión de Diffusers. Antes de publicar tu problema, asegúrate de que <code>python -c "import diffusers; print(diffusers.__version__)"</code> sea superior o coincida con la última versión de Diffusers.</li> <li>Recuerda que cuanto más esfuerzo inviertas en abrir un nuevo problema, mayor será la calidad de tu respuesta y mejor será la calidad general de los problemas de Diffusers.</li></ul> <p>Los nuevos problemas suelen incluir lo siguiente.</p> <!--[3--><h4 class="relative group"><a id="21-reproducible-minimal-bug-reports" 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="#21-reproducible-minimal-bug-reports"><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><!---->2.1. Informes de errores reproducibles y mínimos<!----></span></h4><!--]--><!----> <p>Un informe de error debe incluir siempre un fragmento de código reproducible y ser lo más minimalista y conciso posible.
Esto significa, en detalle:</p> <ul><li>Reduce el alcance del error lo más posible; <strong>no publiques todo tu archivo de código</strong>.</li> <li>Formatea tu código.</li> <li>No incluya ninguna biblioteca externa, excepto Diffusers, que depende de ellas.</li> <li><strong>Siempre</strong> proporciona toda la información necesaria sobre tu entorno; para ello, puedes ejecutar <code>diffusers-cli env</code> en tu shell y copiar y pegar la información mostrada en el issue.</li> <li>Explica el problema. Si el lector no sabe cuál es el problema y por qué lo es, no podrá resolverlo.</li> <li><strong>Siempre</strong> asegúrate de que quien lea tu publicación pueda reproducir el problema con el mínimo esfuerzo posible. Si tu fragmento de código no se puede ejecutar por falta de librerías o variables no definidas, no podrán ayudarte. Asegúrate de que tu fragmento de código reproducible sea lo más mínimo posible y que se pueda copiar y pegar en una simple consola de Python.</li> <li>Si para reproducir tu problema se requiere un modelo y/o un conjunto de datos, asegúrate de que el lector tenga acceso a ese modelo o conjunto de datos. Siempre puedes subir tu modelo o conjunto de datos al <a href="https://huggingface.co" rel="nofollow">Hub</a> para que sea fácilmente descargable. Intenta mantener tu modelo y conjunto de datos lo más pequeños posible, para que la reproducción de tu problema sea lo más sencilla posible.</li></ul> <p>Para obtener más información, consulte la sección <a href="#how-to-write-a-good-issue">Cómo escribir un buen issue</a>.</p> <p>Puedes abrir un informe de error <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug-report.yml" rel="nofollow">aquí</a>.</p> <!--[3--><h4 class="relative group"><a id="22-feature-requests" 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="#22-feature-requests"><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><!---->2.2. Solicitudes de funciones<!----></span></h4><!--]--><!----> <p>Una solicitud de función de clase mundial aborda los siguientes puntos:</p> <ol><li>Primero, la motivación:</li></ol> <ul><li>¿Está relacionado con un problema o frustración con la biblioteca? Si es así, explica por qué. Lo ideal es proporcionar un fragmento de código que demuestre el problema.</li> <li>¿Está relacionado con algo que necesitarías para un proyecto? ¡Nos encantaría saber más!</li> <li>¿Es algo en lo que has trabajado y crees que podría beneficiar a la comunidad?
¡Genial! Cuéntanos qué problema te resolvió.</li></ul> <ol start="2"><li>Escribe un <em>párrafo completo</em> que describa la función;</li> <li>Proporciona un <strong>fragmento de código</strong> que demuestre su uso futuro;</li> <li>En caso de que esto esté relacionado con un artículo, adjunta un enlace;</li> <li>Adjunta cualquier información adicional (dibujos, capturas de pantalla, etc.) que creas que pueda ser de ayuda.</li></ol> <p>Puedes abrir una solicitud de funcionalidad <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=&amp;template=feature_request.md&amp;title=" rel="nofollow">aquí</a>.</p> <!--[3--><h4 class="relative group"><a id="23-feedback" 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="#23-feedback"><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><!---->2.3 Retroalimentación<!----></span></h4><!--]--><!----> <p>La retroalimentación sobre el diseño de la biblioteca y las razones por las que es bueno o no ayuda enormemente a los mantenedores principales a construir una biblioteca fácil de usar. Para comprender la filosofía detrás de la filosofía de diseño actual, por favor echa un vistazo <a href="https://huggingface.co/docs/diffusers/conceptual/philosophy" rel="nofollow">aquí</a>. Si sientes que una cierta elección de diseño no se ajusta a la filosofía de diseño actual, explica por qué y cómo debería cambiarse. Si una cierta elección de diseño sigue la filosofía de diseño en exceso, limitando así los casos de uso, explica por qué y cómo debería cambiarse.
Si una cierta elección de diseño es muy útil para ti, también deja una nota, ya que esta es una gran retroalimentación para futuras decisiones de diseño.</p> <p>Puedes abrir un problema sobre la retroalimentación <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=&amp;template=feedback.md&amp;title=" rel="nofollow">aquí</a>.</p> <!--[3--><h4 class="relative group"><a id="24-technical-questions" 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="#24-technical-questions"><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><!---->2.4 Preguntas técnicas<!----></span></h4><!--]--><!----> <p>Las preguntas técnicas se refieren principalmente a por qué cierto código de la biblioteca se escribió de una manera específica o a qué hace una parte concreta del código. Asegúrate de enlazar al código en cuestión y de proporcionar detalles sobre por qué esta parte del código resulta difícil de entender.</p> <p>Puedes abrir un problema sobre una pregunta técnica <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=bug&amp;template=bug-report.yml" rel="nofollow">aquí</a>.</p> <!--[3--><h4 class="relative group"><a id="25-proposal-to-add-a-new-model-scheduler-or-pipeline" 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="#25-proposal-to-add-a-new-model-scheduler-or-pipeline"><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><!---->2.5 Propuesta para añadir un nuevo modelo, programador o pipeline<!----></span></h4><!--]--><!----> <p>Si la comunidad de modelos de difusión ha publicado un nuevo modelo, pipeline o scheduler que desees ver en la biblioteca Diffusers, proporciona la siguiente información:</p> <ul><li>Breve descripción del pipeline de difusión, el modelo o el programador, y enlace al artículo o a la publicación pública.</li> <li>Enlace a cualquiera de sus implementaciones de código abierto.</li> <li>Enlace a los pesos del modelo si están disponibles.</li></ul> <p>Además, no olvides etiquetar al autor original del componente (modelo, programador, pipeline, etc.) con su nombre de usuario de GitHub si puedes encontrarlo.</p> <p>Si quieres llevar el modelo a Diffusers por tu cuenta, consulta <a href="#6-publish-a-pipeline-or-model-on-the-hub">Publicar un pipeline o un modelo en el Hub</a> y <a href="#10-adding-pipelines-models-schedulers">Añadir pipelines, modelos y schedulers</a>.</p> <p>Puedes abrir una solicitud para un modelo/pipeline/planificador <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=New+model%2Fpipeline%2Fscheduler&amp;template=new-model-addition.yml" rel="nofollow">aquí</a>.</p> <!--[2--><h3 class="relative group"><a id="3-answering-issues-on-the-github-issues-tab" 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="#3-answering-issues-on-the-github-issues-tab"><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><!---->3. Responder a los problemas en la pestaña de problemas de GitHub<!----></span></h3><!--]--><!----> <p>Responder a problemas en GitHub puede requerir cierto conocimiento técnico de Diffusers, pero animamos a todos a intentarlo, incluso si no están 100% seguros de que su respuesta sea correcta.
Algunos consejos para dar una respuesta de alta calidad a un problema:</p> <ul><li>Sé lo más conciso y minimalista posible.</li> <li>Mantente en el tema. Una respuesta al problema debe tratar sobre el problema y solo sobre el problema.</li> <li>Proporcione enlaces a código, artículos u otras fuentes que demuestren o respalden su punto.</li> <li>Responde con código. Si un fragmento de código simple es la respuesta al problema o muestra cómo se puede resolver, proporciona un fragmento de código completamente reproducible.</li></ul> <p>Además, muchos problemas tienden a ser simplemente fuera de tema, duplicados de otros problemas o irrelevantes. Es de gran ayuda para los mantenedores si puedes responder a dichos problemas, animando al autor del problema a ser más preciso, proporcionar el enlace a un problema duplicado o redirigirlos a <a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow">GitHub Discussions</a> o <a href="https://discord.gg/G7tWnz98XR" rel="nofollow">Discord</a>.</p> <p>Si has verificado que el informe de error emitido es correcto y requiere una corrección en el código fuente,
consulta las siguientes secciones.</p> <p>Para todas las contribuciones, excepto <a href="#6-publish-a-pipeline-or-model-on-the-hub">6</a>, es necesario abrir un PR. La sección <a href="https://github.com/huggingface/diffusers/pull/15179/changes#how-to-open-a-pr" rel="nofollow">Opening a pull request</a> explica cómo hacerlo.</p> <!--[2--><h3 class="relative group"><a id="4-fixing-a-good-first-issue" 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="#4-fixing-a-good-first-issue"><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><!---->4. Corregir un “Good first issue”<!----></span></h3><!--]--><!----> <p>Los <em>primeros problemas recomendados</em> se marcan con la etiqueta <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="nofollow">Good first issue</a>. Por lo general, el problema ya explica cómo debería verse una posible solución para que sea más fácil de corregir.
Si el problema no ha sido cerrado y deseas intentar solucionarlo, puedes dejar un mensaje que diga “I would like to try this issue.”. Por lo general, hay tres escenarios:</p> <ul><li>a.) La descripción del problema ya propone una solución. En este caso, y si la solución te parece razonable, puedes abrir un PR o un PR en borrador para corregirlo.</li> <li>b.) La descripción del problema no propone una solución. En este caso, propón una solución tú mismo en un comentario del problema. Bastan unas pocas frases que describan el enfoque. Espera a que alguien del equipo de Diffusers lo confirme antes de abrir una PR.</li> <li>c.) Ya existe una PR abierta para corregir el problema, pero el problema aún no se ha cerrado. Si la PR ha quedado obsoleta, simplemente puedes abrir una nueva PR y enlazarla con la PR obsoleta. Las PRs a menudo quedan obsoletas si el contribuidor original que quería corregir el problema de repente ya no puede encontrar tiempo para continuar. Esto ocurre con frecuencia en el código abierto y es muy normal. En este caso, la comunidad estará muy agradecida si lo intentas de nuevo y aprovechas el conocimiento de la PR existente. Si ya hay una PR y está activa, puedes ayudar al autor dando sugerencias, revisando la PR o incluso preguntando si puedes contribuir a la PR.</li></ul> <!--[2--><h3 class="relative group"><a id="5-contribute-to-the-documentation" 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="#5-contribute-to-the-documentation"><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><!---->5. Contribuir a la documentación<!----></span></h3><!--]--><!----> <p>¡Una buena biblioteca <strong>siempre</strong> tiene buena documentación! La documentación oficial suele ser uno de los primeros puntos de contacto para los nuevos usuarios de la biblioteca, y por lo tanto contribuir a la documentación es una <strong>contribución de gran valor</strong>.</p> <p>Contribuir a la biblioteca puede adoptar muchas formas:</p> <ul><li>Corregir errores ortográficos o gramaticales.</li> <li>Corrige el formato incorrecto de la docstring. Si ves que la documentación oficial se muestra de forma extraña o que un enlace está roto, nos encantaría que dedicaras un momento a corregirlo.</li> <li>Corrige la forma o las dimensiones de un tensor de entrada o salida en una docstring.</li> <li>Aclarar la documentación que sea difícil de entender o incorrecta.</li> <li>Actualizar ejemplos de código desactualizados.</li> <li>Traducir la documentación a otro idioma.</li></ul> <p>Todo lo que se muestra en <a href="https://huggingface.co/docs/diffusers/index" rel="nofollow">la página oficial de documentación de Diffusers</a> forma parte de la documentación oficial y puede corregirse o ajustarse en la <a href="https://github.com/huggingface/diffusers/tree/main/docs/source" rel="nofollow">fuente de documentación</a> correspondiente.</p> <p>Por favor, echa un vistazo a <a href="https://github.com/huggingface/diffusers/tree/main/docs" rel="nofollow">esta página</a> sobre cómo verificar los cambios realizados en la documentación de forma local.</p> <!--[2--><h3 class="relative group"><a id="6-publish-a-pipeline-or-model-on-the-hub" 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="#6-publish-a-pipeline-or-model-on-the-hub"><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><!---->6. Publicar un pipeline o un modelo en el Hub<!----></span></h3><!--]--><!----> <p>Con <a href="../modular_diffusers/overview">Modular Diffusers</a>, un pipeline puede existir como código remoto en cualquier repositorio del Hub. Cualquiera puede cargarlo con <code>from_pretrained(..., trust_remote_code=True)</code>, sin esperar a una liberación de Diffusers. Si eres un contribuidor de la comunidad que está incorporando un nuevo pipeline o modelo, empieza aquí. Consulta custom blocks para publicar un pipeline y custom models para publicar un modelo.</p> <p>Avísanos en la <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=New+model%2Fpipeline%2Fscheduler&amp;template=new-model-addition.yml" rel="nofollow">solicitud de modelo</a> correspondiente (abre una si no existe): damos retroalimentación sobre la implementación y destacamos las que nos gustan en nuestra colección <a href="https://huggingface.co/collections/diffusers-modular/community-modular-diffusers-blocks" rel="nofollow">Community Modular Diffusers Blocks</a>. A partir de ahí, decidimos cómo soportar el modelo en la biblioteca: podemos incorporar tu versión, trabajar con los autores en una oficial o simplemente dirigir a la gente a la tuya. Cuéntanos también dónde encontraste dificultades en el proceso: APIs confusas, documentación faltante, errores. Esa retroalimentación nos vale tanto como el pipeline.</p> <!--[2--><h3 class="relative group"><a id="7-contribute-to-training-examples" 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="#7-contribute-to-training-examples"><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><!---->7. Contribuir con ejemplos de entrenamiento<!----></span></h3><!--]--><!----> <p>Los ejemplos de Diffusers son una colección de scripts de entrenamiento que se encuentran en <a href="https://github.com/huggingface/diffusers/tree/main/examples" rel="nofollow">examples</a>.</p> <p>Admitimos dos tipos de ejemplos de entrenamiento:</p> <ul><li>Ejemplos oficiales de entrenamiento</li> <li>Ejemplos de entrenamiento de investigación</li></ul> <p>Los ejemplos de entrenamiento de investigación se encuentran en <a href="https://github.com/huggingface/diffusers/tree/main/examples/research_projects" rel="nofollow">examples/research_projects</a>, mientras que los ejemplos de entrenamiento oficiales incluyen todas las carpetas bajo <a href="https://github.com/huggingface/diffusers/tree/main/examples" rel="nofollow">examples</a> excepto las carpetas <code>research_projects</code> y <code>community</code>.
Los ejemplos de entrenamiento oficiales son mantenidos por los mantenedores principales de Diffusers, mientras que los ejemplos de entrenamiento de investigación son mantenidos por la comunidad.
Esto es por la misma razón por la que la biblioteca mantiene un conjunto pequeño de pipelines oficiales y pipelines de la comunidad activos en el Hub: no es viable para los mantenedores principales mantener todos los posibles métodos de entrenamiento para modelos de difusión.
Si los mantenedores principales de Diffusers y la comunidad consideran que un cierto paradigma de entrenamiento es demasiado experimental o no lo suficientemente popular, el código de entrenamiento correspondiente debe colocarse en la carpeta <code>research_projects</code> y ser mantenido por el autor.</p> <p>Tanto los ejemplos oficiales de entrenamiento como los de investigación consisten en un directorio que contiene uno o más scripts de entrenamiento, un archivo <code>requirements.txt</code> y un archivo <code>README.md</code>. Para que el usuario pueda hacer uso de los ejemplos de entrenamiento, es necesario clonar el repositorio:</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-bash "><!---->git <span class="hljs-built_in">clone</span> https://github.com/huggingface/diffusers<!----></pre></div><!----> <p>así como para instalar todas las dependencias adicionales necesarias para el entrenamiento:</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-bash "><!----><span class="hljs-built_in">cd</span> diffusers
pip install -r examples/&lt;your-example-folder&gt;/requirements.txt<!----></pre></div><!----> <p>Por lo tanto, al añadir un ejemplo, el archivo <code>requirements.txt</code> debe definir todas las dependencias de pip necesarias para tu ejemplo de entrenamiento, de modo que, una vez instaladas, el usuario pueda ejecutar el script de entrenamiento del ejemplo. Consulta, por ejemplo, el <a href="https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/requirements.txt" rel="nofollow">archivo <code>requirements.txt</code> de DreamBooth</a>.</p> <p>Los ejemplos de entrenamiento de la biblioteca Diffusers deben seguir la siguiente filosofía:</p> <ul><li>Todo el código necesario para ejecutar los ejemplos debe encontrarse en un único archivo de Python.</li> <li>Se debe poder ejecutar el ejemplo desde la línea de comandos con <code>python &lt;your-example>.py --args</code>.</li> <li>Los ejemplos deben mantenerse simples y servir como <strong>ejemplo</strong> de cómo usar Diffusers para el entrenamiento. El propósito de los scripts de ejemplo no es <strong>crear</strong> modelos de difusión de última generación, sino reproducir esquemas de entrenamiento conocidos sin añadir demasiada lógica personalizada. Como consecuencia de esto, nuestros ejemplos también buscan ser buenos materiales educativos.</li></ul> <p>Para contribuir con un ejemplo, se recomienda encarecidamente revisar ejemplos existentes, como <a href="https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth.py" rel="nofollow">dreambooth</a>, para tener una idea de cómo deberían ser.
Aconsejamos firmemente a los colaboradores que utilicen la <a href="https://github.com/huggingface/accelerate" rel="nofollow">Accelerate library</a>, ya que está estrechamente integrada con Diffusers.
Una vez que un script de ejemplo funcione, asegúrese de agregar un <code>README.md</code> completo que indique exactamente cómo usar el ejemplo. Este README debe incluir:</p> <ul><li>Un ejemplo de comando para ejecutar el script de ejemplo tal como se muestra <a href="https://github.com/huggingface/diffusers/tree/main/examples/dreambooth#running-locally-with-pytorch" rel="nofollow">aquí</a>.</li> <li>Un enlace a algunos resultados de entrenamiento (registros, modelos, etc.) que muestren lo que el usuario puede esperar, como se muestra <a href="https://api.wandb.ai/report/patrickvonplaten/xm6cd5q5" rel="nofollow">aquí</a>.</li> <li>Si estás añadiendo un ejemplo de entrenamiento no oficial/de investigación, <strong>no olvides</strong> añadir una frase en la que indiques que mantienes este ejemplo de entrenamiento, incluyendo tu usuario de git, como se muestra <a href="https://github.com/huggingface/diffusers/tree/main/examples/research_projects/intel_opts#diffusers-examples-with-intel-optimizations" rel="nofollow">aquí</a>.</li></ul> <p>Si estás contribuyendo a los ejemplos de entrenamiento oficiales, asegúrate también de añadir una prueba a su carpeta, como <a href="https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/test_dreambooth.py" rel="nofollow">examples/dreambooth/test_dreambooth.py</a>. Esto no es necesario para los ejemplos de entrenamiento no oficiales.</p> <!--[2--><h3 class="relative group"><a id="8-fixing-a-good-second-issue" 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="#8-fixing-a-good-second-issue"><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><!---->8. Corregir un “Good second issue”<!----></span></h3><!--]--><!----> <p>Los <em>buenos segundos problemas</em> están marcados con la etiqueta <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+second+issue%22" rel="nofollow">Good second issue</a>. Suelen ser más complicados de resolver que los <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="nofollow">buenos primeros problemas</a>, la descripción ofrece menos orientación sobre la solución y requieren un conocimiento adecuado de la biblioteca.</p> <p>Si te interesa abordar un buen segundo problema, comparte tu opinión sobre el problema y el enfoque que tienes en mente como comentario, en unas pocas frases, y obtén un reconocimiento de un mantenedor antes de abrir la PR. Si ya se ha abierto una PR para el problema pero no se fusionó, revisa para entender por qué antes de proponer algo nuevo.</p> <!--[2--><h3 class="relative group"><a id="9-taking-on-a-diffusers-mvp-issue" 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="#9-taking-on-a-diffusers-mvp-issue"><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><!---->9. Asumir un problema MVP de Diffusers<!----></span></h3><!--]--><!----> <p>El <a href="https://github.com/huggingface/diffusers/issues/12635" rel="nofollow">programa MVP de Diffusers</a> enumera los problemas en los que más necesitamos ayuda. Funcionan como los Good second issues, pero son más difíciles y requieren más tiempo, y el programa recompensa a los colaboradores que los asumen. Comparte tu enfoque como comentario primero y obtén un reconocimiento de un mantenedor antes de abrir la PR. El programa también tiene una <a href="https://github.com/huggingface/diffusers/issues/14529" rel="nofollow">vía de ideas</a>: cuéntanos una idea que aumentaría el impacto de Diffusers, en unas pocas frases y sin detalles de implementación.</p> <!--[2--><h3 class="relative group"><a id="10-adding-pipelines-models-schedulers" 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="#10-adding-pipelines-models-schedulers"><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><!---->10. Agregar pipelines, modelos y programadores<!----></span></h3><!--]--><!----> <blockquote class="tip"><p>Si eres el autor del modelo, ponte en contacto con nosotros para que podamos coordinar la integración contigo: abre una solicitud de función o deja un comentario si ya hay una abierta.</p> <p>Si eres un contribuidor de la comunidad, comienza con un repositorio de Hub, consulta <a href="#6-publish-a-pipeline-or-model-on-the-hub">Cómo publicar un pipeline o un modelo en el Hub</a> e infórmalo en la solicitud de funcionalidad que estás interesado en integrarlo en el proyecto principal.</p></blockquote> <p>Los pipelines, los modelos y los schedulers son las piezas más importantes de la librería Diffusers.
Proporcionan un acceso sencillo a las tecnologías de difusión más avanzadas y, por lo tanto, permiten a la comunidad
construir potentes aplicaciones de IA generativa.</p> <p>Al añadir un nuevo modelo, pipeline o scheduler, es posible habilitar un nuevo caso de uso potente para cualquiera de las interfaces de usuario que dependen de Diffusers, lo cual puede tener un valor inmenso para todo el ecosistema de IA generativa.</p> <!--[3--><h4 class="relative group"><a id="when-new-model-or-pipeline-support-is-released" 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="#when-new-model-or-pipeline-support-is-released"><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><!---->Cuando se libera el soporte para un nuevo modelo o pipeline<!----></span></h4><!--]--><!----> <p>Es posible que un nuevo modelo o pipeline se incluya en una versión si coordinas la integración con el equipo de Diffusers con antelación. No dudes en ponerte en contacto con nosotros, ya sea a través de un issue en el repositorio de Diffusers o enviando un correo electrónico a <code>diffusers@huggingface.co</code>.</p> <p>Una publicación no se realiza automáticamente cuando se fusiona una solicitud de extracción de un modelo o pipeline. Antes de una publicación, los mantenedores primero verifican que la integración esté completa y que las pruebas de publicación se ejecuten correctamente.</p> <p>El soporte para un nuevo modelo o pipeline normalmente se incluye en la próxima versión menor. La integración se fusiona en <code>main</code> y la rama de liberación se crea a partir de ella. La liberación contiene todos los cambios fusionados desde la liberación anterior, y no solo la integración del modelo o pipeline.</p> <p>Las notas de la versión destacan el nuevo modelo o pipeline y también resumen los demás cambios incluidos en la versión. Las versiones de parche suelen reservarse para corregir errores en una versión existente.</p> <p>Diffusers tiene algunas solicitudes de funciones abiertas para los tres componentes; si aún no sabes qué componente específico te gustaría agregar, no dudes en echarles un vistazo:</p> <ul><li><a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+pipeline%2Fmodel%22" rel="nofollow">Modelo o pipeline</a></li> <li><a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+scheduler%22" rel="nofollow">Programador</a></li></ul> <p>Antes de añadir cualquiera de los tres componentes, se recomienda encarecidamente leer la <a href="philosophy">Guía de filosofía</a> para comprender mejor el diseño de cualquiera de los tres componentes. Tenga en cuenta que no podemos fusionar adiciones de modelos, programadores o pipelines que se desvíen significativamente de nuestra filosofía de diseño, ya que esto provocaría inconsistencias en la API. Si no está de acuerdo con una decisión de diseño, abra un <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=&amp;template=feedback.md&amp;title=" rel="nofollow">issue de retroalimentación</a> para que se pueda discutir si un cierto patrón de diseño/decisión de diseño debe cambiarse en toda la biblioteca y si debemos actualizar nuestra filosofía de diseño. La coherencia en toda la biblioteca es muy importante para nosotros.</p> <p>Asegúrate de añadir enlaces al código original y al paper en la PR, e idealmente también notifica directamente al autor original en la PR para que pueda seguir el progreso y, potencialmente, ayudar con preguntas.</p> <p>Si tienes dudas o te has atascado en la PR, no dudes en dejar un mensaje para solicitar una primera revisión o ayuda.</p> <!--[3--><h4 class="relative group"><a id="copied-from-mechanism" 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="#copied-from-mechanism"><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><!---->Copiado de mechanism<!----></span></h4><!--]--><!----> <p>Una característica única e importante que hay que entender al añadir cualquier código de pipeline, modelo o scheduler es el mecanismo <code># Copied from</code>. Verás este mecanismo por todo el código de Diffusers, y la razón por la que lo usamos es para mantener el código fácil de entender y de mantener. Marcar código con el mecanismo <code># Copied from</code> obliga a que el código marcado sea idéntico al código del que se copió. Esto facilita actualizar y propagar cambios en muchos archivos cada vez que ejecutas <code>make fix-copies</code>.</p> <p>Por ejemplo, en el ejemplo de código siguiente, <a href="/docs/diffusers/v0.43.0/es/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput">StableDiffusionPipelineOutput</a> es el código original y <code>AltDiffusionPipelineOutput</code> utiliza el mecanismo <code># Copied from</code> para copiarlo. La única diferencia es cambiar el prefijo de la clase de <code>Stable</code> a <code>Alt</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 "><!----><span class="hljs-comment"># Copied from diffusers.pipelines.stable_diffusion.pipeline_output.StableDiffusionPipelineOutput with Stable-&gt;Alt</span>
<span class="hljs-keyword">class</span> <span class="hljs-title class_">AltDiffusionPipelineOutput</span>(<span class="hljs-title class_ inherited__">BaseOutput</span>):
<span class="hljs-string">&quot;&quot;&quot;
Output class for Alt Diffusion pipelines.
Args:
images (`List[PIL.Image.Image]` or `np.ndarray`)
List of denoised PIL images of length `batch_size` or NumPy array of shape `(batch_size, height, width,
num_channels)`.
nsfw_content_detected (`List[bool]`)
List indicating whether the corresponding generated image contains &quot;not-safe-for-work&quot; (nsfw) content or
`None` if safety checking could not be performed.
&quot;&quot;&quot;</span><!----></pre></div><!----> <p>Para obtener más información, lee esta sección de la publicación de blog <a href="https://huggingface.co/blog/transformers-design-philosophy#4-machine-learning-models-are-static" rel="nofollow">~No repitas~ a ti mismo*</a>.</p> <!--[1--><h2 class="relative group"><a id="how-to-write-a-good-issue" 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="#how-to-write-a-good-issue"><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><!---->Cómo escribir un buen issue<!----></span></h2><!--]--><!----> <p><strong>Cuanto mejor esté redactado tu problema, mayores serán las probabilidades de que se resuelva rápidamente.</strong></p> <ol><li>Asegúrate de que hayas utilizado la plantilla correcta para tu problema. Puedes elegir entre <em>Bug Report</em>, <em>Feature Request</em>, <em>Feedback about API Design</em>, <em>New model/pipeline/scheduler addition</em> o un problema en blanco. Asegúrate de seleccionar la correcta al abrir <a href="https://github.com/huggingface/diffusers/issues/new/choose" rel="nofollow">a new issue</a>. Las preguntas de uso deben publicarse en <a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow">GitHub Discussions</a>, no en un problema.</li> <li><strong>Sé preciso</strong>: Dá a tu problema un título adecuado. Intenta formular la descripción de tu problema de la forma más simple posible. Cuanto más preciso seas al enviar un problema, menos tiempo se tardará en entenderlo y, potencialmente, resolverlo. Asegúrate de abrir un problema para un solo problema y no para varios. Si encontraste varios problemas, simplemente abre varios problemas. Si tu problema es un error, intenta ser lo más preciso posible sobre cuál es el error: no deberías escribir solo “Error en diffusers”.</li> <li><strong>Reproducibilidad</strong>: Un fragmento de código no reproducible == ninguna solución. Si encuentras un error, los mantenedores <strong>deben poder reproducirlo</strong>. Asegúrate de incluir un fragmento de código que pueda copiarse y pegarse en un intérprete de Python para reproducir el problema. Asegúrate de que tu fragmento de código funcione, <em>es decir</em>, que no falten importaciones ni enlaces a imágenes, … Tu problema debe contener un mensaje de error <strong>y</strong> un fragmento de código que pueda copiarse y pegarse sin ningún cambio para reproducir exactamente el mismo mensaje de error. Si tu problema utiliza pesos de modelo locales o datos locales a los que el lector no puede acceder, el problema no puede resolverse. Si no puedes compartir tus datos o tu modelo, intenta crear un modelo o datos ficticios.</li> <li><strong>Minimalista</strong>: Intente ayudar al lector a comprender el problema lo más rápido posible manteniéndose lo más conciso posible. Elimine todo el código o toda la información que no sea relevante para el problema. Si ha encontrado un error, intente crear el ejemplo de código más sencillo posible para demostrar su problema; no vuelque todo su flujo de trabajo en el problema en cuanto haya encontrado un error. Por ejemplo, si entrena un modelo y obtiene un error en algún punto durante el entrenamiento, primero debe intentar comprender qué parte del código de entrenamiento es responsable del error e intentar reproducirlo con un par de líneas. Intente usar datos ficticios en lugar de conjuntos de datos completos.</li> <li><strong>Contexto</strong>: Cuéntanos en qué estabas trabajando cuando encontraste el error o necesitaste la funcionalidad, como una aplicación construida con Diffusers, un proyecto de investigación o un agente que ejecutaste para encontrar errores en la biblioteca. Una o dos frases son suficientes, y un enlace al proyecto es bienvenido. Recibimos más problemas y PR de los que podemos manejar a la vez, por lo que el contexto nos ayuda a priorizar por impacto.</li> <li>Añade enlaces. Si te refieres a una nomenclatura, un método o un modelo en particular, asegúrate de proporcionar un enlace para que el lector comprenda mejor a qué te refieres. Si te refieres a una PR o un issue específicos, asegúrate de enlazarlos a tu issue. No asumas que el lector sabe de qué estás hablando. Cuantos más enlaces añadas a tu issue, mejor.</li> <li>Formato. Asegúrate de formatear bien tu incidencia, usando la sintaxis de código de Python para el código y la sintaxis de código normal para los mensajes de error. Consulta la <a href="https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax" rel="nofollow">documentación oficial de formato de GitHub</a> para obtener más información.</li> <li>Piensa en tu problema no como un ticket por resolver, sino como una hermosa entrada en una enciclopedia bien escrita. Cada problema añadido es una contribución al conocimiento de acceso público. Al añadir un problema bien redactado, no solo facilitas a los mantenedores la resolución de tu problema, sino que ayudas a toda la comunidad a comprender mejor un aspecto determinado de la biblioteca.</li></ol> <!--[1--><h2 class="relative group"><a id="how-to-write-a-good-pr" 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="#how-to-write-a-good-pr"><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><!---->Cómo escribir un buen PR<!----></span></h2><!--]--><!----> <ol><li>Comienza siempre desde un problema. Busca el problema que aborda tu solicitud de extracción o abre uno si nadie lo ha hecho, y da a los mantenedores la oportunidad de responder antes de escribir código. El flujo de trabajo que mejor nos funciona es abrir un problema, luego tener una discusión sobre la solución y, a continuación, crear una solicitud de extracción basada en esa discusión. Esto nos permite centrar nuestro tiempo en los problemas de mayor impacto, acordar el alcance antes de que exista código y evitar el trabajo duplicado. Menciona el número del problema en la descripción de la solicitud de extracción (p. ej. <code>Fixes #1234</code>) para que ambos estén vinculados.</li> <li>Sé un camaleón. Comprende los patrones de diseño y la sintaxis existentes y asegúrate de que las adiciones a tu código se integren de manera fluida en la base de código actual. Las solicitudes de extracción (pull requests) que se desvíen significativamente de los patrones de diseño o las interfaces de usuario existentes no se fusionarán.</li> <li>Concéntrate en un solo objetivo. Una solicitud de extracción debe resolver un problema y solo uno. Asegúrate de no caer en la trampa de “aprovechar para arreglar otro problema mientras lo añadimos”. Es mucho más difícil revisar solicitudes de extracción que resuelven varios problemas no relacionados a la vez.</li> <li>Corrige patrones, no casos aislados. Un problema puede abarcar muchos archivos: si el mismo error se repite en toda la base de código, busca todas las instancias y corrígelas en un solo PR con un alcance claro y sistemático (p. ej. “fix mutable defaults across all schedulers”), en lugar de un PR por cada instancia.</li> <li>El título de tu pull request debe ser un resumen de su contribución. Para indicar que se trata de un trabajo en curso, antepón <code>[WIP]</code> al título; esto evita el trabajo duplicado y separa el PR de los que están listos para fusionarse.</li> <li>Intenta formular y formatear tu texto tal como se explica en <a href="#how-to-write-a-good-issue">Cómo escribir un buen issue</a>.</li> <li>Revisa tu propio diff antes de abrir la PR. Léelo como lo haría un revisor y corrige lo que encuentres. Recomendamos encarecidamente ejecutar la habilidad <a href="https://github.com/huggingface/diffusers/blob/main/.ai/skills/self-review/SKILL.md" rel="nofollow"><code>self-review</code></a>: aplica el mismo criterio que el revisor de CI <code>@claude</code>. Configura tu agente tal como se describe en <a href="#coding-with-ai-agents">Coding with AI agents</a> y sigue las indicaciones de <a href="#ai-assisted-and-agentic-contributions">AI-assisted and agentic contributions</a>. Menciona en la descripción los hallazgos que decidiste dejar tal cual, para que el revisor sepa que fue una decisión y no un descuido.</li> <li>Asegúrate de que las pruebas existentes pasen.</li> <li>Añade pruebas con alta cobertura. Sin pruebas de calidad, no hay fusión.</li></ol> <ul><li>Si estás añadiendo nuevas pruebas <code>@slow</code>, asegúrate de que se superen usando <code>RUN_SLOW=1 python -m pytest tests/test_my_new_model.py</code>.
CircleCI no ejecuta las pruebas lentas, ¡pero GitHub Actions las ejecuta cada noche!</li></ul> <ol start="10"><li>Todos los métodos públicos deben tener docstrings informativos que funcionen bien con markdown. Consulte <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion.py" rel="nofollow"><code>pipeline_latent_diffusion.py</code></a> como ejemplo.</li> <li>Debido al rápido crecimiento del repositorio, es importante asegurarse de que no se añadan archivos que lo sobrecarguen significativamente. Esto incluye imágenes, videos y otros archivos que no sean de texto. Preferimos aprovechar un <code>dataset</code> alojado en hf.co, como <a href="https://huggingface.co/hf-internal-testing" rel="nofollow"><code>hf-internal-testing</code></a> o <a href="https://huggingface.co/datasets/huggingface/documentation-images" rel="nofollow">huggingface/documentation-images</a>, para colocar estos archivos.
Si se trata de una contribución externa, puedes añadir las imágenes a tu PR y pedir a un miembro de Hugging Face que migre tus imágenes
a este dataset.</li></ol> <!--[1--><h2 class="relative group"><a id="how-to-open-a-pr" 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="#how-to-open-a-pr"><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><!---->Cómo abrir una PR<!----></span></h2><!--]--><!----> <p>Antes de escribir código, le recomendamos encarecidamente que busque entre los PRs o issues existentes para asegurarse de que nadie esté trabajando ya en lo mismo. Si no está seguro, siempre es buena idea abrir un issue para obtener algo de retroalimentación.</p> <p>Necesitarás conocimientos básicos de <code>git</code> para poder contribuir a
🧨 Diffusers. <code>git</code> no es la herramienta más fácil de usar, pero tiene el
mejor manual. Escribe <code>git --help</code> en una terminal y disfruta. Si prefieres libros, <a href="https://git-scm.com/book/en/v2" rel="nofollow">Pro
Git</a> es una referencia muy buena.</p> <p>Siga estos pasos para comenzar a contribuir (<a href="https://github.com/huggingface/diffusers/blob/83bc6c94eaeb6f7704a2a428931cf2d9ad973ae9/setup.py#L270" rel="nofollow">versiones de Python compatibles</a>):</p> <ol><li><p>Haz una bifurcación del <a href="https://github.com/huggingface/diffusers" rel="nofollow">repositorio</a> haciendo clic en el botón ‘Fork’ en la página del repositorio. Esto crea una copia del código en tu cuenta de usuario de GitHub.</p></li> <li><p>Clona tu bifurcación en tu disco local y añade el repositorio base como remoto:</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-bash "><!---->$ git <span class="hljs-built_in">clone</span> git@github.com:&lt;your GitHub handle&gt;/diffusers.git
$ <span class="hljs-built_in">cd</span> diffusers
$ git remote add upstream https://github.com/huggingface/diffusers.git<!----></pre></div><!----></li> <li><p>Crea una nueva rama para guardar tus cambios de desarrollo:</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-bash "><!---->$ git checkout -b a-descriptive-name-for-my-changes<!----></pre></div><!----></li></ol> <p><strong>No trabajes</strong> en la rama <code>main</code>.</p> <ol start="4"><li><p>Configura un entorno de desarrollo ejecutando el siguiente comando en un entorno virtual:</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-bash "><!---->$ pip install -e <span class="hljs-string">&quot;.[dev]&quot;</span><!----></pre></div><!----></li></ol> <p>Si ya has clonado el repositorio, es posible que necesites <code>git pull</code> para obtener los cambios más recientes de la
librería.</p> <ol start="5"><li>Desarrolla las funciones en tu rama.</li></ol> <p>Mientras trabajas en las funciones, debes asegurarte de que la suite de pruebas pase. Debes ejecutar las pruebas afectadas por tus cambios de la siguiente manera:</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-bash "><!---->$ pytest tests/&lt;TEST_TO_RUN&gt;.py<!----></pre></div><!----> <p>Antes de ejecutar las pruebas, asegúrate de instalar las dependencias necesarias para las pruebas. Puedes hacerlo
con este comando:</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-bash "><!---->$ pip install -e <span class="hljs-string">&quot;.[test]&quot;</span><!----></pre></div><!----> <p>También puedes ejecutar la suite de pruebas completa con el siguiente comando, pero ahora que Diffusers ha crecido mucho, se necesita una máquina potente para obtener un resultado en un tiempo razonable. Este es el comando:</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-bash "><!---->$ make <span class="hljs-built_in">test</span><!----></pre></div><!----> <p>🧨 Diffusers se basa en <code>black</code> y <code>isort</code> para formatear su código fuente de manera consistente. Después de realizar cambios, aplica las correcciones automáticas de estilo y las verificaciones de código que no se pueden automatizar en un solo paso con:</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-bash "><!---->$ make style<!----></pre></div><!----> <p>🧨 Diffusers también utiliza <code>ruff</code> y algunos scripts personalizados para detectar errores de codificación. El control de calidad se ejecuta en CI; sin embargo, también puedes ejecutar las mismas comprobaciones con:</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-bash "><!---->$ make quality<!----></pre></div><!----> <p>Cuando estés satisfecho con tus cambios, añade los archivos modificados usando <code>git add</code> y
realiza un commit con <code>git commit</code> para registrar tus cambios localmente:</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-bash "><!---->$ git add modified_file.py
$ git commit -m <span class="hljs-string">&quot;A descriptive message about your changes.&quot;</span><!----></pre></div><!----> <p>Es buena idea sincronizar tu copia del código con el repositorio original con regularidad. De esta forma, puedes tener en cuenta los cambios rápidamente:</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-bash "><!---->$ git pull upstream main<!----></pre></div><!----> <p>Empuja los cambios a tu cuenta usando:</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-bash "><!---->$ git push -u origin a-descriptive-name-for-my-changes<!----></pre></div><!----> <ol start="6"><li><p>Una vez que estés satisfecho, ve a la
página web de tu fork en GitHub. Haz clic en ‘Pull request’ para enviar tus cambios
a los mantenedores del proyecto para su revisión.</p></li> <li><p>No pasa nada si los mantenedores te piden cambios. ¡También les ocurre a los contribuyentes principales! Para que todos puedan ver los cambios en la Pull request, trabaja en tu rama local y sube los cambios a tu fork. Aparecerán automáticamente en la pull request.</p></li></ol> <!--[2--><h3 class="relative group"><a id="tests" 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="#tests"><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><!---->Pruebas<!----></span></h3><!--]--><!----> <p>Se incluye una amplia suite de pruebas para verificar el comportamiento de la biblioteca y varios ejemplos. Las pruebas de la biblioteca se encuentran en la <a href="https://github.com/huggingface/diffusers/tree/main/tests" rel="nofollow">carpeta de pruebas</a>.</p> <p>Nos gusta <code>pytest</code> y <code>pytest-xdist</code> porque es más rápido. Desde la raíz del
repositorio, así es como se ejecutan las pruebas con <code>pytest</code> para la biblioteca:</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-bash "><!---->$ python -m pytest -n auto --dist=loadfile -s -v ./tests/<!----></pre></div><!----> <p>¡De hecho, así es como se implementa <code>make test</code>!</p> <p>Puedes especificar un conjunto más pequeño de pruebas para probar solo la funcionalidad en la que estás trabajando.</p> <p>Por defecto, las pruebas lentas se omiten. Establezca la variable de entorno <code>RUN_SLOW</code> en <code>yes</code> para ejecutarlas. Esto descargará varios gigabytes de modelos: asegúrese de
tener suficiente espacio en disco y una buena conexión a Internet, ¡o mucha paciencia!</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-bash "><!---->$ RUN_SLOW=<span class="hljs-built_in">yes</span> python -m pytest -n auto --dist=loadfile -s -v ./tests/<!----></pre></div><!----> <p><code>unittest</code> tiene soporte completo; así es como se ejecutan las pruebas con él:</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-bash "><!---->$ python -m unittest discover -s tests -t . -v
$ python -m unittest discover -s examples -t examples -v<!----></pre></div><!----> <!--[2--><h3 class="relative group"><a id="syncing-forked-main-with-upstream-huggingface-main" 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="#syncing-forked-main-with-upstream-huggingface-main"><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><!---->Sincronizar el main bifurcado con el main de upstream (HuggingFace)<!----></span></h3><!--]--><!----> <p>Para evitar enviar pings al repositorio de origen, lo que añade notas de referencia a cada PR de origen y envía notificaciones innecesarias a los desarrolladores involucrados en estas PRs, al sincronizar la rama principal de un repositorio bifurcado, siga estos pasos:</p> <ol><li>Cuando sea posible, evita sincronizar con el repositorio de origen mediante una rama y una PR en el repositorio bifurcado. En su lugar, fusiona directamente en la rama principal del repositorio bifurcado.</li> <li>Si una PR es absolutamente necesaria, usa los siguientes pasos después de hacer checkout de tu rama:</li></ol> <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-bash "><!---->$ git checkout -b your-branch-for-syncing
$ git pull --squash --no-commit upstream main
$ git commit -m <span class="hljs-string">&#x27;&lt;your message without GitHub references&gt;&#x27;</span>
$ git push --set-upstream origin your-branch-for-syncing<!----></pre></div><!----> <!--[2--><h3 class="relative group"><a id="style-guide" 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="#style-guide"><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><!---->Guía de estilo<!----></span></h3><!--]--><!----> <p>Para las cadenas de documentación, 🧨 Diffusers sigue el <a href="https://google.github.io/styleguide/pyguide.html" rel="nofollow">estilo de Google</a>.</p> <!--[1--><h2 class="relative group"><a id="coding-with-ai-agents" 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="#coding-with-ai-agents"><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><!---->Programación con agentes de IA<!----></span></h2><!--]--><!----> <p>El repositorio mantiene la configuración de agentes de IA en <a href="https://github.com/huggingface/diffusers/tree/main/.ai" rel="nofollow"><code>.ai/</code></a>, que también se publica como un plugin de agente para que las habilidades de tareas bajo demanda se instalen en un solo paso.</p> <ul><li><strong>Solo lectura para colaboradores</strong> — <code>.ai/</code> es mantenido por los mantenedores principales. Por favor, no edites los archivos bajo <code>.ai/</code> (ni los enlaces simbólicos de nivel raíz <code>AGENTS.md</code> / <code>CLAUDE.md</code>, ni los <code>.agents/skills</code> / <code>.claude/skills</code> instalados) en tu PR. Si encuentras algo que falta o está incorrecto, abre un issue o señálalo en la PR y un mantenedor lo actualizará.</li> <li><strong>Guidelines</strong> — <code>.ai/AGENTS.md</code> se carga en cada sesión de agente a través de los enlaces simbólicos de la raíz <code>AGENTS.md</code> / <code>CLAUDE.md</code> ; las guías de referencia bajo <code>.ai/references/</code> se leen bajo demanda cuando se sigue un enlace: <ul><li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/AGENTS.md" rel="nofollow"><code>.ai/AGENTS.md</code></a> — directrices de codificación de nivel superior</li> <li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/models.md" rel="nofollow"><code>.ai/references/models.md</code></a> — patrón de atención, reglas de implementación de modelos, convenciones comunes</li> <li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/pipelines.md" rel="nofollow"><code>.ai/references/pipelines.md</code></a> — convenciones de pipeline</li> <li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/modular.md" rel="nofollow"><code>.ai/references/modular.md</code></a> — convenciones de pipelines modulares y lista de verificación para la conversión</li> <li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/testing.md" rel="nofollow"><code>.ai/references/testing.md</code></a> — capas de prueba obligatorias, mixins de tester, reglas de componentes simulados</li> <li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/review-rules.md" rel="nofollow"><code>.ai/references/review-rules.md</code></a> — lo que buscan los revisores</li></ul></li> <li><strong>Skills</strong> (bajo <a href="https://github.com/huggingface/diffusers/tree/main/.ai/skills" rel="nofollow"><code>.ai/skills/</code></a>, cargadas bajo demanda para tareas específicas): <ul><li><code>model-integration</code> — añadir un nuevo modelo o pipeline a diffusers de principio a fin (estructura de archivos, lista de verificación de integración, estructura de pruebas, conversión de pesos)</li> <li><code>self-review</code> — revisa tus cambios en contra de las reglas del proyecto antes de abrir un PR</li> <li><code>diffusers-cli</code> — ejecutar pipelines e inspeccionar esquemas desde la terminal</li> <li><code>custom-blocks</code> — empaquetar una subclase de <code>ModularPipelineBlocks</code> para el Hub</li></ul></li></ul> <p>Sea cual sea la ruta que elijas, pide a tu agente que confirme su propia configuración antes de empezar: <code>python utils/check_ai.py</code> comprueba que las guías y las habilidades son coherentes, y <code>diffusers-cli skills list</code> muestra qué habilidades tiene realmente.</p> <!--[2--><h3 class="relative group"><a id="ai-assisted-and-agentic-contributions" 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="#ai-assisted-and-agentic-contributions"><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><!---->Contribuciones asistidas por IA y agénticas<!----></span></h3><!--]--><!----> <p>Los agentes de IA son bienvenidos para contribuir a Diffusers. Les animamos a configurar su agente con la <a href="https://github.com/huggingface/diffusers/blob/main/.ai/AGENTS.md" rel="nofollow">guía de agentes</a> de Diffusers y a utilizar las habilidades específicas de la tarea pertinentes, como <code>model-integration</code> y <code>self-review</code>. Instale el plugin (o las habilidades individuales) tal como se describe arriba y, a continuación, siga la guía para definir el alcance, implementar, probar y revisar su contribución. Usted sigue siendo responsable de comprender, probar y mantener los cambios en su PR.</p> <p>Se aceptan contribuciones asistidas por IA, pero deben estar coordinadas, acotadas y verificadas para mantener la carga de revisión manejable. Las PR que no sigan estas directrices pueden cerrarse sin una revisión detallada.</p> <ul><li><strong>Coordina antes de abrir un PR.</strong> Busca o abre un issue, revisa PRs similares (abiertos y cerrados recientemente) y espera una confirmación explícita de un mantenedor en ese issue antes de abrir un PR. Esto nos da la oportunidad de discutir el alcance, evitar trabajo duplicado y confirmar el enfoque.</li> <li><strong>Corrige patrones, no casos aislados.</strong> Si detectas un problema recurrente, busca instancias similares en la base de código y abre un <em>único</em> issue con un alcance claro y sistemático (p. ej., “corregir valores predeterminados mutables en todos los schedulers”) en lugar de muchos issues o PRs para instancias individuales.</li> <li><strong>Autoevaluación antes de abrir.</strong> Ejecuta la habilidad <a href="https://github.com/huggingface/diffusers/blob/main/.ai/skills/self-review/SKILL.md" rel="nofollow"><code>self-review</code></a>: revisa tu diff contra <a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/review-rules.md" rel="nofollow"><code>.ai/references/review-rules.md</code></a>, el mismo criterio que utiliza el revisor de CI <code>@claude</code>, y aborda lo que informe. Es un asistente, no una autoridad, y puede estar equivocado. Céntrate en los problemas bloqueantes que te parezcan razonables y limpia el código muerto o no utilizado en la medida de lo posible. Si no estás de acuerdo con una sugerencia, no hay problema en dejarla para que el revisor la discuta después de abrir el PR: las notas que compartas (ver abajo) le indican al revisor que fue una decisión deliberada.</li> <li><strong>Comparte tus notas de autoevaluación.</strong> Publica el informe final de autoevaluación, es decir, la ronda que refleja el diff que estás enviando, en el PR, ya sea en la descripción o como comentario, e incluye los hallazgos que decidiste no corregir y el motivo. Esto ayuda al revisor a ver qué se ha verificado ya y qué decisiones fueron deliberadas, y suele ahorrar algunas rondas de ida y vuelta.</li> <li><strong>Mantén la comunicación de tu PR concisa.</strong> Todo lo que un revisor lee en tu PR: la descripción, los mensajes de commit, los comentarios y respuestas, los comentarios de código, debe ser fácil de entender para una persona. Si tu agente lo redactó, no lo leas solo a grandes rasgos. Léelo y pídele al agente que lo revise hasta que diga algo coherente y conciso que tú mismo escribirías. Eres el autor de todo lo que publicas.</li> <li><strong>Include in the PR description:</strong> <ul><li>Un <strong>enlace de coordinación</strong> al problema o la discusión donde un mantenedor reconoció el trabajo.</li> <li>Los <strong>comandos de prueba que ejecutaste</strong> y sus resultados (pega la salida relevante, no solo “tests pass”).</li> <li>Tus <strong>notas de autoevaluación</strong> (o un enlace al comentario de la PR que las contiene), tal como se describió anteriormente.</li></ul></li></ul> <p>Si eres autor de un modelo o formas parte de un equipo que mantiene oficialmente un modelo, te animamos a utilizar agentes para la integración de un nuevo modelo. Sigue la <a href="https://github.com/huggingface/diffusers/blob/main/.ai/AGENTS.md" rel="nofollow">configuración recomendada</a> del repositorio y utiliza la habilidad <a href="https://github.com/huggingface/diffusers/blob/main/.ai/skills/model-integration/SKILL.md" rel="nofollow"><code>model-integration</code></a>. Coordina el alcance con los mantenedores antes de abrir un PR; consulta <a href="#10-adding-pipelines-models-schedulers">Adding pipelines, models, schedulers</a>.</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/conceptual/contribution.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_ywq9g6 = {
base: "/docs/diffusers/v0.43.0/en",
assets: "/docs/diffusers/v0.43.0/en"
};
const element = document.currentScript.parentElement;
Promise.all([
import("/docs/diffusers/v0.43.0/en/_app/immutable/entry/start.1gaXe03k.js"),
import("/docs/diffusers/v0.43.0/en/_app/immutable/entry/app.BwdYRbCn.js")
]).then(([kit, app]) => {
kit.start(app, element, {
node_ids: [0, 304],
data: [null,null],
form: null,
error: null
});
});
}
</script>

Xet Storage Details

Size:
126 kB
·
Xet hash:
069de7592e8278a611a097eeb50dc0eb97fa257947fa60aa12e0f680d7fd8955

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