-
v0.2.7 Stable
released this
2026-04-15 00:03:22 +00:00 | 27 commits to main since this releasev0.2.7
Fixed
- Popout always reopened as floating even when tiled at close — Hyprland tiled state is now persisted and restored via
settiledon reopen - Video stutter on network streams —
cache_pause_initialwas blocking first frame, reverted cache_pause changes and kept larger demuxer buffer - Rubber band selection state getting stuck across interrupted drags
- LIKE wildcards in
search_library_metanot being escaped - Copy File to Clipboard broken in preview pane and popout; added Copy Image URL action
- Thumbnail cleanup and Post ID sort broken for templated filenames in library
- Save/unsave bookmark UX — no flash on toggle, correct dot indicators
- Autocomplete broken for multi-tag queries
- Search not resetting to page 1 on new query
- Fade animation cleanup crashing
FlowLayout.clear - Privacy toggle not preserving video pause state
- Bookmarks grid not refreshing on unsave
_cached_pathnot set for streaming videos- Standard icon column showing in QMessageBox dialogs
- Popout aspect lock for bookmarks now reads actual image dimensions instead of guessing
- GPU resource leak on Mesa/Intel drivers —
mpv_render_context_freenow runs with the owning GL context current (NVIDIA tolerated the bug, other drivers did not) - Popout teardown
AttributeErrorwhencentralWidget()orQApplication.instance()returnedNoneduring init/shutdown race - Category fetcher rejects XML responses containing
<!DOCTYPEor<!ENTITYbefore parsing, blocking XXE and billion-laughs payloads from user-configured sites - VRAM not released on popout close —
video_playernow drops the hwdec surface pool on stop and popout runs explicit mpv cleanup before teardown - Popout open animation was being suppressed by the
no_animaspect-lock workaround — first fit after open now lets Hyprland'swindowsIn/popinplay; subsequent navigation fits still suppress anim to avoid resize flicker - Thumbnail grid blanking out after Hyprland tiled resize until a scroll/click — viewport is now force-updated at the end of
ThumbnailGrid.resizeEventso the Qt Wayland buffer stays in sync with the new geometry - Library video thumbnails captured from a black opening frame — mpv now seeks to 10% before the first frame decode so title cards, fade-ins, and codec warmup no longer produce a black thumbnail (delete
~/.cache/booru-viewer/thumbnails/library/to regenerate existing entries)
Changed
- Uncached videos now download via httpx in parallel with mpv streaming — file is cached immediately for copy/paste without waiting for playback to finish
- Library video thumbnails use mpv instead of ffmpeg — drops the ffmpeg dependency entirely
- Save/Unsave from Library mutually exclusive in context menus, preview pane, and popout
- S key guard consistent with B/F behavior
- Tag count limits removed from info panel
- Ctrl+S and Ctrl+D menu shortcuts removed (conflict-prone)
- Thumbnail fade-in shortened from 200ms to 80ms
- Default demuxer buffer reduced to 50MiB; streaming URLs still get 150MiB
- Minimum width set on thumbnail grid
- Popout overlay hover zone enlarged
- Settings dialog gets an Apply button; thumbnail size and flip layout apply live
- Tab selection preserved on view switch
- Scroll delta accumulated for volume control and zoom (smoother with hi-res scroll wheels)
- Force Fusion widget style when no
custom.qssis present - Dark Fusion palette applied as fallback when no system Qt theme file (
Trolltech.conf) is detected; KDE/GNOME users keep their own palette - Behavior change: popout re-fits window to current content's aspect and resets zoom when leaving a tiled layout to a different-aspect image or video; previously restored the old floating geometry with the wrong aspect lock
Performance
- Thumbnails re-decoded from disk on size change instead of holding full pixmaps in memory
- Off-screen thumbnail pixmaps recycled (decoded on demand from cached path)
- Lookup sets cached across infinite scroll appends; invalidated on bookmark/save
auto_evict_cachethrottled to once per 30s- Stale prefetch spirals cancelled on new click
- Single-pass directory walk in cache eviction functions
- GTK dialog platform detection cached instead of recreating Database per call
Removed
- Dead code:
core/images.py TODO.md- Unused imports across
main_window,grid,settings,dialogs,sites,search_controller,video_player,info_panel - Dead
midvariable ingrid.paintEvent, deadget_connection_logimport insettings._build_network_tab
Downloads
- Popout always reopened as floating even when tiled at close — Hyprland tiled state is now persisted and restored via