Использование изображений onebox для миниатюр тем

Почему API часто не может создать миниатюры, хотя загружаются изображения достаточного размера?

Например, если вы вставите это в исходный пост…

Этот onebox загружает изображение достаточного размера с размерами 690 x 465:

Тем не менее, миниатюра для темы не создана.

Это не зависит от размера изображения. В целом мы не берем изображения из однобоксов, так как во многих случаях они не подходят для миниатюр. Например, на Meta мы часто видим ссылки на репозитории GitHub, такие как

Никто не хочет, чтобы мое лицо увеличивали и использовали в качестве миниатюры темы :wink:

Ну, это очень специфично для Meta — у нас в сообществе нет ссылок на GitHub. Всё строится вокруг новостей, и для них следует использовать изображения из onebox. Это сильно ограничивает возможность использования миниатюр, и всё из-за этой проблемы с «лицами» на Meta. Есть ли какой-то способ обойти это и добавлять изображения из onebox? Думаю, многим сообществам безразличны «лица» GitHub.

Я определенно открыт к улучшениям в этой области. Я знаю, что @merefield также заинтересован в этой логике. Изменение потребуется в ядре, а не в плагине, поэтому я выделю это в отдельную тему.

Вот существующая логика:

Возможно, мы могли бы добавить класс .no-thumbnail к определенным типам onebox (например, GitHub), а затем научить Discourse игнорировать только их, сохраняя при этом изображения других onebox.

Я поставлю метку pr-welcome, но обязательно опишите план действий в этой теме перед началом существенной работы.

Это было бы здорово. В настоящее время 90% наших тем не имеют миниатюр, хотя они могли бы их иметь. И, как уже говорилось, этот вопрос на GitHub касается очень специфического пограничного случая для сообществ разработчиков, в то время как подавляющее большинство из нас не получает миниатюр для тем, которые определённо могли бы их иметь, именно из-за этого.

Поддерживаю!!! Для сценария использования агрегатора новостей или любой другой страницы с большим количеством репостов отсутствие релевантных миниатюр — это плохо.

Если вы не внедрите это в ближайшее время, есть ли какие-то идеи, как реализовать это на моей собственной сборке?

Да, в настоящее время это не рассматривается, так как «аватары» из GitHub могут отображаться в сообществах разработчиков, таких как Meta, но большинство сообществ не интересуются «аватарами» и хотят иметь как можно больше миниатюр, особенно когда доступны достаточно большие изображения для превью основной темы.

Пример от OP корректно отображается для превью тем, поскольку в плагине я использую более широкие критерии:

  def extract_images_for_post
    # все изображения с атрибутом src
    @doc.css("img[src]") -
    # минус эмодзи
    @doc.css("img.emoji") -
    # минус изображения внутри цитат
    @doc.css(".quote img") -
    # минус иконки сайтов из onebox
    @doc.css("img.site-icon") -
    # минус аватары из onebox
    @doc.css("img.onebox-avatar") # Более широкие критерии, чем в ядре Discourse
  end

источник: discourse-topic-previews-sidecar/lib/cooked_post_processor_edits.rb at f4332f9742a37827fd6364b2365c45524f1e7faf · merefield/discourse-topic-previews-sidecar · GitHub

Да, спасибо, @merefield, но мы используем только компонент темы от @david, а не TLP TC. Однако, если не будет никаких подвижек или варианта решения от @team по этому вопросу, я, скорее всего, воспользуюсь вашим оценочным кодом для исправления ядра.

Приведённый выше рендеринг сделан с помощью TLP TC, но да, я использую плагин бэкенда (тему ‘side car’), чтобы изменить Ruby :). https://github.com/merefield/discourse-topic-previews/tree/theme_sidecar Понимаю, что при хостинге это может быть невозможно.

Это абсолютно рассматривается, именно поэтому оно помечено тегом pr-welcome :smiley:

Ознакомьтесь с этим сообщением как отправной точкой для реализации.

@merefield Не могли бы вы, пожалуйста, оформить pull request? К сожалению, я совершенно новичок в Ruby. Или как проходит процесс оформления PR?

@david Я был бы очень рад иметь возможность убрать это переопределение из плагинов и согласен, что лучшее решение — реализовать это в ядре.

@Terrapop вот Contributing to Discourse development

Я мог бы помочь с этим прямо сейчас, но в данный момент завален работой по клиентским проектам.

Понял. Пока у меня простая среда разработки на Docker для создания простых плагинов и исправлений ядра. Буду ждать, пока кто-то не посмотрит на это и, вероятно, не применит исправление через вашу оценку в ближайшее время.

Правильная работа здесь — это не абстрактный проект, так как нужно будет изменить тестовые случаи и работать с двумя компонентами (Discourse и Discourse One-Box). Но это определенно стоит сделать!

Кстати, Ruby — это нечего бояться после Ember :wink:

Да, но, к сожалению, это определённо выходит за рамки моих текущих возможностей и компетенций.

В качестве обходного решения я часто вручную копирую и вставляю изображение в чат, а затем выбираю миниатюру оттуда.

Автоматический вариант был бы удобнее, возможно, с настройкой для указания доменов, с которых не следует брать миниатюры из одного блока (например, для покрытия случая с GitHub).

Согласен. Мы использовали сниппет от @merefield, чтобы переопределить ядро с помощью мини-плагина. Но команде разработчиков ядра было бы несложно предложить готовое решение из коробки. Отсутствие такой возможности только из-за того, что кто-то боится, что их аватары на GitHub станут видны, — это просто лень.

Я только что объединил FEATURE: Allow onebox images to be used as topic thumbnails (#12050) · discourse/discourse@b770c30 · GitHub, который позволяет выбирать изображения onebox в качестве миниатюр тем. Для onebox GitHub существует специальное исключение, и при необходимости мы можем добавить больше таких исключений.

(копировать @Terrapop @merefield)