-
v0.2.1 Stable
released this
2026-04-07 15:46:52 -05:00 | 404 commits to main since this release0.2.1
A theme + persistence + ricer-friendliness release. The whole stylesheet system was rebuilt around a runtime preprocessor with
@palette/${name}vars, every bundled theme was rewritten end-to-end, and 12 theme variants ship instead of 6. Lots of UI state now survives a restart, and Hyprland ricers get an explicit opt-out for the in-code window management.This release does not ship a fresh Windows installer — the previous v0.2.0 installer remains the latest installable binary. Run from source to get 0.2.1, or wait for the next release.
Changes since v0.2.0
Theming System
@palette/${name}preprocessor — themes start with a/* @palette */header block listing color slots, the body uses${name}placeholders that the app substitutes at load time. Edit the 17-slot palette block at the top of any theme to recolor the entire app — no hunting through hex literals.- All 6 bundled themes rewritten with comprehensive Fusion-style QSS covering every widget the app uses, every state (hover, focus, disabled, checked), every control variant
- Two corner-radius variants per theme —
*-rounded.qss(4px radius, default Fusion-style look) and*-square.qss(every border-radius stripped except radio buttons, which stay circular) - Native Fusion sizing — themed widgets shrunk to match Qt+Fusion defaults, toolbar row height is now ~23px instead of 30px, matching what
no-custom.qssrenders - Bundled themes — catppuccin-mocha, nord, gruvbox, solarized-dark, tokyo-night, everforest. 12 files total (6 themes × 2 variants)
QSS-Targetable Surfaces
Many things hardcoded in Python paint code can now be overridden from a
custom.qsswithout touching the source:- InfoPanel tag category colors —
qproperty-tagArtistColor,tagCharacterColor,tagCopyrightColor,tagSpeciesColor,tagMetaColor,tagLoreColor - ThumbnailWidget selection paint —
qproperty-selectionColor,multiSelectColor,hoverColor,idleColor(in addition to existingsavedColorandbookmarkedColor) - VideoPlayer letterbox color —
qproperty-letterboxColor. mpv paints the area around the video frame in this color instead of hardcoded black. Defaults toQPalette.Windowso KDE color schemes, qt6ct, Windows dark/light mode, and any system Qt theme automatically produce a matching letterbox - Popout overlay bars — translucent background for the floating top toolbar and bottom controls bar via the
overlay_bgpalette slot - Library count label states —
QLabel[libraryCountState="..."]attribute selector distinguishes "N files" / "no items match" / "directory unreachable" with QSS-controlled colors instead of inline red
Hyprland Integration
- Two opt-out env vars for users with their own windowrules:
BOORU_VIEWER_NO_HYPR_RULES=1— disables every in-code hyprctl dispatch except the popout's keep_aspect_ratio lockBOORU_VIEWER_NO_POPOUT_ASPECT_LOCK=1— independently disables the popout's aspect ratio enforcement
- Popout overlays themed — top toolbar and bottom controls bar now look themed instead of hardcoded translucent black, respect the
@paletteoverlay_bgslot - Popout video letterbox tracks the theme's bg color via the new
qproperty-letterboxColor - Wayland app_id set via
setDesktopFileName("booru-viewer")so compositors can target windows by class —windowrule = float, class:^(booru-viewer)$— instead of by the volatile window title
State Persistence
- Main window — geometry, floating mode, tiled mode (Hyprland)
- Splitter sizes — main splitter (grid vs preview), right splitter (preview vs dl_progress vs info panel)
- Info panel visibility
- Cache spinbox auto-derived dialog min height (no more clipping when dragging the settings dialog small)
- Popout window position, dimensions, and F11 fullscreen state restored via Hyprland floating cache prime
UX
- Live debounced search in bookmarks and library tabs — type to filter, press Enter to commit immediately. 150ms debounce on bookmarks (cheap SQLite), 250ms on library (filesystem scan)
- Search button removed from bookmarks toolbar (live search + Enter)
- Score field +/- buttons removed from main search bar — type the value directly
- Embedded preview video controls moved out of the overlay style and into the panel layout, sitting under the media instead of floating on top of it. Popout still uses the floating overlay
- Next-mode loop wraps to the start of the bookmarks/library list at the end of the last item instead of stopping
- Splitter handle margins — 4px breathing margin on either side so toolbar buttons don't sit flush against the splitter line
Performance
- Page-load thumbnails pre-fetch bookmarks + cache state into set lookups instead of N synchronous SQLite queries per page
- Animated PNG/WebP conversion off-loaded to a worker thread via
asyncio.to_threadso it doesn't block the asyncio event loop during downloads
Fixes
- Open in Browser/Default App on the bookmarks tab now opens the bookmark's actual source post (was opening unrelated cached files)
- Cache settings spinboxes can no longer be vertically clipped at the dialog's minimum size; spinboxes use Python-side
setMinimumHeight()to propagate floors up the layout chain - Settings dialog uses side-by-side
+/-buttons instead of QSpinBox's default vertical arrows for clearer interaction - Bookmarks tab BL Tag refreshes correctly when navigating bookmarked posts (was caching stale tags from the first selection)
- Popout F11 → windowed restores its previous windowed position and dimensions
- Popout flicker on F11 transitions eliminated via
no_animsetprop + deferred fit + dedupe of mpvvideo-paramsevents - Bookmark + saved indicator dots in the thumbnail grid: bookmark star on left, saved dot on right, both vertically aligned in a fixed-size box
- Selection border on thumbnail cells redrawn pen-aware: square geometry (no rounded corner artifacts), even line width on all sides, no off-by-one anti-aliasing seams
- Toolbar buttons in narrow slots no longer clip text (Bookmark/Unbookmark, Save/Unsave, BL Tag, BL Post, Popout, + Folder, Refresh) — all bumped to fit "Unbookmark" comfortably under the bundled themes' button padding
- Toolbar rows on bookmarks/library/preview panels now sit at a uniform 23px height matching the inputs/combos in the same row
- Score and Page spinbox heights forced to 23px via
setFixedHeightto work around QSpinBox reserving vertical space for arrow buttons even whensetButtonSymbols(NoButtons)is set - Library Open in Default App uses the actual file path instead of routing through
cached_path_for(which would return a hash path that doesn't exist for library files)
Cleanup
- Deleted unused
booru_viewer/gui/theme.py(222 lines of legacy stylesheet template that was never imported) - Deleted
GREEN/DARK_GREEN/DIM_GREEN/BG/BG_LIGHTetc constants frombooru_viewer/core/config.py(onlytheme.pyused them) - Removed dead missing-indicator code (
set_missing,_missing_color,missingColorQt Property, the unreachableif not filepath.exists()branch inlibrary.refresh) - Removed dead score
+/-buttons code path
28 files changed, ~8400 insertions / ~1200 deletions across 13 commits.
Downloads
-
v0.2.0 Stable
released this
2026-04-07 11:41:26 -05:00 | 418 commits to main since this release0.2.0
New: mpv video backend
- Replaced Qt Multimedia (QMediaPlayer/QVideoWidget) with embedded mpv via
python-mpv - OpenGL render API (
MpvRenderContext) for Wayland-native compositing — no XWayland needed - Proper hardware-accelerated decoding (
hwdec=auto) - Reliable aspect ratio handling — portrait videos scale correctly
- Proper end-of-file detection via
eof-reachedproperty observer instead of fragile position-jump heuristic - Frame-accurate seeking with
absolute+exactandrelative+exact keep-open=yesholds last frame on video end instead of flashing black- Windows: bundle
mpv-2.dllin PyInstaller build
New: popout viewer (renamed from slideshow)
- Renamed "Slideshow" to "Popout" throughout UI
- Toolbar and video controls float over media with translucent background (
rgba(0,0,0,160)) - Auto-hide after 2 seconds of inactivity, reappear on mouse move
- Ctrl+H manual toggle
- Media fills entire window — no layout shift when UI appears/disappears
- Video controls only show for video posts, hidden for images/GIFs
- Smart F11 exit: window sizes to 60% of monitor, maintaining content aspect ratio
- Window auto-resizes to content aspect ratio on navigation (height adjusts, position stays)
- Window geometry and fullscreen state persisted to DB across sessions
- Hyprland-specific: uses
hyprctl resizewindowpixel+setprop keep_aspect_ratioto lock window to content aspect ratio (works both floating and tiled) - Default site setting in Settings > General
New: preview toolbar
- Action bar above the preview panel: Bookmark, Save, BL Tag, BL Post, Popout
- Appears when a post is active, hidden when preview is cleared
- Save button opens folder picker menu (Unsorted / existing folders / + New Folder)
- Save/Unsave state shown on button text
- Bookmark/Unbookmark state shown on button text
- Per-tab button visibility: Library tab only shows Save + Popout
- All actions work from any tab (Browse, Bookmarks, Library)
- Blacklist tag and blacklist post show confirmation dialogs
- "Unsave from Library" only appears in context menu when post is saved
New: media type filter
- Replaced "Animated" checkbox with dropdown: All / Animated / Video / GIF / Audio
- Each option appends the corresponding booru tag to the search query
New: thumbnail cache limits
- Added "Max thumbnail cache" setting (default 500 MB)
- Auto-evicts oldest thumbnails when limit is reached
Improved: state synchronization
- Saving/unsaving updates grid thumbnail dots instantly (browse, bookmarks, library)
- Unbookmarking refreshes the bookmarks tab immediately
- Saving from browse/bookmarks refreshes the library tab when async save completes
- Library items set
_current_poston click so toolbar actions work correctly - Preview toolbar tracks bookmark and save state across all tabs
- Tab switching clears grid selections to prevent cross-tab action conflicts
- Bookmark state updates after async bookmark completes (not before)
Improved: infinite scroll
- Fixed missing posts when media type filters reduce results per page
- Local dedup set (
seen) prevents cross-page duplicates within backfill without pollutingshown_post_ids - Page counter only advances when results are returned, not when filtering empties them
- Backfill loop increased to 10 max pages with 300ms delay between API calls (first call instant)
Improved: pagination
- Status bar shows "(end)" when search returns fewer results than page size
- Prev/Next buttons hide when at page boundaries instead of just disabling
- Source URLs clickable in info panel, truncated at 60 chars for display
Improved: video controls
- Seek step changed from 5s to ~3s for
,and.keys ,and.seek keys now work in the main preview panel, not just popout- Translucent overlay style on video controls in both preview and popout
- Volume slider fixed at 60px to not compete with seek slider at small sizes
New: API retry logic
- Single retry with backoff on HTTP 429 (rate limit) and 503 (service unavailable)
- Retries on request timeout
- Respects
Retry-Afterheader (capped at 5s) - Applied to all API requests (search, get_post, autocomplete) across all four clients
- Downloads are not retried (large payloads, separate client)
Refactor: SearchState dataclass
- Consolidated 8 scattered search state attributes into a single
SearchStatedataclass - Eliminated all defensive
getattr/hasattrpatterns (8 instances) - State resets cleanly on new search — no stale infinite scroll data
Dependencies
- Added
python-mpv>=1.0 - Removed dependency on
PySide6.QtMultimediaandPySide6.QtMultimediaWidgets
Downloads
- Replaced Qt Multimedia (QMediaPlayer/QVideoWidget) with embedded mpv via
-
v0.1.9 Stable
released this
2026-04-05 22:17:13 -05:00 | 459 commits to main since this releaseChanges since v0.1.8
New Features
- Animated filter — checkbox to only show animated/video posts (server-side
animatedtag) - Start from page — page number field in top bar, jump to any page on search
- Post date — creation date shown in the info line
- Prefetch modes — Off / Nearby (4 cardinals) / Aggressive (3 row radius)
- Animated PNG/WebP — auto-converted to GIF for Qt playback
Improvements
- Thumbnail selection/hover box hugs the actual image content
- Video controls locked to bottom of preview panel
- Score filter uses +/- buttons instead of spinbox arrows
- Cache eviction triggers after infinite scroll page drain
- Combobox dropdown styling fixed on Windows dark mode
- Saved thumbnail size applied on startup
Fixes
- Infinite scroll no longer stops early from false exhaustion
- Infinite scroll triggers when viewport isn't full (initial load, splitter resize, window resize)
- Shared HTTP clients reset on startup (prevents stale event loop errors)
- Non-JSON API responses handled gracefully instead of crashing
Downloads
- Animated filter — checkbox to only show animated/video posts (server-side
-
v0.1.8 Stable
released this
2026-04-05 18:15:15 -05:00 | 503 commits to main since this releaseChanges since v0.1.7
Windows Installer
- Inno Setup installer — proper Windows installer with Start Menu shortcut, optional desktop icon, and uninstaller
--onedirbuild — instant startup, no temp extraction (was--onefile)optimize=2— stripped docstrings/asserts for smaller, faster bytecode- No UPX — trades disk space for faster launch (no decompression overhead)
noarchive— loose .pyc files, no zip decompression at startup
Performance
- Shared HTTP client for API calls — single TLS handshake for all Danbooru/Gelbooru/Moebooru requests
- E621 shared client — separate pooled client (custom User-Agent required)
- Site detection reuses shared client — no extra TLS for auto-detect
- Priority downloads — clicking a post pauses prefetch, downloads at full speed, resumes after
- Referer header per-request — fixes Gelbooru CDN returning HTML captcha pages
Infinite Scroll
- Auto-fill viewport — if first page doesn't fill the screen, auto-loads more
- Auto-load after drain — checks if still at bottom after staggered append finishes
- Content-aware trigger — fires when scrollbar max is 0 (no scroll needed)
Library
- Tag categories stored — saved as JSON in both library_meta and bookmarks DB
- Categorized tags in info panel — Library and Bookmarks show Artist/Character/Copyright etc.
- Tag search in Library — search box filters by stored tags
- Browse thumbnail copied on save — Library tab shows thumbnails instantly
- Unsave from Library in bookmarks right-click menu
Bugfixes
- Clear preview on new search
- Fixed diagonal grid navigation — viewport width used for column count
- Fixed Gelbooru CDN — Referer header passed per-request with shared client
- Crash guards — pop(0) on empty queue, bounds checks in API clients
- Page cache capped — 10 pages max in pagination mode
- Missing DB migrations — tag_categories column added to existing tables
- Tag click switches to Browse — clears preview and searches clicked tag
Download
booru-viewer-setup.exe— Windows installer. Installs to AppData, creates shortcuts, includes uninstaller. Data stored in%APPDATA%\booru-viewer\.Downloads
-
v0.1.7 Stable
released this
2026-04-05 17:56:09 -05:00 | 505 commits to main since this releaseChanges since v0.1.5
Infinite Scroll
- New mode — toggle in Settings > General, applies live
- Auto-loads more posts when scrolling to bottom
- Staggered loading — posts appear one at a time as thumbnails arrive
- Stops at end — gracefully handles API exhaustion
- Arrow keys at bottom don't break the grid
- Loading locked during drain to prevent multi-page burst
- Triggered one row from bottom for seamless experience
Page Cache & Deduplication
- Page results cached in memory — prev/next loads instantly
- Backfilled posts don't repeat on subsequent pages
- Page label updates on cached loads
Prefetch
- Ring expansion — prefetches in all 8 directions (including diagonals)
- Auto-start on search — begins from top of page immediately
- Re-centers on click — restarts spiral from clicked post
- Triggers on infinite scroll — new appended posts prefetch automatically
Clipboard
- Copy File to Clipboard — works in grid, preview, bookmarks, and library
- Ctrl+C shortcut — global shortcut via QShortcut
- QMimeData — uses same mechanism as drag-and-drop for universal compatibility
- Sets both file URL (for file managers) and image data (for Discord/image apps)
- Videos copy as file URIs
Slideshow
- Blacklist Tag button — opens categorized tag menu
- Blacklist Post button — blacklists current post
Blacklist
- In-place removal — blacklisting removes matching posts from grid without re-searching
- Preserves infinite scroll state
- Only clears preview when the blacklisted post is the one being viewed
UI Polish
- QProxyStyle dark arrows — spinbox/combobox arrows visible on all dark QSS themes
- Diagonal nav fix — column count reads viewport width correctly
- Status bar — shows result count with action confirmations
- Live settings — infinite scroll, library dir, thumbnail size apply without restart
Stability
- All silent exceptions logged
- Missing defaults added for fresh installs
- Git history cleaned
Download
booru-viewer.exe— Windows standalone (requires VP9 Video Extensions for WebM playback)Downloads
-
v0.1.6 Stable
released this
2026-04-05 15:40:16 -05:00 | 525 commits to main since this releaseChanges since v0.1.5
Infinite Scroll
- New mode — toggle in Settings > General: "Infinite scroll (replaces page buttons)"
- Hides prev/next buttons, auto-loads more posts when scrolling to bottom
- Posts appended to grid, deduped, blacklist filtered
- Stops gracefully when API runs out of results (shows "end")
- Arrow keys at bottom don't nuke the grid — page turn disabled in infinite scroll
- Applies live — no restart needed
Page Cache & Deduplication
- Page results cached — prev/next loads instantly from memory within a search session
- Post deduplication — backfilled posts don't repeat on subsequent pages
- Page label updates on cached page loads
Prefetch
- Ring expansion — prefetches in all 8 directions (up, down, left, right, diagonals)
- Auto-start on search — begins prefetching from top of page immediately
- Re-centers on click — clicking a post restarts the spiral from that position
- Triggers on infinite scroll — new appended posts start prefetching automatically
Slideshow
- Blacklist Tag button — opens categorized tag menu in slideshow toolbar
- Blacklist Post button — blacklists current post from slideshow toolbar
- Blacklisting clears slideshow — both preview and slideshow cleared when previewed post is blacklisted
Copy to Clipboard
- Ctrl+C — copies preview image to clipboard (falls back to cached file)
- Right-click grid — "Copy Image to Clipboard" option
- Right-click preview — "Copy Image to Clipboard" always available
Live Settings
- Most settings apply instantly — infinite scroll, library directory, thumbnail size, rating, score
- Removed "restart required" labels
Bugfixes
- Blacklisting doesn't clear unrelated preview — only clears when the previewed post matches
- Backfill confirmed working — debug logging added
- Status bar keeps result count — shows "N results — Loaded" instead of just "Loaded"
- Fixed README code block formatting and added ffmpeg back to Linux deps
Download
booru-viewer.exe— Windows standalone (requires VP9 Video Extensions for WebM playback)Downloads
-
v0.1.5 — Stable Stable
released this
2026-04-05 12:47:57 -05:00 | 557 commits to main since this releaseStable Release
First stable release of booru-viewer.
Changes since v0.1.4
Slideshow
- Preview cleared while open — media only plays in slideshow, info panel with tags expands to fill the space
- Video position sync — remembers playback position between preview and slideshow both ways
- Video state sync — mute, volume, autoplay, loop mode shared between preview and slideshow
- Focus-aware — key events and scroll-to-volume only fire when slideshow window is active
- Monitor selector — Settings > General lets you pick which monitor slideshow opens on
- Ctrl+P privacy screen — works from slideshow, hides window and pauses video
- Minimum window size — prevents squishing when dragged by window manager
Video Playback
- 3-way Loop/Once/Next — click to cycle: Loop (repeat), Once (stop at end), Next (advance to next post)
- Autoplay/Manual — only shown when Next mode is active
- Mid-playback toggle — switching modes takes effect immediately
- Space to pause — hover over preview and press Space
- Click-to-seek — click anywhere on the seek bar to jump
- Scroll-to-volume — scroll wheel adjusts volume in preview and slideshow
Library
- Video thumbnails — ffmpeg if available, play icon placeholder fallback
- Right-click context — Open in Default App, Open Folder, Copy Path, Delete
- Multi-select delete
- Unreachable warning — red text when library directory is missing or unmounted
- Configurable directory — Settings > Paths with browse button
- Slideshow navigation — arrow keys work in Library tab slideshow
Prefetch
- Spiral prefetch — gradually preloads entire page outward from clicked post with gentle pacing
- Renamed setting — "Prefetch whole page over time"
UI Polish
- Right-click doesn't change preview — selects thumbnail visually, shows context menu without restarting video
- Hover highlight — lighter border on thumbnail hover
- Blacklisting clears preview — both tag and post blacklist
- QProxyStyle dark arrows — spinbox and combobox arrows visible on all dark QSS themes
- Two indicators — yellow star (bookmarked), green dot (saved), both QSS-controllable
Bookmarks
- Fully renamed from Favorites — all UI, signals, and API
- Decoupled from saves — bookmark without saving, save without bookmarking
- Import signal fix — bookmark imports properly refresh the view
Stability
- Missing defaults added — fresh installs won't hit empty setting values
- All silent exceptions logged — no more swallowed errors
- Expanded Linux install docs — per-distro package commands, venv setup, GStreamer deps
- Removed old custom_css_guide.txt — replaced by themes/README.md
- Fixed PyInstaller spec — removed reference to deleted file
Download
booru-viewer.exe— Windows standalone (requires VP9 Video Extensions for WebM playback)Downloads
-
v0.1.4 Stable
released this
2026-04-05 01:38:41 -05:00 | 619 commits to main since this releaseChanges since v0.1.3
Library Rewrite
- Three-tab layout — Browse | Bookmarks | Library
- Bookmarks (formerly Favorites) — posts tracked in DB, like browser bookmarks. Can revisit from cache.
- Library — browse saved files on disk with sorting (date, name, size) and folder sidebar
- Independent operations — bookmarking and saving are now decoupled. Bookmark without saving, save without bookmarking.
- Unbookmarking no longer deletes saved files
- Saving no longer auto-bookmarks
- Configurable library directory — Settings > Paths with browse button
Visual Indicators
- Yellow star for bookmarked posts
- Green dot for saved posts
- Red dot for missing files (NAS/external drive offline)
- All three QSS-controllable:
qproperty-bookmarkedColor,qproperty-savedColor,qproperty-missingColor
Library Tab
- Video thumbnails via ffmpeg first-frame extraction
- Right-click context — Open in Default App, Open Containing Folder, Copy File Path, Delete from Library
- Multi-select delete — bulk delete files from library
- Unreachable warning — red text when library directory is missing or unmounted
Slideshow
- Preview cleared while slideshow is open — media only plays in slideshow, info/tags still visible in main app
- Preview restores on close — current post reloads when slideshow exits
- Video position sync — remembers playback position between preview and slideshow both ways
- Actions hidden for Library — no Bookmark/Save buttons when browsing library in slideshow
- Actions toggle dynamically — switching tabs with slideshow open shows/hides buttons
- Focus-aware — key events and scroll-to-volume only fire when slideshow window is active
- No more external player — video errors logged instead of opening in system player
Blacklist
- Add post URLs manually — "Add..." button in Settings > Blacklist accepts multiple URLs
- Backfill — filtered posts replaced from next API pages to fill page size
Other
- Auto cache eviction — runs live after each download when enabled
- Renamed terminology — Favorite→Bookmark throughout UI and code
- Configurable library path — custom save directory applied on startup
Download
booru-viewer.exe— Windows standalone (requires VP9 Video Extensions for WebM playback)Downloads
-
v0.1.3 Stable
released this
2026-04-04 20:42:40 -05:00 | 661 commits to main since this releaseChanges since v0.1.2
Slideshow Mode
- Toolbar — Favorite and Save/Unsave toggle buttons showing current post state
- Up/Down navigation — J/K and arrow keys navigate by grid row
- F11 toggle — Switch between fullscreen and windowed
- Ctrl+H — Hide/show all UI for distraction-free viewing
- Page boundary — All directions past edges load next/prev page
- Text input safety — Slideshow keybinds don't interfere with search bar
Tag Categories
- Info panel — Tags grouped by category with color coding: Artist (gold), Character (green), Copyright (purple), Species (red), General, Meta (gray)
- Blacklist Tag menu — Right-click shows categorized submenus (Danbooru/e621)
- Danbooru & e621 — Categories parsed from API; Gelbooru/Moebooru fall back to flat list
Blacklist
- Paste-friendly — Text box in settings, paste space or newline separated tags
- Toggleable — Enable/disable checkbox without deleting tags
- Client-side filtering — No more tag limit errors from server-side negatives
- Auto-enable — Right-click blacklist enables and re-searches immediately
Theming
- 6 bundled themes — Nord, Catppuccin Mocha, Gruvbox, Solarized Dark, Tokyo Night, Everforest
- Fusion style — Custom QSS now switches to Fusion for consistent rendering
- Grid selection — QSS
selection-background-colorcontrols thumbnail highlight - Theme docs —
themes/README.mdwith complete QSS reference for every widget
Favorites
- Bulk actions — Multi-select right-click: Save All, Unsave All, Move All, Unfavorite All
Library
- Unsave from Library — Grid right-click, preview right-click, and slideshow toolbar
- Save/Unsave toggle — Single button in slideshow showing current state
Search
- Inline history — Dropdown arrow inside search bar (no more "v" button)
- Manage Saved Searches — Dialog for deleting individual saved searches
- Session cache — Cacheless mode clears search history on exit
Privacy & Transparency
- Network tab — Settings > Network shows all hosts contacted with request counts
- Zero telemetry — Confirmed by full codebase audit
- Privacy section in README
Performance
- Persistent event loop — Single background thread for all async operations
- Directory pre-scan — Saved file checks via set lookups instead of per-post exists()
- Batch DB — Single-transaction bulk favorite inserts
- Database indexes — favorites.folder and favorites.favorited_at
Bugfixes
- Fixed async error handling — exceptions no longer silently swallowed
- Fixed close race condition — async thread joins before DB close
- Fixed slideshow state buttons not updating after async favorite/save
- Fixed grid up/down in last incomplete row
- Fixed preview stealing keyboard focus from grid
- Fixed QTextEdit text color in Windows dark mode
- Fixed Gelbooru HTML entities in tags (' → ')
- Fixed Save button width clipping
Download
booru-viewer.exe— Windows standalone (requires VP9 Video Extensions for WebM playback)Downloads
-
v0.1.2 Stable
released this
2026-04-04 19:56:20 -05:00 | 675 commits to main since this releaseChanges since v0.1.1
Slideshow Mode
- Video support — Slideshow mode now plays MP4, WebM, and GIF files
- Seek controls —
,and.seek 5 seconds back/forward in videos,Spacetoggles play/pause - Bidirectional sync — Clicking posts in the main grid updates the slideshow, and vice versa
- Arrow key navigation — Left/Right/H/L navigate posts in slideshow (including during video playback)
Navigation
- Page boundary navigation — Arrow keys past the last/first post automatically load the next/prev page (works in grid, preview, and slideshow)
- All directions — Up/Down/J/K at grid boundaries also trigger page turns
- Auto-select — After a page turn, the first or last post is automatically selected and previewed
Pixiv Ugoira Support
- Auto-convert — Pixiv ugoira
.zipfiles (frame archives) are automatically converted to animated GIFs - Cached — Converted GIFs are cached so subsequent loads are instant
Video Playback
- Seamless looping — Short videos no longer flash/flicker when looping (uses native
QMediaPlayer.Loops.Infinite) - No double audio — Main preview video pauses when slideshow opens
Other
- Session cache — New "Clear cache on exit" option in Settings > Cache
- Filetype field — Info panel now shows the file type (JPG, PNG, WebM, etc.)
Download
booru-viewer.exe— Windows standalone (requires VP9 Video Extensions from Microsoft Store for WebM playback)Downloads