Size
4.6 KB
Version
1.1.3
Created
Jan 17, 2026
Updated
18 days ago
1// ==UserScript==
2// @name BootyTape Bigger Thumbnails
3// @description Makes thumbnail previews bigger on BootyTape
4// @version 1.1.3
5// @match https://*.ssl.bootytape.com/*
6// @icon https://ssl.bootytape.com/favicon.ico
7// ==/UserScript==
8(function() {
9 'use strict';
10
11 console.log('BootyTape Bigger Thumbnails extension loaded');
12
13 async function replaceWithFullQualityImage(img) {
14 // Get the parent link that points to the details page
15 const link = img.closest('a');
16 if (!link || !link.href.includes('details.php')) {
17 console.log('No details link found for image');
18 return;
19 }
20
21 try {
22 // Fetch the details page
23 const response = await GM.xmlhttpRequest({
24 method: 'GET',
25 url: link.href
26 });
27
28 const html = response.responseText;
29
30 // Look for the full quality image in the details page
31 // The full-size images are in /fibx/imgx/ directory with .800.jpg extension
32 const fullImageMatch = html.match(/https:\/\/cdn\.bootytape\.com\/fibx\/imgx\/\d+_\d+\.800\.jpg/);
33
34 if (fullImageMatch) {
35 const fullImageUrl = fullImageMatch[0];
36 console.log('Found full quality image:', fullImageUrl);
37 img.src = fullImageUrl;
38 img.dataset.upgraded = 'true';
39 return;
40 }
41
42 // Fallback: Try to find any larger resolution images
43 const largeImageMatch = html.match(/https:\/\/cdn\.bootytape\.com\/thbx\/imgx\/\d+_\d+\.(\d+)x(\d+)\.jpg/g);
44
45 if (largeImageMatch && largeImageMatch.length > 0) {
46 // Find the largest image
47 let largestImage = largeImageMatch[0];
48 let maxSize = 0;
49
50 largeImageMatch.forEach(imgUrl => {
51 const sizeMatch = imgUrl.match(/\.(\d+)x(\d+)\.jpg/);
52 if (sizeMatch) {
53 const width = parseInt(sizeMatch[1]);
54 const height = parseInt(sizeMatch[2]);
55 const size = width * height;
56 if (size > maxSize) {
57 maxSize = size;
58 largestImage = imgUrl;
59 }
60 }
61 });
62
63 console.log('Found larger image:', largestImage);
64 img.src = largestImage;
65 img.dataset.upgraded = 'true';
66 } else {
67 console.log('No larger image found on details page');
68 }
69 } catch (error) {
70 console.error('Error fetching details page:', error);
71 }
72 }
73
74 async function upgradeAllThumbnails() {
75 const thumbnails = document.querySelectorAll('table.main img[src*="cdn.bootytape.com/thbx/imgx/"]:not([data-upgraded])');
76
77 console.log(`Found ${thumbnails.length} thumbnails to upgrade`);
78
79 for (const img of thumbnails) {
80 await replaceWithFullQualityImage(img);
81 // Add a small delay to avoid overwhelming the server
82 await new Promise(resolve => setTimeout(resolve, 100));
83 }
84 }
85
86 function init() {
87 // Add CSS to make thumbnails bigger and styled nicely
88 TM_addStyle(`
89 /* Make thumbnail images in the Image Preview column bigger */
90 table.main img[src*="cdn.bootytape.com/thbx/imgx/"] {
91 width: 200px !important;
92 height: auto !important;
93 max-width: 200px !important;
94 transition: transform 0.2s ease;
95 border: 1px solid #ccc;
96 border-radius: 4px;
97 }
98
99 /* Add hover effect to make them even bigger on hover */
100 table.main img[src*="cdn.bootytape.com/thbx/imgx/"]:hover {
101 transform: scale(1.3);
102 z-index: 1000;
103 position: relative;
104 cursor: pointer;
105 box-shadow: 0 4px 8px rgba(0,0,0,0.3);
106 }
107
108 /* Make the Image Preview column wider */
109 td:last-child {
110 min-width: 220px;
111 }
112 `);
113
114 console.log('Thumbnail styles applied');
115
116 // Upgrade thumbnails to full quality
117 upgradeAllThumbnails();
118 }
119
120 // Run when page loads
121 if (document.readyState === 'loading') {
122 document.addEventListener('DOMContentLoaded', init);
123 } else {
124 init();
125 }
126})();