High-res animated C.AI avatars

Make Character.AI avatars load in their full resolution (400px) and quality (100%), and let them be animated when they should be. I also try to manually find sources of characters' images that are recommended to me by CAI, WARNING: There is some (mostly furry) NSFW content. Great moderation going there, CAI. Original script: https://greatest.deepsurf.us/en/scripts/482793-always-hi-res-c-ai-avatars/code

Versione datata 17/08/2025. Vedi la nuova versione l'ultima versione.

Autore
Atemo-C
Valutazione
0 0 0
Versione
17-08-2025.63
Creato il
17/08/2025
Aggiornato il
17/08/2025
Dimensione
91,2 KB
Licenza
Zero-Clause BSD
Applica a

An updated version of https://greatest.deepsurf.us/en/scripts/482793-always-hi-res-c-ai-avatars/code. It:

  • Loads profile pictures in their highest-available resolution (400×400px)
  • Loads profile pictures in their highest-available quality (100%)
  • Removes the limitation on animated profile pictures, allowing them to be animated again

Additionally, it manually fetches original profile pictures of characters I have come across in my recommendations. This part is network-intensive, can contain NSFW content (who would have guessed that some Character creators bait others with cropped NSFW? …), and most likely not desired by a lot of users. If you do not want that, and only want to load the profile pictures in their highest resolution and quality, you can simply remove that part, so, basically, using only this:

// ==UserScript==
// @name        High-res animated C.AI avatars
// @namespace   none
// @version     17-08-2025.63
// @description Make Character.AI avatars load in their full resolution (400px) and quality (100%), and let them be animated when they should be. Original script: https://greatest.deepsurf.us/en/scripts/482793-always-hi-res-c-ai-avatars/code
// @author      Atemo Cajaku, logan.uswp
// @match       https://*character.ai/*
// @icon        https://yt3.ggpht.com/515uN-5u5m3gyl5FJZjlNKekL6nYw6Pdu-9kvtvaxtzsVGNFSNinjszJXWKTaa3dIqmxIjtYGw=s256
// @run-at      document-idle
// @license     Zero-Clause BSD
// @grant       none
// ==/UserScript==

(function() {
    'use strict';

    const observer = new MutationObserver(mList => {
        mList.forEach(m => {
            const avatar = m.target.querySelectorAll("img[src^=\"https://characterai.io\"]");
            avatar.forEach(i => {
                i.src = i.src.replace(
                    "i/80", "i/400").replace(
                    "i/200", "i/400").replace(
                    "?webp=true&anim=0", "").replace(
                    "?anim=0", ""
                );
            });
        });
    });

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

})();