At the time of writing there's repaint bug in the animation framework of ChatGPT.com, causing it to boundlessly repaint even idle conversations, leading to high CPU and GPU (on weak GPUs) usage.
To fix this you can either past this into the console (after each page load):
(() => {
const style = document.createElement('style');
style.id = 'disable-animations-debug';
style.textContent = `
*, *::before, *::after {
animation: none !important;
transition: none !important;
scroll-behavior: auto !important;
caret-color: auto !important;
}
`;
document.documentElement.appendChild(style);
console.log('disabled CSS animations/transitions');
})();Or use this Tampermonkey script:
// ==UserScript==
// @name ChatGPT Disable Animations
// @namespace https://chatgpt.com/
// @version 1.0
// @description Disables CSS animations and transitions on ChatGPT to reduce idle CPU/GPU usage and typing lag
// @author RubenKelevra
// @match https://chatgpt.com/*
// @match https://chat.openai.com/*
// @run-at document-start
// @grant none
// ==/UserScript==
(function () {
'use strict';
const STYLE_ID = 'disable-animations-debug';
function injectStyle() {
if (document.getElementById(STYLE_ID)) return;
const style = document.createElement('style');
style.id = STYLE_ID;
style.textContent = `
*, *::before, *::after {
animation: none !important;
transition: none !important;
scroll-behavior: auto !important;
caret-color: auto !important;
}
`;
(document.documentElement || document.head || document.body).appendChild(style);
console.log('[Tampermonkey] Disabled CSS animations/transitions on ChatGPT');
}
if (document.documentElement) {
injectStyle();
} else {
document.addEventListener('DOMContentLoaded', injectStyle, { once: true });
}
})();If you're running on lowend hardware, you can disable even more eye candy, to get more performance:
// ==UserScript==
// @name ChatGPT Low-Effects Mode
// @namespace https://chatgpt.com/
// @version 1.0
// @description Reduces ChatGPT CPU/GPU usage by disabling animations and costly visual effects
// @author RubenKelevra
// @match https://chatgpt.com/*
// @match https://chat.openai.com/*
// @run-at document-start
// @grant none
// ==/UserScript==
(function () {
'use strict';
const STYLE_ID = 'chatgpt-low-effects-mode';
const css = `
/* Base: kill animations and transitions */
*, *::before, *::after {
animation: none !important;
transition: none !important;
scroll-behavior: auto !important;
caret-color: auto !important;
view-transition-name: none !important;
}
/* More aggressive: reduce expensive paint/compositing effects */
*, *::before, *::after {
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
filter: none !important;
text-shadow: none !important;
box-shadow: none !important;
will-change: auto !important;
}
/* Common spinner/progress UI */
svg, [role="progressbar"] {
animation: none !important;
transition: none !important;
}
/* Optional: tone down sticky smoothness / scroll-linked effects */
html, body {
scroll-behavior: auto !important;
}
`;
function injectStyle() {
if (document.getElementById(STYLE_ID)) return;
const style = document.createElement('style');
style.id = STYLE_ID;
style.textContent = css;
const parent =
document.head ||
document.documentElement ||
document.body;
if (parent) {
parent.appendChild(style);
console.log('[Tampermonkey] ChatGPT Low-Effects Mode enabled');
}
}
injectStyle();
// Re-inject if the app replaces head/html during hydration/navigation
const observer = new MutationObserver(() => {
if (!document.getElementById(STYLE_ID)) {
injectStyle();
}
});
observer.observe(document.documentElement, {
childList: true,
subtree: true,
});
})();