Type a line, press Play and watch it move. This animated text generator has 26 motion presets, from a quiet Fade in to Flame colours, and each one plays on your own words in the font and look you choose. Leave with a looping video clip, or with the CSS that draws the same motion on your own page. It does not make GIFs.
Read the full guide
Type, pick a preset, press play
Type up to four lines, then pick a preset from the four groups in the Motion menu: reveals that play once, loops that move, light and colour, and glitches. Nothing moves until you press Play. Each preset suggests a font, a look and a background, and Use the look made for this motion applies them. Speed runs from half to double. Gap between letters sets the delay between neighbours, the whole difference between a line that jumps and a Wave. Pause stops everything at once.
Choose for where the words will live
For a web page, press Copy CSS. Every preset is under a kilobyte, stays sharp at any size, and switches itself off for visitors who have asked their device for less motion. For a chat or a slide, press Download video. Reveals such as Typewriter and Rise suit a title that arrives once. Loops such as Wave and Float suit a sticker or a banner. One rule for your own page: under the WCAG guidelines, motion that starts by itself and runs past five seconds needs a pause control.
Save a clean loop, share the settings
A looping clip only looks seamless if it ends where it began. The recorder waits until every letter has started, then captures exactly one cycle, so Wave records 1.2 seconds however long the line is. Reveals record the whole entrance plus a short hold. Keep this design saves your words and settings in this browser, never the video. Share link copies a link to them, or opens a phone's share menu. Whoever opens it must press Play. For flames that stay still, the fire text generator is next door.
Tips
Long line? Pick Rise or Fade in. Bounce or Spin on forty letters is a great deal of movement and very little reading.
Colour cycle and Rainbow wave rotate the colour you start with, so black, white and grey text will not change at all. Start from red or magenta.
For an animated fire text generator, pick Flame colours under Motion and press Use the look made for this motion. That sets Bangers, the Fire look, Flame under Colours and a Black background. Thin letters leave flames nowhere to sit.
Shake and Glitch jitter are hard on some readers. Keep them for a clip of a few seconds, not for a heading people must read.
Neon flicker and Flame colours will not speed up past normal: both already dim twice in their busiest second, and three is the limit.
Questions and answers
How does the animated text generator work?
Each preset is a short list of numbers that the preview plays on your words. The numbers say what moves: a letter, a word or the whole line. They set how long one cycle lasts and the delay between neighbours. Stops along the cycle give position, scale, opacity, blur or colour. The CSS you copy comes from the same numbers, so the clip and the code are one motion.
Why does it save a video and not a GIF?
A GIF would turn every glow and gradient here into bands. Its frames hold at most 256 colours and cannot be partly transparent. So the tool records the preview as a video. Some browsers write WebM and others MP4, so the tool checks yours and names the file to match.
Why is the text not moving on my screen?
Press Play. Nothing moves until you do. If a loop then plays once and stops, your device is set to reduce motion. The switch is in your device's accessibility settings. Turn it off, press Play again and the loop keeps running.
Can the clip have a transparent background?
No. The tool paints a solid background before it records, because it cannot promise a transparent video will play wherever you send it. Pick a Background that matches where the clip will sit. With the CSS, the letters move over whatever is behind them on your page.
How do I use the copied CSS on my own page?
Put the preset's class on the paragraph, wrap each letter in a span with the class wf-u, and number the spans with the custom property --i, starting at 0. The CSS multiplies --i by the gap to stagger the letters. Copy HTML does all of this for you, and adds one plain copy of the words for screen readers while hiding the letter spans from them.
Typewriter. Letters appear one at a time, 90 milliseconds apart, behind a blinking caret, with no fade at all. Plays once and holds. Made for a typewriter face such as Courier Prime, though any font works.
CSS of Typewriter
Fade in. Each letter fades up from nothing, left to right. The quietest preset here and the safest for a heading, because nothing moves.
CSS of Fade in
Rise. Letters slide up a little over half their height while they fade in. It reads as modern and calm, and it suits long lines better than the bouncier reveals.
CSS of Rise
Drop in. Letters fall from above the line, overshoot by a fraction and settle. Best with a heavy rounded face, which looks as if it has weight to drop.
CSS of Drop in
Pop. Each letter grows from a point and overshoots its full size before it settles, because the easing curve runs past 1. Good for one loud word.
CSS of Pop
Focus pull. Letters start as a blur and sharpen into place, like a lens finding focus. Blur is costly to draw, so long text may stutter on an old phone.
CSS of Focus pull
Wide to tight. The whole line starts with wide gaps between its letters and closes up as it fades in, the way a film title does. It needs room at the sides, so keep the text short.
CSS of Wide to tight
Slide in. Whole words arrive from the left, one after another. It is the only reveal here that moves by the word, so a phrase of three or four words shows it off and a single word barely does.
CSS of Slide in
Wave. Every letter rises and falls by a third of its height, each one 80 milliseconds behind its neighbour, so a ripple runs along the word. The opening preset on this page.
CSS of Wave
Bounce. Letters jump half their height and squash slightly when they land. The squash is what separates it from Wave: it looks like rubber, not water.
CSS of Bounce
Pulse. The whole line swells by 8 per cent and relaxes, slowly. Steady and even, for a button or a sale sign that should be noticed without being annoying.
CSS of Pulse
Jelly. Letters stay on the line and wobble, wider then taller, in a wobble that dies away. Only fat letters carry it; a thin face just looks faulty.
CSS of Jelly
Float. The line drifts up and down by a few hundredths of its height and tilts one degree each way, over six seconds there and back. The gentlest loop here.
CSS of Float
Shake. The line shivers from side to side twice a second. It moves without flashing, but constant shaking is hard on some readers, so keep it for a short clip and not for a page people must read.
CSS of Shake
Spin. Each letter turns a full circle, waits, and turns again, one after another along the word. Letters that look alike upside down, such as o, x and s, hide half the effect.
CSS of Spin
Neon flicker. A glowing sign that dips three times in each three-second loop: once alone, then twice close together. It never dims more than twice in any one second, which keeps it under the three-flash limit in the WCAG guidelines.
CSS of Neon flicker
Glow pulse. The halo round the letters breathes in and out every two seconds while the letters themselves stay still and fully lit. It needs a dark background to show.
CSS of Glow pulse
Colour cycle. The whole line turns once round the colour wheel every four seconds. It shifts whatever colour you start from, so black, white and grey text will not change at all.
CSS of Colour cycle
Rainbow wave. The same trip round the colour wheel, but each letter starts 120 milliseconds after the one before, so bands of colour travel along the word. Start from a strong colour such as red.
CSS of Rainbow wave
Flame colours. Each letter runs from yellow through orange to red and back every 0.9 seconds while it twitches a twenty-fifth of its height, out of step with its neighbours. Yellow is far brighter than red, so each letter dims about once a second, which is under the three-flash limit.
CSS of Flame colours
Shine sweep. A narrow band of white light crosses the line from left to right, then rests for a second. In CSS it is a moving gradient clipped to the letters, so the text colour has to be set through the gradient.
CSS of Shine sweep
Glitch jitter. The line sits still, then jumps sideways for a few frames while red and cyan copies of the letters split apart. Two short bursts in every two seconds, with hard cuts and no easing.
CSS of Glitch jitter
VHS drift. Most of the loop is still. Once every 2.6 seconds the line leans hard to one side and snaps back, like a tape losing tracking for a moment.
CSS of VHS drift
Own work. Every preset was written for this site as plain numbers: what moves (a letter, a word or the whole line), how long one cycle lasts, the delay between neighbours, the easing, and a short list of stops giving position in em, rotation in degrees, scale, opacity, blur, hue, glow or colour. A scratch script turned those numbers into the CSS stored with each preset and checked it in a headless browser, so the list, the canvas and the pasted CSS describe the same motion. There are 26 presets: 10 reveals that play once, 8 loops that move, 6 that change light or colour and 2 glitches. Names and timings are this site's own and are not taken from any other tool or library. The script also counted how often each looping preset dims and brightens and refused any that did so more than three times in one second, the limit in WCAG success criterion 2.3.1 (https://www.w3.org/WAI/WCAG22/Understanding/three-flashes-or-below-threshold.html); the busiest, Neon flicker and Flame colours, reach two. Every preset's CSS ends with a prefers-reduced-motion rule (https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion). The font suggested for each preset is one of the 124 fonts bundled with the lettering tool, all under the SIL Open Font License 1.1 as recorded in the tool's own font list. Checked on 2026-09-19.
Fonts on this page
Show the list
Every font in this tool is free to use, also for things you sell. The files are served from this site under their open licence.
Fredoka by Milena Brandão, Hafontia. Copyright 2016 The Fredoka Project Authors (https://github.com/hafontia/Fredoka-One). SIL Open Font License 1.1(variable axes pinned (wght 600), reduced to the Latin characters, saved as WOFF2)
Courier Prime by Alan Dague-Greene. Copyright 2015 The Courier Prime Project Authors (https://github.com/quoteunquoteapps/CourierPrime). SIL Open Font License 1.1(reduced to the Latin characters, saved as WOFF2)
Playfair Display by Claus Eggers Sørensen. Copyright 2017 The Playfair Display Project Authors (https://github.com/clauseggers/Playfair-Display), with Reserved Font Name "Playfair Display". SIL Open Font License 1.1
Poppins by Indian Type Foundry, Jonny Pinhorn, Ninad Kale. Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins). SIL Open Font License 1.1(reduced to the Latin characters, saved as WOFF2)
Bagel Fat One by Kyungwon Kim, JAMO. Copyright 2022 The Bagel Fat Project Authors (https://github.com/JAMO-TYPEFACE/BagelFat). SIL Open Font License 1.1(reduced to the Latin characters, saved as WOFF2)
Bangers by Vernon Adams. Copyright 2010 The Bangers Project Authors (https://github.com/googlefonts/bangers). SIL Open Font License 1.1(reduced to the Latin characters, saved as WOFF2)
Cinzel by Natanael Gama. Copyright 2020 The Cinzel Project Authors (https://github.com/NDISCOVER/Cinzel). SIL Open Font License 1.1(variable axes pinned (wght 700), reduced to the Latin characters, saved as WOFF2)
Anton by Vernon Adams. Copyright 2020 The Anton Project Authors (https://github.com/googlefonts/AntonFont.git). SIL Open Font License 1.1(reduced to the Latin characters, saved as WOFF2)
Lobster by Impallari Type. Copyright 2010 The Lobster Project Authors (https://github.com/impallari/The-Lobster-Font), with Reserved Font Name "Lobster". SIL Open Font License 1.1
Russo One by Jovanny Lemonad. Copyright (c) 2011-2012, Jovanny Lemonad (jovanny.ru), with Reserved Font Name "Russo". SIL Open Font License 1.1
DynaPuff by Toshi Omagari, Jennifer Daniel. Copyright 2021 The DynaPuff Project Authors (https://github.com/googlefonts/dynapuff). SIL Open Font License 1.1(variable axes pinned (wght 700), reduced to the Latin characters, saved as WOFF2)
Pacifico by Vernon Adams, Jacques Le Bailly, Botjo Nikoltchev, Ani Petrova. Copyright 2018 The Pacifico Project Authors (https://github.com/googlefonts/Pacifico). SIL Open Font License 1.1(reduced to the Latin characters, saved as WOFF2)
Caveat by Impallari Type. Copyright 2014 The Caveat Project Authors (https://github.com/googlefonts/caveat). SIL Open Font License 1.1(variable axes pinned (wght 700), reduced to the Latin characters, saved as WOFF2)
Creepster by Sideshow. Copyright (c) 2011, Font Diner, Inc (diner@fontdiner.com),. SIL Open Font License 1.1
Bungee by David Jonathan Ross. Copyright 2023 The Bungee Project Authors (https://github.com/djrrb/Bungee). SIL Open Font License 1.1(reduced to the Latin characters, saved as WOFF2)
Monoton by Vernon Adams. Copyright (c) 2011 by vernon adams (vern@newtypography.co.uk),. SIL Open Font License 1.1
Audiowide by Astigmatic. Copyright (c) 2012, Brian J. Bonislawsky DBA Astigmatic (AOETI) (astigma@astigmatic.com), with Reserved Font Names "Audiowide". SIL Open Font License 1.1
Orbitron by Matt McInerney. Copyright 2018 The Orbitron Project Authors (https://github.com/theleagueof/orbitron), with Reserved Font Name: "Orbitron". SIL Open Font License 1.1
Rubik Glitch by NaN, Luke Prowse. Copyright 2020 The Rubik Filtered Project Authors (https://github.com/NaN-xyz/Rubik-Filtered). SIL Open Font License 1.1(reduced to the Latin characters, saved as WOFF2)
VT323 by Peter Hull. Copyright 2011, The VT323 Project Authors (peter.hull@oikoi.com). SIL Open Font License 1.1(reduced to the Latin characters, saved as WOFF2)