Skip to main content
Text animations add entry and exit effects to your video captions, enhancing visual engagement. The futureWords parameter, available with fade and blur animations, controls how upcoming words appear on screen before they are spoken. This combination is particularly effective for creating engaging, word-synchronized captions for social media content.

What You Will Learn

Text Animations

Apply entry and exit animation effects to scene captions

Future Words

Control the visibility of upcoming unspoken words on screen

Animation Types

Select from fade, blur, drift, wipe, text reveal, elastic, and typewriter effects

Social Media Ready

Produce scroll-stopping content for TikTok, Reels, and Shorts

Prerequisites

Ensure you have the following before proceeding:
  • A Pictory API key (get one here)
  • Familiarity with Dynamic Captions fundamentals
  • AI voiceover enabled for word-level caption synchronization with audio

Available Animations

Entry Animations

AnimationfutureWords SupportDirectionDescription
fadeYes-Words fade in smoothly as they are spoken
blurYes-Words transition from blurred to sharp focus
driftNoup, down, left, rightWords slide in from the specified direction
wipeNoleft, right, up, downWords are revealed with a sweeping motion
text revealNo-Words uncover progressively
elasticNo-Words bounce in with a spring effect
typewriterNo-Words appear one letter at a time

Exit Animations

AnimationDirectionDescription
fade-Words fade out smoothly
blur-Words blur out of focus
driftup, down, left, rightWords slide out in the specified direction
wipeleft, right, up, downWords are swept away
text reveal-Words are progressively hidden
elastic and typewriter are entry-only animations. They do not have exit variants.

The futureWords Parameter

The futureWords parameter controls the on-screen appearance of words that have not yet been spoken. This parameter is available exclusively with fade and blur entry animations.
ValueAppearanceEffectRecommended For
"hidden"Upcoming words are invisibleWords appear only when spoken, creating a maximum reveal effectTikTok, Instagram Reels, high-energy content
"subtle"Upcoming words are faintly visibleViewers can preview upcoming text while attention remains on the current wordYouTube Shorts, educational content
"prominent"Upcoming words are clearly visible but dimmedFull text is readable with the spoken word highlightedProfessional videos, presentations

Visual Comparison

futureWords: "hidden" (words revealed as spoken)
Timeline:  "The future of AI is here"
t=0.0s:    [The] ______ __ __ __ ____        (only "The" visible)
t=0.3s:    The [future] __ __ __ ____         ("future" appears as spoken)
t=0.7s:    The future [of] __ __ ____         (words reveal one by one)
t=0.9s:    The future of [AI] __ ____
t=1.1s:    The future of AI [is] ____
t=1.3s:    The future of AI is [here]
futureWords: "subtle" (soft preview of upcoming text)
Timeline:  "The future of AI is here"
t=0.0s:    [The] future of AI is here         ("The" bright, rest faint)
t=0.3s:    The [future] of AI is here         ("future" brightens)
t=0.7s:    The future [of] AI is here         (spoken words remain bright)
futureWords: "prominent" (full text with active word highlighted)
Timeline:  "The future of AI is here"
t=0.0s:    [The] future of AI is here         ("The" highlighted, rest dimmed)
t=0.3s:    The [future] of AI is here         ("future" now highlighted)
t=0.7s:    The future [of] AI is here         (highlight follows the voiceover)

Complete Example

import axios from "axios";

const API_BASE_URL = "https://api.pictory.ai/pictoryapis";
const API_KEY = "YOUR_API_KEY";

async function createAnimatedCaptionsVideo() {
  try {
    console.log("Creating video with animated captions...");

    const response = await axios.post(
      `${API_BASE_URL}/v2/video/storyboard/render`,
      {
        videoName: "animated_captions_demo",
        videoWidth: 1080,
        videoHeight: 1920,
        quality: "high",

        voiceOver: {
          enabled: true,
          aiVoices: [{ speaker: "Rachel", speed: 100 }],
        },

        scenes: [
          {
            story:
              "Five tips to grow your social media following this year. Number one, post consistently at least three times per week.",
            maxSubtitleLines: 1,
            subtitleStyle: {
              animations: [
                {
                  name: "fade",
                  type: "entry",
                  speed: "fast",
                  futureWords: "hidden",
                },
                { name: "fade", type: "exit", speed: "fast" },
              ],
            },
          },
          {
            story:
              "Number two, engage with your audience by replying to every comment within the first hour of posting.",
            maxSubtitleLines: 1,
            subtitleStyle: {
              animations: [
                {
                  name: "blur",
                  type: "entry",
                  speed: "medium",
                  futureWords: "subtle",
                },
                { name: "blur", type: "exit", speed: "fast" },
              ],
            },
          },
          {
            story:
              "Number three, use trending audio and hashtags to reach new audiences organically.",
            maxSubtitleLines: 2,
            subtitleStyle: {
              animations: [
                {
                  name: "fade",
                  type: "entry",
                  speed: "medium",
                  futureWords: "prominent",
                },
                { name: "fade", type: "exit", speed: "medium" },
              ],
            },
          },
        ],
      },
      {
        headers: {
          "Content-Type": "application/json",
          Authorization: API_KEY,
        },
      }
    );

    const jobId = response.data.data.jobId;
    console.log("Video creation started! Job ID:", jobId);
  } catch (error) {
    console.error("Error:", error.response?.data || error.message);
  }
}

createAnimatedCaptionsVideo();

Animation Examples

Fade with Hidden Future Words

Words appear only when spoken. Ideal for short-form social media content:
{
  subtitleStyle: {
    animations: [
      { name: "fade", type: "entry", speed: "fast", futureWords: "hidden" },
      { name: "fade", type: "exit", speed: "fast" }
    ]
  }
}

Blur with Subtle Future Words

Words transition from blurred to sharp focus. Upcoming words are faintly visible:
{
  subtitleStyle: {
    animations: [
      { name: "blur", type: "entry", speed: "medium", futureWords: "subtle" },
      { name: "blur", type: "exit", speed: "fast" }
    ]
  }
}

Drift Animation

Words slide in from a specified direction:
{
  subtitleStyle: {
    animations: [
      { name: "drift", type: "entry", speed: "medium", direction: "up" },
      { name: "drift", type: "exit", speed: "medium", direction: "down" }
    ]
  }
}

Wipe Animation

Words are revealed with a sweeping motion:
{
  subtitleStyle: {
    animations: [
      { name: "wipe", type: "entry", speed: "medium", direction: "left" },
      { name: "wipe", type: "exit", speed: "medium", direction: "right" }
    ]
  }
}

Typewriter Animation

Words appear one letter at a time:
{
  subtitleStyle: {
    animations: [
      { name: "typewriter", type: "entry", speed: "fast" }
    ]
  }
}

Elastic Animation

Words bounce in with a spring effect:
{
  subtitleStyle: {
    animations: [
      { name: "elastic", type: "entry", speed: "medium" }
    ]
  }
}

Text Reveal Animation

Words uncover progressively:
{
  subtitleStyle: {
    animations: [
      { name: "text reveal", type: "entry", speed: "medium" },
      { name: "text reveal", type: "exit", speed: "fast" }
    ]
  }
}

Platform Recommendations

PlatformAspect RatioRecommended AnimationfutureWordsmaxSubtitleLines
TikTok / Reels9:16fade"hidden"1
YouTube Shorts9:16blur"subtle"1-2
YouTube16:9fade"prominent"2
LinkedIn16:9fade"prominent"2
Instagram Feed4:5blur"subtle"2

Animation Parameters Reference

ParameterTypeRequiredValuesDescription
namestringYes"fade", "blur", "drift", "wipe", "text reveal", "elastic", "typewriter"The animation type to apply
typestringYes"entry", "exit"Specifies when the animation plays
speedstringYes"slow", "medium", "fast", "custom"The animation playback speed
customSpeedValuenumberWhen speed is "custom"Minimum 0.5Custom speed multiplier
futureWordsstringNo"hidden", "subtle", "prominent"Controls upcoming word visibility. Available only with fade and blur entry animations
directionstringWhen using drift or wipe"up", "down", "left", "right"The direction of the animation movement
Constraints:
  • The futureWords parameter is available only with fade and blur entry animations
  • Each scene supports a maximum of 2 animations (1 entry + 1 exit)
  • elastic and typewriter are entry-only animations with no exit variant
  • When AI voiceover is enabled, futureWords synchronizes word highlighting with the spoken audio
  • The futureWords parameter must be specified on the entry animation, not the exit animation

Best Practices

  • TikTok / Reels: "hidden" for maximum engagement through word reveal
  • YouTube Shorts: "subtle" to provide a preview of upcoming words
  • YouTube / LinkedIn: "prominent" for professional, fully readable captions
  • Instagram Feed: "subtle" for a balance between engagement and readability
Select an animation speed that complements the voiceover delivery:
  • "fast" for quick-paced speakers and short-form content
  • "medium" for a balanced pace suitable for most content
  • "slow" for dramatic pauses and emphasis
  • "custom" with customSpeedValue for precise control
For the most effective animated caption experience:
  • maxSubtitleLines: 1 delivers the strongest impact for short-form content
  • maxSubtitleLines: 2 provides a good balance for most platforms
  • Higher values display more text simultaneously, which can reduce the visual impact of word-level animations
Different animations can be applied to individual scenes for visual variety:
scenes: [
  { story: "...", subtitleStyle: { animations: [{ name: "fade", ... }] } },
  { story: "...", subtitleStyle: { animations: [{ name: "blur", ... }] } },
  { story: "...", subtitleStyle: { animations: [{ name: "drift", ... }] } }
]

Troubleshooting

Cause: Captions appear but words do not highlight at the correct time relative to the voiceover.Resolution:
  1. Verify that futureWords is set on the entry animation, not the exit animation
  2. Confirm that type is set to "entry" on the animation containing futureWords
  3. Ensure AI voiceover is enabled for automatic word-level timing synchronization
  4. Verify that the animation name is either "fade" or "blur", as these are the only types that support futureWords
Cause: The API returns an error when futureWords is included in the request.Resolution:
  1. Confirm the animation name is "fade" or "blur". Other animation types do not support futureWords
  2. Remove futureWords from any drift, wipe, text reveal, elastic, or typewriter animation configurations
Cause: Setting futureWords: "hidden" does not produce the expected word reveal behavior.Resolution:
  1. Confirm that futureWords is specified on the entry animation, not the exit animation
  2. Verify that maxSubtitleLines is set at the scene level
  3. Enable AI voiceover to synchronize word appearance with the spoken audio

Next Steps

Dynamic Captions

Learn the fundamentals of dynamic captions and the maxSubtitleLines parameter

Custom Subtitle Style

Customize font, color, and background of your captions

Highlight Keywords

Emphasize important words within captions

AI Voiceover Guide

Configure AI voices for your videos