AI Interface Animations — Gemini, ChatGPT, Claude, Perplexity & Cursor

A minimal collection of ultra-smooth AI UI animations: Claude cogitating starburst, Gemini aurora text and video loaders, ChatGPT streaming caret, Perplexity image matrix, and Cursor planning next move.


AI Interface Animations — Gemini, ChatGPT, Claude, Perplexity & Cursor


A quiet gallery of the motion language used by Gemini, ChatGPT, Claude, Perplexity, and Cursor. Each snippet is a self-contained thinking, streaming, or generating state — rebuilt from scratch in CSS (and a little JavaScript) with GPU-friendly transforms only.

The preview is searchable by product, category, and keyword. Each card has HTML, CSS, and (when needed) JS buttons — open a snippet, then copy it.

Open the live preview to browse, filter, and copy every variation.

What’s included

Thinking & loading

Streaming text

Image generation

Video generation

IDE / agent

Motion notes

Animations use transform and opacity only, long easings, and no per-frame box-shadows on dense grids (the Perplexity matrix would otherwise drop frames). Continuous spins stay linear; everything else uses a sine-like curve.

Claude cogitating (starter)

<div class="claude-think">
  <svg class="claude-star" viewBox="0 0 24 24" fill="none">
    <g stroke="currentColor" stroke-width="1.75" stroke-linecap="round">
      <line x1="12" y1="2.5" x2="12" y2="6.5" />
      <line x1="12" y1="17.5" x2="12" y2="21.5" />
      <line x1="2.5" y1="12" x2="6.5" y2="12" />
      <line x1="17.5" y1="12" x2="21.5" y2="12" />
      <line x1="5.05" y1="5.05" x2="7.88" y2="7.88" />
      <line x1="16.12" y1="16.12" x2="18.95" y2="18.95" />
      <line x1="5.05" y1="18.95" x2="7.88" y2="16.12" />
      <line x1="16.12" y1="7.88" x2="18.95" y2="5.05" />
    </g>
  </svg>
  <span>Cogitating…</span>
</div>
.claude-think { display: flex; align-items: center; gap: 10px; color: #c96442; }
.claude-star { width: 22px; height: 22px; animation: spin 10s linear infinite; }
.claude-think span { animation: breathe 2.6s ease-in-out infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes breathe { 50% { opacity: 0.45; } }