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});
})();