<?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.055Z</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>Se costuma administrar o qBittorrent pelo navegador — sobretudo num <strong>NAS, em Docker ou no telemóvel</strong> — o WeiG qB WebUI torna a utilização diária muito mais confortável. <strong><a href="https://weigefenxiang.github.io/WeiG-qB-WebUI/">Pré-visualização online</a></strong></p><p>Há cerca de sete anos, entrei em alguns trackers privados. Na altura instalei o qBittorrent 4.1.9 no meu NAS, que era então a versão mais recente. Nunca pensei que ainda o estaria a usar tantos anos depois.</p><p>Cheguei a tentar uma atualização importante (penso que para a 4.2.5), mas as tarefas de torrents desapareceram do cliente e deixei de conseguir fazer seeding. Já tinha tantos torrents acumulados que recuperá-los foi uma trabalheira. Desde então, se uma versão está estável, prefiro não mexer.</p><p>Depois de acabar os estudos e começar a trabalhar, passei a ter muito menos tempo ao computador. Hoje em dia, quase sempre administro o NAS pelo telemóvel. Só que a WebUI original não é prática num ecrã pequeno. Também experimentei algumas alternativas, mas muitas tinham problemas com versões antigas do qBittorrent.</p><p>Foi por isso que comecei a desenvolver o WeiG qB WebUI. O projeto abrange várias versões estáveis do qBittorrent, da 4.1.x à 5.2.x. Se encontrar algum problema de compatibilidade ou tiver sugestões, deixe um comentário.</p><p><strong>WeiG qB WebUI</strong> é uma <strong>WebUI alternativa</strong> para qBittorrent, concebida para desktop e dispositivos móveis:</p><ul><li>📱 Interface responsiva em telemóveis</li><li>🌙 Modo escuro</li><li>🧱 Compatível com versões antigas do qBittorrent</li><li>✅ Suporta <strong>qBittorrent 4.1.x → 5.2.x</strong></li><li>🐳 Funciona em Windows, Linux, Docker e NAS</li></ul><p><a href="https://github.com/weigefenxiang/WeiG-qB-WebUI">Projeto</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="Pre-visualizacao-da-interface"><a href="#Pre-visualizacao-da-interface" class="headerlink" title="Pré-visualização da interface"></a>Pré-visualização da interface</h2><h3 id="Desktop"><a href="#Desktop" class="headerlink" title="Desktop"></a>Desktop</h3><p align="center">  <img src="https://img.weigshare.com/img/004.001.weig-qb-webui-desktop-overview.gif" alt="Interface de desktop do WeiG qB WebUI" style="display:block;width:100%;max-width:900px;height:auto;margin:0 auto;"></p><h3 id="Mobile"><a href="#Mobile" class="headerlink" title="Mobile"></a>Mobile</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="Demonstração da utilização móvel do WeiG qB WebUI">    <img src="https://img.weigshare.com/img/004.003.weig-qb-webui-mobile-overview.png" alt="Ecrãs do WeiG qB WebUI no telemóvel">  </div></div><h2 id="Instalacao-para-iniciantes"><a href="#Instalacao-para-iniciantes" class="headerlink" title="Instalação para iniciantes"></a>Instalação para iniciantes</h2><details><summary><b>Primeira instalação? Abrir o guia de 1 minuto</b></summary><h3 id="1-Extrair-o-ZIP"><a href="#1-Extrair-o-ZIP" class="headerlink" title="1. Extrair o ZIP"></a>1. Extrair o ZIP</h3><p>Transfira a versão estável mais recente <a href="https://github.com/weigefenxiang/WeiG-qB-WebUI/releases/latest/download/weig-qb-webui.zip"><strong>weig-qb-webui.zip</strong></a> e extraia o ficheiro. A pasta principal já tem o nome correto:</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>A pasta <strong><code>weig-qb-webui</code> completa</strong> é a raiz da WebUI. Não copie apenas <code>public</code> ou <code>private</code>.</p><h3 id="2-Mover-para-uma-localizacao-permanente"><a href="#2-Mover-para-uma-localizacao-permanente" class="headerlink" title="2. Mover para uma localização permanente"></a>2. Mover para uma localização permanente</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>Este é o diretório que deverá indicar no qBittorrent.</p><h3 id="3-Ativar-no-qBittorrent"><a href="#3-Ativar-no-qBittorrent" class="headerlink" title="3. Ativar no qBittorrent"></a>3. Ativar no qBittorrent</h3><p>Abra o qBittorrent:</p><p><strong>Ferramentas → Opções… → WebUI</strong></p><p>Estes são os termos atuais da tradução oficial portuguesa do qBittorrent. Depois:</p><ol><li>Ative <strong>Usar interface web alternativa</strong>.</li><li>Procure <strong>Localização dos ficheiros:</strong>.</li><li>Introduza o caminho para a pasta <code>weig-qb-webui</code>.</li></ol><p>Exemplo 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>Exemplo 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>Clique em <strong>OK</strong> para guardar.</li><li>Atualize a página da WebUI. Se a interface antiga continuar em cache, experimente <code>Ctrl + F5</code>.</li></ol><blockquote><p><strong>Como confirmar o caminho:</strong> dentro do diretório indicado deve conseguir ver diretamente <code>public</code>, <code>private</code>, <code>VERSION</code> e os restantes ficheiros.</p></blockquote><blockquote><p><strong>Docker:</strong> o qBittorrent é executado dentro de um contentor. Normalmente deve indicar um caminho visível pelo contentor, não o caminho real do anfitrião.</p></blockquote></details><h2 id="Instalacao-com-um-comando"><a href="#Instalacao-com-um-comando" class="headerlink" title="Instalação com um comando"></a>Instalação com um comando</h2><p>O instalador para Linux &#x2F; NAS é obtido no endereço fixo de Dev Pages abaixo. <strong>O endereço não determina a versão instalada:</strong> sem <code>-dev</code>, é usada a versão estável e verificada do GitHub Release de <code>main</code>; com <code>-dev</code>, a versão atual de <code>dev</code> identificada pelo SHA Git exato. O script fica no diretório atual para futuras atualizações ou restauros.</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>Mostrar localização do script e diretório de instalação predefinido</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>Diretório predefinido da 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>Ao executar 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>Instalação Docker / vários contentores / caminhos</b></summary><h4 id="Anfitriao-e-contentor"><a href="#Anfitriao-e-contentor" class="headerlink" title="Anfitrião e contentor"></a>Anfitrião e contentor</h4><ul><li><strong>Anfitrião</strong>: o sistema Linux&#x2F;NAS onde o Docker é executado.</li><li><strong>Contentor</strong>: o ambiente isolado onde o qBittorrent é executado.</li></ul><p>Exemplo:</p><pre class="line-numbers language-text" data-language="text"><code class="language-text">Anfitrião: /root/qbittorrent/config   ↓ montado emContentor: /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>Se a WebUI estiver instalada no anfitrião em:</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>então <strong>Localização dos ficheiros:</strong> no qBittorrent deve 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="Apenas-um-contentor-qBittorrent"><a href="#Apenas-um-contentor-qBittorrent" class="headerlink" title="Apenas um contentor qBittorrent"></a>Apenas um contentor 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>O instalador tenta detetar automaticamente o contentor e a montagem <code>/config</code>.</p><h4 id="Listar-contentores"><a href="#Listar-contentores" class="headerlink" title="Listar contentores"></a>Listar contentores</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>Ou:</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>Selecionar explicitamente um contentor:</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>Se existirem vários contentores qBittorrent, o instalador não escolhe um ao acaso.</p><h4 id="Caso-3-varios-contentores-qBittorrent"><a href="#Caso-3-varios-contentores-qBittorrent" class="headerlink" title="Caso 3: vários contentores qBittorrent"></a>Caso 3: vários contentores qBittorrent</h4><p>Se existirem <code>qbittorrent</code> e <code>qbittorrent-test</code>, liste os contentores e indique qual pretende configurar. O instalador não escolhe por adivinhação:</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-a-pasta-do-anfitriao-montada-como-config"><a href="#Indicar-a-pasta-do-anfitriao-montada-como-config" class="headerlink" title="Indicar a pasta do anfitrião montada como /config"></a>Indicar a pasta do anfitrião montada 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>Outro 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="Escolher-o-caminho-da-WebUI"><a href="#Escolher-o-caminho-da-WebUI" class="headerlink" title="Escolher o caminho da WebUI"></a>Escolher o caminho da 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-atualizar-varias-pastas-WebUI-existentes"><a href="#Caso-6-atualizar-varias-pastas-WebUI-existentes" class="headerlink" title="Caso 6: atualizar várias pastas WebUI existentes"></a>Caso 6: atualizar várias pastas WebUI existentes</h4><p>Com várias instâncias do qBittorrent, pode repetir <code>-o</code> para indicar os destinos. O pacote é transferido e verificado uma única vez; a mudança começa depois de todos os destinos estarem preparados. Cada um guarda as três últimas cópias separadamente em <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>Não junte <code>-configure</code> à instalação de vários destinos. Cada instância mantém o caminho WebUI já configurado. Consulte <code>sh install.sh -help</code> para as opções.</p><h4 id="Verificar-os-caminhos-apos-a-instalacao"><a href="#Verificar-os-caminhos-apos-a-instalacao" class="headerlink" title="Verificar os caminhos após a instalação"></a>Verificar os caminhos após a instalação</h4><p>No fim, o instalador apresenta caminhos semelhantes aos seguintes. O primeiro é a pasta real no anfitrião; o segundo é o caminho dentro do contentor que deve introduzir em <strong>Files location</strong> no 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>Mostrar diretório de instalação</b></summary><pre class="line-numbers language-text" data-language="text"><code class="language-text">C:\Users\&lt;nome-do-utilizador>\AppData\Local\weig-qb-webui<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></details><h2 id="Opcoes-comuns"><a href="#Opcoes-comuns" class="headerlink" title="Opções comuns"></a>Opções comuns</h2><details><summary><b>Linux e Windows usam as mesmas opções; no PowerShell, os nomes não distinguem maiúsculas e minúsculas (expandir)</b></summary><p>Os nomes dos parâmetros PowerShell não distinguem maiúsculas de minúsculas.</p><table><thead><tr><th>Utilização</th><th>Linux &#x2F; Docker &#x2F; NAS</th><th>Windows PowerShell</th></tr></thead><tbody><tr><td>Release estável mais recente</td><td>Predefinição</td><td>Predefinição</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>Versão de desenvolvimento</td><td><code>-dev</code></td><td><code>-dev</code></td></tr><tr><td>Diretório de instalação</td><td><code>-o /path</code> (pode repetir no Linux)</td><td><code>-o D:\path</code> ou <code>-output D:\path</code></td></tr><tr><td>Ficheiro de configuração personalizado do qBittorrent</td><td>—</td><td><code>-qbconfig D:\path\qBittorrent.ini</code></td></tr><tr><td>Configurar o qBittorrent</td><td><code>-configure</code></td><td><code>-configure</code></td></tr><tr><td>Restaurar a instalação anterior</td><td><code>-rollback</code></td><td><code>-rollback</code></td></tr><tr><td>Desinstalação completa (sem cópias do instalador)</td><td><code>-uninstall -purge</code></td><td><code>-uninstall -purge</code></td></tr><tr><td>Ajuda</td><td><code>-help</code></td><td><code>-help</code></td></tr><tr><td>Selecionar contentor Docker</td><td><code>--container=NAME</code></td><td>—</td></tr><tr><td>Listar contentores Docker</td><td><code>--list-containers</code></td><td>—</td></tr><tr><td>Caminho do anfitrião montado como <code>/config</code></td><td><code>--config-root=/path</code></td><td>—</td></tr></tbody></table></details><details><summary><b>Notas: (clique para expandir)</b></summary><ul><li>Sem <code>-dev</code>, é usado o GitHub Release estável e verificado de <code>main</code>; com <code>-dev</code>, a versão atual de <code>dev</code> identificada pelo SHA Git exato.</li><li><code>-o</code> significa <strong>output</strong>. No Linux pode repeti-lo para atualizar várias pastas WebUI existentes com uma única transferência verificada.</li><li>As cópias de segurança ficam em <code>~/.config/weig-qb-webui/backups/</code>, guardando as três mais recentes por destino.</li><li><code>-configure</code> ativa <strong>Use alternative WebUI</strong> e define <strong>Files location</strong> no qBittorrent. Só funciona com um destino de cada vez.</li><li><code>-rollback</code> restaura a última cópia do instalador para o destino escolhido. Pode repetir <code>-o</code> para repor vários destinos específicos.</li><li><code>-uninstall -purge</code> remove a WebUI e as cópias &#x2F; o estado de restauro do destino, sem afetar outras instalações. A pasta partilhada é apagada quando fica vazia.</li><li>Para guardar as cópias e poder usar <code>-rollback</code> mais tarde, retire <code>-purge</code> ao desinstalar.</li><li><code>-version 1.2.0</code> instala um GitHub Release específico. Se não existir, dá erro e <strong>não muda automaticamente para latest ou dev</strong>.</li><li><code>-help</code> mostra as opções suportadas.</li><li>Se houver vários contentores Docker, use <code>--list-containers</code> e <code>--container=NAME</code>, ou <code>--config-root=/path</code> para o diretório de configuração no anfitrião.</li></ul><h3 id="Versao-especifica-e-diretorio-de-instalacao"><a href="#Versao-especifica-e-diretorio-de-instalacao" class="headerlink" title="Versão específica e diretório de instalação"></a>Versão específica e diretório de instalação</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="Restauro"><a href="#Restauro" class="headerlink" title="Restauro"></a>Restauro</h3><p>Restauro:</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="Desinstalacao-com-um-comando"><a href="#Desinstalacao-com-um-comando" class="headerlink" title="Desinstalação com um comando"></a>Desinstalação com um comando</h2><details><summary><b>Desinstalação completa em Linux / NAS, Docker e Windows PowerShell</b></summary><p>Por predefinição, recomendamos a <strong>desinstalação completa sem manter cópias do instalador</strong>: remove o WebUI, desativa a interface alternativa correspondente, elimina as cópias &#x2F; estado de rollback pertencentes a esse destino e, por fim, remove o script de instalação transferido no diretório atual.</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 um caminho personalizado, acrescente <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>Um contentor &#x2F; deteção 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>Vários contentores:</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>Ao 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 um caminho personalizado, acrescente <code>-o D:\weig-qb-webui</code>.</p><p><code>-purge</code> elimina apenas as cópias pertencentes ao destino que está a ser desinstalado e não afeta outras instalações. Se o diretório de estado partilhado ficar vazio, <code>~/.config/weig-qb-webui</code> no Linux (root: <code>/root/.config/weig-qb-webui</code>) ou <code>%APPDATA%\weig-qb-webui</code> no Windows também é removido.</p><p>Para manter as cópias e poder usar <code>-rollback</code> mais tarde, basta omitir <code>-purge</code>.</p></details><h2 id="Mais-ajuda"><a href="#Mais-ajuda" class="headerlink" title="Mais ajuda"></a>Mais ajuda</h2><p>Para Docker, NAS, caminhos personalizados, atualizações e instalação manual, consulte <a href="https://github.com/weigefenxiang/WeiG-qB-WebUI/blob/main/translations/installation-guide/deployment-guide.pt.md">Instalação, atualização e implementação manual</a>.</p><h2 id="Licenca"><a href="#Licenca" class="headerlink" title="Licença"></a>Licença</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>Guia para instalar o WeiG qB WebUI e utilizá-lo como WebUI alternativa do qBittorrent em Windows, Linux, NAS e Docker.</summary>
    <title>WeiG qB WebUI: guia para iniciantes da WebUI alternativa do qBittorrent</title>
    <updated>2026-10-21T08:39:31.055Z</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="Compilação de firmware" scheme="https://www.weigshare.com/tags/Compilacao-de-firmware/"/>
    <content>
      <![CDATA[<p>Quer um firmware OpenWrt ajustado ao seu router sem ter de preparar primeiro um ambiente completo de compilação no computador? Abra o <a href="https://www.weigshare.com/wrt">configurador online Wei.G</a>, escolha a origem, o alvo, os pacotes e as opções do firmware e envie o pedido para o GitHub Actions. A compilação fica a cargo da cloud.</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="Início rápido"></a>Início rápido</h2><p><span style="color:#ffc107;">⚠️ </span> <span style="color:#ff7b72;">Gravar firmware envolve riscos. Confirme primeiro o modelo do roteador, o particionamento e o método de gravação. Se não tiver certeza, não faça o flash.</span></p><ul><li>Entre no <strong><a href="https://github.com/">GitHub</a></strong></li><li>Abra o <strong><a href="https://www.weigshare.com/wrt">personalizador online do Wei.G</a></strong></li><li>Se for iniciante, consulte o tutorial abaixo 👇</li></ul><h2 id="Contexto"><a href="#Contexto" class="headerlink" title="Contexto"></a>Contexto</h2><ul><li><strong>【Um ponto de partida mais simples】</strong> Para quem quer experimentar compilar firmware próprio sem começar por montar toda a toolchain local, este projeto oferece uma entrada mais acessível.</li><li><strong>【Pacotes e dependências】</strong> Alguns plugins e dependências precisam de ser integrados no firmware durante a compilação para poderem ser utilizados.</li><li><strong>【Configuração】</strong> O OpenWrt tem muitas opções de build e, na China continental, as condições de rede podem tornar a transferência das dependências ainda mais difícil.</li><li><strong>【Tempo】</strong> Uma compilação completa pode demorar várias horas e ainda assim falhar, pelo que a investigação dos erros também pode ser dispendiosa.</li><li><strong>【Objetivo】</strong> A longo prazo, a ideia é permitir que qualquer pessoa faça fork do projeto e mantenha o seu próprio site de compilação OpenWrt com GitHub <strong>Pages + Actions</strong>.</li><li><strong>【Estado atual】</strong> O projeto ainda está em testes. Podem existir bugs e uma utilização intensiva do workflow partilhado pode esbarrar nas políticas ou limites do 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-suportados"><a href="#Dispositivos-suportados" class="headerlink" title="Dispositivos suportados"></a>Dispositivos suportados</h2><p>No momento, apenas os alvos abaixo foram verificados. Outros dispositivos ainda não foram testados. Se você não tiver uma forma de recuperação, não use esta ferramenta.</p><ul><li><strong>Fontes: <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>Acesso por computador e celular</li></ul><h2 id="Preparacao"><a href="#Preparacao" class="headerlink" title="Preparação"></a>Preparação</h2><p><span style="color:#ffc107;">⚠️ </span> <span style="color:#ff7b72;">Gravar firmware envolve riscos. Confirme primeiro o modelo do roteador, o particionamento e o método de gravação. Se não tiver certeza, não faça o flash.</span></p><ul><li>Entre em uma conta do <strong><a href="https://github.com/">GitHub</a></strong>. Sem uma conta não é possível iniciar a compilação.</li><li>Abra o <strong><a href="https://www.weigshare.com/wrt">personalizador online do Wei.G</a></strong>.<ul><li><strong><a href="https://dev.weig-wrt.pages.dev/">Página Cloudflare dev</a></strong> (recursos experimentais e novidades; pode conter bugs)</li></ul></li></ul><!-- Captura 1: página inicial mostrando Source, Branch, Target e a área de plugins --><h2 id="1-Escolher-parametros"><a href="#1-Escolher-parametros" class="headerlink" title="1. Escolher parâmetros"></a>1. Escolher parâmetros</h2><ul><li><p>Depois de escolher a fonte, pesquise o modelo ou ambiente correspondente. Também é possível carregar uma config existente.</p></li><li><p>Selecione <strong>Source → Branch → Target System → Subtarget → Target Profile</strong>.</p><ul><li>Exemplo x86&#x2F;64: <strong>ImmortalWrt → openwrt-24.10 → x86 → 64 → Generic x86&#x2F;64</strong></li></ul></li><li><p>Em <strong>Advanced menuconfig › LuCI › 3. Applications</strong>, marque os aplicativos desejados.</p></li><li><p>Ajuste as demais opções de <strong>Advanced menuconfig</strong> conforme necessário.</p></li></ul><p>Depois configure, se necessário, o <strong>fuso horário</strong>, o <strong>tema do firmware</strong>, os <strong>servidores NTP</strong> e o <strong>mirror de pacotes</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="Configuracao-existente"><a href="#Configuracao-existente" class="headerlink" title="Configuração existente"></a>Configuração existente</h3><p>Se você já tem um arquivo <code>.config</code>, <code>config.buildinfo</code> ou uma solicitação baixada anteriormente, clique em <strong>Carregar configuração</strong> na parte inferior. Na janela de confirmação, confira a fonte, a branch, o Target Profile, os plugins e as configurações do firmware.</p><h2 id="2-Enviar-a-compilacao"><a href="#2-Enviar-a-compilacao" class="headerlink" title="2. Enviar a compilação"></a>2. Enviar a compilação</h2><p>Clique em <strong>Enviar compilação na nuvem</strong> no canto inferior direito.</p><p>Escolha <strong>Baixar solicitação e abrir GitHub</strong>. O navegador baixará um arquivo JSON e abrirá automaticamente uma nova página de GitHub Issue.</p><p>Mova o arquivo baixado para a caixa do Issue e clique em <strong>Create</strong>.</p><p>O bot responderá no Issue com o link do Actions correspondente à compilação.</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-Baixar-o-firmware"><a href="#3-Baixar-o-firmware" class="headerlink" title="3. Baixar o firmware"></a>3. Baixar o firmware</h2><p>A compilação normalmente leva de 2 a 4 horas. Quando terminar, abra a página do Actions e baixe os itens em <strong>Artifacts</strong>:</p><ul><li><code>FIRMWARE-ALL-XXX</code>: todos os arquivos de firmware e checksums. No primeiro flash normalmente você procurará um arquivo como <code>factory</code>.</li><li><code>CONFIG-XXX</code>: configuração enviada, configuração final e diferenças. Recomenda-se guardar.</li><li><code>BUILD-LOGS-XXX</code>: logs completos da compilação 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="Perguntas-frequentes"><a href="#Perguntas-frequentes" class="headerlink" title="Perguntas frequentes"></a>Perguntas frequentes</h2><ul><li><strong>E se a compilação falhar?</strong> Baixe <code>BUILD-LOGS-…</code> e verifique o último <code>Error</code>. Também é possível relatar o problema no Issue.</li><li><strong>Como cancelar?</strong> Responda <code>/cancel</code> no seu Issue de compilação.</li><li><strong>Quantas compilações podem rodar ao mesmo tempo?</strong> Uma conta pode executar apenas duas tarefas simultaneamente; as demais precisam aguardar.</li><li><strong>Por que não há botão de download?</strong> O GitHub normalmente exige login para baixar Artifacts de Actions.</li><li><strong>Fila muito longa no repositório público?</strong> No futuro será possível <a href="https://github.com/weigefenxiang/WeiG-OpenWrt-AutoBuild">fazer fork deste projeto</a> e executar as compilações no seu próprio repositório seguindo as instruções da página, evitando a fila compartilhada.</li></ul><p>Projeto: <a href="https://github.com/weigefenxiang/WeiG-OpenWrt-AutoBuild">WeiG-OpenWrt-AutoBuild</a></p><h2 id="Agradecimentos"><a href="#Agradecimentos" class="headerlink" title="Agradecimentos"></a>Agradecimentos</h2><ul><li><p><strong>Fontes:</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>Referência:</strong> <a href="https://github.com/P3TERX/Actions-OpenWrt">P3TERX</a></p></li><li><p><strong>Autores dos plugins LuCI</strong></p></li><li><p><strong>Todas as pessoas</strong> que participaram do projeto</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>Crie uma imagem OpenWrt personalizada com o configurador online Wei.G e o GitHub Actions, sem instalar um ambiente de compilação local.</summary>
    <title>Criar o seu próprio firmware OpenWrt na cloud: guia para iniciantes</title>
    <updated>2026-10-21T08:39:31.055Z</updated>
  </entry>
  <entry>
    <author>
      <name>Wei.G</name>
    </author>
    <category term="Criação de sites" scheme="https://www.weigshare.com/categories/Criacao-de-sites/"/>
    <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="Hospedagem de imagens" scheme="https://www.weigshare.com/tags/Hospedagem-de-imagens/"/>
    <content>
      <![CDATA[<h1 id="Antes-de-comecar"><a href="#Antes-de-comecar" class="headerlink" title="Antes de começar"></a>Antes de começar</h1><p>O PicList já funciona muito bem com o Cloudflare R2, mas a primeira configuração ainda tem alguns pontos onde é fácil enganar-se:</p><ul><li>há vários campos e é fácil colocar um valor no sítio errado;</li><li>não existe um botão específico para testar a ligação;<ul><li>a forma mais segura de confirmar a configuração é fazer realmente o upload de uma imagem.</li></ul></li></ul><p>Este guia mostra, passo a passo, como ligar o <strong>PicList</strong> ao <strong>Cloudflare R2</strong> e utilizá-lo como alojamento de imagens rápido, com domínio personalizado e CDN.</p><p>Se ainda não criou o bucket R2, pode consultar também:</p><ul><li><strong><a href="https://www.fecify.com/doc/cn-1.0/fecify-shop-helper-cloudflare-r2.html">Tutorial Cloudflare R2</a></strong></li></ul><p>Versão do PicList utilizada: <strong>v3.5.0 (julho de 2026)</strong>.</p><hr><p>Recentemente migrei as imagens deste blog para o <strong>Cloudflare R2</strong> e passei a usá-lo em conjunto com o <strong>PicList</strong>. O resultado tem sido muito bom.</p><p>Vantagens:</p><p>✅ Gratuito  ✅ Estável  ✅ Rápido  ✅ Domínio personalizado  ✅ CDN global  ✅ Sem carga no VPS</p><hr><h1 id="Configurar-o-PicList"><a href="#Configurar-o-PicList" class="headerlink" title="Configurar o PicList"></a>Configurar o PicList</h1><ul><li>Hospedagem de imagens: usada para enviar imagens</li><li>Nuvem: usada para o PicList acessar o bucket do Cloudflare</li></ul><h2 id="Configuracao-da-hospedagem-de-imagens"><a href="#Configuracao-da-hospedagem-de-imagens" class="headerlink" title="Configuração da hospedagem de imagens"></a>Configuração da hospedagem de imagens</h2><p>Na navegação à esquerda, abra <strong>Hospedagem de imagens</strong> → <strong>AWS S3</strong> → <strong>Nova configuração</strong>:</p><img src="https://img.weigshare.com/img/001.002_PicList_orign.png" width="120"/><h3 id="Campos-obrigatorios"><a href="#Campos-obrigatorios" class="headerlink" title="Campos obrigatórios"></a>Campos obrigatórios</h3><pre><code>● Nome da configuração: qualquer nome● AccessKeyId: 18e1************************c0858● secretAccessKey: c8a3********************************************************fa6e● Endpoint personalizado: https://770*************************39d8.r2.cloudflarestorage.com</code></pre><p>Esses dados podem ser obtidos aqui: <a href="https://img.weigshare.com/img/001.005_CF_API_token.png">imagem da API</a>.</p><ul><li>Permissão: <strong>leitura e escrita de administrador</strong> (caso contrário, o acesso do PicList à nuvem falhará).</li><li>As credenciais são exibidas apenas uma vez. Salve-as, ou será necessário criá-las novamente.</li></ul><p>● Bucket: no meu caso, <strong>hexo-img</strong>. <a href="https://img.weigshare.com/img/001.003_CDF_bucket.png">Imagem</a></p><hr><h3 id="Campos-opcionais"><a href="#Campos-opcionais" class="headerlink" title="Campos opcionais"></a>Campos opcionais</h3><p>■ Caminho de upload: <strong>&#x2F;</strong> (diretório raiz)</p><p>Quero armazenar os arquivos dentro da pasta <strong>img</strong>, então uso <strong>&#x2F;img&#x2F;</strong>. <a href="https://img.weigshare.com/img/001.004_Directory.png">Imagem</a></p><p>● Domínio personalizado: <a href="https://img.weigshare.com/">https://img.weigshare.com/</a><br>(Pode ser configurado depois que o domínio for vinculado. Os arquivos enviados passarão a usar links nesse domínio.) <a href="https://img.weigshare.com/img/001.004_Directory.png">Imagem</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>☐ Sem configurar um domínio personalizado, você pode receber um link como este, que talvez não abra diretamente:</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> (ou us-east-1)</p><ul><li>Política de acesso do objeto enviado: <span style="color:#ff69b4;font-weight:bold;">public-read</span> (recomendação oficial)</li></ul><hr><h2 id="Configuracao-da-nuvem"><a href="#Configuracao-da-nuvem" class="headerlink" title="Configuração da nuvem"></a>Configuração da nuvem</h2><p>Na navegação à esquerda, abra <strong>Nuvem</strong> → <strong>S3 API</strong> → <strong>Nova configuração</strong> → <strong>Salvar</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-obrigatorios-1"><a href="#Campos-obrigatorios-1" class="headerlink" title="Campos obrigatórios"></a>Campos obrigatórios</h3><pre><code>● Nome da configuração: qualquer nome● Access Key Id: 18e1************************c0858● Access Key Secret: c8a3********************************************************fa6e● endpoint / endpoint personalizado: https://770*************************39d8.r2.cloudflarestorage.com</code></pre><p>Obtenha o token da API aqui: <a href="https://img.weigshare.com/img/001.005_CF_API_token.png">API</a>.</p><ul><li>Permissão: <strong>leitura e escrita de administrador</strong> (caso contrário, o acesso do PicList à nuvem falhará).</li></ul><p>● Nome do bucket: <strong>hexo-img</strong>. <a href="https://img.weigshare.com/img/001.003_CDF_bucket.png">Imagem</a></p><p>■ Diretório inicial: <strong>&#x2F;</strong></p><ul><li>Eu armazeno os arquivos em <strong>&#x2F;img&#x2F;</strong>. <a href="https://img.weigshare.com/img/001.004_Directory.png">Imagem</a></li></ul><h3 id="Campos-opcionais-1"><a href="#Campos-opcionais-1" class="headerlink" title="Campos opcionais"></a>Campos opcionais</h3><p>■ Permissão dos arquivos enviados: public-read (leitura pública, recomendação oficial)</p><hr><h1 id="Perguntas-frequentes"><a href="#Perguntas-frequentes" class="headerlink" title="Perguntas frequentes"></a>Perguntas frequentes</h1><h2 id="O-upload-funciona-mas-a-imagem-nao-abre"><a href="#O-upload-funciona-mas-a-imagem-nao-abre" class="headerlink" title="O upload funciona, mas a imagem não abre"></a>O upload funciona, mas a imagem não abre</h2><p>Verifique:</p><ul><li>se o Bucket permite acesso público;</li><li>se o domínio personalizado está vinculado;</li><li>se a resolução DNS já entrou em vigor.</li></ul><h2 id="Aparece-AccessDenied"><a href="#Aparece-AccessDenied" class="headerlink" title="Aparece AccessDenied"></a>Aparece AccessDenied</h2><p>Verifique:</p><ul><li>se o Access Key ID está correto;</li><li>se o Secret Access Key está correto;</li><li>se o API Token tem permissão de leitura e escrita.</li></ul><h2 id="Aparece-SignatureDoesNotMatch"><a href="#Aparece-SignatureDoesNotMatch" class="headerlink" title="Aparece SignatureDoesNotMatch"></a>Aparece SignatureDoesNotMatch</h2><p>Verifique:</p><ul><li>se o Endpoint foi preenchido corretamente.</li></ul><h1 id="Resumo"><a href="#Resumo" class="headerlink" title="Resumo"></a>Resumo</h1><p>A pilha atual do meu 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>Se você procura uma solução de hospedagem de imagens estável para uso de longo prazo em um blog, PicList + Cloudflare R2 vale muito a 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>Guia para iniciantes para usar PicList com Cloudflare R2 como alojamento de imagens, com domínio próprio e distribuição através da CDN global.</summary>
    <title>Criar um alojamento de imagens rápido e gratuito com PicList + Cloudflare R2</title>
    <updated>2026-10-21T08:39:31.055Z</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="Laboratório" scheme="https://www.weigshare.com/tags/Laboratorio/"/>
    <category term="Análise química" scheme="https://www.weigshare.com/tags/Analise-quimica/"/>
    <category term="Normas" scheme="https://www.weigshare.com/tags/Normas/"/>
    <category term="Solução titulante padrão" scheme="https://www.weigshare.com/tags/Solucao-titulante-padrao/"/>
    <category term="Solução padrão" scheme="https://www.weigshare.com/tags/Solucao-padrao/"/>
    <content>
      <![CDATA[<h1 id="Porque-criei-esta-ferramenta"><a href="#Porque-criei-esta-ferramenta" class="headerlink" title="Porque criei esta ferramenta"></a>Porque criei esta ferramenta</h1><p>No trabalho de análise química, a tarefa não termina quando uma solução titulante é preparada e padronizada. Depois é preciso calcular concentrações, aplicar correções, comparar resultados paralelos e rever os dados finais. Fazer tudo manualmente demora tempo e, quando a quantidade de dados aumenta, também cresce o risco de erros de cálculo ou de revisão.</p><ul><li><p>Desenvolvi este sistema nos meus tempos livres. O projeto começou em abril e a primeira versão pronta para utilização real ficou concluída em novembro — mais de seis meses de trabalho e também a minha primeira aplicação de desktop com interface gráfica.</p></li><li><p>Durante o desenvolvimento aprendi Python e PyQt6 por conta própria e tratei sozinho do design, da lógica de cálculo, dos testes e da implementação. O QFluentWidgets foi usado para tornar a interface mais agradável no dia a dia.</p></li><li><p>Depois de entrar em utilização real, a ferramenta passou a poupar mais de uma hora de revisão por pessoa todas as semanas. Era a concretização de uma pequena ideia: passar meio ano a criar uma ferramenta para depois “recuperar” uma hora todas as semanas. 😆</p></li><li><p>Saí recentemente do meu emprego e finalmente tive tempo para organizar o projeto, por isso decidi publicá-lo como código aberto.</p></li></ul><p><strong><a href="https://www.weigshare.com/standard">Pré-visualização Web</a> ⬅</strong> Abrir</p><h1 id="Sistema-de-calculo-e-revisao-de-solucoes-padrao"><a href="#Sistema-de-calculo-e-revisao-de-solucoes-padrao" class="headerlink" title="Sistema de cálculo e revisão de soluções padrão"></a>Sistema de cálculo e revisão de soluções padrão</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>Um aplicativo de desktop para padronização, cálculo e revisão de soluções padrão em laboratório.</p><p>Ele oferece correção de temperatura, correção de bureta, quatro determinações paralelas por uma pessoa, oito determinações paralelas por duas pessoas e cálculo automático da amplitude relativa, aumentando a eficiência da gestão de soluções padrão.</p><img src="https://img.weigshare.com/img/002.StandardSolution_Review_System_Demo_GIF.gif" ><p>Após inserir os dados experimentais, o sistema conclui automaticamente o cálculo e a revisão. Baixe o <a href="https://github.com/weigefenxiang/StandardSolutionReviewSystem/releases">exe</a> para começar.</p><hr><h2 id="Funcionalidades"><a href="#Funcionalidades" class="headerlink" title="Funcionalidades"></a>Funcionalidades</h2><p>✅ Cálculo de correção de temperatura<br>✅ Ajuste da correção de bureta<br>✅ Cálculo automático da concentração da solução padrão</p><p>✅ Quatro determinações paralelas por uma pessoa<br>✅ Oito determinações paralelas por duas pessoas<br>✅ Cálculo da amplitude relativa<br>✅ Cálculo da concentração reportada</p><hr><h2 id="Solucoes-padrao-compativeis"><a href="#Solucoes-padrao-compativeis" class="headerlink" title="Soluções padrão compatíveis"></a>Soluções padrão compatíveis</h2><ul><li><p>Ácido clorídrico, hidróxido de sódio, ácido sulfúrico, permanganato de potássio, nitrato de prata, tiossulfato de sódio, ácido etilenodiaminotetracético (EDTA), cloreto de zinco, hidróxido de potássio em etanol, carbonato de sódio 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="Interface-do-software"><a href="#Interface-do-software" class="headerlink" title="Interface do software"></a>Interface do software</h2><h3 id="Interface-principal"><a href="#Interface-principal" class="headerlink" title="Interface principal"></a>Interface principal</h3><img src="https://img.weigshare.com/img/002.StandardSolution_Review_System_Demo.png" ><h4 id="Interface-antiga"><a href="#Interface-antiga" class="headerlink" title="Interface antiga"></a>Interface antiga</h4><p>A interface passou por várias iterações.</p><img src=https://img.weigshare.com/img/002.002.StandardSolution_Review_System_Demo_old.png ><table><thead><tr><th><strong>Entrada suportada</strong></th><th><strong>Gerado automaticamente</strong></th></tr></thead><tbody><tr><td>Massa da substância padrão</td><td>Volume real de titulação</td></tr><tr><td>Volume de titulante consumido</td><td>Quatro concentrações paralelas por uma pessoa</td></tr><tr><td>Correção de bureta</td><td>Oito concentrações paralelas por duas pessoas</td></tr><tr><td>Correção de temperatura</td><td>Amplitude relativa</td></tr><tr><td>Volume do branco</td><td>Concentração reportada</td></tr></tbody></table><hr><h2 id="Como-executar"><a href="#Como-executar" class="headerlink" title="Como executar"></a>Como executar</h2><h3 id="Versao-publicada"><a href="#Versao-publicada" class="headerlink" title="Versão publicada"></a>Versão publicada</h3><p>Baixe e execute o <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="Executar-pelo-codigo-fonte"><a href="#Executar-pelo-codigo-fonte" class="headerlink" title="Executar pelo código-fonte"></a>Executar pelo código-fonte</h2><details>    <summary>Clique para expandir</summary><h3 id="Ambiente-de-desenvolvimento"><a href="#Ambiente-de-desenvolvimento" class="headerlink" title="Ambiente de desenvolvimento"></a>Ambiente de desenvolvimento</h3><ul><li>Windows 11</li><li>Python 3.12</li><li>PyQt6</li><li>QFluentWidgets</li><li>SQLite</li><li>Nuitka (para empacotamento)</li></ul><h3 id="Instalar-dependencias"><a href="#Instalar-dependencias" class="headerlink" title="Instalar dependências"></a>Instalar dependências</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="Executar"><a href="#Executar" class="headerlink" title="Executar"></a>Executar</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="Licenca-de-codigo-aberto"><a href="#Licenca-de-codigo-aberto" class="headerlink" title="Licença de código aberto"></a>Licença de código aberto</h2><p>Este projeto é distribuído sob a licença GPL-3.0.</p><p>Ao usar, modificar ou redistribuir o projeto, siga os termos da licença GPL-3.0.</p><h2 id="Componentes-de-codigo-aberto-de-terceiros"><a href="#Componentes-de-codigo-aberto-de-terceiros" class="headerlink" title="Componentes de código aberto de terceiros"></a>Componentes de código aberto de terceiros</h2><p>O projeto usa:</p><ul><li>Python, PyQt6, QFluentWidgets, SQLite, Nuitka</li></ul><p>Obrigado a todos os desenvolvedores dos projetos de código aberto 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>Aplicação Windows desenvolvida com Python, PyQt6, QFluentWidgets e SQLite para cálculo e revisão de soluções padrão, incluindo correções de temperatura e bureta, resultados em paralelo e cálculo automático da amplitude relativa.</summary>
    <title>Sistema de cálculo e revisão de soluções padrão para laboratório</title>
    <updated>2026-10-21T08:39:31.055Z</updated>
  </entry>
</feed>
