Welcome Image Changer (Kemono.su)

Changes the mascot image on kemono.su to a random one from a predefined list

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         Welcome Image Changer (Kemono.su)
// @namespace    http://tampermonkey.net/
// @version      1.4
// @description  Changes the mascot image on kemono.su to a random one from a predefined list
// @author       Delzon
// @match        https://kemono.su/*
// @match        https://kemono.cr/*
// @copyright    2025, Delzon (https://openuserjs.org/users/Delzon)
// @license      MIT
// @run-at       document-body
// @grant        GM_addStyle
// ==/UserScript==
/*jshint esversion: 6 */

(function () {
  'use strict';

  // Inject CSS to hide the image immediately
  var style = GM_addStyle(
    `
    .jumbo-welcome-mascot img {
        visibility: hidden !important;
        opacity: 0 !important;
        transition: none !important;
    }
    `
  );

  const randomImages = [
    "https://i.bandori.party/u/asset/hXOOXlReona-Nyubara-Key-Visual-e8PBWd.png",
    "https://i.bandori.party/u/asset/PlxWU93rd-Anniversary-Kasumi-Splash-2kcZ3c.png",
    // Add more images as needed, you can set only one if you want.
  ];

  function debugLog(message) {
    console.log("[Welcome Image Changer] " + message);
  }

  function changeImage(imgElement) {
    if (!imgElement) return;

    const randomIndex = Math.floor(Math.random() * randomImages.length);
    imgElement.src = randomImages[randomIndex];

    // Restore visibility after changing the source
    if (style) {
      style.remove();
    }

    debugLog("Image changed: " + imgElement.src);
  }

  // Observer to detect the image as soon as it's added to the DOM
  const observer = new MutationObserver((mutations) => {
    for (const mutation of mutations) {
      if (mutation.type !== 'childList') continue;

      for (const node of mutation.addedNodes) {
        // Check if the node is the image
        if (node.nodeType === 1 && node.matches('.jumbo-welcome-mascot img')) {
          changeImage(node);
        }

        // Check if the node contains the image
        if (node.nodeType === 1 && node.querySelector) {
          const img = node.querySelector('.jumbo-welcome-mascot img');
          if (img) changeImage(img);
        }
      }
    }
  });

  // Start observing
  observer.observe(document.documentElement, {
    childList: true,
    subtree: true
  });

  // Initial check for cases where the image already exists
  document.addEventListener('DOMContentLoaded', () => {
    const img = document.querySelector('.jumbo-welcome-mascot img');
    if (img) changeImage(img);
  });
})();