Back to work

Tune motion by feel, export it anywhere.

Hapture is an Android app for tuning animations with your thumb instead of a number field. You drag, flick and tap real interface elements, adjust the spring behind them until it feels right, and take the result with you as working code for Compose, SwiftUI, Flutter, React Native, the web or Figma.

View on GitHub Yet to release on Play Store
Hapture screens: the spring drag editor, motion checks on a toggle, the predictive back editor and a spring fitted to a sketched motion
Year
2026
Built with
Kotlin and Jetpack Compose
Platform
Android 8 and up
Status
Yet to release on Play Store

The problem

Most animation tools ask you to type numbers. Stiffness 700, damping ratio 0.9, then you squint at a preview on a laptop. That's backwards for mobile, where motion is felt through your thumb. A bottom sheet that looks fine in a video can feel sluggish the moment you actually throw it.

Hapture puts the motion in your hand first. The sliders still map to real numbers and you can always see them. You just arrive at them by trying things instead of guessing.

Fourteen real interactions

Spring drag, magnetic snap, swipe and fling, bottom sheet, pull to refresh, pinch to zoom, card expand, predictive back, drag to reorder, toggle, button press, tab indicator, staggered list and a like burst. Each one is a real, touchable component driven by a spring you tune with two sliders.

Start from eight house presets or Material 3's own springs. A readout under the stage shows settle time, overshoot and how close you are to the nearest Material spring, and it updates as the slider moves.

One spec, every platform

Every export comes from one platform-neutral description of the motion, so the outputs can't drift apart: Compose with the gesture handling included, SwiftUI, Flutter, React Native, Framer Motion and CSS linear(), Lottie, Figma custom-spring values, design tokens and haptic patterns. Each code export ships with a reduced-motion version.

The live preview runs on Compose's own spring(), the same call the exported code makes. There's deliberately no separate simulation, because the moment there is one, the preview and the export start to disagree.

Checks, capture and compare

Every experiment is checked for motion that is too slow for a tap, wobbles too long, overshoots too much for a small control or will jitter on a 60 Hz screen. Most checks have a one-tap fix you can undo.

If you already know the feel you want, draw the curve, sketch the motion across a mock screen or point the app at a screen recording, and it fits a spring to what you showed it. Compare races two springs side by side, blends between them, or plays a blind game where you guess which preset is which.

Phone to laptop

Turn on live sync and the phone serves the current spring on your Wi-Fi behind a pairing code. Open the link or scan the QR code on a laptop and the code for every platform follows your sliders in the browser. The Figma plugin can follow it too. There's no account, no analytics and no cloud; experiments stay on the phone.