Problema com geração de miniaturas e renderização de markdown

Olá,

Desde a versão mais recente do Discourse 2.5.0, estou com problemas na geração de miniaturas.
Parece que as miniaturas agora são geradas pelo núcleo, o que resultou na exclusão de todas as miniaturas.
Tentei várias operações para restaurá-las e vou explicar as situações em que não funciona.

Nota: provavelmente há um bom motivo para essa mudança, mas seria muito bem-vindo não introduzir uma mudança repentina de comportamento que quebre funcionalidades sem oferecer uma maneira de se preparar, com um guia de atualização e/ou uma opção para aderir a essa mudança, por favor. :confounded:

Contexto

  • Discourse 2.5.0 beta4 (faeb5793ba)
  • Plugin Topic List Preview 4.4.0
  • Posts do WP-Discourse publicados como estão (HTML completo) nos tópicos do Discourse (primeira mensagem).

Sobre o conteúdo de um post, este é um exemplo (formatado para você):

Conteúdo

HTML da imagem como código para conveniência:

<img
        width="150"
        height="84"
        src="https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-150x84.jpg"
        class="attachment-thumbnail size-thumbnail"
        alt=""
        srcset="
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-150x84.jpg     150w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-300x169.jpg    300w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-1200x675.jpg  1200w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-1536x864.jpg  1536w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-2048x1152.jpg 2048w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-788x443.jpg    788w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית.jpg           1280w
        "
        sizes="(max-width: 150px) 100vw, 150px"
    />
<div data-wp>
    <a
        href="https://www.banggood.com/Xiaomi-Redmi-Router-AC2100-2033Mbps-2_4G-5G-Dual-Band-Wireless-Router-6High-Gain-Antennas-128MB-OpenWRT-WiFi-Router-p-1614038.html"
        target="_blank"
        ><img src="https://zuzu.deals/wp-content/uploads/2020/01/5e3128b4e5da7-150x150.jpg"/>
    </a>
    <div>
        <div data-buy>
            <a
                href="https://www.banggood.com/Xiaomi-Redmi-Router-AC2100-2033Mbps-2_4G-5G-Dual-Band-Wireless-Router-6High-Gain-Antennas-128MB-OpenWRT-WiFi-Router-p-1614038.html"
                target="_blank">קנייה
            </a>
            <span data-clipboard-text="BG38b2ac" data-coupon>BG38b2ac</span><i></i>
        </div>
        <div data-price>$43.99</div>
    </div>
</div>
<hr />
<p>
    <small>
        &nbsp;פורסם ב:&nbsp;<a href="https://zuzu.deals/%d7%a7%d7%95%d7%a4%d7%95%d7%9f-%d7%91%d7%9c%d7%a2%d7%93%d7%99-%d7%a8%d7%90%d7%95%d7%98%d7%a8-%d7%97%d7%96%d7%a7-%d7%95%d7%97%d7%93%d7%a9-%d7%a9%d7%9c-%d7%a9%d7%99%d7%90%d7%95%d7%9e%d7%99-xiaomi-re-2/"></a>
    </small>
</p>
<br />
<p>נעים להכיר!</p>

Antes da atualização do Discourse

O TLP funcionava sempre bem em nossas imagens externas, tanto na criação quanto na edição de tópicos.
No entanto, tínhamos a opção download remote images to local (baixar imagens remotas para local) desativada devido a um problema de markdown.

Problema de renderização de markdown

Este não é o principal problema e ainda ocorre após a atualização do Discourse; aqui está uma explicação.
Quando o Discourse baixa e substitui o HTML de uma imagem pela sua sintaxe markdown – no nosso contexto, isso resulta em:

[...]<a href="<link_here>" target="_blank">![|150x150](upload://l0iarnA6SPVAyJN5l7pnQxZnPvE.jpeg)</a>[...]

O Discourse não consegue renderizar a imagem

Imagem

image

Para corrigir o problema, você precisa de pelo menos uma linha em branco acima:

[...]<a href="<link_here>" target="_blank">

![|150x150](upload://l0iarnA6SPVAyJN5l7pnQxZnPvE.jpeg)</a>[...]
Imagem

Seria possível permitir a renderização de imagens markdown cercadas por HTML, por favor?

Após a atualização do Discourse

Configurações

A partir disso, me disseram para rebakear todos os posts para baixar a imagem. E é aí que fica estranho.

  1. rake posts:rebake não teve muito efeito (pelo menos não na primeira mensagem de um tópico, mas acionou muitos PullHotlinkedImages).
    1.1. Observando alguns tópicos, achei que o HTML da imagem com atributos class ou srcset fosse a causa, então tentei normalizar todas as imagens com o seguinte código (não sei Ruby) – Isso ajudou em alguns tópicos.
    1.2. No entanto, devido ao problema de markdown, precisei adicionar quebras de linha para corrigir. – Pelo menos para esses tópicos, a miniatura funcionou.
Código
Post.where(post_number: 1)
    .where("raw LIKE '%<img%/>%'")
    .each 
        do |post|
            post.raw.gsub!(/<img[^>]+(src="[^"]+")[^>]+\/>/, "<img \\1 />")
            post.save!(validate: true)
            post.rebake!  
        end

Post
  .where(post_number: 1)
  .where("raw LIKE '%upload://%'").each 
     do |post|  
       post.raw.gsub!(/(!\[.*upload:\/\/.*\))/, "\n\n\\1") 
       post.save!(validate: false); 
       post.rebake! 
     end
  1. Editar manualmente (sem alterar o conteúdo, apenas salvando) um tópico ignorado funciona na maioria das vezes. A imagem é baixada.
    2.1. Alguns tópicos permanecem ignorados mesmo após uma edição. Posso ver que PullHotlinkedImages é acionado, mas nenhuma imagem é baixada. (como com este HTML <img src="https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-150x84.jpg" />, link)
  2. Após normalizar e ver que uma edição pode ajudar a baixar a imagem, tentei executar rake posts:rebake várias vezes – sem efeitos.
  3. Então tentei usar o console do rails de forma semelhante ao código acima, mas com id de tópico específico e apenas post.rebake!sem efeitos.
  4. Nem todas as imagens de um tópico são sempre baixadas..
  5. @Canapin me indicou Download remote images from older posts? - #3 by vinothkannans ; tentando rebakear todos os posts agora. – Não ajudou, infelizmente.

É simplesmente insano por que algumas imagens funcionam e outras não. Não acho que seja uma questão de critério. As configurações de imagem estão altas. Realmente não entendo qual é a lógica por trás disso, parece aleatório.

Atualmente, ainda temos muitas miniaturas faltando. Provavelmente a maioria delas pode ser corrigida manualmente com edição/salvamento, mas isso não é viável. Estou fazendo isso para um cliente e já perdi muito tempo tentando corrigir o problema.

Não me importo em ter imagens carregadas como miniaturas, mas:

  • Você pode me dizer se há razões específicas pelas quais as imagens não são baixadas? Existem configurações que podem ajudar? Precisamos de algo? Como depurar?
  • Existe uma maneira de forçar o download delas de forma semelhante à edição/salvamento pelo console?
  • Vocês podem permitir a renderização de imagens markdown se estiverem cercadas por HTML?

Espero ter sido preciso o suficiente na descrição do problema.

Obrigado antecipadamente por qualquer ajuda e solução.

Olá @Arkshine, lamentamos saber que você está enfrentando problemas aqui. Infelizmente, não podemos garantir compatibilidade com todos os plugins de terceiros, especialmente quando eles substituem comportamentos principais além do escopo das nossas APIs de plugin. A partir de agora, o TLP deverá reduzir o número de substituições principais que utiliza e, esperamos, a estabilidade melhorará.

Observe que agora também temos nossa solução oficial para exibir miniaturas, que é implementada inteiramente usando nossas APIs de plugin suportadas.

Você está correto ao dizer que as miniaturas principais funcionam apenas para imagens locais. No final das contas, o TLP também estava baixando imagens e armazenando-as localmente, então a diferença agora é que estamos fazendo tudo de forma consistente usando o job pull_hotlinked_images.

Parece que temos alguns problemas a resolver aqui. Acredito que o melhor seja separá-los para não perdermos nada. Ao ler sua postagem, vejo duas coisas:

Baixar imagens remotas não deve resultar em HTML/Markdown inválido, então tentaremos corrigir isso. Por favor, abra um tópico bug, me mencione e analisaremos o caso.

Novamente, caracteres especiais não devem quebrar as imagens aqui. Por favor, abra outro tópico bug e daremos uma olhada.

Obrigado pela resposta, @david.

Sobre o markdown, links com caracteres especiais, tudo bem. Obrigado.


Mas, em última análise, meu principal problema ainda é fazer o Discourse forçar o download da imagem. O problema do markdown pode ser resolvido pelo console, e nem todos os links têm caracteres especiais. Ainda temos muitos tópicos sem miniaturas. É sobre isso que estou pedindo ajuda.

Por exemplo, este aqui não tem caracteres especiais. E, a menos que eu clique em Salvar Edição, a imagem não é baixada através da reconstrução pelo console, nem usando o link Reconstruir HTML.

Existe algum comando do Rails ou outra coisa que possa forçar o Discourse a baixar a imagem da mesma forma que você faria ao Salvar Edição?


Na verdade, tentei usar o componente, mas não funcionou bem. Mas vou tentar novamente assim que os problemas das miniaturas forem resolvidos.

É um site de afiliados?

Isso é estranho. Tenho uma ideia: esses posts foram criados pelo usuário do sistema? Ou pelo Discobot?

A maioria deles é um usuário administrador normal. Esses tópicos são criados por meio da API do WP Discourse.

Por exemplo, este aqui:

@Arkshine, deveria haver um link ali?

Desculpe, eu estava trabalhando com um exemplo enquanto testava algumas coisas, mas acionei o botão sem querer.

Dito isso, comecei a executar isso para ver se ajudaria (desculpe se isso ofender seus olhos!)

Post
  .joins(:topic)
  .where(post_number: 1)
  .where('topics.visible = true')
  .where('topics.deleted_at IS NULL')
  .each do |post| 
     post.baked_version = nil
     post.save!(validate: false)
     post.rebake!
   end

Demorou algum tempo. Vi bastante Jobs::PullHotlinkedImages.
Mas parece que não ajudou muito.

Se você verificar um tópico específico, por exemplo, este tópico.

No console, posso ver que ele dispara Jobs::ProcessPost, mas não Jobs::PullHotlinkedImages.

[106] pry(main)> Post.update_all(baked_version: nil)
=> 38808

[107] pry(main)> Post.where(post_number: 1, topic_id: 64215).each do |post| post.rebake!; end
=> [#<Post:0x0000557fe01f2fd8
  id: 79717,
  user_id: 3,
  topic_id: 64215,
  post_number: 1,
  raw:
   "<div data-wp><a href=\"https://www.mooki.co.il/gaming/hbilvt-giiming-mwtlmvt/mvwb-giiming-khvl-sparkfox-wvlhn-giiming-mqcvei-lumi-whvr-2\" target=\"_blank\"><img src=\"https://zuzu.deals/wp-content/uploads/2020/05/5ebcf97155cd2-150x150.png\" /></a><div><div data-buy><a href=\"https://www.mooki.co.il/gaming/hbilvt-giiming-mwtlmvt/mvwb-giiming-khvl-sparkfox-wvlhn-giiming-mqcvei-lumi-whvr-2\" target=\"_blank\">Compra</a><span data-clipboard-text=\"GLA679\" data-coupon>GLA679</span><i></i></div><div data-price>₪679 <span data-old-price>₪1378</span></div></div></div><hr /><p><small>&nbsp;Publicado em:&nbsp;<a href=\"https://zuzu.deals/%d7%91%d7%9c%d7%a2%d7%93%d7%99-%d7%95%d7%91%d7%9e%d7%97%d7%99%d7%a8-%d7%97%d7%98%d7%99%d7%a4%d7%94-%d7%9e%d7%95%d7%a9%d7%91-%d7%92%d7%99%d7%99%d7%9e%d7%99%d7%a0%d7%92-%d7%90%d7%93%d7%95%d7%9d-spark/\"></a></small></p><br><p><img src=\"https://www.mooki.co.il/pub/media/catalog/product/cache/0f831c1845fc143d00d6d1ebc49f446a/_/s/_sparkfox_k1_5_.png\" /></p>\n<p style=\"text-align: center;\">Seja você um gamer ou alguém que trabalha e fica sentado o dia todo e as costas já estão gritando por uma cadeira melhor, aqui está mais uma oferta exclusiva por um preço de assalto!\u003cbr />\nCadeira gamer confortável, fones de ouvido gamer e entrega rápida grátis, com garantia do importador oficial &#8211; apenas por 679₪!!!</p>\n<p style=\"text-align: center;\">Use no checkout o cupom exclusivo &#8211; <strong>GLA679</strong></p>\n<div> <img src=\"https://zuzu.deals/wp-content/uploads/2020/05/90902-801-09_2_1.jpg\" /></div>\n<div>\n<h3 style=\"text-align: center;\">Cadeira Gamer Profissional SPARKFOX GC60P</h3>\n</div>\n<div>Cadeira gamer com design especial para jogos de computador, oferecendo conforto máximo ao usuário</div>\n<div>\n<ul>\n<li>Cadeira com encosto alto</li>\n<li>Conforto máximo durante longas sessões de jogo</li>\n<li>Par de almofadas de apoio para pescoço e lombar</li>\n<li>Tipo de material: espuma moldada</li>\n<li>Tipo de estrutura: metal</li>\n<li>Material: couro com fibras de carbono</li>\n<li>Apoios de braço: ajustáveis para cima/baixo</li>\n<li>Tipo de mecanismo: borboleta</li>\n<li>Tipo de elevação: hidráulica Classe 4</li>\n<li>Faixa do encosto: 90°-180°</li>\n<li>Tipo de base: náilon</li>\n<li>Material das rodas: náilon</li>\n<li>Capacidade de carga: até 150 kg</li>\n<li>Garantia: 1 ano</li>\n</ul>\n<div><strong>Dimensões</strong></div>\n<div>\n<ul>\n<li>Largura: 67 cm</li>\n<li>Profundidade: 67 cm</li>\n<li>Altura ajustável: 124-132 cm</li>\n</ul>\n<h3></h3>\n<p><img src=\"https://zuzu.deals/wp-content/uploads/2020/05/90902-802-08_3_1.jpg\" /></p>\n<h3 style=\"text-align: center;\">Fones de Ouvido Gamer SPARKFOX K1</h3>\n<div>Fones de ouvido gamer com design especial para conforto máximo na audição e fala e cancelamento de ruído de fundo</div>\n<div>\n<ul>\n<li>Compatíveis com a maioria das consoles disponíveis no mercado</li>\n<li>Áudio e gerenciamento de chamadas em telefones e computadores portáteis</li>\n<li>Controle de volume localizado no cabo do fone para fácil acesso</li>\n<li>Áudio excelente de drivers grandes de 50 mm</li>\n<li>Controles de volume e mute</li>\n<li>Almofadas auriculares grandes e acolchoadas para máximo conforto</li>\n<li>Arco da cabeça ajustável para ajuste perfeito à sua cabeça</li>\n<li>Conexão direta à saída de fone de 3,5 mm</li>\n</ul>\n</div>\n<div>Inclui adaptador especial para conectar os fones a um computador desktop via divisor de 3,5 mm para 2 saídas de 3,5 mm</div>\n</div>\n</div>\n<p>&nbsp;</p>\n<div data-custom-html=\"\"></div>",
  cooked:
   "<div data-wp=\"\">\n<a href=\"https://www.mooki.co.il/gaming/hbilvt-giiming-mwtlmvt/mvwb-giiming-khvl-sparkfox-wvlhn-giiming-mqcvei-lumi-whvr-2\" target=\"_blank\"><img src=\"https://zuzu.deals/wp-content/uploads/2020/05/5ebcf97155cd2-150x150.png\"></a><div>\n<div data-buy=\"\">\n<a href=\"https://www.mooki.co.il/gaming/hbilvt-giiming-mwtlmvt/mvwb-giiming-khvl-sparkfox-wvlhn-giiming-mqcvei-lumi-whvr-2\" target=\"_blank\">Compra</a><span data-clipboard-text=\"GLA679\" data-coupon=\"\">GLA679</span><i></i>\n</div>\n<div data-price=\"\">₪679 <span data-old-price=\"\">₪1378</span>\n</div>\n</div>\n</div><hr><p><small> Publicado em: <a href=\"https://zuzu.deals/%d7%91%d7%9c%d7%a2%d7%93%d7%99-%d7%95%d7%91%d7%9e%d7%97%d7%99%d7%a8-%d7%97%d7%98%d7%99%d7%a4%d7%94-%d7%9e%d7%95%d7%a9%d7%91-%d7%92%d7%99%d7%99%d7%9e%d7%99%d7%a0%d7%92-%d7%90%d7%93%d7%95%d7%9d-spark/\"></a></small></p><br><p><img src=\"https://www.mooki.co.il/pub/media/catalog/product/cache/0f831c1845fc143d00d6d1ebc49f446a/_/s/_sparkfox_k1_5_.png\"></p>\n<p>Seja você um gamer ou alguém que trabalha e fica sentado o dia todo e as costas já estão gritando por uma cadeira melhor, aqui está mais uma oferta exclusiva por um preço de assalto!<br>\nCadeira gamer confortável, fones de ouvido gamer e entrega rápida grátis, com garantia do importador oficial – apenas por 679₪!!!</p>\n<p>Use no checkout o cupom exclusivo – <strong>GLA679</strong></p>\n<div> <img src=\"https://zuzu.deals/wp-content/uploads/2020/05/90902-801-09_2_1.jpg\">\n</div>\n<div>\n<h3>Cadeira Gamer Profissional SPARKFOX GC60P</h3>\n</div>\n<div>Cadeira gamer com design especial para jogos de computador, oferecendo conforto máximo ao usuário</div>\n<div>\n<ul>\n<li>Cadeira com encosto alto</li>\n<li>Conforto máximo durante longas sessões de jogo</li>\n<li>Par de almofadas de apoio para pescoço e lombar</li>\n<li>Tipo de material: espuma moldada</li>\n<li>Tipo de estrutura: metal</li>\n<li>Material: couro com fibras de carbono</li>\n<li>Apoios de braço: ajustáveis para cima/baixo</li>\n<li>Tipo de mecanismo: borboleta</li>\n<li>Tipo de elevação: hidráulica Classe 4</li>\n<li>Faixa do encosto: 90°-180°</li>\n<li>Tipo de base: náilon</li>\n<li>Material das rodas: náilon</li>\n<li>Capacidade de carga: até 150 kg</li>\n<li>Garantia: 1 ano</li>\n</ul>\n<div><strong>Dimensões</strong></div>\n<div>\n<ul>\n<li>Largura: 67 cm</li>\n<li>Profundidade: 67 cm</li>\n<li>Altura ajustável: 124-132 cm</li>\n</ul>\n<h3></h3>\n<p><img src=\"https://zuzu.deals/wp-content/uploads/2020/05/90902-802-08_3_1.jpg\"></p>\n<h3>Fones de Ouvido Gamer SPARKFOX K1</h3>\n<div>Fones de ouvido gamer com design especial para conforto máximo na audição e fala e cancelamento de ruído de fundo</div>\n<div>\n<ul>\n<li>Compatíveis com a maioria das consoles disponíveis no mercado</li>\n<li>Áudio e gerenciamento de chamadas em telefones e computadores portáteis</li>\n<li>Controle de volume localizado no cabo do fone para fácil acesso</li>\n<li>Áudio excelente de drivers grandes de 50 mm</li>\n<li>Controles de volume e mute</li>\n<li>Almofadas auriculares grandes e acolchoadas para máximo conforto</li>\n<li>Arco da cabeça ajustável para ajuste perfeito à sua cabeça</li>\n<li>Conexão direta à saída de fone de 3,5 mm</li>\n</ul>\n</div>\n<div>Inclui adaptador especial para conectar os fones a um computador desktop via divisor de 3,5 mm para 2 saídas de 3,5 mm</div>\n</div>\n</div>\n<p> </p>\n<div data-custom-html=\"\"></div>",
  created_at: Qui, 14 mai 2020 07:55:31 UTC +00:00,
  updated_at: Ter, 26 mai 2020 14:56:16 UTC +00:00,
  reply_to_post_number: nil,
  reply_count: 0,
  quote_count: 0,
  deleted_at: nil,
  off_topic_count: 0,
  like_count: 0,
  incoming_link_count: 2,
  bookmark_count: 0,
  score: 10.8,
  reads: 4,
  post_type: 1,
  sort_order: 1,
  last_editor_id: -1,
  hidden: false,
  hidden_reason_id: nil,
  notify_moderators_count: 0,
  spam_count: 0,
  illegal_count: 0,
  inappropriate_count: 0,
  last_version_at: Qui, 14 mai 2020 09:19:26 UTC +00:00,
  user_deleted: false,
  reply_to_user_id: nil,
  percent_rank: 0.0,
  notify_user_count: 0,
  like_score: 0,
  deleted_by_id: nil,
  edit_reason: nil,
  word_count: 939,
  version: 3,
  cook_method: 1,
  wiki: false,
  baked_at: Ter, 26 mai 2020 16:59:49 UTC +00:00,
  baked_version: 2,
  hidden_at: nil,
  self_edits: 2,
  reply_quoted: false,
  via_email: false,
  raw_email: nil,
  public_version: 3,
  action_code: nil,
  image_url: "https://zuzu.deals/wp-content/uploads/2020/05/5ebcf97155cd2-150x150.png",
  locked_by_id: nil,
  image_upload_id: nil>]

Se eu Salvar Edição a partir do editor:

Vejo corretamente image

Depois posso ver que a imagem foi baixada:

Ah, entendi. O problema aqui é

Porque temos essa lógica antes de agendar a extração de imagens hotlinked:

Isso foi projetado para evitar um loop infinito de agendamento de jobs de pull_hotlinked_image. Mas talvez precisemos melhorar essa lógica. Você poderia verificar o histórico de revisões de um desses posts e ver por que ele foi editado pela última vez pelo sistema?

Para este tópico:

  1. image
  2. image (mudança de categoria)
  3. image (Eu Salvar Edição apenas)
  4. image (sistema substituindo imagem por markdown)

Então, acho que é devido à mudança de categoria?

Sim, isso explicaria! Como solução de curto prazo, você pode executar manualmente o trabalho de buscar imagens vinculadas externamente fazendo algo como:

Jobs.enqueue_in(10, :pull_hotlinked_images, post_id: post.id)

No entanto, precisamos de uma solução melhor aqui. Vou adicionar isso à minha lista de tarefas.

Incrível. Vou tentar isso!

EDIT:

Só para confirmar, o comando ajudou muito. Agora, a maioria das imagens voltou. Obrigado novamente!

Ainda há casos extremos não processados, como imagens com caracteres especiais ou tópicos em que as imagens são marcadas como quebradas, mas não estão (um Rebuild HTML as corrige, depois Salvar edição para baixá-las). Se a #9890 for mesclada e uma correção para markdown for feita, provavelmente resolverá tudo.

Acabei de fundir esta correção para edições de system-user:

Acho que já separamos todos os outros problemas em tópicos distintos, mas se tivermos perdido algo, fique à vontade para abrir outro @Arkshine

A propósito, acabei de remover essa configuração. Não verificamos mais a idade da postagem ao buscar imagens com hotlink

cc @merefield