Skip to main content

Boorusama-Qt

CI Release License: GPL v3 Python Qt for Python Linter: Ruff Checked with pyright

A desktop reimplementation of Boorusama (the Flutter booru client) built with Qt for Python (PySide6) instead of Flutter/Dart.

It's a multi-backend image-board browser with a pluggable engine architecture: adding a new booru is a single module (or, for many sites, just a config profile).

Boorusama-Qt browsing Danbooru

Browse view — infinite-scroll grid with tag search.

Boorusama-Qt post viewer

Post viewer — full image with category-grouped, clickable tags and metadata.

Table of contents

Features

  • 🔌 Pluggable engines — Danbooru, Gelbooru, and a config-driven generic engine (moebooru/philomena profiles, e.g. yande.re, Konachan). Add more by dropping a module into boorusama/engines/.
  • 🔍 Search with per-token tag autocomplete (category-colored).
  • 🖼 Responsive thumbnail grid with infinite scroll and a two-tier (memory + disk) image cache.
  • 🔎 Full post viewer — large image, category-grouped clickable tags, metadata, prev/next navigation (arrow keys), favorite (F), download.
  • ♥ Local favorites and search history (SQLite-backed).
  • 📚 Pools browsing (where the backend supports it, e.g. Danbooru).
  • ⤓ Download manager with live progress.
  • 🚫 Blacklist (Danbooru-style AND/OR rules) and a safe-mode toggle.
  • 🎨 Theming — dark / light / midnight palettes with a custom accent color.
  • 👤 Per-source login (API keys) for sites that require/benefit from it.

Install & run

Requires Python 3.11+ (PySide6 6.6+ is pulled in automatically).

From a release package

Grab the wheel from the latest release, then:

# with uv (recommended) — installs an isolated `boorusama-qt` command
uv tool install ./boorusama_qt-0.1.0-py3-none-any.whl
boorusama-qt

# …or into an environment with pip
pip install ./boorusama_qt-0.1.0-py3-none-any.whl
boorusama-qt

From source

git clone https://github.com/1Git2Clone/boorusama-qt
cd boorusama-qt

# with uv
uv run python main.py

# …or a classic venv
python -m venv .venv && source .venv/bin/activate
pip install -e .
python main.py

Build the packages yourself

uv build          # → dist/boorusama_qt-*.whl and *.tar.gz

Architecture

boorusama/
├── core/                  backend-agnostic foundation
│   ├── models.py          Post, Tag, Pool, Rating, Account dataclasses
│   ├── engine.py          BooruEngine ABC + capabilities/config
│   ├── registry.py        engine registration & instantiation
│   ├── workers.py         QThreadPool helpers (run_async)
│   └── imageloader.py     async image fetch + mem/disk cache
├── engines/               one module per backend family
│   ├── danbooru.py
│   ├── gelbooru.py
│   └── generic.py         config-driven (moebooru / philomena profiles)
├── services/              local features
│   ├── storage.py         SQLite favorites + history
│   ├── blacklist.py       tag/rating filtering
│   └── downloads.py       streaming download manager
├── ui/                    PySide6 widgets & windows
│   ├── main_window.py     nav rail, source switcher, content stack
│   ├── search_bar.py      debounced autocomplete
│   ├── post_grid.py       infinite-scroll grid
│   ├── post_viewer.py     full viewer + tag/metadata panel
│   ├── pages.py           favorites / history / downloads / pools
│   ├── settings_dialog.py sources, login, appearance, content filters
│   ├── widgets.py         FlowLayout, TagChip, PostThumbnail
│   └── theme.py           QSS palettes
├── config.py              JSON settings + source definitions + paths
├── context.py             central AppContext wiring everything together
└── app.py                 QApplication bootstrap

Adding a new booru

For Danbooru/moebooru/Gelbooru-shaped JSON APIs, add a profile to PROFILES in engines/generic.py and a default SourceConfig in config.py. For anything bespoke, subclass BooruEngine, implement search_posts (and optionally autocomplete_tags, search_pools, …), and decorate it with @register_engine.

Development

This project uses uv for everything; see CONTRIBUTING.md for the full guide.

Git hooks

The repo ships hooks under .githooks/. Enable them once per clone:

git config core.hooksPath .githooks    # or: sh scripts/setup-hooks.sh
  • pre-commit — runs ruff check and ruff format --check (fast).
  • pre-push — runs the full CI-equivalent gate before anything leaves your machine: ruff lint + format, pyright, and the headless smoke test. This is the local stand-in for branch protection — a failing gate aborts the push.

Bypass in an emergency with git commit --no-verify / git push --no-verify.

Quality gates

The same checks the hooks and CI run, to invoke by hand:

uvx ruff check .                                        # lint
uvx ruff format --check .                                # formatting (drop --check to fix)
uv run --with pyright pyright                            # type check
QT_QPA_PLATFORM=offscreen uv run python scripts/ci_smoke.py   # headless smoke test

Notes on backends

  • Danbooru — fully supported (search, autocomplete, pools, login, per-category tags).
  • yande.re / Konachan — work out of the box via the generic moebooru profile.
  • Gelbooru — now requires an API key (user_id + api_key) for its JSON API even for reads. Add credentials under Settings → Sources & Login; errors otherwise surface in the status bar.

Keyboard & mouse

In the post viewer:

Key Action
← / → Previous / next post
F Toggle favorite
Esc Back to grid

Browser-style history (anywhere) — moves through searches, pools, opened posts, and sidebar pages:

Input Action
Mouse Back (button 4) / Alt+← Back
Mouse Forward (button 5) / Alt+→ Forward

Status

This is a faithful but from-scratch port focused on the core Boorusama loop and the major feature surfaces. It is not affiliated with the original project.

License

Released under the GNU General Public License v3.0 or later — see LICENSE.

Metadata

Release files for boorusama-qt 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for boorusama-qt 0.1.1
File Size Uploaded
boorusama_qt-0.1.1.tar.gz 49.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for boorusama-qt 0.1.1
File Interpreter ABI Platform
boorusama_qt-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 112.2 kB

Release files / boorusama_qt-0.1.1.tar.gz

Download URL boorusama_qt-0.1.1.tar.gz
Size 49.7 kB
Tags Source
SHA-256 checksum
How to use checksums
57b280fa4cfd40bbda9817538c02def897b30ab316310bac920950537aa05cd8
BLAKE2b-256 checksum
How to use checksums
8a11bb89f7848f104876b90af23c1fa04518c3ae3f07921405b319357b1eac52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / boorusama_qt-0.1.1-py3-none-any.whl

Download URL boorusama_qt-0.1.1-py3-none-any.whl
Size 62.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ae702270a12172605315ad6c1c4638054a3fa830a0e23b6f300f51049db42b3e
BLAKE2b-256 checksum
How to use checksums
5794a5bd76abf9b81ebad375b650f05823ecf284d254ddb9d99590cf98db4c6c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page