After Effects → Web & Mobile
Put your After Effects animation on the web. For real.
AE2CSS turns your After Effects animation into the simplest, most efficient motion code the web can run — clean CSS that works right on your site.
Real web code · Smooth 60fps+ · A few kilobytes per animation
Live examples
Explore it yourself.
Every demo here is pure CSS — the exact code AE2CSS gives you. Works in any website, any mobile app.
/* particle ring — compositor-only transforms */
#orbit { animation: spin 7s linear infinite; }
#orbit .dot {
animation: pulse 2.2s var(--ease) infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes pulse {
0%,100% { transform: scale(.55); opacity: .45; }
50% { transform: scale(1); opacity: 1; }
}/* Squash keeps AE's eases — compositor-only transform */
#drop-scale { animation: drop 3817ms linear infinite; }
@keyframes drop {
22.71% { transform: scale(1.16, 1.16); animation-timing-function: ease-in-out; }
40.19% { transform: scale(0, 0); }
}
/* Splash droplets ride the AE bezier itself — a real CSS motion path */
#droplet { offset-path: path("M 0 0 C -10.7 -29, -59.3 -105, -130 -10"); }
/* Ripples expand through an animated @property mask — no <canvas>, no JS */
@property --r { syntax: '<percentage>'; inherits: false; }
#ring { mask-image: radial-gradient(ellipse closest-side, transparent var(--r), #000 calc(var(--r) + 37.2%)); }/* each particle wanders on two out-of-phase loops — sway × bob = organic drift */
#field b { animation: sway var(--sx) ease-in-out infinite alternate; } /* horizontal */
#field i { animation: bob var(--sy) ease-in-out infinite alternate, /* vertical */
twinkle var(--tw) ease-in-out infinite; } /* opacity */
@keyframes sway { to { transform: translateX(var(--ax)); } }
@keyframes bob { to { transform: translateY(var(--ay)); } }
@keyframes twinkle { 50% { opacity: var(--o1); } }
/* every particle has its own periods → the swarm never syncs, so motion stays alive *//* line 1: letters fly in (springy). line 2: typed by revealing width */
.title-reveal .ch { animation: letterIn 4s infinite;
animation-delay: calc(var(--i) * .07s); } /* stagger */
.typed {
overflow: hidden; white-space: nowrap;
border-right: .06em solid #9fc1ff; /* caret rides the reveal edge */
animation: typeW 4s steps(1, end) infinite, /* snap per glyph */
caretBlink .75s steps(1) infinite;
}
/* one width stop per glyph edge: type in -> hold -> backspace out */
@keyframes typeW {
8%{width:.53em} 20%{width:3.58em} 47%{width:7.4em} /* ...type "shipped as code." */
82.5%{width:7.4em} /* hold */
90.5%{width:0} /* ...backspaced to empty */
}Performance
Featherlight by construction — not optimized later.
AE2CSS only animates what the browser can move on the GPU — the difference between 60fps and jank on a mid-range phone.
It animates only transform, opacity and mask-image — never box-shadow, filter: blur(), borders, or layout. That's the whole trick.
How it works
It rewrites your comp as code — the same way a developer would.
Three clicks on your side; three jobs on ours. AE2CSS reads your project, works out exactly what the animation is doing, and rebuilds it as real, readable code — minimal DOM, unique IDs, no wrapper soup. The handoff your developers actually want, written like a senior front-end dev did it by hand.
Select
You pick the layers. AE2CSS reads every keyframe and the real animated range, straight from your project file.
Analyze
You preview the exact result in the panel. Underneath, it understands how each layer moves, when it moves, and the shapes behind it.
Export
You get an HTML/CSS folder, ready to commit — the whole comp rebuilt as the cleanest, most efficient CSS a developer could write. What you saw is exactly what ships.
Compare
Every other way to get AE on the web has a catch.
These are the usual routes from After Effects to a website. Each one trades away weight, quality, editability, or speed. AE2CSS gives you all of it at once.
| AE2CSS | Lottie | Video / GIF | PNG seq / Spritesheet | Hand-coding | |
|---|---|---|---|---|---|
| What you ship | Real web code | JSON + JS player | Binary media file | Stack of images | Web code |
| Extra runtime to load | None | ~50–250 KB player | None | Sprite stepper | None |
| Typical weight | Kilobytes | Tens of KB – MB | Megabytes | Megabytes | — |
| Editable by a developer | Yes — it's just code | No (re-export) | No (baked) | No (baked) | Yes |
| Smoothness | Smooth 60fps+ | Depends on JS | Heavy decode | Heavy memory | Depends |
| Scales crisp / responsive | Yes | Partial | No (blurs) | No (fixed res) | Yes |
| Found by Google & AI | Real page content | Opaque canvas | Invisible | Invisible | Good |
| Time to hand off | Seconds | SDK integration | Re-render per change | Re-render per change | Hours by hand |
Lottie is good for complex vector playback, and video has its place. But for animation that has to be light, sharp, fast, and editable on a real website — code wins, and AE2CSS gets you there without writing any.
Features
One export covers the whole comp.
The engine — why the output is good
Expression-driven motion
Wiggle, loops, time-driven spin — evaluated into clean CSS keys.
Real keyframes, real easing
Per-segment cubic-bezier, pixel-matched to AE. Never baked frames.
Zero runtime
Plain HTML/CSS, GPU-safe. Nothing to load — 60fps, kilobytes.
Seamless loops
Finds the real animated window; every layer loops on one beat.
Effects that actually export
Path morph
Square→diamond as CSS transform; real contour changes on a tiny scoped canvas.
Echo
AE's Echo → time-shifted, fading clones of any animation.
Glow, vector-first
No PNG: blur→filter, AE Glow→drop-shadow, round→radial bloom.
Light sweep
A matte shine band riding real keyframe motion.
Draw-on strokes
Trim start, end and offset draw the stroke on.
Masks & mattes
Every matte mode incl. inverted, plus Pathfinder → clip-path or bake.
Adjustment layers
Recolor and glow applied per-layer beneath — no wrapper.
Systems
Particle systems
Native CSS, not canvas — each particle a DOM node on pure keyframes. Fast, glow included.
Smart image baking
Effects too dense for code bake to one crisp image. The rest stays code.
3D transforms
Perspective and Z-depth, only when the scene goes 3D.
See the full support matrix — what's supported, what's partial, and what's coming →
FAQ