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.

Orbital particles

1.2 KB · 0 JavaScript · runs anywhere
/* 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 & morph

Exported from AE · 0 JavaScript · seamless loop
/* 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%)); }

Particle drift

1.3 KB · 0 JavaScript · 16 particles, transform-only
/* 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 */

Advanced text animation

1.2 KB · 0 JavaScript · spring + typewriter
/* 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.

0 KB
runtime. No library to load, parse, or execute. The code is the animation.
60 fps+
GPU-composited properties only. No repaint, no layout thrash, no jank.
~KB
A typical animation ships in single-digit kilobytes of gzipped code.

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.

"Code your developers would have written themselves — in seconds, not hours."

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 shipReal web codeJSON + JS playerBinary media fileStack of imagesWeb code
Extra runtime to loadNone~50–250 KB playerNoneSprite stepperNone
Typical weightKilobytesTens of KB – MBMegabytesMegabytes
Editable by a developerYes — it's just codeNo (re-export)No (baked)No (baked)Yes
SmoothnessSmooth 60fps+Depends on JSHeavy decodeHeavy memoryDepends
Scales crisp / responsiveYesPartialNo (blurs)No (fixed res)Yes
Found by Google & AIReal page contentOpaque canvasInvisibleInvisibleGood
Time to hand offSecondsSDK integrationRe-render per changeRe-render per changeHours 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

Questions, answered.

How do I export an After Effects animation to HTML/CSS?
Open AE2CSS in After Effects, pick your layers, Analyze to preview, then Export — out comes a ready HTML/CSS folder. No Lottie JSON, no video, no player. New to this? Read the full guide: How to put an After Effects animation on a website.
Is AE2CSS a Lottie or Bodymovin alternative?
Yes. Same source comp, but the output is plain HTML/CSS with no JavaScript at all — no player to load or keep updated. Lighter on the page, and your team edits it like any other code.
Can I use AE2CSS animations in a mobile app?
Yes. The export is standard HTML/CSS, so it runs inside the webview that hybrid mobile apps already use — React Native, Capacitor, Cordova, Flutter or Ionic. Drop the same folder into a web page or an app's webview and it plays identically: featherlight, 60fps, no player. It's web code, not a native iOS/Android animation format — for fully native screens you'd still hand it to a developer.
What doesn't it export?
Anything that can't run as smooth, compositor-safe CSS. Where vectors can't reach — heavy effects, complex raster art — that part is baked to a crisp image; the rest stays editable code. Nothing is faked with repaint-heavy CSS that would stutter.
What if my animation isn't read, or exports wrong?
Hit Report a miss in the panel — one click sends us the comp's structure, no file hunting and no forum thread. The gaps the most people hit get built first, and new coverage lands back in your panel through the built-in updater. The exporter grows around the work you actually do.
Do I have to set my comp up a special way?
No. Animate as you normally would — AE2CSS reads standard layers, shapes and keyframes. No naming conventions, no pre-baking, no extra plugins.
Will the animation run at 60fps?
Yes — it animates only GPU-safe properties, so it plays at your display's full refresh rate: 60fps, and 120 where the screen allows.
What do I need to run it?
After Effects on macOS. Download the installer, restart AE, and open the panel from the Extensions menu.

Export your first animation today.

Free during alpha. macOS, After Effects.

Download for macOS