Анимированный аватар

Это работает с баннерами профиля?

Что-то в скрипте установки install.sh нарушает пересборку Discourse, см. здесь.

Собирались установить этот плагин, но увидев этот комментарий, передумали, ха-ха

Проблема всё ещё актуальна. Закомментируйте часть с install.sh, выполните пересборку. Раскомментируйте её и снова выполните пересборку. Это работает. Странно.

Установка всё ещё глючит?

Нет, не для меня.

Вы пробовали установить это снова, не закомментировав это?

Я часто переустанавливаю Discourse.

Не уверен, в чём была проблема несколько месяцев назад. Возможно, это тоже было связано с загрузкой GeoIP, которая затем была заменена на локальные файлы.

1 лайк

Честно говоря, я сам не уверен, в чём была проблема — этот скрипт никак не связан с сообщённой ошибкой.

1 лайк

Здравствуйте, у меня возникает фатальная ошибка с этим плагином в последней версии Discourse (v2026.8.0-latest.1).

Когда пользователь пытается установить или обновить аватар, фронтенд возвращает общую ошибку 422 (Unprocessable Content), а Uppy логирует предупреждение о сети.

Проверка логов Sidekiq/Rails показывает, что плагин приводит к сбою в конвейере UploadCreator, так как он ищет ключ resize_animated, который, по всей видимости, отсутствует в текущем хэше оптимизации изображений.

Вот трейсбэк из /logs:

Job exception: key not found: "resize_animated"

/var/www/discourse/app/models/optimized_image.rb:336:in 'Hash#fetch'
/var/www/discourse/app/models/optimized_image.rb:336:in 'OptimizedImage.optimize'
/var/www/discourse/plugins/discourse-animated-avatars/lib/discourse_animated_avatars/optimized_image_extension.rb:9:in 'DiscourseAnimatedAvatars::OptimizedImageExtension::ClassMethods#resize_animated'
/var/www/discourse/plugins/discourse-animated-avatars/lib/discourse_animated_avatars/upload_creator_gifsicle_extension.rb:18:in 'DiscourseAnimatedAvatars::UploadCreatorGifsicleExtension#crop!'
/var/www/discourse/lib/upload_creator.rb:115:in 'block in UploadCreator#create_for'

Сообщите, если вам нужны какие-либо другие логи!

Я установил плагин и протестировал его с изображениями в форматах GIF и WebP (размером не более 200 пикселей), поэтому они не должны были масштабироваться. Однако при каждой попытке возникает ошибка key not found: "resize_animated", и мне не удаётся заставить его работать.

Плагин был установлен в соответствии с инструкцией. Я также следовал рекомендациям по post_exec.

1 лайк

Спасибо за сообщения об ошибках! Баг затрагивает только версии v2026.8 и новее. Я только что выпустил исправление, так что вы можете просто обновить плагин прямо сейчас.

3 лайка

Спасибо за быстрый фикс ошибки с ключом resize_animated. Эта часть решена, и я обновился до 29784ee (Discourse v2026.9.0-latest). Однако теперь я сталкиваюсь с новой, другой фатальной ошибкой в том же пути кода при установке/обновлении аватара.

Похоже, аргумент --crop сформирован неверно. Gifsicle ожидает --crop x,y+width+height (или x,y-x2,y2), но здесь указано только 0,49+399: пара x,y плюс одиночное +399, при этом вторая часть +height полностью отсутствует.

app.js:367 ℹ️ Discourse v2026.9.0-latest — https://github.com/discourse/discourse/commits/ed9f07d9f5 — Ember v6.10.1
uppy-upload.js:503  POST https://btt.community/uploads.json?client_id=f57abab8b5c64413a953f6c839424130 422 (Unprocessable Content)
(anonymous) @ fetcher.js:83
await in (anonymous)
_ @ fetcher.js:17
(anonymous) @ fetcher.js:86
(anonymous) @ index.js:81
(anonymous) @ index.js:227
(anonymous) @ TaskQueue.js:45
#i @ TaskQueue.js:92
add @ TaskQueue.js:73
#uploadLocalFile @ index.js:218
(anonymous) @ index.js:316
#uploadFiles @ index.js:297
(anonymous) @ index.js:345
#runUpload @ Uppy.js:1413
await in #runUpload
upload @ Uppy.js:1521
(anonymous) @ Uppy.js:523
setTimeout
#f @ Uppy.js:521
addFiles @ Uppy.js:672
addFiles @ uppy-upload.js:503
_run @ index.js:804
_join @ index.js:783
join @ index.js:605
join @ index.js:152
(anonymous) @ index.js:250
(anonymous) @ uploads.js:411
n @ uploads.js:410
uppy-upload.js:503 [Uppy] [05:34:13] This looks like a network error, the endpoint might be blocked by an internet provider or a firewall.
(anonymous) @ loggers.js:7
log @ Uppy.js:1277
(anonymous) @ Uppy.js:970
r @ index.js:131
(anonymous) @ index.js:33
emit @ Uppy.js:110
(anonymous) @ index.js:134
await in (anonymous)
(anonymous) @ index.js:227
(anonymous) @ TaskQueue.js:45
#i @ TaskQueue.js:92
add @ TaskQueue.js:73
#uploadLocalFile @ index.js:218
(anonymous) @ index.js:316
#uploadFiles @ index.js:297
(anonymous) @ index.js:345
#runUpload @ Uppy.js:1413
await in #runUpload
upload @ Uppy.js:1521
(anonymous) @ Uppy.js:523
setTimeout
#f @ Uppy.js:521
addFiles @ Uppy.js:672
addFiles @ uppy-upload.js:503
_run @ index.js:804
_join @ index.js:783
join @ index.js:605
join @ index.js:152
(anonymous) @ index.js:250
(anonymous) @ uploads.js:411
n @ uploads.js:410

2 лайка

Спасибо за быстрый ответ! Я снова попробовал с анимированным изображением в формате webp и увидел такой вывод:

gifsicle --colors=256 --crop 0,0+200 --resize-fit 288x288 --optimize=3 --output /tmp/RackMultipartID.webp /tmp/RackMultipartID.webp

Но изображение по-прежнему в формате png. Я что-то упускаю? Я сделал принудительную перезагрузку браузера на всякий случай, но неподвижное изображение так и осталось.

1 лайк

Я вообще не могу сменить аватарку. У меня уже стоит GIF-аватарка, и я пытался(а) заменить её на PNG, но появляется всплывающее окно с ошибкой, о которой я писал(а) в предыдущем сообщении, и аватарка не меняется.

Просто хочу отметить, что я с удовольствием готов помочь с тестированием любых обновлений, которые могут потребоваться этому плагину, чтобы он снова стал полностью функциональным.

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

Похоже, моё исправление выявило скрытый баг. Я обновила репозиторий с новым исправлением (и дополнительными тестами). Затронуты версии Discourse v2026.8 и новее.

Критическая ошибка и блокировка загрузки — это баг, который уже исправлен. Однако анимированные изображения WebP пока не поддерживаются. Плагин изначально был разработан для GIF, а другие форматы изображений остаются статичными. Поддержка анимированных WebP (и APNG) может быть добавлена в будущем.


1 лайк

Спасибо за исправление! Я только что протестировал его на своём инстансе (обновил до 012466a) — всё работает. Попробовал и .png, и .gif в качестве аватара, ошибок не было. С моей стороны всё в порядке.

4 лайка

Я также благодарю вас за обновление и подтверждаю, что всё работает идеально в формате gif.

2 лайка

Добавлена поддержка анимированных изображений в формате WebP, а также несколько удобных инструментов!

Теперь доступна настройка animated_gif_avatar_to_webp, которая автоматически преобразует анимированные GIF-аватары в WebP, значительно уменьшая общий размер файлов. Эта настройка работает при загрузке, поэтому существующие GIF-файлы остаются без изменений.

Когда animated_gif_avatar_to_webp включена, gifsicle и хук install.sh больше не нужны, так как новые GIF-аватары преобразуются в WebP с правильным соотношением сторон и обрезкой.

Администраторы также могут преобразовать существующие анимированные GIF-аватары в WebP с помощью rake-задачи bin/rake animated_avatars:gif_to_webp. Все используемые анимированные GIF-аватары будут преобразованы в WebP, и аватары будут заменены на версии с меньшим размером файла.

2 лайка