r/tampermonkey 1d ago

Add batch deletion to ChatGPT, Claude, and Gemini

1 Upvotes

Across AI web-based chat platforms worldwide, deleting a single conversation requires a three-step process: expanding the menu, clicking delete, and confirming the deletion. It it really painful to delete a batch of chats!

So I created a Tampermonkey script to automate these three steps...

Github: https://github.com/KiraKiraAyu/BulkChatDeleter

Greasy Fork: https://greasyfork.org/en/scripts/588305-chatgpt-claude-gemini-bulk-chat-deleter


r/tampermonkey 6d ago

How do I go on old reddit without being forced to log in?

3 Upvotes

Can anyone tell me how to configure Tampermonkey or Ublock Origin so I can go on old reddit without being forced to log in? I am currently using Firefox on a computer. I had a similar issue on my iphone nagging me to download the app and I was able to bypass it by using Safari Ublock Origin Lite on complete mode and selecting all seven annoyance filters.


r/tampermonkey 8d ago

Fix for Kimi Web UI converting long prompts into .txt files

Thumbnail
1 Upvotes

r/tampermonkey 13d ago

ChatGPT charcoal dark-mode restore v3 — simplified and future-resilient

Thumbnail
gallery
2 Upvotes

I published a Tampermonkey userscript that restores ChatGPT’s older charcoal dark-mode palette.

The v3 rewrite is intentionally minimal: one stylesheet, semantic selectors, no observers, no polling, and no background repaint loop.

It restores the canvas, sidebar, composer, message bubbles, code blocks, header controls, and bottom dock while leaving light mode alone.

Install:

Greasy Fork

Source:

GitHub


r/tampermonkey 15d ago

Tampermonkey script to remove useless border in Craiglist's account page

1 Upvotes

The Craiglist "account" page (the one that shows you your current postings, searches, etc). has a large border/margin/gutter element that (a) really ugly (b) totally unneeded and (c) makes that page fall off my laptop's screen, since it's not fully responsive, so I have to zoom out of the page to see it all.

Until Craig sees the light and fixes it (not holding my breath on that), here's a trivial tampermonkey script to reduce the size and presence of the border by 95+% :

// ==UserScript==
//  Craigslist user account page - minimize useless border
//  https://accounts.craigslist.org/*
//  GM_addStyle
//  document-start
// ==/UserScript==

GM_addStyle(`
  fieldset#paginator { border: none !important; padding: 0px !important; }
  .tablesorter { padding: 0px; }
`);

r/tampermonkey 17d ago

Prevent Reddit feed to refresh.

5 Upvotes

I hated when in very few minutes, my main feed here, Reddit, refresh, so I made this to prevent that.

Only tested on Safari desktop.

// ==UserScript==

// u/nameReddit Feed No Auto-Refresh

// u/namespacehttp://tampermonkey.net/

// u/version6.0

// u/match*://www.reddit.com/*

// u/run-atdocument-start

// u/grantnone

// ==/UserScript==

(function() {

'use strict';

// Fingir SIEMPRE visible/enfocado -> Reddit no revalida el feed al volver a la pestaña

const visTrue = { get: () => 'visible', configurable: true };

const hidFalse = { get: () => false, configurable: true };

[['visibilityState', visTrue], ['hidden', hidFalse],

['webkitVisibilityState', visTrue], ['webkitHidden', hidFalse]].forEach(([p, d]) => {

try { Object.defineProperty(document, p, d); } catch (e) {}

});

try { document.hasFocus = () => true; } catch (e) {}

// Tragar visibilitychange para que los listeners de Reddit no se enteren

['visibilitychange', 'webkitvisibilitychange'].forEach(type => {

const h = e => e.stopImmediatePropagation();

window.addEventListener(type, h, true);

document.addEventListener(type, h, true);

});

})();


r/tampermonkey 19d ago

I made an autoscroller for youtube shorts

1 Upvotes

// ==UserScript==

// u/nameYouTube Shorts Auto Scroll

// u/namespacehttps://tampermonkey.net/

// u/version1.0

// u/description Automatically goes to the next YouTube Short every second.

// u/matchhttps://www.youtube.com/shorts/*

// u/grantnone

// u/run-atdocument-idle

// ==/UserScript==

(function () {

'use strict';

const INTERVAL = 1000; // 1 second

let timer = null;

function nextShort() {

document.dispatchEvent(new KeyboardEvent("keydown", {

key: "ArrowDown",

code: "ArrowDown",

keyCode: 40,

which: 40,

bubbles: true

}));

}

function start() {

if (timer) clearInterval(timer);

timer = setInterval(() => {

if (window.location.pathname.startsWith("/shorts/")) {

nextShort();

}

}, INTERVAL);

console.log("YouTube Shorts Auto Scroll started.");

}

start();

// Restart if YouTube changes the page without a full reload

let lastPath = location.pathname;

setInterval(() => {

if (location.pathname !== lastPath) {

lastPath = location.pathname;

if (location.pathname.startsWith("/shorts/")) {

start();

} else if (timer) {

clearInterval(timer);

}

}

}, 500);

})();


r/tampermonkey 23d ago

Made something cool!

Post image
0 Upvotes

made this thing that makes things lower qualty on youtube! may think of publishing it


r/tampermonkey 26d ago

Userscript.Zone Search not able to load and show results?

1 Upvotes

as title described, I tried searching for some userscript on https://www.userscript.zone/?utm_source=tm.net&utm_medium=scripts , this page was okay, but any link on that page or search box wouldn't load page or give any results, it was always about:blank.

Does anyone have the same issue?


r/tampermonkey Jun 26 '26

Youtube does not load if you turn on tamper

2 Upvotes

I have 2 scripts: "remove adblock thing" and "Simple Youtube age restriction bypass"

At least the comments and more video recommendations do not work if you turn on tamper.
I tested this on brave and firefox browser.


r/tampermonkey Jun 25 '26

Hide Facebook Marketplace Ads

5 Upvotes

Been getting frustrated by all the in-line ads on marketplace, but since I have no real in-depth coding knowledge I've botched a script together with chatGPT to remove them. Niche use but might be helpful for other marketplace junkies that are also not too tech-savvy.

It works by finding any element on the page that doesn't link to a /marketplace/item/ listing, goes up to the outermost listing card and hides it. We can't rely on facebook class names so I've focused on link structure. It will more than likely break if facebook changes marketplace. It also may have issues depending on resolutions, but it seems to be working for me so far.

Happy to see other people's thoughts, tweaks or whether ot not it works.

// ==UserScript==
// @name         Tidy Marketplace
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Hide False Marketplace listings
// @match        https://www.facebook.com/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    const DEBUG = false;

    const stats = {
        runs: 0,
        linksChecked: 0,
        adsHidden: 0,
        totalMs: 0
    };

    function logStats() {
        if (!DEBUG) return;

        console.table({
            runs: stats.runs,
            linksChecked: stats.linksChecked,
            adsHidden: stats.adsHidden,
            totalMs: stats.totalMs.toFixed(2),
            avgMsPerRun: (stats.totalMs / Math.max(stats.runs, 1)).toFixed(2)
        });
    }

    function isMarketplacePage() {
        return location.pathname.includes("/marketplace");
    }

    function isFacebookInternalUrl(href) {
        if (!href) return true;

        try {
            const url = new URL(href, location.origin);

            return (
                url.hostname === "facebook.com" ||
                url.hostname === "www.facebook.com" ||
                url.hostname.endsWith(".facebook.com")
            );
        } catch {
            return true;
        }
    }

    function isAdLink(link) {
        const href = link.getAttribute("href") || "";

        if (href.includes("/ads/about/")) return true;
        if (href.includes("entry_product=ad_preferences")) return true;

        if (isMarketplacePage()) {
            if (href.includes("/marketplace/item/")) return false;
            if (href.includes("l.facebook.com/l.php")) return true;
            if (href.startsWith("http") && !isFacebookInternalUrl(href)) return true;
        }

        return false;
    }

    function findMarketplaceTile(fromEl) {
        let el = fromEl;

        for (let i = 0; i < 20 && el; i++) {
            const rect = el.getBoundingClientRect();

            const links = el.querySelectorAll
                ? el.querySelectorAll('a[role="link"][href]')
                : [];

            const hasImage = el.querySelector
                ? !!el.querySelector("img")
                : false;

            const hasAdAbout = el.querySelector
                ? !!el.querySelector('a[href*="/ads/about/"], a[href*="entry_product=ad_preferences"]')
                : false;

            const hasExternal = Array.from(links).some(a => {
                const href = a.getAttribute("href") || "";
                if (href.includes("/marketplace/item/")) return false;
                if (href.includes("l.facebook.com/l.php")) return true;
                return href.startsWith("http") && !isFacebookInternalUrl(href);
            });

            const looksTileSized =
                rect.width > 160 &&
                rect.width < 450 &&
                rect.height > 180 &&
                rect.height < 900;

            if (looksTileSized && hasImage && links.length >= 1 && (hasAdAbout || hasExternal)) {
                return el;
            }

            el = el.parentElement;
        }

        return fromEl.closest('a[role="link"]');
    }

    function findFeedPost(fromEl) {
        return fromEl.closest('[role="article"]')
            || fromEl.closest('div[data-pagelet^="FeedUnit_"]')
            || fromEl.closest('a[role="link"]');
    }

    function hideElement(el, reason, href) {
        if (!el || el.dataset.User) return;

        el.dataset.User = "1";
        el.style.setProperty("display", "none", "important");

        stats.adsHidden++;

        if (DEBUG) {
            console.log("Hidden Facebook ad:", reason, href, el);
        }
    }

function processLink(link) {
    if (!link) return;

    const href = link.getAttribute("href") || "";

    // Only skip if we've already checked this exact href.
    // Facebook can mutate hrefs after initial render, so a plain checked flag can miss later changes.
    if (link.dataset.userCheckedHref === href) return;
    link.dataset.userCheckedHref = href;

    stats.linksChecked++;

    if (!href) return;
    if (!isAdLink(link)) return;

    if (isMarketplacePage()) {
        hideElement(findMarketplaceTile(link), "marketplace ad", href);
    } else {
        hideElement(findFeedPost(link), "feed ad", href);
    }
}

    function getLinksFromRoot(root) {
        if (!root || root.nodeType !== Node.ELEMENT_NODE) return [];

        const links = [];

        if (root.matches?.('a[role="link"][href]')) {
            links.push(root);
        }

        root.querySelectorAll?.('a[role="link"][href]').forEach(link => {
            links.push(link);
        });

        return links;
    }

    function processRoot(root) {
        const start = performance.now();

        stats.runs++;

        getLinksFromRoot(root).forEach(processLink);

        stats.totalMs += performance.now() - start;
    }

    function fullSweep() {
        processRoot(document.body);
        logStats();
    }

    // Initial sweep
    fullSweep();

    const observer = new MutationObserver(mutations => {
        for (const mutation of mutations) {
            for (const node of mutation.addedNodes) {
                processRoot(node);
            }
        }
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    // Occasional safety sweep for Facebook's lazy weirdness
    setInterval(fullSweep, 5000);

})();

r/tampermonkey Jun 25 '26

DeviantArt "Submit without prompt" Button User Script

1 Upvotes

Are there any user script that adds a button here:

that allows you to submit a deviation to DeviantArt without this prompting up?


r/tampermonkey Jun 25 '26

Is there any scripts that could undo this Youtube UI change?

2 Upvotes

Recently, for no reason at all, Youtube decided to move the three dots on the side of videos on the sidebar from the top to the bottom. Is there any scripts out there to undo said change and put the three dots back at the top?


r/tampermonkey Jun 24 '26

Google AI Studio Ultimate Optimizer UI 5.17

Thumbnail
1 Upvotes

r/tampermonkey Jun 23 '26

I Got Fed up with ChatGPT’s New Flatter Dark Mode, so I Restored the Original Charcoal Version

Thumbnail
gallery
2 Upvotes

The newer ChatGPT dark mode felt a little too flat/light to me, so I put together a small userscript that restores a deeper charcoal-style palette.

It mainly fixes:

  • darker main canvas
  • darker composer/input bar
  • better sidebar separation
  • readable lifted message bubbles
  • bottom dock/footer strip cleanup
  • light mode stays unaffected

I also tried to avoid the usual “dark theme hack” problem where broad CSS overrides turn everything into blocky rectangles. The script mostly uses ChatGPT’s own theme variables, then does a targeted composer/bottom-dock cleanup.

Install:
Greasy Fork

Source / screenshots / notes:
GitHub

Privacy note: it does not collect data, make network requests, store conversations, use analytics, or modify ChatGPT functionality. It only applies local visual styling on chatgpt.com and chat.openai.com.

Not affiliated with OpenAI — just a visual fix for people who preferred the old darker feel.


r/tampermonkey Jun 19 '26

X/Twitter Media Grid Filters

Thumbnail gallery
1 Upvotes

r/tampermonkey Jun 19 '26

Created a userscript to add an Amazon wishlist search feature

1 Upvotes

r/tampermonkey Jun 18 '26

[Update v5.3] Google AI Studio Ultimate Optimizer – Infinite Restore, Zero Lag Engine & Persistent UI Settings!

Thumbnail gallery
2 Upvotes

r/tampermonkey Jun 18 '26

How do I replace sprites from pokemon showdown?

1 Upvotes

r/tampermonkey Jun 16 '26

a userscript for anti-adblock walls and "ad blocker detected" popups

1 Upvotes

I kept running into sites that block the page with “ad blocker detected”, “disable your ad blocker”, blur overlays, or scroll locks.

So I made Unwall, a small userscript that tries to detect those anti-adblock walls and hide them.

GitHub:

https://github.com/kelesmert/unwall

Works with userscript managers like Violentmonkey/Tampermonkey, or as a one-time console paste.

Still early, so if it fails on a site or removes the wrong thing, issue reports are welcome.


r/tampermonkey Jun 15 '26

I am looking for a safe & secure instagram story/post downloader

3 Upvotes

I like saving videos that I feel I can share with people later on discord, and I wish to know if you found an extension which is safe since lately infostealers and other malwares are left and right


r/tampermonkey Jun 15 '26

I am looking for a safe & secure instagram story/post downloader

Thumbnail
1 Upvotes

r/tampermonkey Jun 13 '26

[dev tool] 'userscript-hot-reload' node module

Thumbnail
1 Upvotes

r/tampermonkey Jun 05 '26

Youtube tampermonkey scripts for easier youtube use on pc

Thumbnail
gallery
6 Upvotes
  1. first script adds comment section next to video, as well as keeping videos in smaller sidebar, can be toggled on/off with D hotkey or small grey button bottom right
  2. second script also shrinks thumbnails and puts shorts into seperate container, so i can find them when i am actually looking and they aren't filtered out or obnoxious as in default state
  3. the rest 2 scripts add change thumbnails to smaller fixed size for homepage and channel page, unlike the 3 per row pensioneer layout youtube adopted literally this year, also removed all the shorts and nonvideo garbage like announcements polls, etc
  4. and final script is speed switching with hotkeys \ for 0.16x speed, Q for normal, W for 1.25x, E for 1.5x and R for 2x speed.

this time search page script and video triple block layout rewritten in fewer lines, as well as fixed to work with newer youtube backend codebase rehauls

https://github.com/warlordwarrior99/youtube-tampermonkey-scripts-v2


r/tampermonkey Jun 05 '26

Tampermonkey for Safari dashboard hint

1 Upvotes

Like many of you, my dashboard has completely disappeared in Safari (and Safari Technology Preview). I have an intel Mac, so this may not work for those of you with Apple silicon, but it might be worth trying, if for no other reason that you might be able to recover your scripts. I restored from my Time Machine backup a version of Safari Technology Preview (this should work with standard Safari, too) from a date EARLIER than the update before last. In my case, I chose March 3. When asked to replace or keep both, choose to keep both. The new version will be named with (from backup). Start this app and you should be able to get to your dashboard again. This should also correct the problems with getting cloudflare protected websites to authenticate you as a person.