Pixeldrain Download Bypass (with zip file content support)

Bypass Pixeldrain Download Limit

Fra og med 06.12.2024. Se den nyeste version.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Pixeldrain Download Bypass (with zip file content support)
// @namespace    http://tampermonkey.net/
// @version      1.6.3
// @description  Bypass Pixeldrain Download Limit
// @author       MegaLime0, honey, Nurarihyon, ksynwa
// @match        https://pixeldrain.com/*
// @match        https://cdn.pd8.workers.dev/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=pixeldrain.com
// @grant        GM_openInTab
// @license      MIT
// ==/UserScript==

(function () {
    "use strict";

    const bypassUrl = "https://pd.cybar.xyz/";
    const idRegex = /\/api\/file\/(\w+)\//;
    const zipFileRegex = /\/api\/file\/(\w+)\/info\/zip\//;

    function getBypassUrls(urlType, url = "") {
        const currentUrl = window.location.href;

        if (urlType == "file") {
            const id = currentUrl.replace("https://pixeldrain.com/u/", "");
            const alteredUrl = bypassUrl + id;

            return alteredUrl;
        }

        if (urlType == "gallery") {
            const links = document.querySelectorAll("a.file");

            const bypassUrlList = [];
            const bypassUrlNames = [];

            links.forEach((link) => {
                const childDiv = link.querySelector("div");
                const backgroundUrl = childDiv.style.backgroundImage;

                const match = backgroundUrl.match(idRegex);

                if (match && match.length > 1) {
                    const alteredUrl = bypassUrl + match[1];
                    bypassUrlList.push(alteredUrl);
                    bypassUrlNames.push(link.textContent);
                }
            });

            return { bypassUrlList, bypassUrlNames };
        }

        if (urlType == "zipFile") {
            const zipFileSuffix = url.replace(
                "https://pixeldrain.com/api/file/",
                "",
            );
            return bypassUrl + zipFileSuffix;
        }
    }

    function handleButtonClick() {
        const currentUrl = window.location.href;

        if (currentUrl.includes("https://pixeldrain.com/u/")) {
            const alteredUrl = getBypassUrls("file");
            startDownload(alteredUrl);
        }

        if (currentUrl.includes("https://pixeldrain.com/l/")) {
            const links = getBypassUrls("gallery").bypassUrlList;

            links.forEach((link) => {
                startDownload(link);
            });
        }
    }

    function startDownload(link) {
        GM_openInTab(link);
    }

    function handleLinksButtonClick() {
        const popupBox = document.getElementById("popupBox");
        const popupClose = document.createElement("span");
        popupClose.innerHTML = "×";
        popupClose.style.position = "absolute";
        popupClose.style.top = "1px";
        popupClose.style.right = "7px";
        popupClose.style.cursor = "pointer";
        popupClose.onclick = function () {
            popupBox.style.display = "none";
        };

        popupBox.innerHTML = "";
        popupBox.appendChild(popupClose);

        const currentUrl = window.location.href;

        if (currentUrl.includes("https://pixeldrain.com/u/")) {
            const alteredUrl = getBypassUrls("file");
            const urlElement = document.createElement("a");
            urlElement.href = alteredUrl;
            urlElement.textContent = alteredUrl;
            popupBox.appendChild(urlElement);
        }

        if (currentUrl.includes("https://pixeldrain.com/l/")) {
            let result = getBypassUrls("gallery");
            let bypassLinks = result.bypassUrlList;
            let bypassNames = result.bypassUrlNames;

            const linksContainer = document.createElement("div");
            linksContainer.style.maxHeight = "calc(100% - 40px)";
            linksContainer.style.overflowY = "auto";
            linksContainer.style.paddingBottom = "10px";

            bypassLinks.forEach((link) => {
                const urlElement = document.createElement("a");
                urlElement.href = link;
                urlElement.textContent = link;
                urlElement.style.display = "block";
                linksContainer.appendChild(urlElement);
            });

            popupBox.appendChild(linksContainer);

            popupBox.style.display = "flex";
            popupBox.style.flexDirection = "column";
            popupBox.style.alignItems = "center";
            popupBox.style.justifyContent = "center";

            const buttonContainer = document.createElement("div");
            buttonContainer.style.display = "flex";
            buttonContainer.style.justifyContent = "center";
            buttonContainer.style.marginTop = "10px";

            const copyButton = document.createElement("button");
            copyButton.textContent = "🔗 Copy URL";
            copyButton.style.marginRight = "5px";
            copyButton.addEventListener("click", function () {
                const urls = bypassLinks.join("\n");
                navigator.clipboard.writeText(urls).then(
                    function () {
                        copyButton.textContent = "✔️ Copied";
                        setTimeout(function () {
                            copyButton.textContent = "🔗 Copy URL";
                        }, 2500);
                    },
                    function (err) {
                        console.error("Failed to copy URLs: ", err);
                    },
                );
            });
            buttonContainer.appendChild(copyButton);

            const saveButton = document.createElement("button");
            saveButton.textContent = "📄 Save as Text File";
            saveButton.style.marginLeft = "5px";
            saveButton.addEventListener("click", function () {
                const popupContent = document
                    .getElementById("popupBox")
                    .querySelectorAll("a");
                if (popupContent.length > 0) {
                    const currentUrl = window.location.href;
                    const fileIdMatch = currentUrl.match(/\/l\/([^/#?]+)/);
                    if (fileIdMatch && fileIdMatch.length > 1) {
                        const fileId = fileIdMatch[1];
                        const fileName = fileId + ".txt";
                        let content = "";
                        popupContent.forEach((link) => {
                            content += link.href + "\n";
                        });
                        const blob = new Blob([content.trim()], {
                            type: "text/plain",
                        });
                        const url = URL.createObjectURL(blob);
                        const a = document.createElement("a");
                        a.href = url;
                        a.download = fileName;
                        document.body.appendChild(a);
                        a.click();
                        document.body.removeChild(a);
                        URL.revokeObjectURL(url);
                    } else {
                        console.error(
                            "Failed to extract file identifier from URL.",
                        );
                    }
                } else {
                    console.error("Popup content not found.");
                }
            });
            buttonContainer.appendChild(saveButton);

            popupBox.appendChild(buttonContainer);
        }

        popupBox.style.display = "block";
    }

    if (window.location.href.includes("pixeldrain.com")) {
        const button = document.createElement("button");
        const downloadIcon = document.createElement("a");
        downloadIcon.className = "icon";
        downloadIcon.textContent = "download";
        downloadIcon.style.color = "#d7dde8";
        const downloadButtonText = document.createElement("span");
        downloadButtonText.textContent = "Download Bypass";
        button.appendChild(downloadIcon);
        button.appendChild(downloadButtonText);

        const linksButton = document.createElement("button");
        const linksIcon = document.createElement("i");
        linksIcon.className = "icon";
        linksIcon.textContent = "link";
        const linksButtonText = document.createElement("span");
        linksButtonText.textContent = "Show Bypass Links";
        linksButton.appendChild(linksIcon);
        linksButton.appendChild(linksButtonText);

        const popupBox = document.createElement("div");
        popupBox.style.zIndex = 20;
        popupBox.style.whiteSpace = "pre-line";
        popupBox.id = "popupBox";
        popupBox.style.display = "none";
        popupBox.style.position = "fixed";

        popupBox.style.top = "50%";
        popupBox.style.left = "50%";
        popupBox.style.transform = "translate(-50%, -50%)";
        popupBox.style.padding = "20px";
        popupBox.style.background = "#2f3541";
        popupBox.style.border = "2px solid #a4be8c";
        popupBox.style.color = "#d7dde8";
        popupBox.style.borderRadius = "10px";
        popupBox.style.width = "30%";
        popupBox.style.height = "auto";
        popupBox.style.maxWidth = "600px";

        button.addEventListener("click", handleButtonClick);
        linksButton.addEventListener("click", handleLinksButtonClick);

        const labels = document.querySelectorAll("div.label");
        labels.forEach((label) => {
            if (label.textContent.trim() === "Size") {
                const nextElement = label.nextElementSibling;
                if (nextElement) {
                    nextElement.insertAdjacentElement("afterend", linksButton);
                    nextElement.insertAdjacentElement("afterend", button);
                }
            }
        });

        document.body.appendChild(popupBox);

        function positionPopupBox(popupBox) {
            const popupRect = popupBox.getBoundingClientRect();
            popupBox.style.top = `calc(50% - ${popupRect.height / 2}px)`;
            popupBox.style.left = `calc(50% - ${popupRect.width / 2}px)`;
        }

        const bypassZipLinks = (element) => {
            if (
                element.nodeType == Node.ELEMENT_NODE &&
                element.nodeName == "A" &&
                element.href.match(zipFileRegex)
            ) {
                console.log(`LINK FOUND ${element.href}`);
                const bypassLink = getBypassUrls("zipFile", element.href);
                const bypassElement = document.createElement("a");
                bypassElement.href = bypassLink;
                bypassElement.textContent = "(Bypass)";
                const parent = element.parentElement;
                parent.insertAdjacentText("beforeend", "\t");
                parent.insertAdjacentElement("beforeend", bypassElement);
            }
        };

        const moCallback = (mutations, observer) => {
            for (const mutation of mutations) {
                for (const node of mutation.addedNodes) {
                    //console.log("LOGGING: V"); console.log(node);
                    bypassZipLinks(node);
                }
            }
        };

        const file_preview_div =
            document.getElementsByClassName("file_preview")[0];
        const observer = new MutationObserver(moCallback);
        observer.observe(file_preview_div, { childList: true, subtree: true });
    }
})();