Blombooru v2.0.0
Note
Blombooru now has an official Discord server! Feel free to join: https://discord.gg/ywpaZh4tHx
Blombooru is a private, self-hosted media tagging tool designed as an alternative to image boorus for managing personal media collections.
Key Features
- Danbooru-Style Tagging: Includes a tagging system with categories (artist, character, copyright, meta, general), parent-child media relationships, albums, and full support for Danbooru-compatible search syntax.
- AI Integration: Support for viewing AI metadata from tools such as SwarmUI, ComfyUI, and A1111. Includes integration with the WDv3 Auto Tagger for automated tag suggestions.
- External Booru Import: Allows importing media directly from supported boorus (e.g., Danbooru, Gelbooru) via URL. Metadata such as tags, rating, and sources are automatically mapped and imported.
- API Compatibility: Implements a Danbooru v2 compatible API. This allows you to connect third-party Booru clients (such as Grabber, Tachiyomi, or BooruNav) to your Blombooru instance.
- Security & Access Control: Management actions (uploading, editing, deleting) require an admin login. A Secure Mode can also be enabled to require login to interact with Blombooru (including to view media), while still allowing access to shared media.
- Customizable Interface: Built with Tailwind CSS for responsiveness. Includes built-in themes (Catppuccin variants, Gruvbox, Nord, Everforest, OLED) and supports adding custom CSS themes.
- System Architecture: Built on Python (FastAPI) and PostgreSQL. Optional Redis caching is available for faster autocomplete and queries. Supports multi-instance setups and shared tag databases.
Installation Instructions
Docker is the recommended installation method. To deploy Blombooru using Docker:
- Download
docker-compose.ymlandexample.envfrom the release assets below. If you intend to use hardware acceleration, then also downloadhwaccel.yml. - (Optional) If you intend to use a shared tag database across multiple instances, also download
docker-compose.shared-tags.yml. - Follow the Installation instructions in the README to complete the setup.
What's Changed
-
feat: Add folder -> album mapping support to uploader (for #89)
-
feat: Add sidecar metadata and metadata extraction to uploader (for #89)
-
feat: Add support for uploading a text file list of links to uploader (for #107)
-
feat: Add multi-select and range selection support to uploader
-
feat: Add setting for automatically extracting and parsing tags from AI metadata in uploader (for #132)
-
feat: Add support for many more media formats, including JPEG-XL (for #140)
-
feat: Add support for Philomena, Szurubooru, Shimmie2, and Blombooru to the booru importer
-
feat: Add support for setting a proxy, used for direct web fetch and booru importer (for #138)
-
feat: Add Markdown support to media descriptions, with a description preview
-
feat: Add support for big descriptions, with enlarge and shrink controls
-
feat: Add tag rating implications (for #101, partly by @softnsleepi in #130)
-
feat: Add search query qualifier helper to tag search bars
-
feat: Add a tag gallery page (for #95, partly by @softnsleepi in #102)
-
feat: Add tag alias management (for #110)
-
feat: Add bulk tag alias and implication apply buttons (for #109)
-
feat: Add "related tags" section to the tag editor in the media page (for #125)
-
feat: Add random and tag count sorting options by @br33zy59 in #94 (partly for #112)
-
feat: Add custom date field for media, allowing sorting and filtering by custom date and custom age (for #144)
-
feat: Add manual sort mode to albums and album contents (for #121)
-
feat: Add a button for pruning empty albums by @highersky659 in #139
-
feat: Add a display toggle for implied tags in posts (for #133)
-
feat: Add album metrics recalculation button
-
feat: Add "Back to Album" button to media page
-
feat: Add post navigation buttons (Prev/Next) (for #86)
-
feat: Add keyboard shortcuts with customizable keybindings (for #86)
-
feat: Add keybinding cheatsheet to help modal
-
feat: Add GPU-accelerated (CUDA) AI tagging by @mrblomblo in #117 (for #91)
-
feat: Add support for PixAI Tagger v1.0 AI tagger model
-
feat: Add metadata extraction support for more AI imagegen services
-
feat: Add more granular control over API keys (for #88)
-
feat: Add current user access level info to instance info endpoint
-
feat: Add more search query options
-
feat: Add a "Forgot Password?" link in the login page
-
feat: Add password reset script
-
feat: Add changelog modal shown after updates
-
feat: Add acknowledgements generator
-
feat: Add a new "Default Light" light theme
-
feat: Add setting for blurring thumbnails of explicit-rated media (for #120)
-
feat: Allow managing AI tagger models via Admin Panel
-
feat: Allow blacklisting entire tag categories for AI tagger
-
feat: Allow merging tags
-
feat: Allow creating new tags on-the-fly in administrative tag inputs
-
feat: Allow re-linking media (for #113)
-
feat: Allow setting category weights for the similarity index
-
feat: Allow showing both rating filter buttons and custom filter buttons
-
feat: Allow using any rating/custom filter buttons at one time
-
feat: Apply tag aliases and implications on automated tagging operations (for #108)
-
feat: Completely remake and improve the media uploader
-
feat: Combine direct web fetch with booru importer (direct web fetching originally by @br33zy59 in #96)
-
feat: Deduplicate tags on automated tagging operations
-
feat: Display implied tags in posts with a dotted underline, an "implied by" popover on hover (for #133)
-
feat: Display more detailed bulk AI tagger progress info
-
feat: Display bulk AI tagger progress at the top of the modal too (for #147)
-
feat: Exclude parent/child/sibling media from related media suggestions (for #141)
-
feat: Fade-in media items as they load in the gallery
-
feat: Highlight new tags in administrative tag inputs
-
feat: Improve "From Device" Post Update modal layout
-
feat: Improve bulk ratings modal user-friendliness
-
feat: Improve styling, styling consistency, and compactness in various areas
-
feat: Improve tags tooltip in gallery
-
feat: Improve bulk tag modal action button placement and behavior & Remove tag clear button from bulk tags modal
-
feat: Improve accessibility with ARIA attributes and focus management in modals and custom selects
-
feat: Improve theme preview page
-
feat: Include thumbnail ratings in album and adjacent media endpoints
-
feat: Load GIF as thumbnail when thumbnail is hovered
-
feat: Make the bulk actions bar follow as you scroll down
-
feat: Make the "From URL" Post Update modal more detailed and user-friendly
-
feat: Only display related media from the album when viewing media from an album
-
feat: Reorganize parts of the Admin Panel and improve several of its sections' looks
-
feat: Replace "back to top" button with an acknowledgements button
-
feat: Respect album context for media hierarchy items
-
feat: Run implication expansion when accepting tag autocomplete suggestions
-
feat: Show current access level in instance info API
-
feat: Show more detailed info when downloading AI tagger models
-
feat: Show search results live in tag and album searcher
-
feat: Show tag implications counter in stats instead of categories counter
-
feat: Significantly improve the search parser's accuracy
-
feat: Stream bulk AI tagger results
-
feat: Stop suggesting tags that are already present in the tag input
-
feat: Support auto-fetch on URL drag 'n drop for booru importer
-
feat: Support tag negation symbol (
-) in tag autocomplete suggestions -
feat: Support wildcards and fuzzy search in tag autocomplete suggestions
-
feat: Switch thumbnail generator to WebP for transparency support, higher quality, and smaller file sizes
-
feat: Track which album media is viewed from
-
feat: Track implied tags in posts (for #133)
-
feat: Unload AI tagging model when not in use
-
feat: Use a better similarity algorithm (TF-IDF) for near-instant and significantly more accurate related post suggestions
-
fix: Actually cancel AI tag predictor when Cancel button is pressed
-
fix: Clean up staged files and sidecars on duplicate upload rejection
-
fix: Clean up console logging and silence autoplay errors in media components
-
fix: Display days with zero uploads in the stats page
-
fix: Disable default browser autocomplete in the search bar by @grognakmedia in #119
-
fix: Do not do hover effect on non-interactible tags
-
fix: Do not close media picker modal and bulk tag modals on outside click, and close bulk tag modals on Esc
-
fix: Do not allow aliases to also exist as tags under any circumstances
-
fix: Filter "I'm Feeling Lucky" and Related Media results more accurately
-
fix: Fix full backup not actually fully backing up your instance (partly by @grognakmedia in #104)
-
fix: Fix album metrics not being recalculated on album mutations
-
fix: Fix not being able to reparent albums to root (for #146)
-
fix: Fix album media count display so it shows the actual amount of visible media in an album after applied filters
-
fix: Fix DB connection string formatting
-
fix: Fix DB session lifecycle in threadpool and executor workers
-
fix: Fix unbounded retries and async event loop starvation
-
fix: Fix issue where bulk AI tagger modal does not work (for #137)
-
fix: Fix shorthand rating filtering in media and tag endpoints
-
fix: Fix tag suggestions being clipped in scrollable containers
-
fix: Fix tags containing slashes not being routable
-
fix: Fix manual sort order in adjacent media navigation (for #145)
-
fix: Fix multi-item drag 'n drop on Chromium
-
fix: Fix mobile paste not triggering auto-fetch for media importer
-
fix: Fix currently applied custom theme not being publicly accessible if REQUIRE_AUTH is enabled
-
fix: Fix
@importcrashing custom themes -
fix: Fix custom BG setting not being disableable
-
fix: Fix video MIME type for transcoded media
-
fix: Fix unresponsive chevron in media hierarchy dropdown
-
fix: Fix issues with viewport cutoff on mobile
-
fix: Fix issue where a few modals' buttons don't respond to inputs
-
fix: Fix broken loading spinner in a few places
-
fix: Fix wrong order of bulk action buttons in albums
-
fix: Fix GPU acceleration not working in Docker and DLL loading for CUDA on Windows by @br33zy59 in #118
-
fix: Hide header while dragging to allow autoscrolling on upper and lower edges
-
fix: Hide albums that would be empty if opened due to applied filters
-
fix: Increase rate limiter threshold (for #116)
-
fix: Improve Danbooru commentary parsing, gallery-dl DText detection, and DText to Markdown conversion in booru importer
-
fix: Improve untracked file scan reporting and systemic error handling (for #134)
-
fix: Improve tertiary text contrast in Default Dark theme
-
fix: Improve API call error handling, admin 401 redirect, and notification accessibility
-
fix: Improve service worker caching, bypass API requests, and use cache buster
-
fix: Normalize and deduplicate booru domains in booru credential config
-
fix: Only select visible media when double-clicking "Select All" button
-
fix: Persist AI tagger model in Docker-hosted instances by storing it in /data folder
-
fix: Prevent duplicate tag implications in backend by @j-penrose in #127 (for #126)
-
fix: Prevent duplicate tag implications in frontend (for #105)
-
fix: Prevent concurrent admin media maintenance jobs
-
fix: Prevent duplicate files from stopping mass file and archive imports (for #142)
-
fix: Recalculate album metrics on backup restore
-
fix: Reduce unnecessary network requests when using the AI tag predictor
-
fix: Remove chunked downloading for one-shot download requests by @br33zy59 in #115 (for #114)
-
fix: Remove cap on the commit list in the updater
-
fix: Show "Login" instead of "Admin Panel" in header nav when not logged in
-
fix: Standardize booru error handling, rate limit handling, and credential redaction, with localized auth messages
-
fix: Sync fresh DB build structure with migrated DB structure (for #129)
-
fix: Sync mobile and desktop search inputs (for #143)
-
fix: Unify small styling inconsistencies throughout
-
fix: Update instance name and theme on-the-fly without requiring a page reload
-
fix: Use safe instead of questionable when rating is missing in booru importer
-
fix: Use media loading skeleton in more places
-
fix: Validate selected custom sidebar filter button
-
perf: Cache template auth result
-
perf: Enable Redis by default
-
perf: Make TF-IDF tag similarity index rebuilds more responsive (for #123)
-
perf: Significantly improve efficiency and speed of album handling
-
perf: Significantly improve handling of large tag implication sets (for #129)
-
perf: Significantly optimize external booru fetching by reusing HTTP sessions & connection pools
-
perf: Significantly optimize bulk modals
-
perf: Significantly reduce number of requests sent to the server when visiting the media page as admin
-
perf, refac: Speed up bulk tag updates with common implication expansion code by @j-penrose in #136 (for #135)
-
refac: Add test suite
-
refac: Add reusable album tree component
-
refac: Add registry for supported file types
-
refac: Add booru domain overrides and subdomain aliasing
-
refac: Add user ID to user agent for requests to Danbooru
-
refac: Deduplicate common functions, cookie helpers, and notification calls
-
refac: Extract tag management modals from Admin Panel
-
refac: Improve media cache handling
-
refac: Move all SVG icons into proper icons system
-
refac: Normalize and parse rating in enums module
-
refac: Refactor AI metadata extraction to be backend-only
-
refac: Refactor markdown parser to be a reusable component
-
refac: Set HTML document language properly based on currently selected locale
-
refac: Unify clientside rating filter storage locations to be cookie-based
-
security: Add
noopenerandnoreferrerpolicy to more links that previously were missed -
security: Add env var for setting trusted proxies (for GHSA-689j-rf45-qcw2)
-
security: Improve X-Forwarded-For handling (for GHSA-689j-rf45-qcw2)
-
security: Escape album names and more dynamic HTML messages during rendering (XSS)
-
security: Fix privilege escalation bug for API keys
-
security: Fix SSRF via unchecked HTTP redirects in URL and booru imports
-
security: Fix open redirect and DOM XSS in login return handling
-
security: Harden security in general & add missing filename length limit
-
docs: Add Changelog and Acknowledgements files
-
docs: Add license files for TailwindCSS and Chart.JS
-
docs: Add many more screenshots to screnshot gallery
-
docs: Add notice about AI-generated security advisories to SECURITY.md
-
docs: Bring Swedish docs up to speed
-
docs: Move screenshot gallery from README to dedicated docs
-
docs: Move search syntax guide modal content to docs
-
docs: Remove outdated CSV tag list from suggestions
-
docs: Update internal API documentation
-
docs: Update the contributing docs
-
i18n: Add missing strings to Swedish i18n keys
-
i18n: Fix a few locale inconsistencies
-
i18n: Move more hardcoded strings to the i18n system
-
i18n: Update Russian translation and docs by @cobaltcobaltcobalt in #128, #149
-
chore: Add PySocks dependency
-
chore: Update PWA description
-
note: I have most certainly missed something as these release notes are not automatically generated, some likely also refer to previous pre-releases too
Full Changelog: v1.40.1...v2.0.0
Credits & Acknowledgements
Thank you to the following contributors and community members for their help in improving Blombooru:
- @cobaltcobaltcobalt for continuing to maintain the Russian translation and suggesting features.
- @grognakmedia for PRing bug fixes, reporting bugs, and for allowing me to use ideas from their fork.
- @br33zy59 for making several code contributions and reporting a bug.
- @softnsleepi for PRing the base for the tags gallery and tag ratings features, suggesting features, and for reporting bugs.
- @j-penrose for PRing a bug fix and a refactor, reporting a lot of bugs, and suggesting features.
- @lepture for PRing an update to Wenmode and for providing guidance on best practices with Wenmode.
- @falchionenjoyer for reporting several bugs and suggesting a feature.
- @denylizer for reporting a bug.
- @Spy426-IW16 for reporting a bug.
- @IZA09 for suggesting features.
- @PureDragon666 for suggesting a feature.
- @sanityy55 for suggesting a feature.
- @Pahvikapteeni for suggesting a feature.
- @leopoldious for suggesting a feature.
New Contributors
Contributors who have had their first pull request merged:
- @br33zy59 made their first contribution in #94
- @softnsleepi made their first contribution in #102
- @grognakmedia made their first contribution in #104
- @j-penrose made their first contribution in #127
- @lepture made their first contribution in #131
- @highersky659 made their first contribution in #139