Nhentai Scroll (Updated 2025)

scroll to read picture in nhentai, now supports all images

// ==UserScript==
// @name         Nhentai Scroll (Updated 2025)
// @namespace    https://ko-fi.com/greekie
// @version      1.0
// @description  scroll to read picture in nhentai, now supports all images
// @author       Greekie_10
// @match        https://nhentai.net/g/*/*/
// @require      https://code.jquery.com/jquery-3.5.1.min.js
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
	let target = '#image-container';
    let ic = $("#image-container");
    let num = parseInt($("span.num-pages").first().text());
    let img = ic.find("img");
    let src = img.attr("src");
    let base = src.slice(0, src.lastIndexOf("/") + 1);
    let width = img.attr("width");
    let height = img.attr("height");
	let start = parseInt(window.location.pathname.slice(0, -1).split('/').pop()) + 1;

	function insertImage(event) {
		let base = event.data.base;
		let i = event.data.i;
		let url = base + (i - 1).toString();

		if ($(target).find('img[src$="' + url + '.jpg"]').length > 0) {
			$('img[src$="' + url + '.jpg"]').after($(this));
		} else if ($(target).find('img[src$="' + url + '.png"]').length > 0) {
			$('img[src$="' + url + '.png"]').after($(this));
		} else if ($(target).find('img[src$="' + url + '.webp"]').length > 0) {
			$('img[src$="' + url + '.webp"]').after($(this));
		} else {
			$(this).appendTo(target);
		}
	}

	function loadImage(base, i, width, height) {
		let url = base + i.toString();
		
        // Try .jpg
        $('<img src="' + url + '.jpg">')
		.one("load", {base: base, i: i}, insertImage)
		.one("error", function() {
			// Fallback to .png
			$('<img src="' + url + '.png">')
			.one("load", {base: base, i: i}, insertImage)
			.one("error", function() {
				// Fallback to .webp
				$('<img src="' + url + '.webp">')
				.one("load", {base: base, i: i}, insertImage);
			});
		});
	}

	for (let i = start; i <= num; i++) {
		window.setTimeout(function() {
			loadImage(base, i, width, height);
		}, 750 * (i - start));
	}
})();