Adds a "Bypass Download" button to Pixeldrain file pages. Uses pixeldrainbypass.org to get a direct, unlimited download link and bypass daily limits.
// ==UserScript==
// @name Pixeldrain Bypass Downloader Helper
// @namespace https://pixeldrainbypass.org/
// @version 1.2
// @description Adds a "Bypass Download" button to Pixeldrain file pages. Uses pixeldrainbypass.org to get a direct, unlimited download link and bypass daily limits.
// @author Pixeldrain Bypass Team
// @match https://pixeldrain.com/u/*
// @icon https://dl01.aifasthub.com/img/pixeldrainbypass.png
// @connect pixeldrainbypass.org
// @grant GM_xmlhttpRequest
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// --- Configuration ---
// The API endpoint of your live service
const API_ENDPOINT = 'https://pixeldrainbypass.org/api/generate/';
// --- Styles ---
const buttonStyles = `
position: fixed;
bottom: 20px;
right: 20px;
z-index: 9999;
padding: 12px 20px;
background-color: #2563eb;
color: white;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
font-size: 16px;
font-weight: bold;
border: none;
border-radius: 8px;
cursor: pointer;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
transition: all 0.2s ease;
text-align: center;
`;
// --- Main Logic ---
window.addEventListener('load', function() {
// Extract file ID from the current URL
const fileId = getFileIdFromUrl();
if (!fileId) {
console.log('Pixeldrain Bypass Helper: No file ID found on this page.');
return;
}
// Create and add the bypass button to the page
const bypassButton = createBypassButton(fileId);
document.body.appendChild(bypassButton);
});
/**
* Gets the Pixeldrain file ID from the current browser URL.
* @returns {string|null} The file ID or null.
*/
function getFileIdFromUrl() {
const match = window.location.pathname.match(/\/u\/([a-zA-Z0-9]+)/);
return match ? match[1] : null;
}
/**
* Creates the "Bypass Download" button.
* @param {string} fileId - The file's ID.
* @returns {HTMLButtonElement} The created button element.
*/
function createBypassButton(fileId) {
const button = document.createElement('button');
button.textContent = '🚀 Bypass Download Limit';
button.setAttribute('style', buttonStyles);
button.onmouseover = () => { if (!button.disabled) { button.style.backgroundColor = '#1d4ed8'; button.style.transform = 'translateY(-2px)'; } };
button.onmouseout = () => { if (!button.disabled) { button.style.backgroundColor = '#2563eb'; button.style.transform = 'translateY(0)'; } };
button.addEventListener('click', () => handleButtonClick(button, fileId));
return button;
}
/**
* Handles the button click event.
* @param {HTMLButtonElement} button - The button that was clicked.
* @param {string} fileId - The file's ID.
*/
function handleButtonClick(button, fileId) {
// Set loading state
button.textContent = 'Generating...';
button.disabled = true;
// Make a cross-origin API request using GM_xmlhttpRequest
GM_xmlhttpRequest({
method: "GET",
url: `${API_ENDPOINT}${fileId}`,
onload: function(response) {
try {
const data = JSON.parse(response.responseText);
if (data.success && data.downloadUrls && data.downloadUrls.length > 0) {
// On success, turn the button into a clickable download link
button.textContent = `✅ Download: ${data.fileName}`;
// For reliability, we trigger the download directly in a new tab
window.open(data.downloadUrls[0], '_blank');
} else {
// Handle API-returned errors
handleError(button, data.error || 'Failed to get link.');
}
} catch (e) {
handleError(button, 'Invalid response from server.');
}
},
onerror: function(response) {
// Handle network request errors
handleError(button, 'Network error. Could not connect to the bypass server.');
},
ontimeout: function(response) {
handleError(button, 'Request timed out. Please try again.');
}
});
}
/**
* Handles error states.
* @param {HTMLButtonElement} button - The button element.
* @param {string} errorMessage - The error message to display.
*/
function handleError(button, errorMessage) {
button.textContent = `❌ Error: ${errorMessage}`;
button.style.backgroundColor = '#dc2626'; // Red color
// Reset the button after 5 seconds
setTimeout(() => {
button.textContent = '🚀 Bypass Download Limit';
button.style.backgroundColor = '#2563eb';
button.disabled = false;
}, 5000);
}
})();