Index

Tampermonkey scripts

Scripts for the Tampermonkey plugin that run small Javascript programs on any website.

What is Tampermonkey?

Tampermonkey is a free browser extension that lets you run small JavaScript programs — called userscripts — on any website you visit. These scripts can modify, enhance, or automate webpages in ways the original site never intended, giving you full control over your browsing experience.

Why is it useful?

Install Tampermonkey

Browser Link
🦊 Firefox Install from Mozilla Add-ons
🌐 Chrome Install from Chrome Web Store

Our scripts

Meteoblue ad remover

// ==UserScript==
// @name         meteoblue: remove ads, overlays, fixity, and blur (logo + icon safe)
// @namespace    local
// @version      1.5.0
// @description  Removes ads, anti-adblock overlays, fixity bar, blur effects, fixes layout padding, and removes .narrow where needed.
// @match        https://www.meteoblue.com/*
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function () {
  "use strict";

  /* --------------------------------------------------
   * CSS overrides (run at document-start)
   * -------------------------------------------------- */
  const css = `
    /* Anti-adblock overlays */
    .unblock-div,
    .unblock-body,
    [class^="unblock-"],
    [class*=" unblock-"] {
      display: none !important;
      visibility: hidden !important;
      opacity: 0 !important;
      pointer-events: none !important;
    }

    /* Ads and ad placeholders */
    .ad1,
    .ad2,
    .ad1-disable,
    .ad2-disable {
      display: none !important;
      visibility: hidden !important;
      pointer-events: none !important;
    }

    /* Remove fixity bar */
    #fixity {
      display: none !important;
      visibility: hidden !important;
    }

    /* Layout fix */
    main.main {
      padding: 0 0 3em 0 !important;
    }

    /* Restore scrolling */
    html, body {
      overflow: auto !important;
      position: static !important;
      height: auto !important;
    }

    /* Neutralize blur/backdrop effects EXCEPT menu-logo and icon */
    html,
    body,
    body *:not(.menu-logo):not(.menu-logo *):not(.icon):not(.icon *) {
      filter: none !important;
      backdrop-filter: none !important;
      -webkit-backdrop-filter: none !important;
    }
  `;

  function injectStyle(text) {
    const style = document.createElement("style");
    style.textContent = text;
    (document.documentElement || document.head).appendChild(style);
  }

  injectStyle(css);

  /* --------------------------------------------------
   * DOM cleanup logic
   * -------------------------------------------------- */
  function removeNodes(selectors) {
    selectors.forEach((sel) => {
      document.querySelectorAll(sel).forEach((el) => el.remove());
    });
  }

  function removeNarrowWhereNeeded() {
    // Remove `.narrow` ONLY on the requested elements
    document.querySelectorAll("a.current-weather.narrow").forEach((el) => {
      el.classList.remove("narrow");
    });
    document.querySelectorAll("div.additional-settings.narrow").forEach((el) => {
      el.classList.remove("narrow");
    });
  }

  function cleanupPage() {
    // Remove unwanted elements
    removeNodes([
      ".unblock-div",
      ".unblock-body",
      "[class^='unblock-']",
      "[class*=' unblock-']",
      ".ad1",
      ".ad2",
      ".ad1-disable",
      ".ad2-disable",
      "#fixity",
    ]);

    // Apply the new spec
    removeNarrowWhereNeeded();

    // Fix <html> and <body> modal/blur state
    const classKill = [
      /modal/i,
      /overlay/i,
      /backdrop/i,
      /blur/i,
      /unblock/i,
      /scroll-lock/i,
      /no-?scroll/i,
      /ad/i,
    ];

    [document.documentElement, document.body].forEach((el) => {
      if (!el) return;

      el.style.overflow = "auto";
      el.style.position = "";
      el.style.filter = "none";
      el.style.backdropFilter = "none";
      el.style.webkitBackdropFilter = "none";

      [...el.classList].forEach((cls) => {
        if (classKill.some((rx) => rx.test(cls))) {
          el.classList.remove(cls);
        }
      });
    });

    // Remove inline blur styles, excluding protected elements
    document.querySelectorAll("[style]").forEach((el) => {
      if (el.closest(".menu-logo, .icon")) return;

      const st = el.getAttribute("style") || "";
      if (/blur\(/i.test(st) || /backdrop-filter/i.test(st)) {
        el.style.filter = "none";
        el.style.backdropFilter = "none";
        el.style.webkitBackdropFilter = "none";
      }
    });
  }

  // Initial and delayed runs
  cleanupPage();
  document.addEventListener("DOMContentLoaded", cleanupPage, { once: true });
  window.addEventListener("load", cleanupPage, { once: true });

  // Persist against reinjection
  const observer = new MutationObserver(cleanupPage);
  observer.observe(document.documentElement, {
    childList: true,
    subtree: true,
  });
})();

Hide specific divs in Instagram

// ==UserScript==
// @name         Hide Specific Divs (Instagram Only)
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  Hides selected divs on Instagram
// @match        https://www.instagram.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    function hideTargetDivs() {
        // First selector (all listed classes)
        const group1 = document.querySelectorAll('div.x1dr59a3.x13vifvy.x7vhb2i.x6bx242');
        group1.forEach(el => {
            el.style.display = 'none';
        });        
    }

    // Run once on load
    hideTargetDivs();

    // Observe DOM changes (for dynamically loaded content)
    const observer = new MutationObserver(() => {
        hideTargetDivs();
    });

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

Social media blocker

// ==UserScript==
// @name         Block Social Media
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Blocks Instagram and Bluesky with a reminder message
// @author       You
// @match        *://*.instagram.com/*
// @match        *://instagram.com/*
// @match        *://*.bsky.app/*
// @match        *://bsky.app/*
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    const suggestions = [
        { label: "a closer listen",          url: "https://acloserlisten.com",                        prompt: "there's new music waiting to be discovered over at a closer listen." },
        { label: "pitchfork",                url: "https://pitchfork.com",                            prompt: "pitchfork has reviews worth your time." },
        { label: "mediapart",                url: "https://www.mediapart.fr",                         prompt: "mediapart is doing the journalism that matters." },
        { label: "blast",                    url: "https://www.blast-info.fr",                        prompt: "blast has something important to say." },
        { label: "hacker news",              url: "https://news.ycombinator.com",                     prompt: "hacker news has a thread you'd probably find interesting." },
        { label: "alternatives économiques", url: "https://www.alternatives-economiques.fr",          prompt: "alternatives économiques will actually make you think." },
        { label: "courrier international",   url: "https://www.courrierinternational.com",            prompt: "courrier international has a wider view of the world." },
        { label: "aoc",                      url: "https://aoc.media",                                prompt: "aoc has analysis worth sitting with." },
        { label: "lundi matin",              url: "https://lundi.am",                                 prompt: "lundimatin published something worth reading." },
        { label: "vu",                       url: "https://www.youtube.com/@VUFranceTV",              prompt: "vu has a video that'll make you think more." },
        { label: "off investigation",        url: "https://off-investigation.fr",                     prompt: "off investigation is working on stories that need to be told." },
        { label: "arte.tv",                  url: "https://www.arte.tv",                              prompt: "arte is streaming something genuinely good right now." },
        { label: "are.na",                   url: "https://www.are.na",                               prompt: "are.na has channels that'll spark something in you." },
        { label: "tumblr",                   url: "https://www.tumblr.com",                           prompt: "tumblr is still weird and wonderful, if you know where to look." },
        { label: "duolingo",                 url: "https://www.duolingo.com",                         prompt: "duolingo is right there and you could actually learn something." },
        { label: "entêtement",               url: "https://entetement.com",                           prompt: "entêtement published something worth reading." },
    ];

    const pick = suggestions[Math.floor(Math.random() * suggestions.length)];

    document.documentElement.style.cssText = '';
    document.documentElement.innerHTML = `
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Blocked</title>
            <link rel="preconnect" href="https://fonts.googleapis.com">
            <link href="https://fonts.googleapis.com/css2?family=Inter&display=swap" rel="stylesheet">
            <style>
                * {
                    margin: 0;
                    padding: 0;
                    box-sizing: border-box;
                }
                html, body {
                    width: 100%;
                    height: 100%;
                }
                body {
                    background-color: #000;
                    display: flex;
                    flex-direction: column;
                    align-items: center;
                    justify-content: center;
                    gap: 16px;
                }
                p {
                    color: #fff;
                    font-size: 12px;
                    font-family: 'Inter', sans-serif;
                }
                .suggestion {
                    color: #666;
                    font-size: 12px;
                    font-family: 'Inter', sans-serif;
                    text-align: center;
                }
                a {
                    color: #fff;
                    text-decoration: underline;
                    text-underline-offset: 3px;
                }
                a:hover {
                    color: #aaa;
                }
            </style>
        </head>
        <body>
            <p>you have better things to do.</p>
            <p class="suggestion">maybe ${pick.prompt}<br><a href="${pick.url}">${pick.label}</a></p>
        </body>
    `;
})();

Last updated: 18-05-2026 at 17:49