How does that site feel so good?
easeprint is a Chrome extension that reads the motion on whatever page you're on. You get the curves and durations the site actually uses, drawn as one print, and you can copy them straight into CSS, Tailwind, Motion or SwiftUI.
Values are read from what the browser computed, so they're exact. Motion driven from JavaScript gets fitted from its frames and is marked that way. Free, and it only reads a page after you click it.
stripe.com
Measured 2026-10-17 · 213 moves
:root {
--ease-micro: ease-out;
--duration-micro: 150ms;
--ease-utility: cubic-bezier(0.25, 1, 0.5, 1);
--duration-utility: 300ms;
…Reading a print
Each ridge is one timing the site uses. Short, snappy ones sit near the core and slow ones sit further out, so a quick site makes a tight print.
A ridge bulges where its curve runs ahead of the clock. An ease-out swells early, an ease-in late, and an overshoot pushes out past its neighbours.
Thicker ridges showed up more. Broken ones are loops. The faint lines between are filled in from their neighbours so the whole thing reads as one surface.
20 sites, measured
Measured in a browser on 2026-10-17. 105 tiers, and 6 of 20 sites honor reduced motion. Hover a print and it draws itself on that site's own lead curve.
Arc
arc.net
utility ease-in-out · 300ms
Ignores reduced motion
Attio
attio.com
statement cubic-bezier(0, 0, 0.58, 1) · 600ms
Partly honors reduced motion
basement.studio
basement.studio
signature linear() spring · 900ms
Ignores reduced motion
Bryce Rambach
brycerambach.com
statement cubic-bezier(0.2, 0.7, 0.1, 1) · 1.15s
Honors reduced motion
Cuberto
cuberto.com
statement cubic-bezier(0.16, 1, 0.3, 1) · 1.2s
Ignores reduced motion
darkroom.engineering
darkroom.engineering
secondary cubic-bezier(0.23, 1, 0.32, 1) · 0.35s
Honors reduced motion
Emil Kowalski
emilkowal.ski
utility cubic-bezier(0.4, 0, 0.2, 1) · 0.15s
Nothing measured moves
Family
family.co
statement cubic-bezier(0.19, 1, 0.22, 1) · 1s
Ignores reduced motion
Linear
linear.app
statement cubic-bezier(0.25, 0.1, 0.25, 1) · 1000ms
Honors reduced motion
Locomotive
locomotive.ca
secondary cubic-bezier(0.215, 0.61, 0.355, 1) · 0.9s
Ignores reduced motion
Motion
motion.dev
statement linear() spring · 1750ms
Honors reduced motion
Obys Agency
obys.agency
statement cubic-bezier(0.16, 1, 0.3, 1) · 1.6s
Ignores reduced motion
Paco Coursey
paco.me
statement ease · 0.6s
Honors reduced motion
Rauno Freiberg
rauno.me
secondary ease-in-out · 0.35s
Nothing measured moves
Raycast
raycast.com
statement cubic-bezier(0.165, 0.84, 0.44, 1) · 2s
Ignores reduced motion
Resend
resend.com
statement ease-in-out · 1.5s
Ignores reduced motion
Sonner
sonner.emilkowal.ski
statement ease · 0.4s
Partly honors reduced motion
Stripe
stripe.com
statement cubic-bezier(0.165, 0.84, 0.44, 1) · 0.8s
Honors reduced motion
Vaul
vaul.emilkowal.ski
statement cubic-bezier(0.32, 0.72, 0, 1) · 0.5s
Ignores reduced motion
Vercel
vercel.com
signature cubic-bezier(0.23, 1, 0.32, 1) · 0.2s
Nothing measured moves
Install it
It isn't on the Chrome Web Store yet, so for now it installs by hand. Takes about a minute.
- 1
Download the zip and unzip it.
- 2
Open
chrome://extensions, turn on Developer mode in the top right, and click Load unpacked. Pick theeaseprintfolder. - 3
Go to a site you like and click easeprint in the toolbar, or press
AltShiftE. Move around the page and the print fills in.
It asks for nothing up front. Clicking it gives it the one tab you're on until you leave that page. Record from load asks for one site at a time. Nothing leaves your browser.