27:18Gemini 4 Hydrogen: Cheaper Tokens, More Expensive Answers?
Nov 13, 2026 · YouTube
18:40ERNIE 5.5 Flash Preview vs GLM 5.3 Flash: Baidu's new model is very impressive!
Nov 11, 2026 · YouTube
36:22Fable 5.2 robbing me blind, plus: Nex AGI's N2.6 vs GLM 5.3 Flash
Nov 11, 2026 · YouTube
14:03Gemini 4 Carbon: Can it handle my challenges? (First look with one-shot coding tests)
Nov 10, 2026 · YouTube
47:51Ranking major U.S. Open-Weights Models. (Where does Ripple 65B fit in?)
Nov 6, 2026 · YouTube
10:57"Crouton Alpha": the latest super-efficient coding model by Meta?
Nov 3, 2026 · YouTube
38:58Testing Particle-1: a post-trained DeepSeek V4.1 Flash specializing in coding and efficiency
Oct 28, 2026 · YouTube
29:55Kimi K3.1 Pro Looked Incredible. Then I Kept Testing.
Oct 26, 2026 · YouTube
31:28Is this company reselling GPT Sol 6.1 at a loss (for non-agentic/text-only)?🤔 Is this sustainable?
Oct 20, 2026 · YouTube
17:58Nemotron 3.5 Super VL vs Opus 5.5: Testing NVIDIA’s new coding juggernaut
Oct 15, 2026 · YouTube
16:04Testing a *massive* new open-weights model 🤯: Muse Spark Open (vs. Nemotron, Opus 5.5, and more)
Oct 15, 2026 · YouTube
16:43Gemini 4 Argon: Great 🐈 Animation, but a broken escalator. (Coding challenge vs Opus 5.5, Sol 6.1)
Oct 13, 2026 · YouTube
16:37Meta's new "Muse Wonder" AI is impressive... but can it compete with Anthropic's models?
Oct 12, 2026 · YouTube
11:12WOW... Haiku 5.5 is very impressive. RIP OpenAI?
Oct 7, 2026 · YouTube
22:47Mistral Large 4 Is Cheap. But Is It Good Enough to Compete?
Oct 6, 2026 · YouTube
22:02Is Pareto 26.10 Preview Just Routing to GPT Sol? I Tested It Against Sol 6.1 Pro
Oct 1, 2026 · YouTube
11:22I Tested Sonnet 5.5 Against Opus 5.5. Is It Actually Cheaper?
Sep 28, 2026 · YouTube
19:21I Tested the Stealth "Space Bunny Alpha" Model Before It Went Offline
Sep 23, 2026 · YouTube
10:58So... how much better is Claude Opus 5.5 vs. GPT-6 Sol, really?
Sep 23, 2026 · YouTube
9:38Claude Opus 5.5... the BEST new model for coding!! 🤩
Sep 22, 2026 · YouTube
You make short animated pieces for the web, and you have spent time on the part of the internet that makes cats famous.
Build me a single HTML page: a cat in a living room that lifts off the floor and spins in the air when you click it.
Make this the Oiia Cat — the spinning cat meme, the one whose loop is written out as "oiia oiia oiiaiooooiai". Match the original's look and feel, not a generic rotation:
Build toward what that meme feels like at full speed: too fast, too loud, and funnier every time it goes further.
data: URIs are fine.localStorage, sessionStorage, cookies or indexedDB — sandboxed frame, they throw.html block.The single fenced html block.
Five bullets.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Oiia Cat</title>
<style>
* { box-sizing: border-box; }
html, body { height: 100%; margin: 0; background: #0d0f12; overflow: hidden; }
body { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
#app { position: fixed; inset: 0; background: #14181d; }
#room { position: absolute; inset: 0; transition: transform 0.45s cubic-bezier(.2,.8,.2,1), filter 0.45s; }
#wall { position: absolute; inset: 0 0 32% 0; background: linear-gradient(180deg, #33414f 0%, #2a3742 60%, #232e37 100%); }
#baseboard { position: absolute; left: 0; right: 0; bottom: 0; height: 7%; background: #e6dfd2; border-bottom: 2px solid #c8c0ae; }
#floor { position: absolute; left: 0; right: 0; bottom: 0; height: 32%; background: linear-gradient(180deg, #7d6f5f 0%, #6a5b4b 100%); }
#rug { position: absolute; left: 50%; bottom: 6%; width: 55%; height: 10%; transform: translateX(-50%); background: radial-gradient(closest-side, #a89c88, #857a66); border-radius: 50%; opacity: .85; }
#window { position: absolute; top: 7%; right: 9%; width: 17%; height: 24%; background: linear-gradient(180deg, #d7ecff, #a9cdea); border: 6px solid #e8e2d4; border-radius: 4px; }
#lightbeam { position: absolute; top: 7%; right: 9%; width: 17%; height: 24%; background: linear-gradient(180deg, rgba(255,255,220,.38), rgba(255,255,220,0)); transform-origin: top center; }
#sofa { position: absolute; bottom: 10%; left: 7%; width: 36%; height: 13%; background: linear-gradient(180deg, #6f5f52, #574a40); border-radius: 18px; }
#sofa::after { content:''; position:absolute; top: -6px; left: 8%; right: 8%; height: 8px; background: #5a4d44; border-radius: 50%; }
#plant { position: absolute; bottom: 10%; right: 18%; width: 11%; height: 15%; background: #46563f; }
#plant::before { content:''; position:absolute; top:-30%; left:50%; width:14%; height:34%; transform:translateX(-50%); background: #5d7050; border-radius: 50% 50% 0 0; }
#lamp { position: absolute; top: 10%; left: 11%; width: 7%; height: 18%; background: #cfc8b8; }
#lamp::after { content:''; position:absolute; top: -12%; left:50%; width:4px; height:12%; transform:translateX(-50%); background:#8a6f4d; }
#frame { position: absolute; top: 14%; left: 36%; width: 11%; height: 15%; background: #1c1c1e; border: 7px solid #3a3a3c; }
#cat { position: absolute; left: 50%; bottom: 0; width: 21%; height: 17%; transform: translateX(-50%); transform-origin: bottom center; }
#cat svg { width: 100%; height: 100%; overflow: visible; display: block; }
#cat.spinning svg { filter: blur(0.7px); }
#cat.stage4 svg { filter: blur(2.5px) drop-shadow(0 0 24px rgba(255,255,255,.85)); }
#hud { position: absolute; top: 1.2%; left: 1.2%; right: 1.2%; display: flex; justify-content: space-between; pointer-events: none; }
#hud button { pointer-events: auto; background: rgba(0,0,0,.45); color: #eee; border: 1px solid rgba(255,255,255,.25); padding: 6px 10px; border-radius: 999px; font: inherit; cursor: pointer; }
#stage { color: rgba(255,255,255,.65); font-size: 12px; letter-spacing: .2em; text-transform: uppercase; }
#hint { position: absolute; bottom: 2%; left: 50%; transform: translateX(-50%); color: rgba(255,255,255,.6); font-size: 12px; letter-spacing: .3em; text-transform: uppercase; pointer-events: none; }
#app.stage-0 #room { transform: none; filter: none; }
#app.stage-1 #room { transform: rotate(7deg) translateY(-8px); }
#app.stage-2 #room { transform: rotate(13deg) scale(1.05); }
#app.stage-3 #room { transform: rotate(22deg) scale(0.95); filter: hue-rotate(18deg) contrast(1.15); }
#app.stage-4 #room { transform: rotate(42deg) scale(1.25); filter: hue-rotate(55deg) saturate(1.7) contrast(1.35); }
@media (max-width: 700px) { #cat { width: 30%; height: 24%; } }
</style>
</head>
<body>
<div id="app" class="stage-0">
<div id="room">
<div id="wall"></div>
<div id="baseboard"></div>
<div id="floor"></div>
<div id="rug"></div>
<div id="window"></div>
<div id="lightbeam"></div>
<div id="sofa"></div>
<div id="plant"></div>
<div id="lamp"></div>
<div id="frame"></div>
</div>
<div id="cat">
<svg viewBox="0 0 200 160" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="fur" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#f6f0e3"/>
<stop offset="1" stop-color="#ddd2bc"/>
</linearGradient>
<linearGradient id="furDark" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#d8cdb6"/>
<stop offset="1" stop-color="#c0b29a"/>
</linearGradient>
</defs>
<path d="M158 132 Q202 122 192 80" stroke="url(#furDark)" stroke-width="15" fill="none" stroke-linecap="round"/>
<ellipse cx="100" cy="122" rx="49" ry="38" fill="url(#fur)"/>
<ellipse cx="100" cy="112" rx="30" ry="24" fill="#faf6ec"/>
<ellipse cx="70" cy="152" rx="17" ry="12" fill="url(#fur)"/>
<ellipse cx="130" cy="152" rx="17" ry="12" fill="url(#fur)"/>
<ellipse cx="80" cy="142" rx="12" ry="18" fill="url(#fur)"/>
<ellipse cx="120" cy="142" rx="12" ry="18" fill="url(#fur)"/>
<circle cx="100" cy="72" r="38" fill="url(#fur)"/>
<circle cx="100" cy="62" r="30" fill="#faf6ec"/>
<path d="M64 46 L54 8 L92 30 Z" fill="url(#fur)"/>
<path d="M136 46 L146 8 L108 30 Z" fill="url(#fur)"/>
<circle cx="82" cy="72" r="8.5" fill="#191919"/>
<circle cx="118" cy="72" r="8.5" fill="#191919"/>
<circle cx="85" cy="68.5" r="2.6" fill="#fff"/>
<circle cx="121" cy="68.5" r="2.6" fill="#fff"/>
<path d="M93 86 L107 86 L100 92 Z" fill="#e08a8a"/>
<path d="M100 92 Q100 98 91 99" stroke="#333" stroke-width="2" fill="none"/>
<path d="M100 92 Q100 98 109 99" stroke="#333" stroke-width="2" fill="none"/>
<path d="M60 70 Q50 72 52 62" stroke="#8a7a66" stroke-width="3" fill="none" stroke-linecap="round"/>
<path d="M140 70 Q150 72 148 62" stroke="#8a7a66" stroke-width="3" fill="none" stroke-linecap="round"/>
</svg>
</div>
<div id="hint">click the cat</div>
<div id="hud">
<button id="mute">mute</button>
<div id="stage">stage 0</div>
</div>
</div>
<script>
const app = document.getElementById('app');
const cat = document.getElementById('cat');
const stageEl = document.getElementById('stage');
const muteBtn = document.getElementById('mute');
let stage = 0;
let rotation = 0;
let spinSpeed = 0;
let lift = 0;
let raf = null;
let last = 0;
let audioCtx = null;
let master = null;
let muted = false;
let schedulerTimer = null;
let nextNoteTime = 0;
let noteIndex = 0;
const NOTES = [
{ f: 170, d: 0.14 },
{ f: 220, d: 0.10 },
{ f: 275, d: 0.14 },
{ f: 330, d: 0.10 },
{ f: 395, d: 0.14 },
{ f: 460, d: 0.30 }
];
function setStage(s) {
stage = s;
stageEl.textContent = 'stage ' + s;
app.className = 'stage-' + s;
if (s === 0) {
spinSpeed = 0;
lift = 0;
if (raf) cancelAnimationFrame(raf);
cat.classList.remove('spinning');
cat.classList.remove('stage4');
cat.style.transform = 'translateX(-50%)';
} else {
const base = 2.5 + (s - 1) * 1.8;
spinSpeed = base + Math.random() * 0.4;
lift = 30 + (s - 1) * 35;
cat.classList.add('spinning');
if (s >= 4) cat.classList.add('stage4');
else cat.classList.remove('stage4');
if (!raf) startSpin();
}
updateAudioSpeed(spinSpeed);
}
function startSpin() {
last = performance.now();
const tick = (now) => {
const dt = Math.min(0.05, (now - last) / 1000);
last = now;
rotation += dt * spinSpeed * (180 / Math.PI);
cat.style.transform = `translate(-50%, ${-lift}px) rotate(${rotation}deg)`;
updateAudioSpeed(spinSpeed);
raf = requestAnimationFrame(tick);
};
raf = requestAnimationFrame(tick);
}
function updateAudioSpeed(s) {
if (!audioCtx) return;
window.__spinPitch = 1 + (s / 2.5) * 0.7;
}
function initAudio() {
if (audioCtx) return;
const AC = window.AudioContext || window.webkitAudioContext;
audioCtx = new AC();
master = audioCtx.createGain();
master.gain.value = muted ? 0 : 0.8;
master.connect(audioCtx.destination);
nextNoteTime = audioCtx.currentTime + 0.05;
noteIndex = 0;
schedulerTimer = setInterval(scheduler, 30);
}
function scheduler() {
if (!audioCtx) return;
const tempoFactor = 1 + (window.__spinPitch - 1) * 0.8;
while (nextNoteTime < audioCtx.currentTime + 0.15) {
const note = NOTES[noteIndex % NOTES.length];
const dur = note.d * tempoFactor;
const freq = note.f * (window.__spinPitch || 1) * (1 + 0.04 * Math.sin(audioCtx.currentTime * 7));
scheduleVoice(nextNoteTime, dur, freq);
nextNoteTime += dur;
noteIndex++;
}
}
function scheduleVoice(t, dur, freq) {
const osc = audioCtx.createOscillator();
osc.type = 'sawtooth';
osc.frequency.setValueAtTime(freq * 0.95, t);
osc.frequency.exponentialRampToValueAtTime(freq * 1.05, t + dur * 0.3);
const filter = audioCtx.createBiquadFilter();
filter.type = 'lowpass';
filter.frequency.value = freq * 6;
filter.Q.value = 2;
const gain = audioCtx.createGain();
gain.gain.setValueAtTime(0, t);
gain.gain.linearRampToValueAtTime(0.22, t + 0.012);
gain.gain.exponentialRampToValueAtTime(0.001, t + dur * 0.92);
osc.connect(filter);
filter.connect(gain);
gain.connect(master);
osc.start(t);
osc.stop(t + dur);
}
function clickCat() {
initAudio();
if (stage === 0) setStage(1);
else if (stage < 4) setStage(stage + 1);
else setStage(4);
}
muteBtn.addEventListener('click', () => {
muted = !muted;
muteBtn.textContent = muted ? 'unmute' : 'mute';
if (audioCtx && master) {
master.gain.setTargetAtTime(muted ? 0 : 0.8, audioCtx.currentTime, 0.02);
}
});
document.getElementById('cat').addEventListener('click', (e) => {
e.stopPropagation();
clickCat();
});
</script>
</body>
</html>