Skip to content

[Bug]: JPEG-XL with 16-bit float breaks basic functionality #848

Closed
@Ambossmann

Description

@Ambossmann

Checklist

  • I am using an up-to-date version.
  • I have read the documentation.
  • I have searched existing issues.

TagStudio Version

Alpha 9.5.1

Operating System & Version

NixOS unstable; Windows 10

Description

When a JPEG-XL image that uses 16-bit float is in a TagStudio library, then the tile for the file doesn't show thumbnail, file type or file name.
Image
Additionally, the sidebar doesn't update when selecting the file, instead keeping its previous state.

This is likely caused by pillow-jxl-plugin not supporting 16-bit float at this point in time and throwing an error instead.

Expected Behavior

The missing thumbnail is expected. However, TagStudio should catch the error and proceed normally like with any other file for which no thumbnail could be generated. This means it should still show file name and type and the sidebar should also work as usual.

Steps to Reproduce

  1. Add a JPEG-XL image using 16-bit float into a library
  2. Observe broken state

Logs

Log ouput
2025-03-08 17:36:43 [info     ] [FFMPEG] Using FFprobe location: ffprobe
2025-03-08 17:36:43 [info     ] [FFMPEG] Using FFmpeg location: ffmpeg
2025-03-08 17:36:43 [info     ] [ResourceManager] Resources Registered: count=27
qt.multimedia.symbolsresolver: Couldn't load pipewire-0.3 library
qt.multimedia.symbolsresolver: Couldn't resolve pipewire-0.3 symbols
2025-03-08 17:36:43 [info     ] [Config] Config File not specified, using default one filename=/home/user/.config/TagStudio/TagStudio.ini
2025-03-08 17:36:43 [info     ] [Config] Thumbnail cache size limit: 500 MB
qt.multimedia.ffmpeg: Using Qt multimedia with FFmpeg version 7.1 GPL version 3 or later
qt.multimedia.ffmpeg: Available HW decoding frameworks:
qt.multimedia.ffmpeg:      vaapi
qt.multimedia.ffmpeg:      vdpau
qt.multimedia.ffmpeg:      vulkan
qt.multimedia.ffmpeg: Available HW encoding frameworks:
qt.multimedia.ffmpeg:      vaapi
qt.multimedia.ffmpeg:      vdpau
qt.multimedia.ffmpeg:      vulkan
2025-03-08 17:36:45 [error    ] Path does not exist.           open_path=None
2025-03-08 17:36:45 [info     ] FFmpeg found: {self.ffmpeg}, FFprobe found: {self.ffprobe}
2025-03-08 17:36:50 [info     ] [Library] Opening SQLite Library connection_string=sqlite:////tmp/TestStudio/.TagStudio/ts_library.sqlite library_dir=PosixPath('/tmp/TestStudio')
2025-03-08 17:36:50 [info     ] [Library] DB_VERSION: 8       
2025-03-08 17:36:50 [info     ] [Library] Creating DB tables...
2025-03-08 17:36:50 [info     ] Directory scan time            duration=0.0051991939544677734 files_not_in_lib=[PosixPath('Test2.jxl')] files_scanned=2 path=PosixPath('/tmp/TestStudio')
2025-03-08 17:36:50 [warning  ] [PanelModal] add_callback not implemented for FileExtensionModal
2025-03-08 17:36:50 [info     ] finished counting (0 seconds) 
2025-03-08 17:36:50 [info     ] searching library              filter=FilterState(page_index=0, page_size=500, sorting_mode=<SortingModeEnum.DATE_ADDED: 'file.date_added'>, ascending=False, ast=None) query_full="SELECT DISTINCT entries.id, entries.folder_id, entries.path, entries.suffix, entries.date_created, entries.date_modified, entries.date_added \nFROM entries \nWHERE (entries.suffix NOT IN ('.json', '.xmp', '.aae')) ORDER BY entries.id DESC\n LIMIT 500 OFFSET 0"
2025-03-08 17:36:50 [info     ] SQL Execution finished (0 seconds)
2025-03-08 17:36:50 [info     ] items to render                count=1
2025-03-08 17:36:50 [info     ] [QtDriver] Loading Entries... 
2025-03-08 17:36:50 [info     ] [QtDriver] Building Filenames...
2025-03-08 17:36:50 [info     ] [QtDriver] Done! Processing ItemThumbs...
2025-03-08 17:36:50 [info     ] finished counting (0 seconds) 
2025-03-08 17:36:50 [info     ] searching library              filter=FilterState(page_index=0, page_size=500, sorting_mode=<SortingModeEnum.DATE_ADDED: 'file.date_added'>, ascending=False, ast=None) query_full="SELECT DISTINCT entries.id, entries.folder_id, entries.path, entries.suffix, entries.date_created, entries.date_modified, entries.date_added \nFROM entries \nWHERE (entries.suffix NOT IN ('.json', '.xmp', '.aae')) ORDER BY entries.id DESC\n LIMIT 500 OFFSET 0"
2025-03-08 17:36:50 [info     ] SQL Execution finished (0 seconds)
2025-03-08 17:36:50 [info     ] items to render                count=2
2025-03-08 17:36:50 [info     ] [QtDriver] Loading Entries... 
2025-03-08 17:36:50 [info     ] [QtDriver] Building Filenames...
2025-03-08 17:36:50 [info     ] [QtDriver] Done! Processing ItemThumbs...
2025-03-08 17:36:52 [info     ] [QtDriver] Selecting Items:    append=False bridge=False item_id=2
2025-03-08 17:36:52 [error    ] [Preview Panel] Error updating selection error=NotImplementedError('Float16 is not supported yet')
Traceback (most recent call last):
  File "/nix/store/dr40dhrzzji70h2ybg5dsdjwy7mz4iaz-TagStudio-9.5.1/lib/python3.12/site-packages/tagstudio/qt/widgets/preview_panel.py", line 152, in update_widgets
    stats: dict = self.thumb.update_preview(filepath, ext)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/dr40dhrzzji70h2ybg5dsdjwy7mz4iaz-TagStudio-9.5.1/lib/python3.12/site-packages/tagstudio/qt/widgets/preview/preview_thumb.py", line 353, in update_preview
    stats = self._update_image(filepath, ext)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/dr40dhrzzji70h2ybg5dsdjwy7mz4iaz-TagStudio-9.5.1/lib/python3.12/site-packages/tagstudio/qt/widgets/preview/preview_thumb.py", line 213, in _update_image
    image = Image.open(str(filepath))
            ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/hdssbyl1xhkvnixwgrqsfcfjg43yrd58-python3.12-pillow-11.1.0/lib/python3.12/site-packages/PIL/Image.py", line 3511, in open
    im = _open_core(fp, filename, prefix, formats)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/hdssbyl1xhkvnixwgrqsfcfjg43yrd58-python3.12-pillow-11.1.0/lib/python3.12/site-packages/PIL/Image.py", line 3499, in _open_core
    im = factory(fp, filename)
         ^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/hdssbyl1xhkvnixwgrqsfcfjg43yrd58-python3.12-pillow-11.1.0/lib/python3.12/site-packages/PIL/ImageFile.py", line 144, in __init__
    self._open()
  File "/nix/store/sxzv3wdk3bbrafdxmb0npzqpclsb4x7b-python3.12-pillow_jxl_plugin-1.3.2/lib/python3.12/site-packages/pillow_jxl/JpegXLImagePlugin.py", line 32, in _open
    self.jpeg, self._jxlinfo, self._data, icc_profile = self._decoder(self.fc)
                                                        ^^^^^^^^^^^^^^^^^^^^^^
NotImplementedError: Float16 is not supported yet
2025-03-08 17:36:55 [info     ] [QtDriver] Selecting Items:    append=False bridge=False item_id=1
2025-03-08 17:36:55 [warning  ] [FieldContainers] Updating Selection entry_id=1
2025-03-08 17:36:55 [info     ] [Library] Time it took to get entry: 0.01 seconds with_fields=True with_tags=True
2025-03-08 17:36:55 [info     ] [emit_badge_signals] Emitting  emit_on_absent=True tag_ids=set()
2025-03-08 17:36:55 [info     ] [QtDriver][update_badges] Updating ItemThumb badges add_tags=False badge_values={<BadgeType.ARCHIVED: 'Archived'>: False} origin_id=0
2025-03-08 17:36:55 [info     ] [QtDriver][update_badges] Updating ItemThumb badges add_tags=False badge_values={<BadgeType.FAVORITE: 'Favorite'>: False} origin_id=0
2025-03-08 17:49:40 [info     ] Closing Library...            
2025-03-08 17:49:40 [warning  ] [FieldContainers] Updating Selection entry_id=1
2025-03-08 17:49:40 [info     ] [Library] Time it took to get entry: 0 seconds with_fields=True with_tags=True
2025-03-08 17:49:40 [info     ] [emit_badge_signals] Emitting  emit_on_absent=True tag_ids=set()
2025-03-08 17:49:40 [info     ] [QtDriver][update_badges] Updating ItemThumb badges add_tags=False badge_values={<BadgeType.ARCHIVED: 'Archived'>: False} origin_id=0
2025-03-08 17:49:40 [info     ] [QtDriver][update_badges] Updating ItemThumb badges add_tags=False badge_values={<BadgeType.FAVORITE: 'Favorite'>: False} origin_id=0
2025-03-08 17:49:40 [info     ] [SHUTDOWN] Ending Thumbnail Threads...

Metadata

Metadata

Assignees

No one assigned

    Labels

    Priority: MediumAn issue that shouldn't be be saved for lastType: BugSomething isn't working as intendedType: UI/UXUser interface and/or user experience

    Type

    Projects

    Status

    ✅ Done

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions