Best Practices for Closed Captions in Vega

Closed captions (CC) are a critical accessibility feature that benefit not only users with hearing impairments but also those watching content in noisy environments or learning new languages. Implementing CC correctly and consistently across apps is crucial for maintaining a high-quality user experience on Fire TV devices.

These guidelines focus on styling recommendations and user experience flow to help developers create caption implementations that are both functional and aesthetically pleasing. While current API limitations may present some challenges (such as the lack of querying for system value defaults), we provide workarounds and best practices to achieve the desired results.

Why consistent closed caption styling matters

Consistent closed caption rendering, placement, and font usage across apps creates a unified, accessible experience for Fire TV users. Platform-level differences in CC styling between Vega and Fire OS implementations can lead to unexpected behaviors, and without clear guidelines, apps may render captions inconsistently.

These recommendations provide a standard for CC styling across the Fire TV ecosystem. They give you direction on implementing accessible and user-friendly CC features, improving overall user satisfaction, and pave the way for future enhancements in CC-related APIs and platform capabilities.

User experience flow

We recommend implementing the following user experience flow for closed captions.

Note: System CC can be accessed on Fire TV via Accessibility > Closed Captions. If it is turned ON, the user has access to a menu where they can set Text, Text Background, and Window Background settings. The values for these can be found in the sections below.

When system CC is ON:

  • Honor system preferences for caption styling (font, size, colors, etc.)
  • Default to these system settings in your app
  • Optionally offer additional in-app customization, but always start with system preferences

When system CC is OFF:

  • If the user doesn’t enable CC in your app, don’t display captions
  • If the user enables CC in your app:
    • With in-app styling options: start with system default values, then preserve user customizations made within the app
    • Without in-app styling options: consistently use system default values

This approach ensures a seamless experience for users across different apps and respects their system-wide preferences when set.

Audio descriptions

When implementing closed captions, we recommend respecting the system’s audio description preferences. Users can set these via Accessibility > Audio Descriptions.

If your app supports audio descriptions:

  • Check system preferences for audio descriptions when:
    • Starting playback
    • User changes system accessibility settings
    • User changes audio tracks
  • If system audio descriptions are enabled:
    • Default to the Audio Description track when available
    • Maintain the user’s ability to manually switch audio tracks
    • Preserve this preference across app sessions

Styling guidelines and recommendations

We recommend abiding by the following system defaults. We also provide the default CC settings that apps should ideally start with, in case they are enabling in-app CC styling.

Text size

Fire OS and Vega handle caption scaling differently. Fire OS uses scalable pixels (sp), inheriting Android’s defaults with a base size of 48sp. Vega uses absolute pixels with a base size of 24px at 1080p. While both need to scale for different resolutions, they use different base sizes and progression. We recommend using Vega’s values, with 24px as the default text size.

Size Name Fire OS (scale factor x 48sp base) Vega (scale factor x 24px base)
Very Small 12px (0.25x) 12px (0.5x)
Small 24px (0.5x) 18px (0.75x)
Normal (default) 48px (1x) 24px (1x)
Large 72px (1.5x) 36px (1.5x)
Very Large 96px (2x) 48px (2x)

Text colors and opacity

Provide a range of color options, including at least: White, Black, Red, Green, Blue, Yellow, Magenta, Cyan. Allow full opacity control with steps: 25%, 50%, 75%, 100% (default). The default color should be white (#FFFFFFFF).

Background color

Offer the same color range as text color, although the same background color and text color should not be selected at the same time (e.g., black background with black text). Allow opacity control: 25%, 50%, 75%, 100% (default). The default background color should be black (#FF000000).

Window color

The default should be transparent. Offer the same color range as text color, although the same window color and text color should not be selected at the same time (e.g., black window with black text).

Fonts

Implement the following font options:

Font Style Font Family Use Case
SERIF Bookerly Default serif font, good for readability
SANS_SERIF (Default) Amazon Ember Clean, modern look
MONOSPACE_SANS Droid Sans Mono Fixed-width sans serif
MONOSPACE_SERIF Source Code Pro Fixed-width serif
CASUAL MotoyaLMaru Informal style
CURSIVE Dancing Script Decorative style
SMALL_CAPITALS Bookerly (transformed) Emphasis style

Edge styles

Implement the following edge styles. By default there should be no special edge styling. Allow users to choose the edge color, with white (#FFFFFFFF) as the default.

Style Name Fire OS Value Color Offset {x, y} Blur Radius Description
None (Default) 0 N/A {0, 0} 0 No special edge styling
Outline (Uniform) 1 Black {0, 0} 0 Uniform outline around text
Drop Shadow 2 Black {1.6, 2} 1.2 Shadow effect behind text
Raised 3 White {-1.1, -1.3} 1 Text appears raised (bevel effect)
Depressed 4 White {1.1, 1.3} 1 Text appears depressed (bevel effect)

Positioning and layout

  • Horizontal alignment: Use centered alignment by default, with options for left and right alignment.
  • Vertical position: Position the caption view at 10% from the bottom of the video content area by default.
  • Safe area: Keep captions within 5% inset from the left and right edges of the screen (e.g., for a 1920px wide screen, maintain at least 96px margin on each side).
  • Padding: Apply a default inner padding to the text equal to 12.5% of the text size. This padding should be applied to both the left and right sides of the text.

Closed captions ducking

When implementing closed captions, handle dynamic positioning to prevent captions from being obscured by player controls or other UI elements. The default behavior should be:

  • Normal position: 10% from the bottom of the video content area
  • Ducked position: Move captions up above player controls when they appear
  • Transition: Animate the position change smoothly (recommended duration: 250–300ms)

Scenarios that require CC ducking:

  1. Player controls become visible
  2. Progress bar appears
  3. Bottom-aligned info cards or overlays are displayed
  4. Any other UI elements that might obscure captions

Default values recap

When system CC is ON, or when system CC is OFF and users enable CC in your app, or when initializing your app’s CC settings, use these defaults:

CC Styling Type Default Value
Text Size Normal (24px)
Text Color White (#FFFFFFFF)
Text Opacity 100%
Background Color Black (#FF000000)
Window Color Transparent
Window Opacity 100%
Font Sans-serif (Amazon Ember or equivalent)
Edge Style None
Edge Color White (#FFFFFFFF)
Horizontal Alignment Centered
Vertical Position 10% from bottom of video content area
Safe Area 5% inset from the left and right edges of the screen
Inner Padding 12.5% of text size (left and right)
CC Ducking Enabled
CC Ducking – Normal Position 10% from bottom of video content area
CC Ducking – Ducked Position Above player controls (calculated based on control height)
CC Ducking – Trigger When player controls or other bottom UI elements become visible
CC Ducking – Transition Animation Smooth animation (recommended duration: 250–300ms)
CC Ducking – Return Animation Smooth animation back to normal position when controls are hidden (recommended duration: 250–300ms)


Visual representation of how the default settings above translate to a 1080p screen

Implementation notes

  • Additional customization: While offering in-app customization is optional, it can enhance user experience. If implementing custom controls, ensure they’re intuitive and align with system settings where possible.
  • Testing recommendations: Test your CC implementation thoroughly with system CC both ON and OFF. Verify that all styling options render correctly across different content types. Ensure your app gracefully handles transitions between system and in-app CC settings.
  • Performance considerations: Implement efficient rendering techniques to avoid performance issues, especially with complex edge styles or large text sizes.
  • Accessibility: Ensure that CC controls within your app are themselves accessible, with clear labels and easy navigation.
  • Ducking: Monitor the visibility of player controls and other UI elements. When those appear, calculate sufficient clearance to ensure captions remain fully visible. We advise a maximum of 5% inset from the top of the UI element that appeared on the screen. Maintain caption position within the safe area, even when ducked. When implementing CC ducking, maintain all other caption styling properties (size, color, font, etc.). Only the vertical position should change.

Note: The Vega SDK does not currently provide an API for querying system CC preference defaults. This is a known limitation. For now, use the default values listed in this guide as your starting point.

If you follow these guidelines for your Vega app, you’ll create a captioning experience that is consistent with the Fire TV ecosystem, user-friendly, and accessible. Remember, while these are currently recommendations, implementing them will provide the best experience for your users across all Fire TV devices. We appreciate your efforts in making Fire TV a more inclusive platform.

Related:

Last updated: Mar 12, 2026