<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://aug.quest/info/index.php?action=history&amp;feed=atom&amp;title=Booru_Bulk_Downloader_%28Userscript%29</id>
	<title>Booru Bulk Downloader (Userscript) - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://aug.quest/info/index.php?action=history&amp;feed=atom&amp;title=Booru_Bulk_Downloader_%28Userscript%29"/>
	<link rel="alternate" type="text/html" href="https://aug.quest/info/index.php?title=Booru_Bulk_Downloader_(Userscript)&amp;action=history"/>
	<updated>2026-11-08T01:29:15Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://aug.quest/info/index.php?title=Booru_Bulk_Downloader_(Userscript)&amp;diff=87&amp;oldid=prev</id>
		<title>98.50.111.140: Escape remaining {{md5}} token.</title>
		<link rel="alternate" type="text/html" href="https://aug.quest/info/index.php?title=Booru_Bulk_Downloader_(Userscript)&amp;diff=87&amp;oldid=prev"/>
		<updated>2026-10-09T03:51:21Z</updated>

		<summary type="html">&lt;p&gt;Escape remaining {{md5}} token.&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:51, 8 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l32&quot;&gt;Line 32:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 32:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Filenames Built From Tags ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Filenames Built From Tags ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Template tokens: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tags}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{id}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{rating}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{site}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{user}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{md5}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ext}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — default &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tags}}&amp;lt;/nowiki&amp;gt;__&amp;lt;nowiki&amp;gt;{{id}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. The extension comes from the real file URL, not the thumbnail. The sanitizer strips &amp;lt;code&amp;gt;\ / : * ? &quot; &amp;amp;lt; &amp;amp;gt; |&amp;lt;/code&amp;gt; and control characters, collapses whitespace, trims trailing dots, guards Windows reserved names (&amp;lt;code&amp;gt;CON&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LPT1&amp;lt;/code&amp;gt;), truncates on a tag boundary at roughly 170 characters, and suffixes &amp;lt;code&amp;gt;_2&amp;lt;/code&amp;gt; on collisions inside a batch.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Template tokens: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tags}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{id}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{rating}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{site}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{user}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&amp;lt;nowiki&lt;/ins&gt;&amp;gt;{{md5}}&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt;&lt;/ins&gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{ext}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; — default &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tags}}&amp;lt;/nowiki&amp;gt;__&amp;lt;nowiki&amp;gt;{{id}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. The extension comes from the real file URL, not the thumbnail. The sanitizer strips &amp;lt;code&amp;gt;\ / : * ? &quot; &amp;amp;lt; &amp;amp;gt; |&amp;lt;/code&amp;gt; and control characters, collapses whitespace, trims trailing dots, guards Windows reserved names (&amp;lt;code&amp;gt;CON&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LPT1&amp;lt;/code&amp;gt;), truncates on a tag boundary at roughly 170 characters, and suffixes &amp;lt;code&amp;gt;_2&amp;lt;/code&amp;gt; on collisions inside a batch.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Download Engine ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Download Engine ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>98.50.111.140</name></author>
	</entry>
	<entry>
		<id>https://aug.quest/info/index.php?title=Booru_Bulk_Downloader_(Userscript)&amp;diff=86&amp;oldid=prev</id>
		<title>98.50.111.140: Escape the filename template tokens so they stop registering as missing templates.</title>
		<link rel="alternate" type="text/html" href="https://aug.quest/info/index.php?title=Booru_Bulk_Downloader_(Userscript)&amp;diff=86&amp;oldid=prev"/>
		<updated>2026-10-09T03:51:12Z</updated>

		<summary type="html">&lt;p&gt;Escape the filename template tokens so they stop registering as missing templates.&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:51, 8 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l32&quot;&gt;Line 32:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 32:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Filenames Built From Tags ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Filenames Built From Tags ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Template tokens: &amp;lt;code&amp;gt;{{tags}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{id}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{rating}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{site}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{user}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{md5}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{ext}}&amp;lt;/code&amp;gt; — default &amp;lt;code&amp;gt;{{tags}}__{{id}}&amp;lt;/code&amp;gt;. The extension comes from the real file URL, not the thumbnail. The sanitizer strips &amp;lt;code&amp;gt;\ / : * ? &quot; &amp;amp;lt; &amp;amp;gt; |&amp;lt;/code&amp;gt; and control characters, collapses whitespace, trims trailing dots, guards Windows reserved names (&amp;lt;code&amp;gt;CON&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LPT1&amp;lt;/code&amp;gt;), truncates on a tag boundary at roughly 170 characters, and suffixes &amp;lt;code&amp;gt;_2&amp;lt;/code&amp;gt; on collisions inside a batch.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Template tokens: &amp;lt;code&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&amp;lt;nowiki&lt;/ins&gt;&amp;gt;{{tags}}&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt;&lt;/ins&gt;&amp;lt;/code&amp;gt; &amp;lt;code&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&amp;lt;nowiki&lt;/ins&gt;&amp;gt;{{id}}&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt;&lt;/ins&gt;&amp;lt;/code&amp;gt; &amp;lt;code&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&amp;lt;nowiki&lt;/ins&gt;&amp;gt;{{rating}}&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt;&lt;/ins&gt;&amp;lt;/code&amp;gt; &amp;lt;code&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&amp;lt;nowiki&lt;/ins&gt;&amp;gt;{{site}}&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt;&lt;/ins&gt;&amp;lt;/code&amp;gt; &amp;lt;code&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&amp;lt;nowiki&lt;/ins&gt;&amp;gt;{{user}}&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt;&lt;/ins&gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{md5}}&amp;lt;/code&amp;gt; &amp;lt;code&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&amp;lt;nowiki&lt;/ins&gt;&amp;gt;{{ext}}&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt;&lt;/ins&gt;&amp;lt;/code&amp;gt; — default &amp;lt;code&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&amp;lt;nowiki&lt;/ins&gt;&amp;gt;{{tags}}&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt;&lt;/ins&gt;__&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;nowiki&amp;gt;&lt;/ins&gt;{{id}}&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/nowiki&amp;gt;&lt;/ins&gt;&amp;lt;/code&amp;gt;. The extension comes from the real file URL, not the thumbnail. The sanitizer strips &amp;lt;code&amp;gt;\ / : * ? &quot; &amp;amp;lt; &amp;amp;gt; |&amp;lt;/code&amp;gt; and control characters, collapses whitespace, trims trailing dots, guards Windows reserved names (&amp;lt;code&amp;gt;CON&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LPT1&amp;lt;/code&amp;gt;), truncates on a tag boundary at roughly 170 characters, and suffixes &amp;lt;code&amp;gt;_2&amp;lt;/code&amp;gt; on collisions inside a batch.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Download Engine ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Download Engine ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>98.50.111.140</name></author>
	</entry>
	<entry>
		<id>https://aug.quest/info/index.php?title=Booru_Bulk_Downloader_(Userscript)&amp;diff=84&amp;oldid=prev</id>
		<title>98.50.111.140: Adding August&#039;s published userscript to the Work &amp; Systems record.</title>
		<link rel="alternate" type="text/html" href="https://aug.quest/info/index.php?title=Booru_Bulk_Downloader_(Userscript)&amp;diff=84&amp;oldid=prev"/>
		<updated>2026-10-09T03:51:00Z</updated>

		<summary type="html">&lt;p&gt;Adding August&amp;#039;s published userscript to the Work &amp;amp; Systems record.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Booru Bulk Downloader&amp;#039;&amp;#039;&amp;#039; is a browser userscript written by [[August Casso]] that puts download controls directly onto booru gallery pages, so full-resolution originals can be pulled in bulk without ever opening a post page.&lt;br /&gt;
&lt;br /&gt;
This is the one piece of software in the archive written for a general audience rather than for August&amp;#039;s own work: it exists because scraping a gallery one post at a time is a waste of an evening.&lt;br /&gt;
&lt;br /&gt;
== The Script ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 1.0.1&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;License:&amp;#039;&amp;#039;&amp;#039; MIT&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Size:&amp;#039;&amp;#039;&amp;#039; ~44 KB / 1,122 lines&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Runs on:&amp;#039;&amp;#039;&amp;#039; Tampermonkey, Greasemonkey, Violentmonkey&lt;br /&gt;
&lt;br /&gt;
=== Install ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Greasy Fork:&amp;#039;&amp;#039;&amp;#039; [https://greasyfork.org/en/scripts/599354-booru-bulk-downloader greasyfork.org/en/scripts/599354-booru-bulk-downloader]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GitHub (canonical source):&amp;#039;&amp;#039;&amp;#039; [https://github.com/Reduxed/booru-bulk-downloader github.com/Reduxed/booru-bulk-downloader]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OpenUserJS:&amp;#039;&amp;#039;&amp;#039; [https://openuserjs.org/scripts/reductedharmgmail.com/Booru_Bulk_Downloader openuserjs.org/scripts/reductedharmgmail.com/Booru_Bulk_Downloader]&lt;br /&gt;
&lt;br /&gt;
== What It Does ==&lt;br /&gt;
&lt;br /&gt;
A &amp;#039;&amp;#039;&amp;#039;checkbox&amp;#039;&amp;#039;&amp;#039; and a &amp;#039;&amp;#039;&amp;#039;download arrow&amp;#039;&amp;#039;&amp;#039; land on every thumbnail in a gallery. The checkbox adds an image to the batch — shift-click takes a range. The arrow grabs that one image&amp;#039;s full-resolution original immediately. A draggable panel in the bottom-right corner holds the running count, &amp;#039;&amp;#039;&amp;#039;Download selected&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Save as .zip&amp;#039;&amp;#039;&amp;#039;, Select all / Clear / Retry failed, and the filename options. &amp;#039;&amp;#039;&amp;#039;Alt+D&amp;#039;&amp;#039;&amp;#039; downloads the selection; &amp;#039;&amp;#039;&amp;#039;Alt+A&amp;#039;&amp;#039;&amp;#039; selects everything.&lt;br /&gt;
&lt;br /&gt;
== The Hard Part: Finding The Original ==&lt;br /&gt;
&lt;br /&gt;
The thumbnail &amp;lt;code&amp;gt;&amp;amp;lt;img&amp;amp;gt;&amp;lt;/code&amp;gt; is never the original, and every booru hides the original differently. The resolver works in three tiers, cheapest first, cached per post id:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;DOM attribute&amp;#039;&amp;#039;&amp;#039; — Danbooru puts &amp;lt;code&amp;gt;data-file-url&amp;lt;/code&amp;gt; directly on the thumbnail. Zero extra requests.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Site JSON API&amp;#039;&amp;#039;&amp;#039; — &amp;lt;code&amp;gt;?page=dapi&amp;amp;amp;s=post&amp;amp;amp;q=index&amp;amp;amp;json=1&amp;amp;amp;id=N&amp;lt;/code&amp;gt; (Gelbooru family) or &amp;lt;code&amp;gt;post.json?tags=id:N&amp;lt;/code&amp;gt; (Moebooru family), returning &amp;lt;code&amp;gt;file_url&amp;lt;/code&amp;gt; plus tags.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Post page HTML&amp;#039;&amp;#039;&amp;#039; — fetch the post page and read &amp;lt;code&amp;gt;og:image&amp;lt;/code&amp;gt; and the tag links. Universal, and needs no API key. This is the tier that saves you when a site starts demanding credentials.&lt;br /&gt;
&lt;br /&gt;
Site support is a data array — host regex, item selector, id/link/original extractors, tag source, and API shape — so adding a booru is one object plus one &amp;lt;code&amp;gt;@match&amp;lt;/code&amp;gt; line. Anything exposing a &amp;lt;code&amp;gt;data-file-url&amp;lt;/code&amp;gt;-style attribute is handled by a built-in generic adapter.&lt;br /&gt;
&lt;br /&gt;
== Filenames Built From Tags ==&lt;br /&gt;
&lt;br /&gt;
Template tokens: &amp;lt;code&amp;gt;{{tags}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{id}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{rating}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{site}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{user}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{md5}}&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;{{ext}}&amp;lt;/code&amp;gt; — default &amp;lt;code&amp;gt;{{tags}}__{{id}}&amp;lt;/code&amp;gt;. The extension comes from the real file URL, not the thumbnail. The sanitizer strips &amp;lt;code&amp;gt;\ / : * ? &amp;quot; &amp;amp;lt; &amp;amp;gt; |&amp;lt;/code&amp;gt; and control characters, collapses whitespace, trims trailing dots, guards Windows reserved names (&amp;lt;code&amp;gt;CON&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LPT1&amp;lt;/code&amp;gt;), truncates on a tag boundary at roughly 170 characters, and suffixes &amp;lt;code&amp;gt;_2&amp;lt;/code&amp;gt; on collisions inside a batch.&lt;br /&gt;
&lt;br /&gt;
== Download Engine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GM_download&amp;lt;/code&amp;gt; first, for a real download-manager entry with the exact filename requested; then &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; → blob → object URL → &amp;lt;code&amp;gt;&amp;amp;lt;a download&amp;amp;gt;&amp;lt;/code&amp;gt;. A bare &amp;lt;code&amp;gt;&amp;amp;lt;a download&amp;amp;gt;&amp;lt;/code&amp;gt; is deliberately never used on its own, because the attribute is ignored cross-origin and would simply navigate the tab. Concurrency is a limited pool (default 3), with per-item success/error state and a retry action.&lt;br /&gt;
&lt;br /&gt;
== What Was Verified, And What Was Not ==&lt;br /&gt;
&lt;br /&gt;
Markup and APIs were checked against live sites rather than assumed:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;safebooru.org&amp;#039;&amp;#039;&amp;#039; — &amp;lt;code&amp;gt;span.thumb &amp;amp;gt; a &amp;amp;gt; img.preview&amp;lt;/code&amp;gt;, tags already present in &amp;lt;code&amp;gt;img[title]&amp;lt;/code&amp;gt;; dapi JSON fields confirmed.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;konachan.net&amp;#039;&amp;#039;&amp;#039; — &amp;lt;code&amp;gt;ul#post-list-posts &amp;amp;gt; li#p&amp;amp;lt;id&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;post.json?tags=id:N&amp;lt;/code&amp;gt; answered 200. This one exposed a real trap: the true original is &amp;lt;code&amp;gt;a.original-file-unchanged&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;/image/…&amp;lt;/code&amp;gt;, while &amp;lt;code&amp;gt;a#highres&amp;lt;/code&amp;gt; is only the converted &amp;lt;code&amp;gt;/jpeg/&amp;lt;/code&amp;gt; &amp;quot;larger version&amp;quot; and &amp;lt;code&amp;gt;og:image&amp;lt;/code&amp;gt; is the &amp;lt;code&amp;gt;/sample/&amp;lt;/code&amp;gt;. The selector list prefers &amp;lt;code&amp;gt;/image/&amp;lt;/code&amp;gt; accordingly.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Not verified live:&amp;#039;&amp;#039;&amp;#039; Danbooru, Gelbooru.com and e621 — written from their published conventions, and they degrade to the HTML tier if the faster tiers miss.&lt;br /&gt;
&lt;br /&gt;
Building it also caught a junk &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; pseudo-tag from the tag-link scraper, an operator-precedence bug in the e621 id resolver, and a dead generic fallback.&lt;br /&gt;
&lt;br /&gt;
== Known Gotchas ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Chrome blocks the second automatic download&amp;#039;&amp;#039;&amp;#039; unless &amp;#039;&amp;#039;Automatic downloads&amp;#039;&amp;#039; is allowed for the booru host in site settings. &amp;lt;code&amp;gt;GM_download&amp;lt;/code&amp;gt; dodges most of this, not all of it.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Gelbooru.com and rule34.xxx now require an API key&amp;#039;&amp;#039;&amp;#039; for the dapi. Paste your &amp;lt;code&amp;gt;api_key&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt; into the script&amp;#039;s options, or let it fall through to the slower, key-free HTML tier.&lt;br /&gt;
&lt;br /&gt;
== Publication ==&lt;br /&gt;
&lt;br /&gt;
Published in October 2026 to three hosts, each independently verified rather than assumed:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Greasy Fork&amp;#039;&amp;#039;&amp;#039; — listing live, served file matches the release apart from the two &amp;lt;code&amp;gt;@updateURL&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;@downloadURL&amp;lt;/code&amp;gt; lines Greasy Fork injects.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GitHub&amp;#039;&amp;#039;&amp;#039; — &amp;lt;code&amp;gt;Reduxed/booru-bulk-downloader&amp;lt;/code&amp;gt;, public, the canonical source.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OpenUserJS&amp;#039;&amp;#039;&amp;#039; — served source confirmed byte-identical to the release, 44,970 bytes and 1,122 lines.&lt;br /&gt;
&lt;br /&gt;
The OpenUserJS upload initially failed with &amp;lt;code&amp;gt;400 Selected file is not JavaScript.&amp;lt;/code&amp;gt; despite the correct filename and byte count. The cause was the multipart part type: the attached File reported &amp;lt;code&amp;gt;text/plain&amp;lt;/code&amp;gt; because the staged resource used the default MIME. Staging it with a JavaScript MIME made the File report &amp;lt;code&amp;gt;text/javascript&amp;lt;/code&amp;gt; and the upload went straight through. The bytes were never the problem.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[All Billing LLC]]&lt;br /&gt;
* [[August Casso]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Augwiki]]&lt;/div&gt;</summary>
		<author><name>98.50.111.140</name></author>
	</entry>
</feed>