Библиотека не отображает карточки игр, если в кэше обложек Steam есть битые/большие файлы #240

Closed
opened 2026-08-26 01:03:21 +00:00 by adem · 5 comments

ОС: CachyOS Linux KDE
PortProtonQt: 1.4.0 (AUR)

Проблема:
Спустя некоторое непродолжительное время использования PortProtonQt перестаёт отображать карточки игр. Предположительно — из-за битых обложек в кэше Steam (~/.steam/steam/appcache/librarycache/). После очистки кэша проблема исчезает.

Ошибка в терминале:

ValueError: Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK

Трассировка указывает на _is_portrait_image() → PIL.Image.open() при обработке обложки.

Дополнительно:
Проверка кэша обложек через Krokiet выявила ~20 битых файлов с ошибкой:

Format error decoding Jpeg: Error parsing image. Illegal start bytes: 8950

Причины:

  • часть обложек скопирована из Windows (возможно, уже повреждены);
  • одна битая обложка свежая (июнь) — возможно, повреждение при скачивании или записи.

Предложение:
В PortProtonQt добавить проверку целостности обложек и/или пропуск повреждённых файлов.


Приложен архив с обложками и результатами анализа Krokiet (~110 МБ), а также вывод терминала при запуске и журнал PortProtonQt.

**ОС:** CachyOS Linux KDE **PortProtonQt:** 1.4.0 (AUR) **Проблема:** Спустя некоторое непродолжительное время использования PortProtonQt перестаёт отображать карточки игр. Предположительно — из-за битых обложек в кэше Steam (`~/.steam/steam/appcache/librarycache/`). После очистки кэша проблема исчезает. **Ошибка в терминале:** ``` ValueError: Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK ``` Трассировка указывает на `_is_portrait_image()` → `PIL.Image.open()` при обработке обложки. **Дополнительно:** Проверка кэша обложек через Krokiet выявила ~20 битых файлов с ошибкой: > Format error decoding Jpeg: Error parsing image. Illegal start bytes: 8950 **Причины:** - часть обложек скопирована из Windows (возможно, уже повреждены); - одна битая обложка свежая (июнь) — возможно, повреждение при скачивании или записи. **Предложение:** В PortProtonQt добавить проверку целостности обложек и/или пропуск повреждённых файлов. --- Приложен архив с обложками и результатами анализа Krokiet (~110 МБ), а также вывод терминала при запуске и журнал PortProtonQt.
Author

Либо проблема глубже:

  1. Закрыл Steam
  2. Удалил кэш обложек через rm -rf ~/.steam/steam/appcache/librarycache/
  3. Запустил PortProtonQt -> карточки игр и обложки отображаются
  4. Закрыл PortProtonQt
  5. Запустил Steam, через некоторое время он скачал обложки в ~/.steam/steam/appcache/librarycache/
  6. Запустил PortProtonQt

Результат: обложки не отображаются, повторяется вывод в терминале, описанный выше.

DeepSeek вот такое говорит:

Похоже, вы столкнулись с ошибкой в PortProtonQt при попытке загрузить игры из Steam. Ошибка возникает при обработке PNG-изображений (вероятно, обложек игр), где библиотека Pillow (PIL) пытается распаковать слишком большой текстовый блок в PNG-файле.

ValueError: Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK

Причина: в одном из PNG-файлов текстовый блок zTXt превышает лимит Pillow (1 МБ).

Решение: перед Image.open(path) добавить:

from PIL import PngImagePlugin
PngImagePlugin.MAX_TEXT_CHUNK = 10 * 1024 * 1024

Либо проблема глубже: 1. Закрыл Steam 2. Удалил кэш обложек через _rm -rf ~/.steam/steam/appcache/librarycache/_ 3. Запустил PortProtonQt -> карточки игр и обложки отображаются 4. Закрыл PortProtonQt 5. Запустил Steam, через некоторое время он скачал обложки в ~/.steam/steam/appcache/librarycache/ 6. Запустил PortProtonQt **Результат:** обложки не отображаются, повторяется вывод в терминале, описанный выше. DeepSeek вот такое говорит: > Похоже, вы столкнулись с ошибкой в PortProtonQt при попытке загрузить игры из Steam. Ошибка возникает при обработке PNG-изображений (вероятно, обложек игр), где библиотека Pillow (PIL) пытается распаковать слишком большой текстовый блок в PNG-файле. > > `ValueError: Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK` > > Причина: в одном из PNG-файлов текстовый блок zTXt превышает лимит Pillow (1 МБ). > > **Решение: перед Image.open(path) добавить:** > > from PIL import PngImagePlugin > PngImagePlugin.MAX_TEXT_CHUNK = 10 * 1024 * 1024
Author

DeepSeek предложил рабочее решение, которое сработало у меня:

  • Открыть
    /usr/lib/python3.14/site-packages/portprotonqt/steam_api/utils.py
  • Найти строку
    with Image.open(path) as image:
  • Перед ней добавить:
from PIL import PngImagePlugin
PngImagePlugin.MAX_TEXT_CHUNK = 50 * 1024 * 1024  # 50 МБ

В результате должно получиться:

def _is_portrait_image(path: Path) -> bool:
    """Return True when image is taller than wide."""
    try:
        from PIL import PngImagePlugin
        PngImagePlugin.MAX_TEXT_CHUNK = 50 * 1024 * 1024  # 50 МБ
        
        with Image.open(path) as image:
            width, height = image.size
    except (OSError, UnidentifiedImageError) as e:
        logger.debug("Failed to read Steam cover dimensions %s: %s", path, e)
        return False
    return height > width

DeepSeek предложил рабочее решение, которое сработало у меня: - Открыть `/usr/lib/python3.14/site-packages/portprotonqt/steam_api/utils.py` - Найти строку `with Image.open(path) as image:` - Перед ней добавить: ``` from PIL import PngImagePlugin PngImagePlugin.MAX_TEXT_CHUNK = 50 * 1024 * 1024 # 50 МБ ``` В результате должно получиться: ``` def _is_portrait_image(path: Path) -> bool: """Return True when image is taller than wide.""" try: from PIL import PngImagePlugin PngImagePlugin.MAX_TEXT_CHUNK = 50 * 1024 * 1024 # 50 МБ with Image.open(path) as image: width, height = image.size except (OSError, UnidentifiedImageError) as e: logger.debug("Failed to read Steam cover dimensions %s: %s", path, e) return False return height > width ```
adem changed title from Библиотека не отображает карточки игр, если в кэше обложек Steam есть битые файлы to Библиотека не отображает карточки игр, если в кэше обложек Steam есть битые/большие файлы 2026-08-26 01:28:13 +00:00
Member

Исправил в 2d5336bc51, но оставлю ошибку открытой до 1.5

Исправил в https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt/commit/2d5336bc5151a5a3ccb2a5cab741cfb4e6f46be6, но оставлю ошибку открытой до 1.5
Author

Подтверждаю исправление, использовал артефакт AppImage отсюда https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt/actions/runs/3251

Видео, сначала показано поведение в пакете AppImage версии 1.4.1:

Подтверждаю исправление, использовал артефакт AppImage отсюда https://git.linux-gaming.ru/Linux-Gaming/PortProtonQt/actions/runs/3251 Видео, сначала показано поведение в пакете AppImage версии 1.4.1:
Member

Попало в 1.5.0

Попало в 1.5.0
Sign in to join this conversation.
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Linux-Gaming/PortProtonQt#240