Digital Raws: Difference between revisions

From Yuri Project
Note that Amazon method will not work soon
m add javascript: prefix i forgor 💀
 
(12 intermediate revisions by the same user not shown)
Line 5: Line 5:
== Online sources ==
== Online sources ==


Raws can often be found on piracy websites dedicated to hosting them (none are listed here to avoid link rot, but they can be found on the Internet). Be aware that some websites will add watermarks; since it is best practice to not keep watermarks from these sites (the only kind of acceptable watermark is an author watermark), one will either have to manually clean them or find a different source.
Raws can often be found on piracy websites dedicated to hosting them (none are listed here to avoid link rot, but they can be found on the Internet). They are often lower quality than ripping the raws yourself, so this is not preferred. Be aware that some websites will add watermarks; since it is best practice to not keep watermarks from these sites (the only kind of acceptable watermark is an author watermark), one will either have to manually clean them or find a different source.


== Useful tools ==
== Useful tools ==
Line 11: Line 11:
There are some general-purpose manga downloading tools; a notable one is [https://github.com/manga-download/hakuneko HakuNeko]. [https://raws.alexeliot.dev/ Alex's Raw Downloader] is really simple to use for sites that it's compatible with (click "Info" on the site for a full list of compatible sites).
There are some general-purpose manga downloading tools; a notable one is [https://github.com/manga-download/hakuneko HakuNeko]. [https://raws.alexeliot.dev/ Alex's Raw Downloader] is really simple to use for sites that it's compatible with (click "Info" on the site for a full list of compatible sites).


Websites that allow online viewing of manga will often render the images in a <code>&lt;canvas&gt;</code> element, which can then be extracted with browser extensions like [https://chromewebstore.google.com/detail/canvas-downloader-find-an/dgfcgcafnnbdpojemnkiiilnnghebgja?pli=1 Canvas Downloader for Chrome], [https://chromewebstore.google.com/detail/imageassistant-batch-imag/dbjbempljhcmhlfpfacalomonjpalpko?hl=en ImageAssistant for Chrome] or [https://addons.mozilla.org/en-GB/firefox/addon/image-picka/ Image Picka for Firefox], or using [[#Notes_on_canvas_ripping|bookmarklets]]. Be aware that resampling may occur. Some websites like Bookwalker add a near-invisible barcode at the bottom that points to your account; one should take care to remove the 3 bottom pixels of all pages.
Websites that allow online viewing of manga will often render the images in a <code>&lt;canvas&gt;</code> element, which can then be extracted with [[#Canvas_ripping|canvas ripping]], or using browser extensions like [https://chromewebstore.google.com/detail/canvas-downloader-find-an/dgfcgcafnnbdpojemnkiiilnnghebgja?pli=1 Canvas Downloader for Chrome], [https://chromewebstore.google.com/detail/imageassistant-batch-imag/dbjbempljhcmhlfpfacalomonjpalpko?hl=en ImageAssistant for Chrome] or [https://addons.mozilla.org/en-GB/firefox/addon/image-picka/ Image Picka for Firefox]. Be aware that resampling may occur. Some websites like Bookwalker add a near-invisible barcode at the bottom that points to your account, which can be difficult to remove.


A useful tool is [https://stackoverflow.com/a/57741525/5696269 this Stack Overflow answer] which provides a script/bookmarklet that re-enables the ability to right-click on websites that have disabled it.
A useful tool is [https://stackoverflow.com/a/57741525/5696269 this Stack Overflow answer] which provides a script/bookmarklet that re-enables the ability to right-click on websites that have disabled it.
Line 17: Line 17:
== Screenshotting ==
== Screenshotting ==


Usually an easy way, but can be low quality due to the resampling that may occur, and is labor-intensive.
Usually possible to perform, but is almost always lower quality due to the resampling that may occur, and is labor-intensive. Basically, don’t rip manga pages this way.


== PDF ==
== PDF ==
Line 42: Line 42:
##: This will output the files in the same directory as the file. Change the final argument to change the path of the output directory.
##: This will output the files in the same directory as the file. Change the final argument to change the path of the output directory.


== Amazon ==
== Rakuten Books / Kobo ==
 
This information is available in the Google document [https://docs.google.com/document/d/1UHFpVuuMCG2eOtNhpXlBbuqmxjbzwEIayPzZiXPq9W8/edit?tab=t.0 Guide to buy and rip books from Rakuten Books].


<blockquote>This will no longer work as of 2025-02-26.‎</blockquote>
== Canvas ripping ==


This requires extremely light knowledge of Python. No code is required. Be aware this method is often unreliable and can give low-resolution raws.
Canvas ripping involves obtaining raws by extracting image content from its already-rendered form on the website.


# Buy the manga (on Amazon)
Advantages:
# Go to your content library [[File:Amazon Content Library.png|600px|thumb|center]]
* It usually can be performed with just a web browser and no external software.
# Find the manga
* It doesn’t rely on DRM-cracking shenanigans.
# Select "Download & transfer via USB" and download the archive [[File:Amazon Content Download.png|600px|thumb|center]]
* If you know a bit of web dev these methods are very easy to develop and modify.
# Download [https://www.python.org/downloads/ Python]
# Ensure Python is on your PATH variable in some way
# Clone the https://github.com/kevinhendricks/KindleUnpack git repo
# Open the KindleUnpack directory in a terminal
# Run <code> $ python .\KindleUnpack.pyw</code>
# A GUI should appear [[File:KindleUnpack GUI Open.png|600px|thumb|center]]
# Select the Kindle file as the "input file"
# Select the output directory
# Check "Use HD Images If Present"
# Click the "Start" button [[File:KindleUnpack Done.png|600px|thumb|center|Successful Kindle archive extraction]]
# The file will be extracted to the output directory. It will have several directories, but within at least one somewhere there will be an image directory with the extracted images. [[File:Amazon Kindle Directory Extracted.png|600px|thumb|center|One possible location, the images may be elsewhere within the directory structure depending on the type of archive, and how it was put together.]]


== Bookwalker ==
Disadvantages:
* Might involve more manual work than some methods (though it’s still fast anyway).
* The resulting files will be PNG files instead of the original JPEGs/WEBPs, and are thus generally larger (you can use [https://yuri-project.net/tools/compress our image compression tool] to reduce their size a little, but it still won’t be as small).
* You have to be careful to avoid resampling, as if the images are resized on the website before you download them, quality is reduced.


This requires downloading a modified Chromium executable on a Windows computer and the ability to run a PowerShell command.
If you want to use canvas-ripping, here is a brief comparison of some online bookstores that I compared for this purpose:


'''Warning''': The Chromium client downloaded here bypasses safety features and '''should not be used for anything other than downloading manga from Bookwalker'''.
* BookWalker: The highest quality of the options I found.
* cmoa: Lower quality than Bookwalker, at least in the preview.
* k-manga: The preview resized the image 4px smaller than the original resolution, which really messes up screentones.
* Kobo: Region-locked, so I didn’t try it (it’s possible to insert fake details to get around the region lock).
* BookLive: Slightly lower quality than BookWalker (at least in the preview).


These instructions apply to the latest version at the time of writing, version <code>0.3.3</code>:
For each site, we give a code snippet that scrapes from that site. The intended usage is to save the code snippet as a bookmark in your web browser, click the bookmark while looking at the site, and then scroll through the manga to download all of the pages. Alternatively, you can go open developer tools (e.g. via inspect element) and paste the snippets in the “Console” tab.


# [[File:BookwalkerDownloaderSized.webp|right|200px|thumb|Bookwalker window sized for downloading]]Buy the manga on Bookwalker. For most Japanese releases, you will need to use the Japanese site, not the global site.
=== BookWalker ===
# Download https://github.com/xuzhengyi1995/Manga_downloader/releases/latest
# Unzip the file <code>BW-downloader-chrome-bin.zip</code>.
# Open a powsershell or cmd in the unzipped browser dir:
## Navigate to the unzipped directory in explorer.
## Shift + right-click in the folder.
## Select "Open PowerShell window here".
# Open the browser with command line: <code>.\chrome.exe --user-data-dir=c:\bw-downloader-profile --no-sandbox</code>
# Log into you Bookwalker account in the launched Chromium window.
# Open the book you want to rip in the viewer.
# Adjust the window so exactly one page is visible.
# If you can get the script to automatically click (step 6 [https://github.com/xuzhengyi1995/Manga_downloader?tab=readme-ov-file#old-version here]), that's good, but it is not working at the time of writing due to Bookwalker code changes.
# Instead, you can just click through the manga you are ripping, one page at a time (giving each page enough time to load).
# [[File:BookwalkerDownloadedFolder.webp|right|200px|thumb]] After you've clicked through all the pages you want to rip, the pages will be in <code>C:\bw_export_data</code> under a folder with a name matching the ID in the Bookwalker URL.


Put the reader in vertical mode, make sure you’re zoomed out, and have the window be taller than it is wide. Tested on 2025-10-18 on Chromium; Firefox doesn’t work directly, but you can use a GreaseMonkey script instead.


<pre>
javascript:(()=>{const t=new Set,e=document.createElement("a"),a=document.querySelector(".dummy"),n=a.width,d=a.height;setInterval(()=>{for(const o of document.getElementById("canvasCluster").children){const c=o.children[1];if(!o.id.startsWith("wideScreen")||255!==c.getContext("2d").getImageData(0,0,1,1).data[3])continue;if(c.height!==a.height)throw new Error("pages not at full height");a.getContext("2d").drawImage(c,Math.ceil((c.width-n)/2),0,n,d,0,0,n,d);const i=o.id.slice(10).padStart(3,"0");t.has(i)||(e.href=a.toDataURL(),e.download=`${i}.png`,e.click(),t.add(i))}},100)})();
</pre>


=== Creating a shortcut ===
<div class="mw-collapsible mw-collapsed">
[[File:Bookwalker_Chromium_Shortcut.webp|200px|thumb|right|Creating a shortcut for Bookwalker downloader Chromium]]
'''Source code'''
<pre class="mw-collapsible-content">
const done = new Set();
const a = document.createElement("a");
const dummy = document.querySelector(".dummy");
const w = dummy.width;
const h = dummy.height;
setInterval((() => {
for (const child of document.getElementById("canvasCluster").children) {
const canvas = child.children[1];
if (!child.id.startsWith("wideScreen") || 255 !== canvas.getContext("2d").getImageData(0, 0, 1, 1).data[3]) {
continue;
}
if (canvas.height !== dummy.height) {
throw new Error("pages not at full height");
}
dummy.getContext("2d").drawImage(canvas, Math.ceil((canvas.width - w) / 2), 0, w, h, 0, 0, w, h);
const page_number = child.id.slice(10).padStart(3, "0");
if (done.has(page_number)) continue;
a.href = dummy.toDataURL();
a.download = `${page_number}.png`;
a.click();
done.add(page_number);
}
}), 100);
</pre>
</div>


To create a shortcut that launches the modified Chromium application with the appropriate permissions:
<div class="mw-collapsible mw-collapsed">
# Right-click on <code>chrome.exe</code> and select "Create shortcut".
'''GreaseMonkey userscript for Firefox'''
# Right-click on the new shortcut and select "Properties".
<pre class="mw-collapsible-content">
# Select "Target" and move the cursor to the end.
// ==UserScript==
# Paste <code> --user-data-dir=c:\bw-downloader-profile --no-sandbox</code> (including the space before)
// @name    BookWalker scraper
# The new "Target" should look like <code>C:\path\to\Chrome-bin\chrome.exe --user-data-dir=c:\bw-downloader-profile --no-sandbox</code>.
// @version  1
// @grant    GM.registerMenuCommand
// @match  https://viewer-trial.bookwalker.jp/*
// @match  https://viewer.bookwalker.jp/*
// ==/UserScript==


== Rakuten Books / Kobo ==
// un-override right-click
document.body.addEventListener("contextmenu", e => e.stopPropagation());


This information is available in the Google document [https://docs.google.com/document/d/1UHFpVuuMCG2eOtNhpXlBbuqmxjbzwEIayPzZiXPq9W8/edit?tab=t.0 Guide to buy and rip books from Rakuten Books].
GM.registerMenuCommand("Start scraping", () => {
const done = new Set();
const a = document.createElement("a");
const dummy = document.createElement("canvas");
const w = parseInt(prompt("Enter the width in pixels of each page"));
if (isNaN(w)) return;
dummy.width = w;
setInterval((() => {
for (const child of document.getElementById("canvasCluster").children) {
const canvas = child.children[1];
if (!child.id.startsWith("wideScreen") || 255 !== canvas.getContext("2d").getImageData(0, 0, 1, 1).data[3]) {
continue;
}
const h = canvas.height;
dummy.height = h;
dummy.getContext("2d").drawImage(canvas, Math.ceil((canvas.width - w) / 2), 0, w, h, 0, 0, w, h);
const page_number = child.id.slice(10).padStart(3, "0");
if (done.has(page_number)) continue;
a.href = dummy.toDataURL();
a.download = `${page_number}.png`;
a.click();
done.add(page_number);
}
}), 100);
});
</pre>
</div>


== Notes on canvas ripping ==
If you encounter the “pages not at full height” error, make sure you’re zoomed out and in vertical mode.


The sample size here is 1, so this information might not be accurate for all manga. For the volume I did try, I found some things:
When using the Firefox version, you’ll have to enter in the width of the pages manually. To do this, after you have zoomed out, right-click and copy (or save) any image whose content stretches from the left to the right of the page (usually the cover image), and measure its width in your preferred image editor.


* BookWalker: Inserts a barcode onto pages. This is hard to remove as it can cover the art, including screentones. It can be annoying to resize the window to the right size such that the image is at its native resolution.
If you ever want to use horizontal mode (which may require modifications to the script), keep in mind that the bottom two rows of pixels will be a barcode that identifies your user account. So make sure to crop this out.
* cmoa: Lower quality than Bookwalker, at least in the preview.
* k-manga: The preview resized the image 4px smaller than the original resolution, which really messes up screentones.
* Kobo: Region-locked, so I didn’t try it (it’s possible to insert fake details to get around the region lock).
* BookLive: Slightly lower quality than BookWalker (at least in the preview), but very easy to scrape from.


All the below Javascript snippets can be easily formatted and understood. So if you know a little Javascript it’d be pretty easy to adapt them to whatever site you want to canvas rip from.
The reason the normal bookmarklet doesn’t work on Firefox is that BookWalker loads the images in an entirely different way on Firefox than Chromium – on Firefox, it uses <code>&lt;img&gt;</code> tags, while on Chromium it uses XHR. The images are always loaded cross-origin, but the <code>&lt;img&gt;</code> method allows the image to be drawn directly to a canvas without going through CORS. As a result of not using CORS, the canvas will then be considered “tainted” and its pixel data may not be extracted by JavaScript (unless that JavaScript is running inside GreaseMonkey).


=== BookLive ===
=== BookLive ===


This bookmarklet can also be used for cmoa. Open the manga, put it in vertical orientation, click the bookmarklet and then start scrolling down. The resulting PNGs are quite large – you may want to reduce their size with oxipng.
This bookmarklet can also be used for cmoa. Put the reader in vertical mode, make sure you’re zoomed out, and have the window be taller than it is wide. Tested on 2025-08-22.


<pre>
<pre>
Line 124: Line 166:


=== Zero Sum Online ===
=== Zero Sum Online ===
Tested on 2025-02-03.


<pre>
<pre>
Line 129: Line 173:
</pre>
</pre>


=== BookWalker ===
=== Take Comic ===
 
To prevent resampling, follow these steps:
 
<ol>
<li>Open developer tools (e.g. using inspect element), go to the Sources tab, and open the “Page” sub-tab on the left.</li>
<li>On the left sidebar, find the file top → takecomic.jp → js/viewer → viewer.js. Right-click it and select “Override Content”.</li>
<li>Press the <code>{}</code> button in the bottom-left of the middle panel to see the code.</li>
<li>Press Ctrl+F, and search for “drawImage”. There should be a section that says something along the lines of:
<pre>
o.width = y * b,
o.height = w * b,
s.drawImage(c, 0, 0, r, i, 0, 0, y * b, w * b),
</pre>
In these three lines, replace both instances of <code>y * b</code> with <code>r</code>, and both instances of <code>w * b</code> with <code>i</code> (of course, adjust accordingly if these variables have different names).</li>
<li>Save the file and reload the page.</li>
</ol>


This '''does not''' remove the barcodes, so use with caution. I’m putting it here because the same techniques can likely be used on other sites. As with BookLive, put the reader in vertical mode and make sure the images are at their native resolution.
Now use the bookmarklet:


<pre>
<pre>
javascript:(()=>{const done=new Set,a=document.createElement("a");setInterval((()=>{for(const e of document.getElementById("canvasCluster").children){if(!e.id.startsWith("wideScreen"))continue;const t=e.id.slice(10).padStart(3,"0");if(done.has(t))continue;const n=e.children[1];255===n.getContext("2d").getImageData(0,0,n.width,n.height).data[3]&&(a.href=n.toDataURL(),a.download=`${t}.png`,a.click(),done.add(t))}}),100);})()
javascript:(()=>{const a=document.createElement("a"),q=new Map;let i=0;for(const p of document.querySelectorAll("#xCVPages>.-cv-page"))q.set(p,i++);setInterval(()=>{for(const p of document.querySelectorAll(".-cv-page.mode-rendered")){if(!q.has(p))continue;a.href=p.querySelector("canvas").toDataURL(),a.download=`${q.get(p)}.png`.padStart(7,"0"),a.click(),q.delete(p)}},100)})()
</pre>
</pre>
Tested on a free chapter on 2025-10-17.
== Bookwalker alternative method ==
This is an alternative to the canvas ripping method, but is likely less convenient and secure.
This requires downloading a modified Chromium executable on a Windows computer and the ability to run a PowerShell command.
'''Warning''': The Chromium client downloaded here bypasses safety features and '''should not be used for anything other than downloading manga from Bookwalker'''.
These instructions apply to the latest version at the time of writing, version <code>0.3.3</code>:
# [[File:BookwalkerDownloaderSized.webp|right|200px|thumb|Bookwalker window sized for downloading]]Buy the manga on Bookwalker. For most Japanese releases, you will need to use the Japanese site, not the global site.
# Download https://github.com/xuzhengyi1995/Manga_downloader/releases/latest
# Unzip the file <code>BW-downloader-chrome-bin.zip</code>.
# Open a powsershell or cmd in the unzipped browser dir:
## Navigate to the unzipped directory in explorer.
## Shift + right-click in the folder.
## Select "Open PowerShell window here".
# Open the browser with command line: <code>.\chrome.exe --user-data-dir=c:\bw-downloader-profile --no-sandbox</code>
# Log into you Bookwalker account in the launched Chromium window.
# Open the book you want to rip in the viewer.
# Adjust the window so exactly one page is visible.
# If you can get the script to automatically click (step 6 [https://github.com/xuzhengyi1995/Manga_downloader?tab=readme-ov-file#old-version here]), that's good, but it is not working at the time of writing due to Bookwalker code changes.
# Instead, you can just click through the manga you are ripping, one page at a time (giving each page enough time to load).
# [[File:BookwalkerDownloadedFolder.webp|right|200px|thumb]] After you've clicked through all the pages you want to rip, the pages will be in <code>C:\bw_export_data</code> under a folder with a name matching the ID in the Bookwalker URL.
=== Creating a shortcut ===
[[File:Bookwalker_Chromium_Shortcut.webp|200px|thumb|right|Creating a shortcut for Bookwalker downloader Chromium]]
To create a shortcut that launches the modified Chromium application with the appropriate permissions:
# Right-click on <code>chrome.exe</code> and select "Create shortcut".
# Right-click on the new shortcut and select "Properties".
# Select "Target" and move the cursor to the end.
# Paste <code> --user-data-dir=c:\bw-downloader-profile --no-sandbox</code> (including the space before)
# The new "Target" should look like <code>C:\path\to\Chrome-bin\chrome.exe --user-data-dir=c:\bw-downloader-profile --no-sandbox</code>.

Latest revision as of 23:57, 18 October 2025

The first step in the process of scanlating any manga is obtaining the raws. The first step is to download the file the raws are in, then the second step is to extract the raws from this file.

After extraction, they made need to be post-processed.

Online sources[edit]

Raws can often be found on piracy websites dedicated to hosting them (none are listed here to avoid link rot, but they can be found on the Internet). They are often lower quality than ripping the raws yourself, so this is not preferred. Be aware that some websites will add watermarks; since it is best practice to not keep watermarks from these sites (the only kind of acceptable watermark is an author watermark), one will either have to manually clean them or find a different source.

Useful tools[edit]

There are some general-purpose manga downloading tools; a notable one is HakuNeko. Alex's Raw Downloader is really simple to use for sites that it's compatible with (click "Info" on the site for a full list of compatible sites).

Websites that allow online viewing of manga will often render the images in a <canvas> element, which can then be extracted with canvas ripping, or using browser extensions like Canvas Downloader for Chrome, ImageAssistant for Chrome or Image Picka for Firefox. Be aware that resampling may occur. Some websites like Bookwalker add a near-invisible barcode at the bottom that points to your account, which can be difficult to remove.

A useful tool is this Stack Overflow answer which provides a script/bookmarklet that re-enables the ability to right-click on websites that have disabled it.

Screenshotting[edit]

Usually possible to perform, but is almost always lower quality due to the resampling that may occur, and is labor-intensive. Basically, don’t rip manga pages this way.

PDF[edit]

PDF raws are most common when obtaining self-published raws from websites such as https://booth.pm/en

Most raw PDFs are single pages with the images embedded in each page. So the next step is to extract the images that are embedded. There are two tools that are often used.

  1. pdfcpu
    1. Install pdfcpu
      https://github.com/pdfcpu/pdfcpu/releases/latest
    2. Ensure the executable's directory is on your PATH variable
    3. Open the directory the PDF file is in
    4. Run $ pdfcpu.exe images extract .\RAW_INPUT.pdf
      This will output the files in the same directory as the file. To change the output directory, append an output directory path to the command.
  2. Poppler Tools' pdfimages tool
    1. Install Poppler Tools
      Linux
      https://poppler.freedesktop.org/
      Windows
      https://github.com/oschwartz10612/poppler-windows/releases
      OSX
      https://formulae.brew.sh/formula/poppler
    2. Ensure the bin directory is on your PATH variable
    3. Open the directory the PDF file is in
    4. Run $ pdfimages -png RAW_FILE.pdf ./
      This will output the files in the same directory as the file. Change the final argument to change the path of the output directory.

Rakuten Books / Kobo[edit]

This information is available in the Google document Guide to buy and rip books from Rakuten Books.

Canvas ripping[edit]

Canvas ripping involves obtaining raws by extracting image content from its already-rendered form on the website.

Advantages:

  • It usually can be performed with just a web browser and no external software.
  • It doesn’t rely on DRM-cracking shenanigans.
  • If you know a bit of web dev these methods are very easy to develop and modify.

Disadvantages:

  • Might involve more manual work than some methods (though it’s still fast anyway).
  • The resulting files will be PNG files instead of the original JPEGs/WEBPs, and are thus generally larger (you can use our image compression tool to reduce their size a little, but it still won’t be as small).
  • You have to be careful to avoid resampling, as if the images are resized on the website before you download them, quality is reduced.

If you want to use canvas-ripping, here is a brief comparison of some online bookstores that I compared for this purpose:

  • BookWalker: The highest quality of the options I found.
  • cmoa: Lower quality than Bookwalker, at least in the preview.
  • k-manga: The preview resized the image 4px smaller than the original resolution, which really messes up screentones.
  • Kobo: Region-locked, so I didn’t try it (it’s possible to insert fake details to get around the region lock).
  • BookLive: Slightly lower quality than BookWalker (at least in the preview).

For each site, we give a code snippet that scrapes from that site. The intended usage is to save the code snippet as a bookmark in your web browser, click the bookmark while looking at the site, and then scroll through the manga to download all of the pages. Alternatively, you can go open developer tools (e.g. via inspect element) and paste the snippets in the “Console” tab.

BookWalker[edit]

Put the reader in vertical mode, make sure you’re zoomed out, and have the window be taller than it is wide. Tested on 2025-10-18 on Chromium; Firefox doesn’t work directly, but you can use a GreaseMonkey script instead.

javascript:(()=>{const t=new Set,e=document.createElement("a"),a=document.querySelector(".dummy"),n=a.width,d=a.height;setInterval(()=>{for(const o of document.getElementById("canvasCluster").children){const c=o.children[1];if(!o.id.startsWith("wideScreen")||255!==c.getContext("2d").getImageData(0,0,1,1).data[3])continue;if(c.height!==a.height)throw new Error("pages not at full height");a.getContext("2d").drawImage(c,Math.ceil((c.width-n)/2),0,n,d,0,0,n,d);const i=o.id.slice(10).padStart(3,"0");t.has(i)||(e.href=a.toDataURL(),e.download=`${i}.png`,e.click(),t.add(i))}},100)})();

Source code

const done = new Set();
const a = document.createElement("a");
const dummy = document.querySelector(".dummy");
const w = dummy.width;
const h = dummy.height;
setInterval((() => {
	for (const child of document.getElementById("canvasCluster").children) {
		const canvas = child.children[1];
		if (!child.id.startsWith("wideScreen") || 255 !== canvas.getContext("2d").getImageData(0, 0, 1, 1).data[3]) {
			continue;
		}
		if (canvas.height !== dummy.height) {
			throw new Error("pages not at full height");
		}
		dummy.getContext("2d").drawImage(canvas, Math.ceil((canvas.width - w) / 2), 0, w, h, 0, 0, w, h);
		const page_number = child.id.slice(10).padStart(3, "0");
		if (done.has(page_number)) continue;
		a.href = dummy.toDataURL();
		a.download = `${page_number}.png`;
		a.click();
		done.add(page_number);
	}
}), 100);

GreaseMonkey userscript for Firefox

// ==UserScript==
// @name     BookWalker scraper
// @version  1
// @grant    GM.registerMenuCommand
// @match  https://viewer-trial.bookwalker.jp/*
// @match  https://viewer.bookwalker.jp/*
// ==/UserScript==

// un-override right-click
document.body.addEventListener("contextmenu", e => e.stopPropagation());

GM.registerMenuCommand("Start scraping", () => {
	const done = new Set();
	const a = document.createElement("a");
	const dummy = document.createElement("canvas");
	const w = parseInt(prompt("Enter the width in pixels of each page"));
	if (isNaN(w)) return;
	dummy.width = w;
	setInterval((() => {
		for (const child of document.getElementById("canvasCluster").children) {
			const canvas = child.children[1];
			if (!child.id.startsWith("wideScreen") || 255 !== canvas.getContext("2d").getImageData(0, 0, 1, 1).data[3]) {
				continue;
			}
			const h = canvas.height;
			dummy.height = h;
			dummy.getContext("2d").drawImage(canvas, Math.ceil((canvas.width - w) / 2), 0, w, h, 0, 0, w, h);
			const page_number = child.id.slice(10).padStart(3, "0");
			if (done.has(page_number)) continue;
			a.href = dummy.toDataURL();
			a.download = `${page_number}.png`;
			a.click();
			done.add(page_number);
		}
	}), 100);
});

If you encounter the “pages not at full height” error, make sure you’re zoomed out and in vertical mode.

When using the Firefox version, you’ll have to enter in the width of the pages manually. To do this, after you have zoomed out, right-click and copy (or save) any image whose content stretches from the left to the right of the page (usually the cover image), and measure its width in your preferred image editor.

If you ever want to use horizontal mode (which may require modifications to the script), keep in mind that the bottom two rows of pixels will be a barcode that identifies your user account. So make sure to crop this out.

The reason the normal bookmarklet doesn’t work on Firefox is that BookWalker loads the images in an entirely different way on Firefox than Chromium – on Firefox, it uses <img> tags, while on Chromium it uses XHR. The images are always loaded cross-origin, but the <img> method allows the image to be drawn directly to a canvas without going through CORS. As a result of not using CORS, the canvas will then be considered “tainted” and its pixel data may not be extracted by JavaScript (unless that JavaScript is running inside GreaseMonkey).

BookLive[edit]

This bookmarklet can also be used for cmoa. Put the reader in vertical mode, make sure you’re zoomed out, and have the window be taller than it is wide. Tested on 2025-08-22.

javascript:(()=>{const done=new Set,a=document.createElement("a"),cv=document.createElement("canvas"),c2=cv.getContext("2d");setInterval((()=>{for(const t of document.getElementById("content").children){if(!t.id.startsWith("content-p"))continue;const e=t.id.slice(9).padStart(3,"0");if(done.has(e))continue;const n=[...t.getElementsByTagName("img")];if(0===n.length||n.some((t=>!t.complete)))continue;const c=n.map(((t,e)=>{if(e===n.length-1)return[t,t.naturalHeight-2];const a=t.getBoundingClientRect(),c=n[e+1].getBoundingClientRect();return[t,Math.round((c.y-a.y)/a.height*t.naturalHeight)]}));cv.width=Math.max(...n.map((t=>t.naturalWidth))),cv.height=c.reduce(((t,[e,n])=>t+n),0);let o=0;for(const[t,e]of c)c2.drawImage(t,0,o),o+=e;a.href=cv.toDataURL(),a.download=`${e}.png`,a.click(),done.add(e)}}),100)})()

Zero Sum Online[edit]

Tested on 2025-02-03.

javascript:(()=>{const t=new Set,e=document.createElement("a"),a=document.createElement("canvas"),n=a.getContext("2d");setInterval((()=>{for(const c of document.getElementsByTagName("img")){if(!c.classList.item(0)?.endsWith("_page")||!c.alt.startsWith("page_")||!c.complete)continue;const o=c.alt.slice(5).padStart(3,"0");t.has(o)||(a.width=c.naturalWidth,a.height=c.naturalHeight,n.drawImage(c,0,0),e.href=a.toDataURL(),e.download=`${o}.png`,e.click(),t.add(o))}}),100);})()

Take Comic[edit]

To prevent resampling, follow these steps:

  1. Open developer tools (e.g. using inspect element), go to the Sources tab, and open the “Page” sub-tab on the left.
  2. On the left sidebar, find the file top → takecomic.jp → js/viewer → viewer.js. Right-click it and select “Override Content”.
  3. Press the {} button in the bottom-left of the middle panel to see the code.
  4. Press Ctrl+F, and search for “drawImage”. There should be a section that says something along the lines of:
    o.width = y * b,
    o.height = w * b,
    s.drawImage(c, 0, 0, r, i, 0, 0, y * b, w * b),
    
    In these three lines, replace both instances of y * b with r, and both instances of w * b with i (of course, adjust accordingly if these variables have different names).
  5. Save the file and reload the page.

Now use the bookmarklet:

javascript:(()=>{const a=document.createElement("a"),q=new Map;let i=0;for(const p of document.querySelectorAll("#xCVPages>.-cv-page"))q.set(p,i++);setInterval(()=>{for(const p of document.querySelectorAll(".-cv-page.mode-rendered")){if(!q.has(p))continue;a.href=p.querySelector("canvas").toDataURL(),a.download=`${q.get(p)}.png`.padStart(7,"0"),a.click(),q.delete(p)}},100)})()

Tested on a free chapter on 2025-10-17.

Bookwalker alternative method[edit]

This is an alternative to the canvas ripping method, but is likely less convenient and secure.

This requires downloading a modified Chromium executable on a Windows computer and the ability to run a PowerShell command.

Warning: The Chromium client downloaded here bypasses safety features and should not be used for anything other than downloading manga from Bookwalker.

These instructions apply to the latest version at the time of writing, version 0.3.3:

  1. Bookwalker window sized for downloading
    Buy the manga on Bookwalker. For most Japanese releases, you will need to use the Japanese site, not the global site.
  2. Download https://github.com/xuzhengyi1995/Manga_downloader/releases/latest
  3. Unzip the file BW-downloader-chrome-bin.zip.
  4. Open a powsershell or cmd in the unzipped browser dir:
    1. Navigate to the unzipped directory in explorer.
    2. Shift + right-click in the folder.
    3. Select "Open PowerShell window here".
  5. Open the browser with command line: .\chrome.exe --user-data-dir=c:\bw-downloader-profile --no-sandbox
  6. Log into you Bookwalker account in the launched Chromium window.
  7. Open the book you want to rip in the viewer.
  8. Adjust the window so exactly one page is visible.
  9. If you can get the script to automatically click (step 6 here), that's good, but it is not working at the time of writing due to Bookwalker code changes.
  10. Instead, you can just click through the manga you are ripping, one page at a time (giving each page enough time to load).
  11. After you've clicked through all the pages you want to rip, the pages will be in C:\bw_export_data under a folder with a name matching the ID in the Bookwalker URL.

Creating a shortcut[edit]

Creating a shortcut for Bookwalker downloader Chromium

To create a shortcut that launches the modified Chromium application with the appropriate permissions:

  1. Right-click on chrome.exe and select "Create shortcut".
  2. Right-click on the new shortcut and select "Properties".
  3. Select "Target" and move the cursor to the end.
  4. Paste --user-data-dir=c:\bw-downloader-profile --no-sandbox (including the space before)
  5. The new "Target" should look like C:\path\to\Chrome-bin\chrome.exe --user-data-dir=c:\bw-downloader-profile --no-sandbox.