Skip to main content

Asynchronous API for downloading images, tags, and metadata from image board sites (e.g., Danbooru, Safebooru, Yandere). Ignore the downloaded files.

Project description

WaifuBoard

English README | 简体中文 README | 繁體中文 README | 日本語 README | 한국어 README

Asynchronous API for downloading images, tags, and metadata from image board sites (e.g., Danbooru, Safebooru, Yandere). Ignore the downloaded files.

Installation

pip install waifuboard

Requires: Python >= 3.9

Supported platforms and features

Platform Posts (download) Pools (download)
Danbooru
Safebooru
Yandere
Other platforms ... ...

Usage

Create a client (e.g., DanbooruClient) and call the download method of the corresponding component, such as client.posts.download(...) or client.pools.download(...). For parameters, please refer to the download method docstrings in the code.

import asyncio
from waifuboard import DanbooruClient


async def main():
    # Create a client, which will be used to interact with the API
	client = DanbooruClient(
        max_clients=8,  # The maximum number of clients to create, which is used to limit the upper limit of the global concurrent request count. If it is None or a non-positive number, the limit is not applied
        directory="./downloads",  # The root directory for storing files of the current client platform
        proxy_url="http://127.0.0.1:7890",  # The URL used to connect to the proxy server. The scheme must be one of "http", "https", "socks5", "socks5h", and the form is {scheme}://{[username]:[password]@}{host}:{port}/ or {scheme}://{host}:{port}/, for example "http://127.0.0.1:8080/"
        proxy_auth=None,  # Any proxy authentication information, in the format of a two-tuple of (username, password). Can be bytes type or str type containing only ASCII characters. Note: The auth parameter parsed from proxy_url is used first. If no auth is parsed from proxy_url and proxy_auth is not None, the proxy_auth parameter is used to add authentication credentials to proxy_url
        proxy_headers=None,  # Any HTTP header information for proxy requests. For example, {"Proxy-Authorization": "Basic <username>:<password>"}
        proxy_ssl_context=None,  # The SSL context used to verify the connection to the proxy server. If not specified, the default httpcore.default_ssl_context() is used
        max_connections=100,  # The maximum number of concurrent connections that can be established
        max_keepalive_connections=20,  # The number of long connections that can be maintained below this value. This value should be less than or equal to max_connections
        keepalive_expiry=30.0,  # The time limit for idle long connections (in seconds)
        max_attempt_number=5,  # The maximum number of attempts
        default_headers=True,  # Whether to set default browser headers
        logger_level=logging.INFO,  # The log level
    )

	# Download posts
	await client.posts.download(
		limit=200,
        all_page=True,
		tags="k-on!",
		save_raws=True,
		save_tags=True,
	)

	# Download pools
	await client.pools.download(
		limit=1000,
		query={
            'search[name_matches]': 'k-on!',
        },
        all_page=True,
		save_raws=True,
		save_tags=True,
	)


if __name__ == "__main__":
	asyncio.run(main())

If this project is helpful to you, a small star would be the unwavering motivation for me to keep the project open-source.

Download directory structure

Directory tree:

{directory}/
└─ {Platform}/
	└─ {Component}/
		└─ task/
			├─ images/
			│  └─ ...
			├─ tags/
			│  └─ ...
			└─ raws/
				└─ ...

where task is the unique identifier for the download task (e.g., post ID, pool ID).

Contributing

Contributions are welcome. To add new platforms or features:

  • Architecture

    • Platforms should inherit from waifuboard.booru.Booru (Base Client) and set the appropriate base_url and components.
    • Features/endpoints (e.g., Posts, Pools) should inherit from waifuboard.booru.BooruComponent (Base Component) and implement the download(...) interface consistent with existing platforms.
    • Reuse helpers from Booru (e.g., concurrent_fetch_page, concurrent_download_file, concurrent_save_raws, concurrent_save_tags).
  • GitHub workflow

    1. Fork this repository to your account.
    2. Create a new branch for your change: git checkout -b feat/<short-name>.
    3. Implement your platform/component and add minimal docs in this README.
    4. Run a quick local test to ensure basic functionality works.
    5. Commit and push your branch: git push origin feat/<short-name>.
    6. Open a Pull Request to main with a concise description (what/why/how to test).

Guidelines

  • Keep public APIs consistent with existing ones (method names, parameters, return types).
  • Add docstrings to new methods, especially download(...) parameters and behavior.
  • Follow the existing code style and logging patterns.
  • Avoid breaking changes; if unavoidable, call them out clearly in the PR.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

waifuboard-0.2.0.tar.gz (141.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

waifuboard-0.2.0-py3-none-any.whl (59.7 kB view details)

Uploaded Python 3

File details

Details for the file waifuboard-0.2.0.tar.gz.

File metadata

  • Download URL: waifuboard-0.2.0.tar.gz
  • Upload date:
  • Size: 141.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for waifuboard-0.2.0.tar.gz
Algorithm Hash digest
SHA256 27901d7462b775fbe068e81fb8cbb2e8ad96d7f646c628a7caccfd9a45300102
MD5 96df3730e7d4a78932a843cbf94be0f8
BLAKE2b-256 ee2623f2f1c56f378846f37337d3c8240fad8c1e32ea07e7de678448a4365aaa

See more details on using hashes here.

Provenance

The following attestation bundles were made for waifuboard-0.2.0.tar.gz:

Publisher: python-publish.yml on 2513502304/WaifuBoard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file waifuboard-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: waifuboard-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 59.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for waifuboard-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bbb41607d3af1687ba13fc7953928410f3a3f8cb57f4b044350a25346ad600e6
MD5 b770e2d335c47e8b5315ac844795bdd8
BLAKE2b-256 7a936e5784cfd60e135a01c285d18ffb42a0a85d3f9ad46ee62003c6382cbcb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for waifuboard-0.2.0-py3-none-any.whl:

Publisher: python-publish.yml on 2513502304/WaifuBoard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page