reductedharmgmail.com / Booru Bulk Downloader

Published:

Version: 1.0.1+781c205

Summary: Adds a checkbox + download button to every thumbnail on a booru gallery. Fetches the full-resolution ORIGINAL and names the file from the post's tags. Batch select, progress, optional ZIP. Never leaves the gallery page.

Homepage: https://github.com/Reduxed/booru-bulk-downloader

Support: https://github.com/Reduxed/booru-bulk-downloader/issues

License: MIT

Antifeature: unspecified

Adds a checkbox and a download button to every thumbnail on a booru gallery.

  • Checkbox - add the post to a batch selection. Shift-click for a range.
  • Download button - save that one image at full resolution, immediately.
  • Panel (bottom-right, draggable) - selection count, Download selected, Save as .zip,
    Select all, Clear, Retry failed, and the filename options.
  • Alt+D / Alt+A - download the selection / select all on the page.

Nothing requires opening the individual post page. The gallery keeps working normally:
every injected control stops event propagation, so clicking it never navigates or opens the
site's lightbox.

Filenames from tags

Files are named from the post's own tags, using a template you control:

{{tags}}__{{id}}      ->  1girl_solo_long_hair__1234.jpg

Tokens: {{tags}} {{id}} {{rating}} {{site}} {{user}} {{md5}} {{ext}}

Illegal filesystem characters, control characters and Windows reserved names are handled,
long names are truncated on a tag boundary, and collisions inside one batch get a numeric
suffix.

How the original is found

Three tiers, cheapest first, cached per post:

  1. DOM attribute - where the gallery already exposes the original (Danbooru's
    data-file-url). No extra request.
  2. Site JSON API - the booru's own dapi or post.json endpoint.
  3. Post page HTML - reads og:image and the tag links. Universal, needs no API key.

ZIP export

Bundles the selection into a .zip using a built-in store-only writer - no third-party
library is loaded at any point. Booru files are already compressed formats, so storing
costs essentially nothing.

Options

Filename template, max tags, tag separator, parallel downloads, prefer JSON API, send
Referer, always use in-page blob download, and optional Gelbooru/Rule34 api_key / user_id.
All persisted per browser profile.

Permissions, in plain language

  • GM_download / GM_xmlhttpRequest - to save the original files.
  • @connect * - cross-domain requests to any host. Required because every booru serves
    originals from a different CDN, and the userscript managers block unlisted hosts. The
    script only ever contacts the booru you are already on plus the CDN its files live on.
    There is no telemetry, analytics or phone-home.
  • GM_getValue / GM_setValue - to remember your options.

Supported sites

Danbooru (+ betabooru), Gelbooru, Safebooru, Rule34, xbooru, tbib, realbooru, e621,
yande.re, konachan (+ .net). Adding another booru is one entry in the ADAPTERS array plus a
@match line; sites that already expose a data-file-url-style attribute work with just the
@match line.

Source is MIT licensed and completely readable - no minification, no bundling.

Known gotchas

  • Chrome blocks the second automatic download from a page until you allow Automatic
    downloads
    for that site. Allow it once per booru.
  • Gelbooru.com and rule34.xxx now require an API key for their JSON API. Paste your own
    api_key / user_id in the options; without them the script falls back to reading the post
    page, which is slower but needs no key.
  • e621's API asks for a descriptive User-Agent, which a userscript cannot set. e621
    therefore uses the fast DOM tier, with the HTML tier as backup.

Report problems through the Issues tab on this script's page.

Rating: 0