// ==UserScript==
// @name Media Link Extractor
// @namespace http://tampermonkey.net/
// @version 3.3
// @description Extract media links from various websites.
// @author 1axx
// @icon https://img.freepik.com/premium-photo/link-icon-3d-render-illustration_567294-4275.jpg
// @include https://cyberdrop.me/*
// @include https://files.fm/*
// @include https://app.koofr.net/*
// @include https://bunkr.*/*
// @include https://*.dropbox.com/*
// @include https://www.redd.tube/*
// @include https://shiroko.co/*
// @grant GM_setClipboard
// @license MIT
// ==/UserScript==
(function () {
'use strict';
const uiSettings = {
'cyberdrop.me': {
button: { top: '8px', right: '440px', bg: '#008b96', width: '40px', height: '40px' },
panel: { bg: '#222', textColor: '#8F2AA3' }
},
'files.fm': {
button: { top: '90px', right: '30px', bg: '#181A1B' },
panel: { bg: '#333', textColor: '#E8E6E3' }
},
'app.koofr.net': {
button: { top: '15px', right: '110px', bg: '#263238' },
panel: { bg: '#121212', textColor: '#71BA05' }
},
'bunkr': {
button: { top: '13px', right: '290px', bg: '#1E2936' },
panel: { bg: '#181818', textColor: '#7B39EB' }
},
'dropbox.com': {
button: { top: '15px', right: '290px', bg: '#3E3D3C' },
panel: { bg: '#232323', textColor: '#3984FF' }
},
'redd.tube': {
button: { top: '5px', right: '390px', bg: '#185DCC' },
panel: { bg: '#1a1a1a', textColor: '#EDCC32' }
},
'shiroko.co': {
button: { top: '5px', right: '1540px', bg: '#FFFFFF' },
panel: { bg: '#1a1a1a', textColor: '#FFFFFF' }
},
'default': {
button: { top: '10px', right: '10px', bg: '#10161F' },
panel: { bg: '#000', textColor: '#10161F' }
}
};
// Supported site configurations
const siteConfigs = {
'cyberdrop.me': { selector: '.image-container.column a.image' },
'files.fm': { selector: '.item.file.image-item a.top_button_download, .item.file.video-item a.top_button_download' },
'app.koofr.net': { selector: 'a[href^="/content/links/"], a[href^="/links/"]' },
'bunkr': { selector: 'a[href^="https://bunkrrr.org/"], a[href^="/f/"]' },
'dropbox.com': { selector: 'a[href^="https://www.dropbox.com/scl/"]' },
'redd.tube': { selector: 'a[href^="/video/"]' },
'shiroko.co': { selector: 'a[href^="https://ggredi.info/"]',}
};
let mediaLinks = new Set(); // Store unique links
function getSiteSettings() {
const host = Object.keys(uiSettings).find(key => window.location.host.includes(key)) || 'default';
return uiSettings[host];
}
function collectMediaLinks() {
const host = Object.keys(siteConfigs).find(key => window.location.host.includes(key));
if (!host) return;
mediaLinks.clear();
const elements = document.querySelectorAll(siteConfigs[host].selector);
elements.forEach(el => {
const link = el.getAttribute('href');
if (link) {
mediaLinks.add(link.startsWith('http') ? link : `${window.location.origin}${link}`);
}
});
}
function createUI() {
const settings = getSiteSettings();
// Create Extract Button
const extractButton = document.createElement('button');
extractButton.textContent = '☰';
extractButton.style.position = 'fixed';
extractButton.style.width = settings.button.width;
extractButton.style.height = settings.button.height;
extractButton.style.top = settings.button.top;
extractButton.style.right = settings.button.right;
extractButton.style.backgroundColor = settings.button.bg;
extractButton.style.color = '#fff';
extractButton.style.border = 'none';
extractButton.style.padding = '10px 15px';
extractButton.style.borderRadius = '5px';
extractButton.style.cursor = 'pointer';
extractButton.style.zIndex = '10001';
extractButton.addEventListener('click', () => {
collectMediaLinks();
displayLinksUI();
});
document.body.appendChild(extractButton);
}
function displayLinksUI() {
if (mediaLinks.size === 0) return;
const settings = getSiteSettings();
// Create Popup Container
const popup = document.createElement('div');
popup.style.position = 'fixed';
popup.style.top = '20%';
popup.style.left = '50%';
popup.style.transform = 'translate(-50%, -20%)';
popup.style.backgroundColor = settings.panel.bg;
popup.style.padding = '20px';
popup.style.border = '2px solid ' + settings.panel.textColor;
popup.style.borderRadius = '10px';
popup.style.zIndex = '10000';
popup.style.width = '60%';
popup.style.boxShadow = `0px 0px 20px rgba(0, 255, 255, 0.3)`;
// Textarea for Links
const textarea = document.createElement('textarea');
textarea.value = Array.from(mediaLinks).join('\n');
textarea.style.width = '100%';
textarea.style.height = '200px';
textarea.style.marginBottom = '10px';
textarea.style.backgroundColor = '#181818';
textarea.style.color = settings.panel.textColor;
textarea.style.border = '1px solid #555';
textarea.style.borderRadius = '5px';
textarea.style.padding = '10px';
textarea.style.fontFamily = 'Consolas, "Courier New", monospace';
textarea.style.fontSize = '14px';
textarea.style.resize = 'none';
popup.appendChild(textarea);
// Counter
const counter = document.createElement('div');
counter.textContent = `Total Unique Links: ${mediaLinks.size}`;
counter.style.marginBottom = '10px';
counter.style.fontWeight = 'bold';
counter.style.textAlign = 'center';
counter.style.color = settings.panel.textColor;
popup.appendChild(counter);
// Copy Button
const copyButton = document.createElement('button');
copyButton.textContent = 'Copy to Clipboard';
copyButton.style.padding = '10px';
copyButton.style.backgroundColor = settings.panel.textColor;
copyButton.style.color = '#fff';
copyButton.style.border = 'none';
copyButton.style.borderRadius = '5px';
copyButton.style.cursor = 'pointer';
copyButton.addEventListener('click', () => {
textarea.select();
document.execCommand('copy');
alert('Links copied to clipboard!');
});
popup.appendChild(copyButton);
// Close Button
const closeButton = document.createElement('button');
closeButton.textContent = 'Close';
closeButton.style.marginLeft = '10px';
closeButton.style.padding = '10px';
closeButton.style.backgroundColor = '#dc3545';
closeButton.style.color = 'white';
closeButton.style.border = 'none';
closeButton.style.borderRadius = '5px';
closeButton.style.cursor = 'pointer';
closeButton.addEventListener('click', () => document.body.removeChild(popup));
popup.appendChild(closeButton);
document.body.appendChild(popup);
}
createUI();
})();