Booru

June 22, 2025 · View on GitHub

Python bindings for Booru imageboards


Python bindings for the imageboards. It is takes a much more functionalities to interacts with ease, and featureful. Making your interaction significantly tidier, less of pain, and hopefully will be reusable.

ContributingDocumentationReport Issues

Features

  • Plenty of imageboards
  • Search random & gacha returns
  • Tags block, resolved safety tags concerns
  • Tags finder, tags & query completion
  • Parses and returns the image only
  • Documented and tested
  • Easy to use, check your intelisense

Usage

Async context, and it's recommended use asyncio / https://sinkaroid.github.io/booru

Prerequisites

NOTE: Python 3.7 or above

Installation

pip install booru

This library vs. the Competition

Features availability for this library

BooruStatusRandomTags blockTags finderGet imagesGacha
GelboorustatusYesYesYesYesYes
DanboorustatusYesYesYesYesYes
Rule34statusYesYesYesYesYes
RealboorustatusYesYesYesYesYes
TbibstatusYesYesYesYesYes
XboorustatusYesYesYesYesYes
SafeboorustatusYesYesYesYesYes
YanderestatusYesYesYesYesYes
LoliboorustatusYesYesYesYesYes
KonachanstatusYesYesYesYesYes
Konachan.netstatusYesYesYesYesYes
HypnohubstatusYesYesYesYesYes
E621statusYesNoNoYesYes
E926statusYesNoNoYesYes
DerpiboorustatusYesNoNoYesYes
FurboorustatusYesNoNoYesYes
ATFboorustatusYesYesYesYesYes
BehoimistatusYesNoNoYesYes
PahealstatusYesNoNoYesYes

Example

Takes parameter (query: str, block: str = "", limit: int = 100, page: int = 1, random: bool = True, gacha: bool = False)

import asyncio
import booru

async def main():
    dan = booru.Danbooru()
    res = await dan.search(query="cat_girl", block="futanari")
    print(res) ## this is <class 'str'>
    print(booru.resolve(res)) ## this is <class 'list'>

asyncio.run(main())
  • You will never gets content which contains futa tags.

You can also import specific booru client.

from booru import Rule34
some_booru = Rule34()

## do with r34

search_image()

Takes parameter (query: str, block: str = "", limit: int = 100, page: int = 1)

import asyncio
from booru import Rule34

async def main():
    r34 = Rule34()
    img = await r34.search_image(query="cat_girl", block="futanari")
    print(img)

asyncio.run(main())
  • This will parses image url only, instead object

find_tags()

You want to wildcard or query completion like the browser do?


What browser looks like

This library also

import asyncio
from booru import Danbooru, resolve

async def main():
    dan = Danbooru()
    find_tags = await dan.find_tags("jeanne") ## arbitrary tags
    wildcard = resolve(find_tags)
    print(wildcard)

asyncio.run(main())
  • Get the wildcard[0] for the best match.

booru.resolve()

You will need this for every object, this library designed to be neat and clean returns, although it must be reparsed to the string first, that's why booru.resolve() exist.

Documentation

The documentation can be found https://sinkaroid.github.io/booru

This tool can be freely copied, modified, altered, distributed without any attribution whatsoever. However, if you feel like this tool deserves an attribution, mention it. It won't hurt anybody

Licence: WTF.