<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Wei.G</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://www.weigshare.com/</id>
  <link href="https://www.weigshare.com/" rel="alternate"/>
  <link href="https://www.weigshare.com/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, Wei.G</rights>
  <subtitle>Cloud · AI · Python · DevOps</subtitle>
  <title>Wei.G Share Blog</title>
  <updated>2026-10-21T08:39:31.053Z</updated>
  <entry>
    <author>
      <name>Wei.G</name>
    </author>
    <category term="qBittorrent" scheme="https://www.weigshare.com/categories/qBittorrent/"/>
    <category term="qBittorrent" scheme="https://www.weigshare.com/tags/qBittorrent/"/>
    <category term="WebUI" scheme="https://www.weigshare.com/tags/WebUI/"/>
    <category term="NAS" scheme="https://www.weigshare.com/tags/NAS/"/>
    <category term="Docker" scheme="https://www.weigshare.com/tags/Docker/"/>
    <content>
      <![CDATA[<p>Si normalmente administras qBittorrent desde el navegador —sobre todo en un <strong>NAS, con Docker o desde el móvil</strong>— WeiG qB WebUI hace mucho más cómoda la gestión diaria. <strong><a href="https://weigefenxiang.github.io/WeiG-qB-WebUI/">Vista previa en línea</a></strong></p><p>Hace unos siete años me uní a varios trackers privados. Entonces instalé qBittorrent 4.1.9 en mi NAS: era la versión más reciente. Nunca pensé que seguiría utilizándola tantos años después.</p><p>Una vez intenté dar el salto a una versión importante (creo recordar que fue la 4.2.5). El problema es que desaparecieron las tareas de torrent del cliente y ya no podía seguir compartiendo. Había acumulado tantos torrents que recuperarlos fue un buen lío. Desde entonces, cuando una versión funciona bien, prefiero dejarla tranquila.</p><p>Desde que terminé los estudios y empecé a trabajar, paso cada vez menos tiempo frente al ordenador. Ahora gestiono el NAS casi siempre desde el móvil, pero la WebUI original de qBittorrent no resulta muy cómoda en una pantalla pequeña. Probé otras interfaces alternativas y muchas no funcionaban bien con versiones antiguas.</p><p>Por eso acabé creando WeiG qB WebUI. El proyecto cubre distintas versiones estables de qBittorrent, desde la 4.1.x hasta la 5.2.x. Si encuentras problemas de compatibilidad o tienes ideas para mejorarlo, estaré encantado de leerte.</p><p><strong>WeiG qB WebUI</strong> es una <strong>interfaz Web alternativa</strong> para qBittorrent, pensada tanto para escritorio como para móvil:</p><ul><li>📱 Diseño adaptable para móviles</li><li>🌙 Modo oscuro</li><li>🧱 Compatible con versiones antiguas de qBittorrent</li><li>✅ Compatible con <strong>qBittorrent 4.1.x → 5.2.x</strong></li><li>🐳 Funciona en Windows, Linux, Docker y NAS</li></ul><p><a href="https://github.com/weigefenxiang/WeiG-qB-WebUI">Proyecto</a></p><div align="left" style="display:flex;gap:10px;flex-wrap:wrap;justify-content:left;">  <img src="https://img.shields.io/badge/-JavaScript-F7DF1E?logo=javascript&logoColor=black" alt="JavaScript">  <img src="https://img.shields.io/badge/-HTML5-E34F26?logo=html5&logoColor=white" alt="HTML5">  <img src="https://img.shields.io/badge/-CSS3-1572B6?logo=css3&logoColor=white" alt="CSS3">  <img src="https://img.shields.io/badge/-Node.js-339933?logo=nodedotjs&logoColor=white" alt="Node.js">  <img src="https://img.shields.io/badge/-Shell-8A2BE2?logo=gnubash&logoColor=white" alt="Shell"></div><h2 id="Vista-previa-de-la-interfaz"><a href="#Vista-previa-de-la-interfaz" class="headerlink" title="Vista previa de la interfaz"></a>Vista previa de la interfaz</h2><h3 id="Escritorio"><a href="#Escritorio" class="headerlink" title="Escritorio"></a>Escritorio</h3><p align="center">  <img src="https://img.weigshare.com/img/004.001.weig-qb-webui-desktop-overview.gif" alt="Interfaz de escritorio de WeiG qB WebUI" style="display:block;width:100%;max-width:900px;height:auto;margin:0 auto;"></p><h3 id="Movil"><a href="#Movil" class="headerlink" title="Móvil"></a>Móvil</h3><style>/* Scoped to the mobile preview in this article */.weig-qb-mobile-preview {  width: 100%;  container-type: inline-size;}.weig-qb-mobile-preview-images {  display: flex;  justify-content: center;  align-items: center;  flex-wrap: nowrap;  gap: 10px;  width: 100%;}.weig-qb-mobile-preview-images img {  display: block;  flex: 0 1 auto;  min-width: 0;  width: auto;  height: min(341px, 38cqw);  max-width: 100%;  object-fit: contain;}/* Stack when the article column is narrow */@container (max-width: 640px) {  .weig-qb-mobile-preview-images {    flex-direction: column;  }  .weig-qb-mobile-preview-images img {    flex: none;    width: auto;    height: auto;    max-width: 100%;    max-height: 341px;  }}</style><div class="weig-qb-mobile-preview">  <div class="weig-qb-mobile-preview-images">    <img src="https://img.weigshare.com/img/004.002.weig-qb-webui-mobile-overview.gif" alt="Demostración de WeiG qB WebUI en el móvil">    <img src="https://img.weigshare.com/img/004.003.weig-qb-webui-mobile-overview.png" alt="Capturas de WeiG qB WebUI para móvil">  </div></div><h2 id="Instalacion-para-principiantes"><a href="#Instalacion-para-principiantes" class="headerlink" title="Instalación para principiantes"></a>Instalación para principiantes</h2><details><summary><b>¿Es tu primera instalación? Despliega esta guía de 1 minuto</b></summary><h3 id="1-Extraer-el-ZIP"><a href="#1-Extraer-el-ZIP" class="headerlink" title="1. Extraer el ZIP"></a>1. Extraer el ZIP</h3><p>Descarga la última versión estable <a href="https://github.com/weigefenxiang/WeiG-qB-WebUI/releases/latest/download/weig-qb-webui.zip"><strong>weig-qb-webui.zip</strong></a> y descomprímela. El archivo ya incluye la carpeta raíz con el nombre correcto:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">weig-qb-webui/├── public/├── private/├── VERSION└── GIT_SHA<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><p>La carpeta <strong><code>weig-qb-webui</code> completa</strong> es la raíz de la WebUI. No copies solo <code>public</code> o <code>private</code>.</p><h3 id="2-Moverla-a-una-ubicacion-fija"><a href="#2-Moverla-a-una-ubicacion-fija" class="headerlink" title="2. Moverla a una ubicación fija"></a>2. Moverla a una ubicación fija</h3><pre class="line-numbers language-text" data-language="text"><code class="language-text">Windows: D:\weig-qb-webuiLinux:   /opt/weig-qb-webui<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>Ese es el directorio que indicarás en qBittorrent.</p><h3 id="3-Activarla-en-qBittorrent"><a href="#3-Activarla-en-qBittorrent" class="headerlink" title="3. Activarla en qBittorrent"></a>3. Activarla en qBittorrent</h3><p>Abre qBittorrent:</p><p><strong>Herramientas → Opciones… → WebUI</strong></p><p>Estos son los términos actuales de la traducción oficial al español de qBittorrent. Después:</p><ol><li>Activa <strong>Usar la interfaz Web alternativa</strong>.</li><li>Busca <strong>Ubicación de archivos:</strong>.</li><li>Introduce la ruta de la carpeta <code>weig-qb-webui</code>.</li></ol><p>Ejemplo en Windows:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">D:\weig-qb-webui<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Ejemplo en Linux:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">/opt/weig-qb-webui<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><ol start="4"><li>Pulsa <strong>OK</strong> para guardar.</li><li>Recarga la WebUI. Si sigue apareciendo la interfaz antigua, prueba <code>Ctrl + F5</code>.</li></ol><blockquote><p><strong>Cómo comprobar la ruta:</strong> dentro del directorio indicado debes ver directamente <code>public</code>, <code>private</code>, <code>VERSION</code> y los demás archivos.</p></blockquote><blockquote><p><strong>Docker:</strong> qBittorrent se ejecuta dentro de un contenedor, por lo que normalmente debes usar una ruta visible desde el contenedor y no la ruta real del host.</p></blockquote></details><h2 id="Instalacion-con-un-solo-comando"><a href="#Instalacion-con-un-solo-comando" class="headerlink" title="Instalación con un solo comando"></a>Instalación con un solo comando</h2><p>El instalador de Linux &#x2F; NAS se descarga desde la dirección fija de Dev Pages. <strong>Esa dirección no determina la versión instalada:</strong> sin <code>-dev</code>, se usa la versión estable y verificada de GitHub desde <code>main</code>; con <code>-dev</code>, la versión actual de <code>dev</code> fijada a un SHA de Git exacto. El script queda en el directorio actual para futuras actualizaciones o restauraciones.</p><h3 id="Linux-NAS"><a href="#Linux-NAS" class="headerlink" title="Linux &#x2F; NAS"></a>Linux &#x2F; NAS</h3><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">curl</span> <span class="token parameter variable">-fsSL</span> https://weigefenxiang.github.io/WeiG-qB-WebUI/downloads/dev/install.sh <span class="token parameter variable">-o</span> install.sh <span class="token operator">&amp;&amp;</span> <span class="token function">sh</span> install.sh <span class="token parameter variable">-configure</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><details><summary><b>Ver ubicación del script y directorio de instalación predeterminado</b></summary><pre class="line-numbers language-text" data-language="text"><code class="language-text">./install.sh<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Ruta predeterminada de la WebUI:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">~/.local/share/weig-qb-webui<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Si se ejecuta como <code>root</code>:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">/root/.local/share/weig-qb-webui<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></details><h3 id="Docker"><a href="#Docker" class="headerlink" title="Docker"></a>Docker</h3><details><summary><b>Instalación Docker / varios contenedores / rutas</b></summary><h4 id="Host-y-contenedor"><a href="#Host-y-contenedor" class="headerlink" title="Host y contenedor"></a>Host y contenedor</h4><ul><li><strong>Host</strong>: el sistema Linux&#x2F;NAS donde se ejecuta Docker.</li><li><strong>Contenedor</strong>: el entorno aislado donde se ejecuta qBittorrent.</li></ul><p>Ejemplo:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">Host:       /root/qbittorrent/config   ↓ montado comoContenedor: /config<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p>Docker Compose:</p><pre class="line-numbers language-yaml" data-language="yaml"><code class="language-yaml"><span class="token key atrule">volumes</span><span class="token punctuation">:</span>  <span class="token punctuation">-</span> /root/qbittorrent/config<span class="token punctuation">:</span>/config<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p>Si la WebUI está instalada en el host en:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">/root/qbittorrent/config/weig-qb-webui<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>entonces <strong>Ubicación de archivos:</strong> en qBittorrent debe ser:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">/config/weig-qb-webui<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h4 id="Un-unico-contenedor-qBittorrent"><a href="#Un-unico-contenedor-qBittorrent" class="headerlink" title="Un único contenedor qBittorrent"></a>Un único contenedor qBittorrent</h4><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">curl</span> <span class="token parameter variable">-fsSL</span> https://weigefenxiang.github.io/WeiG-qB-WebUI/downloads/dev/install.sh <span class="token parameter variable">-o</span> install.sh <span class="token operator">&amp;&amp;</span> <span class="token function">sh</span> install.sh <span class="token parameter variable">-configure</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>El instalador intenta detectar automáticamente el contenedor y el montaje <code>/config</code>.</p><h4 id="Listar-contenedores"><a href="#Listar-contenedores" class="headerlink" title="Listar contenedores"></a>Listar contenedores</h4><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh --list-containers<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>O:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">docker</span> <span class="token function">ps</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Elegir un contenedor explícitamente:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh <span class="token parameter variable">--container</span><span class="token operator">=</span>qbittorrent <span class="token parameter variable">-configure</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Si hay varios contenedores qBittorrent, el instalador no elige uno al azar.</p><h4 id="Caso-3-varios-contenedores-qBittorrent"><a href="#Caso-3-varios-contenedores-qBittorrent" class="headerlink" title="Caso 3: varios contenedores qBittorrent"></a>Caso 3: varios contenedores qBittorrent</h4><p>Si tienes <code>qbittorrent</code> y <code>qbittorrent-test</code>, consulta primero la lista y después selecciona cuál quieres configurar. El instalador no elige por su cuenta:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh --list-containers<span class="token function">sh</span> install.sh <span class="token parameter variable">--container</span><span class="token operator">=</span>qbittorrent <span class="token parameter variable">-configure</span><span class="token function">sh</span> install.sh <span class="token parameter variable">--container</span><span class="token operator">=</span>qbittorrent-test <span class="token parameter variable">-configure</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><h4 id="Indicar-el-directorio-del-host-montado-como-config"><a href="#Indicar-el-directorio-del-host-montado-como-config" class="headerlink" title="Indicar el directorio del host montado como /config"></a>Indicar el directorio del host montado como <code>/config</code></h4><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh --config-root<span class="token operator">=</span>/root/qbittorrent/config <span class="token parameter variable">-configure</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Synology:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh --config-root<span class="token operator">=</span>/volume1/docker/qbittorrent <span class="token parameter variable">-configure</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Otro NAS:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh --config-root<span class="token operator">=</span>/share/Container/qbittorrent <span class="token parameter variable">-configure</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h4 id="Elegir-la-ruta-WebUI"><a href="#Elegir-la-ruta-WebUI" class="headerlink" title="Elegir la ruta WebUI"></a>Elegir la ruta WebUI</h4><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh <span class="token parameter variable">--container</span><span class="token operator">=</span>qbittorrent <span class="token parameter variable">-o</span> /config/weig-qb-webui <span class="token parameter variable">-configure</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h4 id="Caso-6-actualizar-varias-carpetas-WebUI-existentes"><a href="#Caso-6-actualizar-varias-carpetas-WebUI-existentes" class="headerlink" title="Caso 6: actualizar varias carpetas WebUI existentes"></a>Caso 6: actualizar varias carpetas WebUI existentes</h4><p>Si gestionas varias instancias de qBittorrent, repite <code>-o</code> para indicar sus carpetas. El paquete se descarga y verifica una sola vez; los cambios se aplican después de preparar todos los destinos. Cada uno conserva sus tres copias más recientes por separado en <code>~/.config/weig-qb-webui/backups/</code>.</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh <span class="token parameter variable">-dev</span> <span class="token punctuation">\</span>  <span class="token parameter variable">-o</span> /root/qbittorrent/config/weig-qb-webui <span class="token punctuation">\</span>  <span class="token parameter variable">-o</span> /root/qbittorrent3/config/weig-qb-webui<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><p>No uses <code>-configure</code> con varios destinos: cada instancia seguirá usando su ruta WebUI configurada. Ejecuta <code>sh install.sh -help</code> para ver las opciones.</p><h4 id="Comprobar-las-rutas-despues-de-instalar"><a href="#Comprobar-las-rutas-despues-de-instalar" class="headerlink" title="Comprobar las rutas después de instalar"></a>Comprobar las rutas después de instalar</h4><p>Al terminar, el instalador muestra rutas parecidas a estas. La primera es la ubicación real en el host; la segunda es la ruta dentro del contenedor que debes escribir en <strong>Files location</strong> de qBittorrent.</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">Host install path: /root/qbittorrent/config/weig-qb-webuiqBittorrent Root Folder: /config/weig-qb-webui<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></details><h3 id="Windows-PowerShell"><a href="#Windows-PowerShell" class="headerlink" title="Windows PowerShell"></a>Windows PowerShell</h3><pre class="line-numbers language-powershell" data-language="powershell"><code class="language-powershell"><span class="token function">Invoke-WebRequest</span> https:<span class="token operator">/</span><span class="token operator">/</span>weigefenxiang<span class="token punctuation">.</span>github<span class="token punctuation">.</span>io/WeiG-qB-WebUI/downloads/dev/install<span class="token punctuation">.</span>ps1 <span class="token operator">-</span>OutFile <span class="token punctuation">.</span>\install<span class="token punctuation">.</span>ps1<span class="token punctuation">;</span> powershell <span class="token operator">-</span>ExecutionPolicy Bypass <span class="token operator">-</span>File <span class="token punctuation">.</span>\install<span class="token punctuation">.</span>ps1 <span class="token operator">-</span>configure<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><details><summary><b>Ver directorio de instalación</b></summary><pre class="line-numbers language-text" data-language="text"><code class="language-text">C:\Users\&lt;tu-usuario>\AppData\Local\weig-qb-webui<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></details><h2 id="Opciones-habituales"><a href="#Opciones-habituales" class="headerlink" title="Opciones habituales"></a>Opciones habituales</h2><details><summary><b>Linux y Windows comparten las opciones; PowerShell no distingue mayúsculas y minúsculas (desplegar)</b></summary><p>Los nombres de parámetros de PowerShell no distinguen mayúsculas y minúsculas.</p><table><thead><tr><th>Uso</th><th>Linux &#x2F; Docker &#x2F; NAS</th><th>Windows PowerShell</th></tr></thead><tbody><tr><td>Última Release estable</td><td>Predeterminado</td><td>Predeterminado</td></tr><tr><td>Release específica</td><td><code>-version 1.2.0</code></td><td><code>-version 1.2.0</code></td></tr><tr><td>Versión de desarrollo</td><td><code>-dev</code></td><td><code>-dev</code></td></tr><tr><td>Directorio de instalación</td><td><code>-o /path</code> (se puede repetir en Linux)</td><td><code>-o D:\path</code> o <code>-output D:\path</code></td></tr><tr><td>Archivo de configuración personalizado de qBittorrent</td><td>—</td><td><code>-qbconfig D:\path\qBittorrent.ini</code></td></tr><tr><td>Configurar qBittorrent</td><td><code>-configure</code></td><td><code>-configure</code></td></tr><tr><td>Restaurar instalación anterior</td><td><code>-rollback</code></td><td><code>-rollback</code></td></tr><tr><td>Desinstalación completa (sin copias del instalador)</td><td><code>-uninstall -purge</code></td><td><code>-uninstall -purge</code></td></tr><tr><td>Ayuda</td><td><code>-help</code></td><td><code>-help</code></td></tr><tr><td>Elegir contenedor Docker</td><td><code>--container=NAME</code></td><td>—</td></tr><tr><td>Listar contenedores Docker</td><td><code>--list-containers</code></td><td>—</td></tr><tr><td>Ruta del host montada como <code>/config</code></td><td><code>--config-root=/path</code></td><td>—</td></tr></tbody></table></details><details><summary><b>Notas: (haz clic para desplegar)</b></summary><ul><li>Sin <code>-dev</code>, se instala la versión estable de GitHub verificada desde <code>main</code>. Con <code>-dev</code>, el desarrollo actual de <code>dev</code> mediante su SHA exacto.</li><li><code>-o</code> significa <strong>output</strong>. En Linux puedes repetirlo para actualizar varias carpetas WebUI existentes con una descarga verificada.</li><li>Las copias se guardan en <code>~/.config/weig-qb-webui/backups/</code>, conservando las tres más recientes por destino.</li><li><code>-configure</code> activa <strong>Use alternative WebUI</strong> y configura <strong>Files location</strong> en qBittorrent. Solo admite un destino a la vez.</li><li><code>-rollback</code> restaura la última copia del instalador para el destino indicado. Repite <code>-o</code> para restaurar varios destinos explícitos.</li><li><code>-uninstall -purge</code> elimina la WebUI y las copias &#x2F; el estado de restauración de ese destino sin afectar a otros. El directorio compartido se limpia si queda vacío.</li><li>Si quieres conservar las copias para usar <code>-rollback</code> más adelante, omite <code>-purge</code>.</li><li><code>-version 1.2.0</code> instala un GitHub Release concreto. Si no existe, se produce un error y <strong>no se cambia automáticamente a latest ni dev</strong>.</li><li><code>-help</code> muestra las opciones disponibles.</li><li>Para varios contenedores Docker, usa <code>--list-containers</code> y <code>--container=NAME</code>, o indica la configuración del host con <code>--config-root=/path</code>.</li></ul><h3 id="Version-especifica-y-directorio-de-instalacion"><a href="#Version-especifica-y-directorio-de-instalacion" class="headerlink" title="Versión específica y directorio de instalación"></a>Versión específica y directorio de instalación</h3><p>Linux:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh <span class="token parameter variable">-version</span> <span class="token number">1.2</span>.0 <span class="token parameter variable">-o</span> /opt/weig-qb-webui <span class="token parameter variable">-configure</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Windows:</p><pre class="line-numbers language-powershell" data-language="powershell"><code class="language-powershell">powershell <span class="token operator">-</span>ExecutionPolicy Bypass <span class="token operator">-</span>File <span class="token punctuation">.</span>\install<span class="token punctuation">.</span>ps1 <span class="token operator">-</span>version 1<span class="token punctuation">.</span>2<span class="token punctuation">.</span>0 <span class="token operator">-</span>o D:\weig-qb-webui <span class="token operator">-</span>configure<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h3 id="Reversion"><a href="#Reversion" class="headerlink" title="Reversión"></a>Reversión</h3><p>Rollback:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh <span class="token parameter variable">-rollback</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><pre class="line-numbers language-powershell" data-language="powershell"><code class="language-powershell">powershell <span class="token operator">-</span>ExecutionPolicy Bypass <span class="token operator">-</span>File <span class="token punctuation">.</span>\install<span class="token punctuation">.</span>ps1 <span class="token operator">-</span>rollback<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></details><h2 id="Desinstalacion-con-un-solo-comando"><a href="#Desinstalacion-con-un-solo-comando" class="headerlink" title="Desinstalación con un solo comando"></a>Desinstalación con un solo comando</h2><details><summary><b>Desinstalación completa para Linux / NAS, Docker y Windows PowerShell</b></summary><p>De forma predeterminada se recomienda la <strong>desinstalación completa sin conservar copias del instalador</strong>: elimina el WebUI, desactiva la interfaz alternativa correspondiente, purga las copias &#x2F; el estado de rollback propiedad de ese destino y después elimina el script de instalación descargado en el directorio actual.</p><h3 id="Linux-NAS-1"><a href="#Linux-NAS-1" class="headerlink" title="Linux &#x2F; NAS"></a>Linux &#x2F; NAS</h3><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh <span class="token parameter variable">-uninstall</span> <span class="token parameter variable">-configure</span> <span class="token parameter variable">-purge</span> <span class="token operator">&amp;&amp;</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> -- ./install.sh<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Para una ruta personalizada, añade <code>-o /path/to/weig-qb-webui</code>.</p><h3 id="Docker-1"><a href="#Docker-1" class="headerlink" title="Docker"></a>Docker</h3><p>Un contenedor &#x2F; detección automática:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh <span class="token parameter variable">-uninstall</span> <span class="token parameter variable">-configure</span> <span class="token parameter variable">-purge</span> <span class="token operator">&amp;&amp;</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> -- ./install.sh<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Varios contenedores:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh <span class="token parameter variable">-uninstall</span> <span class="token parameter variable">-configure</span> <span class="token parameter variable">-purge</span> <span class="token parameter variable">--container</span><span class="token operator">=</span>qbittorrent <span class="token operator">&amp;&amp;</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> -- ./install.sh<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Al usar <code>--config-root</code>:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sh</span> install.sh <span class="token parameter variable">-uninstall</span> <span class="token parameter variable">-configure</span> <span class="token parameter variable">-purge</span> --config-root<span class="token operator">=</span>/path/to/qbittorrent/config <span class="token operator">&amp;&amp;</span> <span class="token function">rm</span> <span class="token parameter variable">-f</span> -- ./install.sh<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h3 id="Windows-PowerShell-1"><a href="#Windows-PowerShell-1" class="headerlink" title="Windows PowerShell"></a>Windows PowerShell</h3><pre class="line-numbers language-powershell" data-language="powershell"><code class="language-powershell">powershell <span class="token operator">-</span>ExecutionPolicy Bypass <span class="token operator">-</span>File <span class="token punctuation">.</span>\install<span class="token punctuation">.</span>ps1 <span class="token operator">-</span>uninstall <span class="token operator">-</span>configure <span class="token operator">-</span>purge<span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$LASTEXITCODE</span> <span class="token operator">-eq</span> 0<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span> <span class="token function">Remove-Item</span> <span class="token punctuation">.</span>\install<span class="token punctuation">.</span>ps1 <span class="token operator">-</span>Force <span class="token punctuation">&#125;</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Para una ruta personalizada, añade <code>-o D:\weig-qb-webui</code>.</p><p><code>-purge</code> solo elimina las copias pertenecientes al destino que se está desinstalando y no afecta a otras instalaciones. Si el directorio de estado compartido queda vacío, también se elimina <code>~/.config/weig-qb-webui</code> en Linux (root: <code>/root/.config/weig-qb-webui</code>) o <code>%APPDATA%\weig-qb-webui</code> en Windows.</p><p>Para conservar las copias y poder usar <code>-rollback</code> más adelante, simplemente omite <code>-purge</code>.</p></details><h2 id="Mas-ayuda"><a href="#Mas-ayuda" class="headerlink" title="Más ayuda"></a>Más ayuda</h2><p>Para Docker, NAS, rutas personalizadas, actualizaciones e instalación manual, consulta <a href="https://github.com/weigefenxiang/WeiG-qB-WebUI/blob/main/translations/installation-guide/deployment-guide.es.md">Instalación, actualización y despliegue manual</a>.</p><h2 id="Licencia"><a href="#Licencia" class="headerlink" title="Licencia"></a>Licencia</h2><p><a href="https://github.com/weigefenxiang/WeiG-qB-WebUI/blob/main/LICENSE">GNU General Public License v3</a>.</p><p>Copyright © 2026 Wei.G &#x2F; WeiG Share.</p>]]>
    </content>
    <id>https://www.weigshare.com/posts/WeiG-qB-WebUI-Guide/</id>
    <link href="https://www.weigshare.com/posts/WeiG-qB-WebUI-Guide/"/>
    <published>2026-09-28T09:15:00.000Z</published>
    <summary>Guía para instalar WeiG qB WebUI y usarlo como interfaz Web alternativa de qBittorrent en Windows, Linux, NAS y Docker.</summary>
    <title>WeiG qB WebUI: guía para principiantes de la interfaz Web alternativa de qBittorrent</title>
    <updated>2026-10-21T08:39:31.053Z</updated>
  </entry>
  <entry>
    <author>
      <name>Wei.G</name>
    </author>
    <category term="OpenWrt" scheme="https://www.weigshare.com/categories/OpenWrt/"/>
    <category term="OpenWrt" scheme="https://www.weigshare.com/tags/OpenWrt/"/>
    <category term="ImmortalWrt" scheme="https://www.weigshare.com/tags/ImmortalWrt/"/>
    <category term="GitHub Actions" scheme="https://www.weigshare.com/tags/GitHub-Actions/"/>
    <category term="Compilación de firmware" scheme="https://www.weigshare.com/tags/Compilacion-de-firmware/"/>
    <content>
      <![CDATA[<p>¿Quieres un firmware OpenWrt adaptado a tu router sin tener que preparar primero todo un entorno de compilación local? Abre el <a href="https://www.weigshare.com/wrt">configurador online de Wei.G</a>, elige la fuente, el dispositivo objetivo, los paquetes y las opciones del firmware y envía la solicitud a GitHub Actions. La compilación se realizará en la nube.</p><div align="left" style="display:flex;gap:10px;flex-wrap:wrap;justify-content:left;">  <img src="https://img.shields.io/badge/JavaScript-ES2020-f7df1e?logo=javascript&logoColor=black" alt="JavaScript">  <img src="https://img.shields.io/badge/HTML-5-e34f26?logo=html5&logoColor=white" alt="HTML">  <img src="https://img.shields.io/badge/CSS-3-1572b6?logo=css3&logoColor=white" alt="CSS">  <img src="https://img.shields.io/badge/Node.js-22-339933?logo=nodedotjs&logoColor=white" alt="Node.js">  <img src="https://img.shields.io/badge/Bash-5-4eaa25?logo=gnubash&logoColor=white" alt="Bash">  <img src="https://img.shields.io/badge/YAML-1.2-cb171e?logo=yaml&logoColor=white" alt="YAML"></div><h2 id="Inicio-rapido"><a href="#Inicio-rapido" class="headerlink" title="Inicio rápido"></a>Inicio rápido</h2><p><span style="color:#ffc107;">⚠️ </span> <span style="color:#ff7b72;">Flashear firmware conlleva riesgos. Comprueba primero el modelo del router, las particiones y el método de flasheo. Si no estás seguro, no flashees.</span></p><ul><li>Inicia sesión en <strong><a href="https://github.com/">GitHub</a></strong></li><li>Abre el <strong><a href="https://www.weigshare.com/wrt">personalizador en línea de Wei.G</a></strong></li><li>Si eres nuevo, consulta el tutorial siguiente 👇</li></ul><h2 id="Contexto"><a href="#Contexto" class="headerlink" title="Contexto"></a>Contexto</h2><ul><li><strong>【Un punto de partida más sencillo】</strong> Si quieres aprender a compilar tu propio firmware pero no quieres empezar montando toda la cadena de herramientas en local, este proyecto ofrece una entrada más accesible.</li><li><strong>【Paquetes y dependencias】</strong> Algunos plugins y dependencias deben integrarse en el firmware durante la compilación para poder utilizarlos.</li><li><strong>【Configuración】</strong> OpenWrt ofrece muchas opciones de compilación y, en China continental, las condiciones de red pueden complicar aún más la descarga de dependencias.</li><li><strong>【Tiempo】</strong> Una compilación completa puede tardar varias horas y aun así fallar, por lo que investigar los errores también lleva tiempo.</li><li><strong>【Objetivo】</strong> A largo plazo, la idea es que cualquiera pueda hacer un fork del proyecto y ejecutar su propio sitio de compilación de OpenWrt con GitHub <strong>Pages + Actions</strong>.</li><li><strong>【Estado actual】</strong> El proyecto sigue en fase de pruebas. Puede haber errores y un uso intensivo del flujo compartido puede encontrarse con políticas o límites de GitHub.</li></ul><div style="display:flex; gap:10px;"><img src=https://img.weigshare.com/img/003.009.WeiG-OpenWrt-AutoBuild-Guide.png height="150"></div><div style="display:flex; gap:10px;"><img src=https://img.weigshare.com/img/003.010.WeiG-OpenWrt-AutoBuild-Guide.png height="150"></div><h2 id="Dispositivos-compatibles"><a href="#Dispositivos-compatibles" class="headerlink" title="Dispositivos compatibles"></a>Dispositivos compatibles</h2><p>Por ahora solo se han verificado los siguientes objetivos. Otros dispositivos aún no se han probado. Si no tienes una forma de recuperación, no utilices esta herramienta.</p><ul><li><strong>Fuentes: <a href="https://github.com/openwrt/openwrt">OpenWrt</a> · <a href="https://github.com/immortalwrt/immortalwrt">ImmortalWrt</a> · <a href="https://github.com/coolsnowwolf/lede">LEDE</a> · <a href="https://github.com/hanwckf/immortalwrt-mt798x">hanwckf</a></strong></li><li><strong>x86 &#x2F; 64</strong></li><li>Accesible desde ordenador y móvil</li></ul><h2 id="Preparacion"><a href="#Preparacion" class="headerlink" title="Preparación"></a>Preparación</h2><p><span style="color:#ffc107;">⚠️ </span> <span style="color:#ff7b72;">Flashear firmware conlleva riesgos. Comprueba primero el modelo del router, las particiones y el método de flasheo. Si no estás seguro, no flashees.</span></p><ul><li>Inicia sesión con una cuenta de <strong><a href="https://github.com/">GitHub</a></strong>. Sin cuenta no se puede iniciar una compilación.</li><li>Abre el <strong><a href="https://www.weigshare.com/wrt">personalizador en línea de Wei.G</a></strong>.<ul><li><strong><a href="https://dev.weig-wrt.pages.dev/">Página Cloudflare dev</a></strong> (funciones experimentales y novedades; puede contener bugs)</li></ul></li></ul><!-- Captura 1: página principal con Source, Branch, Target y zona de plugins --><h2 id="1-Elegir-parametros"><a href="#1-Elegir-parametros" class="headerlink" title="1. Elegir parámetros"></a>1. Elegir parámetros</h2><ul><li><p>Después de elegir la fuente, busca el modelo o entorno correspondiente. También puedes cargar una config existente.</p></li><li><p>Selecciona <strong>Source → Branch → Target System → Subtarget → Target Profile</strong>.</p><ul><li>Ejemplo x86&#x2F;64: <strong>ImmortalWrt → openwrt-24.10 → x86 → 64 → Generic x86&#x2F;64</strong></li></ul></li><li><p>En <strong>Advanced menuconfig › LuCI › 3. Applications</strong>, marca las aplicaciones que quieras.</p></li><li><p>Ajusta las demás opciones de <strong>Advanced menuconfig</strong> según sea necesario.</p></li></ul><p>Después configura, si procede, la <strong>zona horaria</strong>, el <strong>tema del firmware</strong>, los <strong>servidores NTP</strong> y el <strong>mirror de paquetes</strong>.</p><div style="display:flex; gap:10px;"><img src=https://img.weigshare.com/img/003.002.WeiG-OpenWrt-AutoBuild-Guide.png height="150"><img src=https://img.weigshare.com/img/003.003.WeiG-OpenWrt-AutoBuild-Guide.png height="150"><img src=https://img.weigshare.com/img/003.004.WeiG-OpenWrt-AutoBuild-Guide.png height="150"></div><h3 id="Configuracion-existente"><a href="#Configuracion-existente" class="headerlink" title="Configuración existente"></a>Configuración existente</h3><p>Si ya tienes un archivo <code>.config</code>, <code>config.buildinfo</code> o una solicitud descargada anteriormente, pulsa <strong>Cargar configuración</strong> en la parte inferior. En la ventana de confirmación revisa la fuente, la rama, el Target Profile, los plugins y los ajustes del firmware.</p><h2 id="2-Enviar-la-compilacion"><a href="#2-Enviar-la-compilacion" class="headerlink" title="2. Enviar la compilación"></a>2. Enviar la compilación</h2><p>Pulsa <strong>Enviar compilación en la nube</strong> en la esquina inferior derecha.</p><p>Elige <strong>Descargar solicitud y abrir GitHub</strong>. El navegador descargará un archivo JSON y abrirá automáticamente una nueva página de GitHub Issue.</p><p>Mueve el archivo descargado al cuadro del Issue y pulsa <strong>Create</strong>.</p><p>El bot responderá en el Issue con el enlace de Actions correspondiente a la compilación.</p><div style="display:flex; gap:10px;"><img src=https://img.weigshare.com/img/003.005.WeiG-OpenWrt-AutoBuild-Guide.png height="150"><img src=https://img.weigshare.com/img/003.006.WeiG-OpenWrt-AutoBuild-Guide.png height="150"></div><h2 id="3-Descargar-el-firmware"><a href="#3-Descargar-el-firmware" class="headerlink" title="3. Descargar el firmware"></a>3. Descargar el firmware</h2><p>La compilación suele tardar entre 2 y 4 horas. Cuando termine, entra en la página de Actions y descarga los elementos de <strong>Artifacts</strong>:</p><ul><li><code>FIRMWARE-ALL-XXX</code>: todos los archivos de firmware y las sumas de comprobación. Para un primer flasheo normalmente se busca un archivo como <code>factory</code>.</li><li><code>CONFIG-XXX</code>: configuración enviada, configuración final y diferencias. Se recomienda conservarla.</li><li><code>BUILD-LOGS-XXX</code>: logs completos de compilación para diagnóstico.</li></ul><div style="display:flex; gap:10px;"><img src=https://img.weigshare.com/img/003.007.WeiG-OpenWrt-AutoBuild-Guide.png height="150"><img src=https://img.weigshare.com/img/003.008.WeiG-OpenWrt-AutoBuild-Guide.png height="150"></div><h2 id="Preguntas-frecuentes"><a href="#Preguntas-frecuentes" class="headerlink" title="Preguntas frecuentes"></a>Preguntas frecuentes</h2><ul><li><strong>¿Qué hago si falla la compilación?</strong> Descarga <code>BUILD-LOGS-…</code> y revisa el último <code>Error</code>. También puedes informar del problema en el Issue.</li><li><strong>¿Cómo cancelo?</strong> Responde <code>/cancel</code> en tu Issue de compilación.</li><li><strong>¿Cuántas compilaciones pueden ejecutarse a la vez?</strong> Una cuenta solo puede ejecutar dos tareas al mismo tiempo; las demás deben esperar.</li><li><strong>¿Por qué no aparece el botón de descarga?</strong> GitHub suele exigir que hayas iniciado sesión para descargar Artifacts de Actions.</li><li><strong>¿La cola del repositorio público tarda demasiado?</strong> En el futuro podrás <a href="https://github.com/weigefenxiang/WeiG-OpenWrt-AutoBuild">hacer fork de este proyecto</a> y ejecutar las compilaciones en tu propio repositorio siguiendo las indicaciones de la página, evitando así la cola compartida.</li></ul><p>Proyecto: <a href="https://github.com/weigefenxiang/WeiG-OpenWrt-AutoBuild">WeiG-OpenWrt-AutoBuild</a></p><h2 id="Agradecimientos"><a href="#Agradecimientos" class="headerlink" title="Agradecimientos"></a>Agradecimientos</h2><ul><li><p><strong>Fuentes:</strong> <a href="https://github.com/openwrt/openwrt">OpenWrt</a> · <a href="https://github.com/immortalwrt/immortalwrt">ImmortalWrt</a> · <a href="https://github.com/coolsnowwolf/lede">LEDE</a> · <a href="https://github.com/hanwckf/immortalwrt-mt798x">hanwckf</a></p></li><li><p><strong>Referencia:</strong> <a href="https://github.com/P3TERX/Actions-OpenWrt">P3TERX</a></p></li><li><p><strong>Autores de los plugins LuCI</strong></p></li><li><p><strong>Todas las personas</strong> que han participado en el proyecto</p></li></ul>]]>
    </content>
    <id>https://www.weigshare.com/posts/WeiG-OpenWrt-AutoBuild-Guide/</id>
    <link href="https://www.weigshare.com/posts/WeiG-OpenWrt-AutoBuild-Guide/"/>
    <published>2026-08-01T12:11:00.000Z</published>
    <summary>Crea una imagen OpenWrt personalizada con el configurador online de Wei.G y GitHub Actions, sin instalar un entorno de compilación local.</summary>
    <title>Crear tu propio firmware OpenWrt en la nube: guía para principiantes</title>
    <updated>2026-10-21T08:39:31.053Z</updated>
  </entry>
  <entry>
    <author>
      <name>Wei.G</name>
    </author>
    <category term="Creación de sitios" scheme="https://www.weigshare.com/categories/Creacion-de-sitios/"/>
    <category term="Hexo" scheme="https://www.weigshare.com/tags/Hexo/"/>
    <category term="PicList" scheme="https://www.weigshare.com/tags/PicList/"/>
    <category term="Cloudflare" scheme="https://www.weigshare.com/tags/Cloudflare/"/>
    <category term="R2" scheme="https://www.weigshare.com/tags/R2/"/>
    <category term="Alojamiento de imágenes" scheme="https://www.weigshare.com/tags/Alojamiento-de-imagenes/"/>
    <content>
      <![CDATA[<h1 id="Antes-de-empezar"><a href="#Antes-de-empezar" class="headerlink" title="Antes de empezar"></a>Antes de empezar</h1><p>PicList funciona bastante bien con Cloudflare R2, pero la primera configuración todavía tiene algunos puntos en los que es fácil equivocarse:</p><ul><li>Hay bastantes campos y es fácil colocar un valor en el sitio incorrecto.</li><li>No existe un botón específico para probar la conexión.<ul><li>La forma más fiable de comprobar la configuración es subir una imagen de verdad.</li></ul></li></ul><p>En esta guía veremos paso a paso cómo conectar <strong>PicList</strong> con <strong>Cloudflare R2</strong> y utilizarlo como alojamiento de imágenes rápido, con dominio personalizado y CDN.</p><p>Si todavía no has creado el bucket de R2, también puedes consultar:</p><ul><li><strong><a href="https://www.fecify.com/doc/cn-1.0/fecify-shop-helper-cloudflare-r2.html">Tutorial de Cloudflare R2</a></strong></li></ul><p>Versión de PicList utilizada: <strong>v3.5.0 (julio de 2026)</strong>.</p><hr><p>Hace poco migré las imágenes del blog a <strong>Cloudflare R2</strong> y lo combiné con <strong>PicList</strong>. El resultado ha sido muy bueno.</p><p>Ventajas:</p><p>✅ Gratis  ✅ Estable  ✅ Rápido  ✅ Dominio personalizado  ✅ CDN global  ✅ Sin carga para el VPS</p><hr><h1 id="Configurar-PicList"><a href="#Configurar-PicList" class="headerlink" title="Configurar PicList"></a>Configurar PicList</h1><ul><li>Alojamiento de imágenes: se usa para subir imágenes</li><li>Nube: se usa para que PicList acceda al bucket de Cloudflare</li></ul><h2 id="Configuracion-del-alojamiento-de-imagenes"><a href="#Configuracion-del-alojamiento-de-imagenes" class="headerlink" title="Configuración del alojamiento de imágenes"></a>Configuración del alojamiento de imágenes</h2><p>En la navegación de la izquierda abre <strong>Alojamiento de imágenes</strong> → <strong>AWS S3</strong> → <strong>Nueva configuración</strong>:</p><img src="https://img.weigshare.com/img/001.002_PicList_orign.png" width="120"/><h3 id="Campos-obligatorios"><a href="#Campos-obligatorios" class="headerlink" title="Campos obligatorios"></a>Campos obligatorios</h3><pre><code>● Nombre de configuración: cualquiera● AccessKeyId: 18e1************************c0858● secretAccessKey: c8a3********************************************************fa6e● Endpoint personalizado: https://770*************************39d8.r2.cloudflarestorage.com</code></pre><p>Todos estos datos pueden obtenerse aquí: <a href="https://img.weigshare.com/img/001.005_CF_API_token.png">imagen de la API</a>.</p><ul><li>Permisos: <strong>lectura y escritura de administrador</strong> (de lo contrario, PicList no podrá acceder a la nube).</li><li>Las credenciales solo se muestran una vez. Guárdalas o tendrás que volver a crearlas.</li></ul><p>● Bucket: en mi caso es <strong>hexo-img</strong>. <a href="https://img.weigshare.com/img/001.003_CDF_bucket.png">Imagen</a></p><hr><h3 id="Campos-opcionales"><a href="#Campos-opcionales" class="headerlink" title="Campos opcionales"></a>Campos opcionales</h3><p>■ Ruta de subida: <strong>&#x2F;</strong> (directorio raíz)</p><p>Quiero guardar los archivos dentro de <strong>img</strong>, por eso uso <strong>&#x2F;img&#x2F;</strong>. <a href="https://img.weigshare.com/img/001.004_Directory.png">Imagen</a></p><p>● Dominio personalizado: <a href="https://img.weigshare.com/">https://img.weigshare.com/</a><br>(Puede configurarse después de vincular un dominio. A partir de entonces las imágenes subidas usarán enlaces bajo ese dominio.) <a href="https://img.weigshare.com/img/001.004_Directory.png">Imagen</a></p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">https://img.weigeshare.com/img/x.png<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>☐ Si no lo configuras, podrías obtener un enlace como este, que puede no abrirse directamente:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">https://770*************************39d8.r2.cloudflarestorage.com/img/0.%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202026-07-08%20181820.png<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>☐ Region: <strong>auto</strong> (o us-east-1)</p><ul><li>Política de acceso del objeto subido: <span style="color:#ff69b4;font-weight:bold;">public-read</span> (recomendación oficial)</li></ul><hr><h2 id="Configuracion-de-la-nube"><a href="#Configuracion-de-la-nube" class="headerlink" title="Configuración de la nube"></a>Configuración de la nube</h2><p>En la navegación de la izquierda abre <strong>Nube</strong> → <strong>S3 API</strong> → <strong>Nueva configuración</strong> → <strong>Guardar</strong>:</p><p><img src="https://img.weigshare.com/img/001.005_piclist_cloud_configuration1.png" height="280"/> <img src="https://img.weigshare.com/img/001.005_piclist_cloud_configuration2.png" height="280"/></p><h3 id="Campos-obligatorios-1"><a href="#Campos-obligatorios-1" class="headerlink" title="Campos obligatorios"></a>Campos obligatorios</h3><pre><code>● Nombre de configuración: cualquiera● Access Key Id: 18e1************************c0858● Access Key Secret: c8a3********************************************************fa6e● endpoint / endpoint personalizado: https://770*************************39d8.r2.cloudflarestorage.com</code></pre><p>Obtén el token de API aquí: <a href="https://img.weigshare.com/img/001.005_CF_API_token.png">API</a>.</p><ul><li>Permisos: <strong>lectura y escritura de administrador</strong> (de lo contrario, PicList no podrá acceder a la nube).</li></ul><p>● Nombre del bucket: <strong>hexo-img</strong>. <a href="https://img.weigshare.com/img/001.003_CDF_bucket.png">Imagen</a></p><p>■ Directorio inicial: <strong>&#x2F;</strong></p><ul><li>Yo guardo los archivos en <strong>&#x2F;img&#x2F;</strong>. <a href="https://img.weigshare.com/img/001.004_Directory.png">Imagen</a></li></ul><h3 id="Campos-opcionales-1"><a href="#Campos-opcionales-1" class="headerlink" title="Campos opcionales"></a>Campos opcionales</h3><p>■ Permiso de los archivos subidos: public-read (lectura pública, recomendado oficialmente)</p><hr><h1 id="Preguntas-frecuentes"><a href="#Preguntas-frecuentes" class="headerlink" title="Preguntas frecuentes"></a>Preguntas frecuentes</h1><h2 id="La-subida-termina-correctamente-pero-la-imagen-no-abre"><a href="#La-subida-termina-correctamente-pero-la-imagen-no-abre" class="headerlink" title="La subida termina correctamente, pero la imagen no abre"></a>La subida termina correctamente, pero la imagen no abre</h2><p>Comprueba:</p><ul><li>que el Bucket permita acceso público;</li><li>que el dominio personalizado esté vinculado;</li><li>que la resolución DNS ya esté activa.</li></ul><h2 id="Aparece-AccessDenied"><a href="#Aparece-AccessDenied" class="headerlink" title="Aparece AccessDenied"></a>Aparece AccessDenied</h2><p>Comprueba:</p><ul><li>que el Access Key ID sea correcto;</li><li>que el Secret Access Key sea correcto;</li><li>que el API Token tenga permisos de lectura y escritura.</li></ul><h2 id="Aparece-SignatureDoesNotMatch"><a href="#Aparece-SignatureDoesNotMatch" class="headerlink" title="Aparece SignatureDoesNotMatch"></a>Aparece SignatureDoesNotMatch</h2><p>Comprueba:</p><ul><li>que el Endpoint sea correcto.</li></ul><h1 id="Resumen"><a href="#Resumen" class="headerlink" title="Resumen"></a>Resumen</h1><p>La pila actual de mi blog:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">Hexo + Butterfly + Github + Cloudflare R2 + Cloudflare CDN<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>Si buscas una solución de alojamiento de imágenes estable a largo plazo para un blog, PicList + Cloudflare R2 merece mucho la pena.</p>]]>
    </content>
    <id>https://www.weigshare.com/posts/PicList-Cloudflare-R2-Guide/</id>
    <link href="https://www.weigshare.com/posts/PicList-Cloudflare-R2-Guide/"/>
    <published>2026-07-08T13:10:08.000Z</published>
    <summary>Guía para principiantes para usar PicList con Cloudflare R2 como alojamiento de imágenes, con dominio propio y distribución mediante CDN global.</summary>
    <title>Montar un alojamiento de imágenes rápido y gratuito con PicList + Cloudflare R2</title>
    <updated>2026-10-21T08:39:31.053Z</updated>
  </entry>
  <entry>
    <author>
      <name>Wei.G</name>
    </author>
    <category term="Python" scheme="https://www.weigshare.com/categories/Python/"/>
    <category term="Python" scheme="https://www.weigshare.com/tags/Python/"/>
    <category term="PyQt6" scheme="https://www.weigshare.com/tags/PyQt6/"/>
    <category term="Laboratorio" scheme="https://www.weigshare.com/tags/Laboratorio/"/>
    <category term="Análisis químico" scheme="https://www.weigshare.com/tags/Analisis-quimico/"/>
    <category term="Normas" scheme="https://www.weigshare.com/tags/Normas/"/>
    <category term="Solución de valoración" scheme="https://www.weigshare.com/tags/Solucion-de-valoracion/"/>
    <category term="Solución patrón" scheme="https://www.weigshare.com/tags/Solucion-patron/"/>
    <content>
      <![CDATA[<h1 id="Por-que-hice-esta-herramienta"><a href="#Por-que-hice-esta-herramienta" class="headerlink" title="Por qué hice esta herramienta"></a>Por qué hice esta herramienta</h1><p>En el trabajo de análisis químico, la tarea no termina al preparar y estandarizar una solución titulante. Después hay que calcular concentraciones, aplicar correcciones, comparar resultados paralelos y revisar los datos finales. Hacer todo esto a mano consume tiempo y, cuando aumenta el volumen de datos, también aumenta la posibilidad de cometer errores de cálculo o de revisión.</p><ul><li><p>Desarrollé este sistema en mi tiempo libre. Empecé el proyecto en abril y terminé la primera versión lista para uso real en noviembre: más de seis meses de trabajo y, además, mi primera aplicación de escritorio con interfaz gráfica.</p></li><li><p>Durante el proceso aprendí Python y PyQt6 por mi cuenta y me encargué del diseño, la lógica de cálculo, las pruebas y el despliegue. QFluentWidgets me ayudó a conseguir una interfaz más cómoda para el uso diario.</p></li><li><p>Una vez puesto en producción, el programa permitió ahorrar más de una hora de revisión por persona cada semana. Era una pequeña idea que tuve una noche: invertir medio año en una herramienta para recuperar después una hora libre cada semana. 😆</p></li><li><p>Hace poco dejé mi trabajo y por fin tuve tiempo de ordenar el proyecto, así que decidí publicarlo como software de código abierto.</p></li></ul><p><strong><a href="https://www.weigshare.com/standard">Vista previa Web</a> ⬅</strong> Abrir</p><h1 id="Sistema-de-calculo-y-revision-de-soluciones-patron"><a href="#Sistema-de-calculo-y-revision-de-soluciones-patron" class="headerlink" title="Sistema de cálculo y revisión de soluciones patrón"></a>Sistema de cálculo y revisión de soluciones patrón</h1><div align="left" style="display:flex;gap:10px;flex-wrap:wrap;justify-content:left;">  <img src="https://img.shields.io/badge/Python-3.12-blue" alt="Python">  <img src="https://img.shields.io/badge/PyQt6-GUI-green" alt="PyQt6">  <img src="https://img.shields.io/badge/SQLite-Database-blue" alt="SQLite">  <img src="https://img.shields.io/badge/GPL--3.0-red" alt="GPL3"></div><p>Una aplicación de escritorio para la estandarización, el cálculo y la revisión de soluciones patrón en laboratorio.</p><p>Admite corrección de temperatura, corrección de bureta, cuatro réplicas realizadas por una persona, ocho réplicas realizadas por dos personas y cálculo automático del rango relativo, mejorando la eficiencia de la gestión de soluciones patrón.</p><img src="https://img.weigshare.com/img/002.StandardSolution_Review_System_Demo_GIF.gif" ><p>Después de introducir los datos experimentales, el cálculo y la revisión se completan automáticamente. Descarga el <a href="https://github.com/weigefenxiang/StandardSolutionReviewSystem/releases">exe</a> para empezar.</p><hr><h2 id="Funciones"><a href="#Funciones" class="headerlink" title="Funciones"></a>Funciones</h2><p>✅ Cálculo de corrección de temperatura<br>✅ Corrección del valor de la bureta<br>✅ Cálculo automático de la concentración de la solución patrón</p><p>✅ Cuatro réplicas por una persona<br>✅ Ocho réplicas por dos personas<br>✅ Cálculo del rango relativo<br>✅ Cálculo de la concentración reportada</p><hr><h2 id="Soluciones-patron-compatibles"><a href="#Soluciones-patron-compatibles" class="headerlink" title="Soluciones patrón compatibles"></a>Soluciones patrón compatibles</h2><ul><li><p>Ácido clorhídrico, hidróxido de sodio, ácido sulfúrico, permanganato de potasio, nitrato de plata, tiosulfato de sodio, ácido etilendiaminotetraacético (EDTA), cloruro de zinc, hidróxido de potasio en etanol, carbonato de sodio, etc.</p></li><li><p>HCl, NaOH, H₂SO₄, KMnO₄, AgNO₃, Na₂S₂O₃, EDTA, ZnCl₂, KOH-Ethanol, Na₂CO₃, Custom Molar Mass (g&#x2F;mol)</p></li><li><p><strong>Personalizada</strong></p></li></ul><hr><h2 id="Interfaz-del-software"><a href="#Interfaz-del-software" class="headerlink" title="Interfaz del software"></a>Interfaz del software</h2><h3 id="Interfaz-principal"><a href="#Interfaz-principal" class="headerlink" title="Interfaz principal"></a>Interfaz principal</h3><img src="https://img.weigshare.com/img/002.StandardSolution_Review_System_Demo.png" ><h4 id="Interfaz-antigua"><a href="#Interfaz-antigua" class="headerlink" title="Interfaz antigua"></a>Interfaz antigua</h4><p>La interfaz ha pasado por varias iteraciones.</p><img src=https://img.weigshare.com/img/002.002.StandardSolution_Review_System_Demo_old.png ><table><thead><tr><th><strong>Entrada compatible</strong></th><th><strong>Generado automáticamente</strong></th></tr></thead><tbody><tr><td>Masa de la sustancia patrón</td><td>Volumen real de valoración</td></tr><tr><td>Volumen de titulante consumido</td><td>Cuatro concentraciones paralelas de una persona</td></tr><tr><td>Corrección de bureta</td><td>Ocho concentraciones paralelas de dos personas</td></tr><tr><td>Corrección de temperatura</td><td>Rango relativo</td></tr><tr><td>Volumen del blanco</td><td>Concentración reportada</td></tr></tbody></table><hr><h2 id="Ejecucion"><a href="#Ejecucion" class="headerlink" title="Ejecución"></a>Ejecución</h2><h3 id="Version-publicada"><a href="#Version-publicada" class="headerlink" title="Versión publicada"></a>Versión publicada</h3><p>Descarga y ejecuta el <a href="https://github.com/weigefenxiang/StandardSolutionReviewSystem/releases">exe</a>:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">StandardSolution_ReviewSystem.exe<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="Ejecutar-desde-el-codigo-fuente"><a href="#Ejecutar-desde-el-codigo-fuente" class="headerlink" title="Ejecutar desde el código fuente"></a>Ejecutar desde el código fuente</h2><details>    <summary>Haz clic para desplegar</summary><h3 id="Entorno-de-desarrollo"><a href="#Entorno-de-desarrollo" class="headerlink" title="Entorno de desarrollo"></a>Entorno de desarrollo</h3><ul><li>Windows 11</li><li>Python 3.12</li><li>PyQt6</li><li>QFluentWidgets</li><li>SQLite</li><li>Nuitka (para empaquetado)</li></ul><h3 id="Instalar-dependencias"><a href="#Instalar-dependencias" class="headerlink" title="Instalar dependencias"></a>Instalar dependencias</h3><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">pip <span class="token function">install</span> <span class="token parameter variable">-r</span> requirements.txt<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h3 id="Ejecutar"><a href="#Ejecutar" class="headerlink" title="Ejecutar"></a>Ejecutar</h3><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">python Flu_Main.py<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="Licencia-de-codigo-abierto"><a href="#Licencia-de-codigo-abierto" class="headerlink" title="Licencia de código abierto"></a>Licencia de código abierto</h2><p>Este proyecto se publica bajo la licencia GPL-3.0.</p><p>Al usar, modificar o redistribuir el proyecto, respeta los términos de la licencia GPL-3.0.</p><h2 id="Componentes-de-codigo-abierto-de-terceros"><a href="#Componentes-de-codigo-abierto-de-terceros" class="headerlink" title="Componentes de código abierto de terceros"></a>Componentes de código abierto de terceros</h2><p>Este proyecto utiliza:</p><ul><li>Python, PyQt6, QFluentWidgets, SQLite, Nuitka</li></ul><p>Gracias a todos los desarrolladores de los proyectos de código abierto utilizados.</p></details>]]>
    </content>
    <id>https://www.weigshare.com/posts/StandardSolution-Review-Soft/</id>
    <link href="https://www.weigshare.com/posts/StandardSolution-Review-Soft/"/>
    <published>2026-07-02T01:19:11.000Z</published>
    <summary>Aplicación de escritorio para Windows creada con Python, PyQt6, QFluentWidgets y SQLite para calcular y revisar soluciones patrón, con correcciones de temperatura y bureta, resultados paralelos y cálculo automático del rango relativo.</summary>
    <title>Sistema de cálculo y revisión de soluciones patrón para laboratorio</title>
    <updated>2026-10-21T08:39:31.053Z</updated>
  </entry>
</feed>
