Text Sequencer

Cycle through a list of text strings with timing based on character length.

Expression Code

// Text Sequencer
// Apply to Source Text
const texts = ["First section", "A longer sentence", "Short"];
const fps = 25;
const charsPerSecond = 8;

const durations = texts.map(t => Math.max(t.length * (fps / charsPerSecond), fps));
const starts = texts.map((_, i) =>
  durations.slice(0, i).reduce((a, b) => a + b, 0)
);

const totalFrames = starts[starts.length - 1] + durations[durations.length - 1];
const f = Math.floor(time * fps) % totalFrames;

let idx = 0;
for (let i = starts.length - 1; i >= 0; i--) {
  if (f >= starts[i]) { idx = i; break; }
}

texts[idx]
Apply to a text layer's Source Text property. The expression will cycle through each string in the texts array, holding each one on screen proportional to its character count. 1. Create a text layer 2. Alt/Option-click the Source Text stopwatch 3. Paste this expression 4. Edit the texts array with your own strings 5. Adjust charsPerSecond to control overall pacing