What you’ll build

The emphasis words in Captyne’s bundled Clean Bold preset get a slanted shine that crosses each word once, right after it lands, and then a soft glow. You’ll build the same effect from scratch and learn three techniques that make it work on every generated caption:

If you’re new to building presets, start with How to create your own caption preset and Building Marker-Driven Presets With Word-Tracking Effects.

CC Light Sweep Center travels from _acWordL − pad to _acWordR + pad AMAZING L − pad (0%) R + pad (100%) _acWordL _acWordR IN animation sweep runs IN_END LightSweep_End OUT_START

Why a light sweep doesn’t follow your text

CC Light Sweep, Gradient Ramp, CC Light Rays, CC Radial Fast Blur and many other effects have a point control such as Center. On text and shape layers, After Effects applies effects after the layer’s transform, so that point is a fixed position in the frame, not on the layer. Move the word and the sweep stays behind. Make the word longer and a sweep keyframed to cross “HELLO” stops halfway across “INCREDIBLE”.

For one title you can fix it by hand. For captions you can’t: every generated word has a different width, a different position and a different duration. The fix is to stop typing pixel values and work the point out from the word itself.

The word variables

Captyne gives every effect expression on a style layer a set of variables that describe the word’s box in frame coordinates. They are recalculated every frame, so they follow the word when it moves.

VariableMeaning
_acWordL, _acWordRLeft and right edge of the word
_acWordT, _acWordBTop and bottom edge of the word
_acWordX, _acWordYCentre of the word
_acWordW, _acWordHWidth and height of the word

You never type the lines that define them inside a preset — Captyne adds them. If you want to use the same expressions outside Captyne, see Using this in any After Effects project.

Step 1 — Set up the preset

Captyne panel → Setup → My Presets → + New Preset
  1. Click + New Preset, name it Shine Sweep, keep 2 — Normal + Emphasis and click Create & Open in AE.
  2. Captyne opens a template comp with a NORMAL and an EMPHASIS text layer. Each already has an IN_END and an OUT_START marker.
  3. Style the EMPHASIS layer: a heavy font (Clean Bold uses Orbitron Black at 100 px) in white. Leave its Position alone — Captyne places every generated word.
💡

Want to see a finished version first? Select Clean Bold in the preset list and open it for editing. Its EMPHASIS layer has exactly the sweep you’re about to build.

Step 2 — Add and style CC Light Sweep

EMPHASIS → Effect → Generate → CC Light Sweep

Select the EMPHASIS layer and add CC Light Sweep. These are the settings Clean Bold uses — a good starting point for a crisp, slanted shine:

PropertyValueWhy
Direction−30°A slanted streak reads as a reflection rather than a wipe.
ShapeSharpA hard-edged band of light. Use Smooth for a softer glint.
Width24Narrow enough to stay inside short words.
Sweep Intensity30Brightness of the band.
Edge Intensity50Brightens the letter edges the band passes over.
Edge Thickness0.9Thickness of that edge highlight.
Light ColorWarm whitePure white can look flat on white text; a hint of warmth helps.
Light ReceptionAddThe light is added on top of the letters.

Don’t touch Center yet — that’s the next step. Add a glow after the sweep if you like (Clean Bold uses Deep Glow; the built-in Glow works too).

Step 3 — Lock the Center to the word

CC Light Sweep → Center → Alt/Option-click the stopwatch

Alt-click (Option-click on Mac) the stopwatch next to Center and replace the expression with:

[_acWordX, _acWordY]

The sweep now sits in the middle of the word. Move the layer, change the text, scale it — the sweep stays on the word. To park it somewhere else on the word, mix the edges. For example a quarter of the way in from the left:

[_acWordL + _acWordW * 0.25, _acWordY]

Because the position is a fraction of the width, “a quarter of the way in” stays a quarter of the way in on a two-letter word and on a twelve-letter word.

⚠

Seeing “_acWordX is not defined”? In a brand-new preset, click ⊙ Capture Preset once after pasting — Captyne adds the lines that define the variables and the expression starts working. When you edit a saved preset they’re added automatically within a few seconds.

Step 4 — Animate the sweep with markers

EMPHASIS → add a layer marker named LightSweep_End

A light sweep is only interesting when it moves. Instead of keyframes at fixed times, read two markers so the sweep stretches to every word’s duration:

  1. Move the time indicator to where the sweep should finish — about the middle of the layer.
  2. Add a layer marker (* on the numeric keypad), double-click it and type LightSweep_End as the comment.
  3. Replace the Center expression with:
var s, e; try { s = thisLayer.marker.key("IN_END").time; } catch (err) { s = thisLayer.inPoint; } try { e = thisLayer.marker.key("LightSweep_End").time; } catch (err) { e = s + 0.6; } var pad = 50; // how far outside the word the sweep starts and ends var t = ease(time, s, e, 0, 1); // 0 at IN_END, 1 at LightSweep_End [linear(t, 0, 1, _acWordL - pad, _acWordR + pad), _acWordY]

The sweep waits just left of the word until the word has landed (IN_END), crosses it, and parks just right of it at LightSweep_End. Drag either marker and the sweep follows immediately: closer markers make a faster sweep.

When you capture the preset, every marker is saved as a percentage of the layer’s length. At generate, Captyne puts it at the same percentage of each word’s own duration, so a short word gets a quick flick and a long, held word gets a slower pass.

💡

pad keeps the band fully outside the letters at the start and end, so it doesn’t pop on or off. With a wide or steeply slanted band, or very tall text, raise it to 80–120. The try / catch fallbacks keep the expression working even if a marker is missing.

Prefer not to write expressions? Select the layer and choose ✨ Shine (light sweep) under Add Smart Effect. Captyne adds CC Light Sweep with a ready-made expression and two markers, SE_IN and SE_OUT, that work the same way.

Step 5 — Keyframes that move relative to the word

An expression gives you a straight pass. Sometimes you want an animation curve you can shape by hand: a sweep that overshoots and settles, a quick double pass, or a slow start and a fast finish. The obvious move — keyframing Center directly — doesn’t survive: keyframe values are fixed pixel positions in the frame, so they can’t stretch to each word or follow it.

The solution is to keyframe progress instead of position. A slider holds 0–100, and an expression turns it into a position on the word. Your keyframes now mean “percent of the way across the word”, so they update relative to every word automatically.

Sweep Progress (keyframes you draw) 0% 110% 100% → mapped across each word, between markers GO BRILLIANT 0% → 100% of GO 0% → 100% of BRILLIANT same keyframes, same curve — stretched to each word’s width and to its IN_END → LightSweep_End time EMPHASIS → Effect → Expression Controls → Slider Control
  1. Add a Slider Control to the EMPHASIS layer and rename it Sweep Progress (select it, press Enter).
  2. Keyframe its Slider: 0 on the first keyframe and 100 on the last, with anything you like in between — for example 110 then 100 for an overshoot, or 0 → 100 → 0 → 100 for a double pass. Shape the speed with Easy Ease and the Graph Editor as usual.
  3. Put this on the light sweep’s Center:
var p = effect("Sweep Progress")("Slider"); var s, e; try { s = thisLayer.marker.key("IN_END").time; } catch (err) { s = thisLayer.inPoint; } try { e = thisLayer.marker.key("LightSweep_End").time; } catch (err) { e = s + 0.6; } // Play the slider's keyframes between the two markers, whatever their spacing var v = p.value; if (p.numKeys >= 2) { var k1 = p.key(1).time, k2 = p.key(p.numKeys).time; v = p.valueAtTime(linear(time, s, e, k1, k2)); } var pad = 50; var x = (_acWordL - pad) + (_acWordW + pad * 2) * v / 100; // 0% = left of word, 100% = right of word [x, _acWordY]

What each part does:

💡

Need vertical movement too, for example a sweep that rises across the word? Add a second offset as a fraction of the height: replace _acWordY with _acWordB - _acWordH * v / 100. Keep one Slider Control per layer: if you need a second control, use a different type (Angle Control, Checkbox Control) so each one is restored correctly.

Use it on any effect with a Center point

Nothing here is specific to CC Light Sweep. Any effect property that holds a point in the frame can be locked, animated by markers or driven by a progress slider in exactly the same way — just put the expression on that property.

Effect → pointIdeaExpression
CC Light Rays → CenterRays bursting from the word[_acWordX, _acWordY]
CC Radial Fast Blur → CenterZoom-blur in from the word’s centre[_acWordX, _acWordY]
Radial Blur → CenterSpin or zoom blur on the word[_acWordX, _acWordY]
CC Light Burst 2.5 → CenterLight burst behind the word[_acWordX, _acWordY]
Lens Flare → Flare CenterFlare that glides along the top edgeSweep expression with _acWordT instead of _acWordY
Bulge → Bulge CenterA bulge that rolls through the lettersSweep expression from Step 4
Circle → CenterA ring that grows behind the word[_acWordX, _acWordY]
Gradient Ramp → Start / EndGradient that fits every wordSee the gradient tutorial

The pattern is always the same: work out a progress value from markers (or a slider), then turn it into a point with the edges, for example [_acWordL + _acWordW * progress, _acWordY].

📌

For still (not animated) points you don’t even need an expression on the most common effects. When you capture, Captyne saves a still point on CC Light Sweep, Gradient Ramp, CC Light Rays, CC Radial Fast Blur, CC Radial Blur, Radial Blur, Corner Pin, Circle, Lens Flare or Lightning as a fraction of the word’s box, and on generate it becomes a live expression that follows the word. Expressions are the way to go for anything that moves.

Using this in any After Effects project

Not using Captyne yet, or locking a light sweep to a regular title? Paste this block at the very top of the expression, then the code from any step above. It defines the same word variables from the text layer’s bounds using sourceRectAtTime() and toComp():

var _acRect=thisLayer.sourceRectAtTime(thisLayer.inPoint,false); var _acTL=thisLayer.toComp([_acRect.left,_acRect.top]); var _acTR=thisLayer.toComp([_acRect.left+_acRect.width,_acRect.top]); var _acBL=thisLayer.toComp([_acRect.left,_acRect.top+_acRect.height]); var _acCenter=thisLayer.toComp([_acRect.left+_acRect.width/2,_acRect.top+_acRect.height/2]); var _acWordL=_acTL[0], _acWordR=_acTR[0], _acWordT=_acTL[1], _acWordB=_acBL[1]; var _acWordW=_acWordR-_acWordL, _acWordH=_acWordB-_acWordT; var _acWordX=_acCenter[0], _acWordY=_acCenter[1];

It also works inside a Captyne preset: every line starts with var _ac, so Captyne recognises the block when you capture, removes it and adds its own. Don’t put comments or blank lines inside it.

Test, capture and generate

CheckWhat should happen
Change the wordType “GO”, then “UNBELIEVABLE”. The sweep starts left of the word and finishes right of it both times.
Move the layerDrag it anywhere in the frame, or scale it. The sweep stays on the letters.
Drag the markersMove IN_END and LightSweep_End closer together: the sweep speeds up. Further apart: it slows down.
Edit the keyframesChange the Sweep Progress curve: the motion changes, the start and end times don’t.
Expression errorsNo yellow warning bar at the bottom of the Composition panel.
  1. Click ⊙ Capture Preset. Captyne saves the styles, markers, effects, slider keyframes and expressions.
  2. Open a comp with speech, choose Shine Sweep, click Transcribe and then Generate Captions.
  3. Scrub through short and long words. Move the ACP_MASTER null to reposition every caption, or an ACP_SET_n_CTRL null to move one phrase: the sweep follows.

Build caption presets like this in minutes

Captyne turns your After Effects design into animated captions for every word — with AI transcription inside AE.

See Plans & Pricing →

FAQ

Why doesn’t CC Light Sweep follow my text in After Effects?

On text and shape layers the effect is applied after the layer’s transform, so Center is a fixed position in the frame. Drive Center with an expression based on the text’s bounds (sourceRectAtTime and toComp, or Captyne’s _acWord variables) and it follows the layer.

How do I make a light sweep move across text automatically?

Animate Center from just left of the text to just right of it with linear() or ease(), using the left and right edges of the text. Read the start and end times from layer markers so the timing adjusts when you move them.

Can I keyframe the light sweep Center?

You can, but the keyframes are fixed pixel positions, so they won’t fit a different word or follow it. Keyframe a Sweep Progress slider from 0 to 100 instead and convert it to a position with an expression, as in Step 5. The result is a keyframed animation that is relative to every word.

Why do I see “_acWordX is not defined”?

The word variables are added by Captyne. In a new preset, click Capture Preset once and the error goes away. Outside Captyne, paste the block from Using this in any After Effects project at the top of the expression.

Will this work with my own fonts and plugins like Deep Glow?

Yes. The expressions only depend on the size and position of the text, so any font, size or tracking works. Effects after the sweep, such as Glow or Deep Glow, are saved with the preset. Anyone using the preset needs the same third-party plugins installed.

Next: make the gradient behind the sweep fit every word in Gradient Text That Follows Every Word.