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.10
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
import logging
from waifuboard import DanbooruClient
async def main():
# Create a client, which will be used to interact with the API
client = DanbooruClient(
directory="./downloads", # The root directory of the storage files for the current client platform
logger_level=logging.INFO, # The log level
base_url=None, # Automatically set a URL prefix (or base url) on every request emitted if applicable
proxies="http://127.0.0.1:7897", # Dictionary mapping protocol or protocol and host to the URL of the proxy (e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'}) to be used on each Request <Request>. If a single string is provided, it will be used for both http and https. It can also be a tuple of such values; an element will be randomly selected per request. When not provided and trust_env is True, the process environment's proxy settings are captured as the default, giving an effective priority of request > session > env
retries=5, # Configure a number of times a request must be automatically retried before giving up
max_attempt_number=3, # Default outer retry budget (tenacity-level) for request methods. Used when a request method does not pass its own max_attempt_number. If still None at request time, the underlying call falls back to a single attempt
rate_limit=10.0, # Maximum requests per second
timeout=None, # Default timeout configuration to be used if no timeout is provided in exposed methods
)
# 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 appropriatebase_urland components. - Features/endpoints (e.g., Posts, Pools) should inherit from
waifuboard.booru.BooruComponent(Base Component) and implement thedownload(...)interface consistent with existing platforms. - Reuse helpers from
Booru(e.g.,concurrent_fetch_page,concurrent_download_file).
- Platforms should inherit from
-
GitHub workflow
- Fork this repository to your account.
- Create a new branch for your change:
git checkout -b feat/<short-name>. - Implement your platform/component and add minimal docs in this README.
- Run a quick local test to ensure basic functionality works.
- Commit and push your branch:
git push origin feat/<short-name>. - Open a Pull Request to
mainwith 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.
Metadata
Release files for waifuboard 2.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| waifuboard-2.0.1.tar.gz | 239.3 kB | With provenance | Details for waifuboard-2.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| waifuboard-2.0.1-py3-none-any.whl | Python 3 | none | any | Details for waifuboard-2.0.1-py3-none-any.whl |
Total release size: 332.4 kB
Release files / waifuboard-2.0.1.tar.gz
| Download URL | waifuboard-2.0.1.tar.gz |
|---|---|
| Size | 239.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
157c35ff3a61fc120d25f81e9786d916904ed5a3899daa64dbb36fc52763a260
|
|
BLAKE2b-256 checksum How to use checksums |
6034bea3f363350a40c72dda5e1c68b0680dcf640f76074960cc6fa51dbcbfdd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency logRelease files / waifuboard-2.0.1-py3-none-any.whl
| Download URL | waifuboard-2.0.1-py3-none-any.whl |
|---|---|
| Size | 93.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
185a5db943c2ea69fac1744b65c6c9919d26b2b439f33b99549d8d2eda92aca5
|
|
BLAKE2b-256 checksum How to use checksums |
2ba65a604d8136b2a51f664f3957f91424656d575688c5d21b4212a3375d99d8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency logSecurity for waifuboard 2.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for waifuboard-2.0.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.