Skip to content

Releases

v1.1.2

Choose a tag to compare

@Devildonia Devildonia released this 25 Oct 23:10

Reliability & security follow-up: restores Image-to-Prompt drop-to-replace and closes the entire R8 external audit.

Fixed

  • Image to Prompt: drop a new image on top of the existing one works again. A Gradio 6.30 regression had shrunk the drop zone to a 16 px corner icon once a file was loaded, so drops silently did nothing. The whole tab is now a valid drop surface and extraction re-runs on every drop (newest file wins). Browser-verified with regression tests.
  • Security — credentials can no longer leak across origins. Your board's API key is now only ever sent to the board you queried: any cross-origin redirect hop goes unauthenticated (the behavior httpx itself guarantees). A compromised board or open redirect can no longer steal it.
  • Tag Dictionary importer: interrupted imports no longer lose tags. The crash-safe checkpoint previously persisted not-yet-processed tags, and --resume would then skip them forever. The checkpoint now stores only what was actually enriched, so a Ctrl-C mid-import recovers cleanly on the next run.
  • System Status no longer clips long text. Wrapped query summaries and long URLs render in full instead of "Query comple…".
  • Dependencies: brotli updated to 1.2.1 (2 advisories fixed); pip-audit on the locked dependency set now reports no known vulnerabilities.
  • Minor: the "not valid JSON" error now includes the offending URL, and the two redirect-handling paths in the HTTP client are cross-referenced so they cannot silently diverge.

Tests

231 tests, all green; ruff clean; mypy clean (32 files); pip-audit clean (Pillow 12.x ignores documented and dated, unfixable while Gradio 6 pins pillow<13).

Requirements

Unchanged: Python 3.11+, pip install -r requirements.txt, run start.bat / start.sh (or python app.py). Interface at http://127.0.0.1:7863 (auto-increments if busy).

v1.1.1 — Security hardening, Furbooru source & polished UI

Choose a tag to compare

@Devildonia Devildonia released this 22 Oct 21:12

Security & correctness (external audit R7, items A–H)

  • SSRF redirect guard actually fires now: manual redirect following (max 5 hops) with public-host re-validation on every hop
  • 3-way config merge: cleared state stays cleared, no cross-instance credential clobbering
  • Hermetic test suite (fake DNS), honest pip-audit ignore list with parity test
  • Long-text UI overflow fixed; image cache now byte-bounded (4 GiB default)
  • Tag-dictionary importer survives dropped connections (partial catalog + idempotent checkpoints)

New features

  • Furbooru as a first-class source (28 total, 7 API families), anonymous Philomena JSON API
  • Source capability metadata (api_family, auth_required, supports_tags, supports_rating_filter, status)
  • Dynamic source-count badge in the header (counts the registry; no more hardcoded number)
  • Refreshed README screenshots (5, light + dark themes, all SFW)

QA: 225 tests green, ruff clean, mypy clean. Full notes in RELEASES.md.

v1.1.0 — Offline Tag Dictionary, Light/Dark theme & 1,000-tag Danbooru importer

Choose a tag to compare

@Devildonia Devildonia released this 22 Oct 19:14

HaDeS Booru v1.1.0 is a major update: a fully offline Tag Dictionary, a professional Light/Dark theme system, and a resumable importer that grows the local catalog to the 1,000 most popular Danbooru tags.

Highlights

  • Offline Tag Dictionary — new tab backed by a local SQLite catalog. Exact and alias lookups resolve in sub-milliseconds with no network. Bilingual (English definitions always shown; Spanish only when a genuine translation exists). Each entry shows category, post count, known aliases, and a Danbooru wiki link. A live indicator tells you how many tags are available locally.
  • 1,000-tag Danbooru import — grow the catalog from the command line. Resumable, rate-limit-aware, fault-isolated, and it cleans wiki markup (including template macros) on import.
  • Light / Dark / System theme — switchable from the top bar, persisted across sessions, WCAG AA contrast, with Inter and JetBrains Mono bundled locally (zero external font requests).
  • Per-session personal lists — in --share mode your blacklist/whitelist stay in your session and are never exposed to remote visitors.
  • 3-layer DAPI tag categorization — more accurate artist / copyright / character classification for Gelbooru-family boards.
  • Under the hood — shared adapter pagination, modular UI package, hardened CI (pinned actions, mypy + coverage + weekly pip-audit), and Gradio 6.30 compatibility.

Grow the Tag Dictionary

The app ships with a curated offline seed catalog (38 foundational tags, 75 aliases), so the dictionary works out of the box. To grow it to the 1,000 most popular Danbooru tags:

python -m hades_booru.tag_dictionary.importer --top 1000

Flags: --resume (default — skip tags already imported), --no-resume, --skip-wiki (metadata + aliases only, faster first pass), --seed-only (no network). Add a Danbooru API key in Settings to roughly double the safe import speed (~8 min with a key, ~15–20 min without).

Run it

pip install -r requirements.txt
python app.py
  • Windows: double-click start.bat
  • Linux / macOS: ./start.sh

The UI opens at http://127.0.0.1:7863. Port 7863 avoids clashing with Stable Diffusion WebUI/Forge (7860/7861) and ComfyUI (8188); if it's busy, the app automatically binds the next free port.

Notes

  • python app.py --share opens a public Gradio tunnel. Personal lists are isolated per session, but avoid it if you've stored personal API credentials.
  • Requests to private / loopback / LAN addresses are blocked by default. To reach a self-hosted LAN board, set HADES_ALLOW_PRIVATE_HOSTS=1.

Quality

212 tests passing · ruff clean · mypy clean (32 files).


Tag dictionary data (tags, aliases, and wiki definitions) is imported from Danbooru via its public API and stored locally in hades_booru/tag_dictionary/data/tags.sqlite3 (git-ignored, never bundled in this release).

v1.0.7 — Audit R6 hardening: credential-leak fix, SSRF guard, cache & config safety

Choose a tag to compare

@Devildonia Devildonia released this 22 Oct 10:34

Post-release audit (R6) hardening — 1 High, 6 Medium, 20 Low findings; all High/Medium and practical Lows fixed, the rest tracked in ROADMAP.md.

Security

Danbooru credential-leak fix (High, existed since v1.0.0): URL host matching is now exact (host == domain or *.domain) across all 7 adapters, and fetch-by-URL pins the API call to the adapter's own domain. Crafted links like https://danbooru.donmai.us.evil.example/posts/1 can no longer receive your Basic-Auth credentials.
SSRF guard: requests to private/loopback/reserved/link-local addresses are blocked — including on every redirect hop — and error responses no longer echo the body into the UI. Override with HADES_ALLOW_PRIVATE_HOSTS=1 for a self-hosted LAN board.
History privacy: pasted API URLs no longer store sensitive query params (api_key, token, password, login, user_id, …) in config.local.json.
Cache poisoning: image downloads are validated with magic bytes before being cached (no more HTML pages re-served as .jpg); already-poisoned entries are detected and re-downloaded.
Multi-instance safety: config saves are file-locked and merged with disk state, so two instances from the same folder no longer clobber each other.
Robustness
Image-to-Prompt restricted to PNG/JPEG/WebP (rejected before Pillow plugins parse) + explicit 64 MP cap; response caps (16 MiB JSON/XML, 512 MiB streamed media); javascript: hrefs disabled; ZIP error state reset per export; rating flag reset before fetch-by-URL; dark mode enforced (light mode had 1.05:1 contrast); start.bat cd /d fix; ZIP/TXT filenames with time + _2/_3 collision suffix; magic-byte-first extensions; config schema_version.

Dependencies
certifi 2026.10.19 (PYSEC-2026-4320 fixed); lock regenerated from a clean venv. Pillow pinned to 12.3.0 — Gradio 6.x hard-pins pillow<13 and 13.x breaks fresh installs; the 24 Pillow-13 CVEs are documented and explicitly ignored in CI with justification, to be removed once Gradio supports Pillow 13.

Tests: 143 passing (18 new regression tests) · ruff clean · CI pip-audit verified passing.

v1.0.6 — Search history, Top tags, smarter port, drop-to-replace

Choose a tag to compare

@Devildonia Devildonia released this 20 Oct 09:42

Quality-of-life release focused on workflow speed and zero-friction launch.

What's new

  • Recent searches + Top tags (side by side): your last 12 queries are kept in a Recent searches dropdown (deduplicated, most-recent-first). Pick one to drop it straight into the Search-tags bar, or Clear to wipe the history without touching the search bar. Beside it, a Top tags picker lists your most-reused individual tags — Add appends one to the Search-tags bar (deduplicated, no auto-run) so you can build tag queries faster. Only successful searches are recorded, and history persists in config.local.json.
  • Sensible default port + auto-fallback: the default port moved from 7860 to 7863, so it no longer collides with Stable Diffusion WebUI / Forge (7860/7861) or ComfyUI (8188). If the port is busy, the launcher probes the next ports (up to 50 tries) and binds the first free one — the app always comes up, and the chosen URL is printed to the console.
  • Drop-to-replace in Image to Prompt: drag a new image into the Extract tab even when one is already loaded — the newest file wins. A new Clear Image button resets the file, preview, and all extracted sections at once.

Hardening (pre-release audit)

  • Gallery download failures are now logged (post id + URL) instead of being swallowed silently.
  • Port bind races produce a clear, actionable launcher error instead of a raw traceback.
  • The Top-tags picker always resets its selection after a search or a Clear (no stale picks).
  • The Recent searches dropdown is selection-only; free text belongs in the Search-tags bar.

Requirements & quick start

  • Python 3.11+ (desktop; Windows/macOS/Linux)
unzip HaDeS-Booru-v1.0.6.zip
pip install -r requirements.txt
start.bat        # Windows
# or: bash start.sh

v1.0.5

Choose a tag to compare

@Devildonia Devildonia released this 19 Oct 16:00

What's new

Bug fix

  • Gallery navigation (Next / Previous) — the Previous/Next buttons in Gallery & Inspector now actually move the selected image in the gallery, not just the prompt and inspector panels. The selection is driven through Gradio 6's selected_index prop, so the highlighted thumbnail, the preview modal, and the inspector all stay in sync.

Naming

  • Tab rename — the Personal Tag List tab is now simply called Blacklist (ES: Lista Negra), matching the terminology already used inside the panel. Heading renamed in both languages. No behavior change.

Quality

  • 6 new regression tests covering the navigation fix (arity on both return paths, selection index per direction, prompt follows the selected post).
  • 100 tests, all green; ruff clean.

Installation

unzip HaDeS_Booru_v1.0.5.zip
cd HaDeS_Booru
pip install -r requirements.txt
python app.py

HaDeS Booru v1.0.4 — Image to Prompt correctness + e621 rating fix

Choose a tag to compare

@Devildonia Devildonia released this 19 Oct 13:01

Patch release fixing seven issues found by an external audit of the v1.0.3 feature set.

Image to Prompt

  • A1111 multi-line format: 'Steps: N' and the rest of the settings line no longer leak into the Negative Prompt box (works with or without a 'Negative prompt:' marker).
  • JPEG/WebP comments written by A1111 (UNICODE prefix, UTF-16) now decode correctly instead of producing garbled '\x00' tags; ASCII prefix padding no longer leaks.
  • PNG XMP (dc:subject) is now actually read — previously only JPEG/WebP XMP was. Both dc:term and rdf:li subject forms are parsed.
  • ComfyUI prompt graphs: positive/negative are resolved by following the sampler node's positive/negative links. Graphs with non-consecutive or inverted node ids no longer swap sections; unlinked text nodes are preserved.
  • Whitelist entries without a trailing * now match exactly (a 'solo' whitelist no longer silently keeps 'solo_focus'/'soloist'); wildcards unchanged.
  • The success tag counter and tag chips only count positive tags.

Search

  • e621: a 'General' rating selection no longer returns zero results. Adapters now report when the rating filter was applied server-side and the UI stops re-filtering by equality (e621's safe bucket is rated 's').

Quality

  • 16 new regression tests covering every fixed case (94 total, all green), ruff clean, pip-audit in CI.

HaDeS Booru v1.0.3 — Personal tag filters + Image to Prompt

Choose a tag to compare

@Devildonia Devildonia released this 19 Oct 11:45

What's new

  • Personal tag blacklist: extend the default excluded-tag list with your own tags (comma or newline separated, * wildcard) from the Normalization tab. Persisted in config.local.json; "Reset Default Excluded Tags" no longer wipes your personal list.
  • Personal tag whitelist: force-keep tags that would otherwise be filtered (e.g. commission), even if they appear in the defaults or your blacklist. Wildcards supported.
  • One-click post blacklist: from the Inspector dock, add every currently-filtered tag of the selected post to your personal blacklist at once.
  • Image to Prompt (new tab): drag & drop a PNG/JPEG/WebP and its embedded data is extracted automatically, 100% locally: Stable Diffusion / A1111 parameters, ComfyUI prompt graphs (decoded from JSON), booru comment tEXt chunks, NovelAI-style prompt chunks, Civitai XMP, and JPEG/WebP EXIF UserComment. Results land in three dedicated copyable boxes: Positive Prompt, Negative Prompt, and Generation Settings (one key per line). Positive and negative pass through your active normalizer (trigger word on the positive only, blacklist/whitelist included).
  • Windows launcher: start.bat fixed (ASCII-safe, CRLF, no more "LORA no se reconoce como un comando" and no more mojibake).

Quality

  • Pre-release audit: 3 Gradio wiring bugs fixed; 11 new runtime wiring regression tests.
  • 77 tests green, ruff clean, pip-audit clean in CI.

v1.0.2 — Fixes & hardening

Choose a tag to compare

@Devildonia Devildonia released this 18 Oct 14:02

Fixes & hardening (follow-up to v1.0.1)

  • Server-side rating filter refinements: Danbooru v2 boards now respect the anonymous 2-tag limit (rating metatag only injected when safe, with automatic HTTP 422 fallback); Moebooru uses canonical rating:safe/questionable/explicit metatags; E621/E926 use rating:s|q|e metatags with E926 SFW rating normalization.
  • Credential security & management: saved credentials use generic masked placeholders (no user_id/api_key values in Gradio's /config payload) + new "Clear Saved Credentials" action (memory and disk).
  • Thread-safe adapter warnings & bounded retry: BooruAdapter.last_warning isolated per thread; HTTP 429 Retry-After waits capped at 30 s.
  • Cross-platform fix: "open folder in explorer" on macOS/Linux no longer crashes (invalid check= kwarg removed from subprocess.Popen).
  • Normalizer & taxonomy: exclude_categories now respected for raw_tags-only posts (Zerochan, Art Platforms); accurate Gelbooru _(series)/_(game)/_(cosplay) categorization; multi-tag Pawoo queries warn when truncated to the first hashtag.
  • i18n: restored Spanish "o" in the search placeholder.
  • 46 tests, all green; pip-audit clean in CI.

Install

git clone https://github.com/Devildonia/HaDeS-Booru.git
cd HaDeS-Booru
pip install -r requirements.lock

Windows: start.bat · Linux/macOS: ./start.sh → open http://127.0.0.1:7860

HaDeS Booru v1.0.1 — server-side rating + locked, audited deps

Choose a tag to compare

@Devildonia Devildonia released this 17 Oct 19:39

HaDeS Booru v1.0.1 — Server-side rating filter + locked, audited dependencies.

What's new

  • Server-side rating filter (G/S/Q/E): Danbooru v2 boards, Moebooru boards, E621/E926, and DAPI boards now send the rating to the source API instead of downloading everything and filtering locally. "Unrated" and sources without server-side support keep the client-side safety filter.
  • requirements.lock pins the full dependency tree for reproducible installs.
  • CI runs pip-audit against the locked tree on every push.
  • Test suite: 39 tests, ruff clean, app builds OK.

Requirements: Python 3.11+

pip install -r requirements.txt
python app.py

Web UI: http://127.0.0.1:7860 — Windows: start.bat — Linux/macOS: ./start.sh


HaDeS Booru v1.0.1 — Filtro de rating en servidor + dependencias fijadas y auditadas.

Novedades

  • Filtro de rating en servidor (G/S/Q/E): los boards Danbooru v2, Moebooru, E621/E926 y DAPI ahora envían el rating a la API de origen en lugar de descargar todo y filtrar en local. "Sin clasificar" y las fuentes sin soporte conservan el filtro local de seguridad.
  • requirements.lock fija el árbol completo de dependencias para instalaciones reproducibles.
  • CI ejecuta pip-audit sobre el árbol fijado en cada push.
  • Suite de tests: 39 tests, ruff limpio, la app arranca OK.

Requisitos: Python 3.11+

pip install -r requirements.txt
python app.py

UI web: http://127.0.0.1:7860 — Windows: start.bat — Linux/macOS: ./start.sh