Rate this page:

Video Composer Changelog

We are no longer allowing new customers to onboard to Twilio Live. Effective November 30, 2023, Twilio Live will End of Life. We have created this Migration Guide to help you identify an alternative solution for your use case.

2.2.0 (July 13th, 2022)

New Feature

With this update, the participant video tile will not be rendered when the participant joins the room without published tracks, or if the video-composer is not subscribed to the participant's tracks. To have the video-composer unsubscribe from a participant's tracks, please visit the Track Subscription API documentation.

This update also includes a change to improve the performance of the video-composer.

2.1.0 (June 8th, 2022)

New Feature

The background color of the Video Composer can now be customized. To change the default color, pass the following variable to the ExtensionEnvironment parameter when creating a MediaProcessor:

  // Set a HEX color for the background of the Video Composer (optional, #121c2d by default)
  "backgroundColor": "#121c2d"

For a list of valid HEX colors, please visit Hex Calculator.

2.0.0 (June 8th, 2022)

Breaking change: Previously, the video-composer would disconnect and then reconnect from a Room after 4 hours (the default maximum Participant duration). The video-composer will now no longer reconnect after reaching the maximum Participant duration, and the default maximum Participant duration is now configurable. The default maximum Participant duration is still 4 hours, but can be configured for up to 24 hours.

Previously, video-composer would disconnect and reconnect from the Room every 3h 55m, because a Participant could be connected to the Room for a maximum of 4 hours. Following recent changes to Twilio Video Rooms, a Room's owner can now set this time limit up to 24 hours.

To increase the maximum Participant duration for a Room, please visit the Video documentation and follow the instructions. You can configure the maximum Participant duration via the REST API or within the Twilio Console.

1.4.0 (March 24th, 2022)

The Video Composer now supports displaying the participant video tiles in either landscape or portrait mode. To specify tiles orientation, developer must pass a new parameter to the ExtensionEnvironment during MediaProcessor resource creation.

  // Layout orientation of the video tiles, when not provided it defaults to landscape
  "videoTileOrientation": "landscape|portrait"

1.3.2 (March 16th, 2022)

Bug fix:

With this update, when hideParticipantIdentities is enabled and a participant starts presenting, the identity of the participant will no longer be displayed on top of the screenshare area.

1.3.1 (February 25th, 2022)

New Feature: Timed Metadata

The Video Composer now inserts Timed Metadata into the Room. This provides a convenient way for developers to obtain volume level information about a Room's Participants, which can be accessed using the following SDK versions:

  • JS Player SDK 1.0.2 and above
  • Android Player SDK 1.0.1 and above
  • iOS Player SDK 1.0.1 and above

Every 500ms, the Video Composer inserts a JSON payload into the Room via the TimedMetadata API. Within the payload:

  • The s key corresponds to a sequence ID
  • The p object contains the Room's Participants.

Within the p object, the keys represent individual Participants whose corresponding JSON objects contain a v key representing the Participant's volume level.

Applications are encouraged to inspect a payload’s sequence ID and discard a message payload received out-of-order.

Example payload

The following example payload is from a Room with two Participants.

  "s": 23, // sequence id
  "p": {
    "alice" : {"v":300},
    "bob" : {"v":-1} // bob is muted

For more information on using Twilio's SDKs to access the TimedMetadata API, see the documentation: JS; iOS; Android.

1.2.1 (February 10th, 2022)


High definition portrait resolutions have been added to the VideoComposer. This allows for mobile first livestreams to be created. The new resolutions are 720x1280 and 1080x1920.

1.2.0 (December 17th, 2021)

New Feature

The identities of participants can now be hidden in the Video Composer. To enable this feature, pass the following variable to the ExtensionEnvironment parameter when creating a MediaProcessor:

  // Prevents participant identities from being displayed in the Video Composer (optional, false by default)
  "hideParticipantIdentities": true

1.1.0 (December 17th, 2021)

Presentation Mode

The Video Composer now supports Presentation Mode! This allows participants to "present" content of their choice to the other participants and viewers. To present a video track in your application, enable a user to publish a video track with the name video-composer-presentation. The Video Composer will show the presented video as the largest track on the screen, and the list of speakers will move to the right of the presentation. Please note that this list will only show 5 speakers at a time, and they will update as the active speaker changes.

Additional Details

  • The Video Composer will only show one video track named video-composer-presentation at a time in the main view. If a video-composer-presentation track is already being shown in the main view, then subsequent tracks named video-composer-presentation will not be rendered. Applications should limit the publishing of a video-composer-presentation track to one per room to avoid potentially unexpected UI/UX states.
  • The Video Composer presentation mode is only supported with video tracks named video-composer-presentation. Audio and data tracks published with the name video-composer-presentation will not result in any Video Composer UX changes.
  • The Video Composer will return back to the adaptive grid view layout when an application unpublishes a video track named video-composer-presentation shown in the main view.


  • Updated the color palette of the video composer to have a neutral gray theme.

1.0.0 (October 20th, 2021)

The 1.0.0-beta.1 Video Composer has been promoted to 1.0.0 and is now Generally Available! Thank you for all the feedback from our beta customers. For more details about the Video Composer, please visit the documentation.

1.0.0-beta.1 (October 13th, 2021)

A media extension that composes a Programmable Video Room's participants in an adaptive grid layout.


  • Automatically connects to and disconnects from a Programmable Video Room. The video composer disconnects from the Room if no participants have connected after 5 minutes.
  • Composes a Room's participants into an adaptive grid layout with a maximum of 9 participants. When the Room contains more than 9 participants, the Video Composer shows the 9 most recent active speakers. If a speaker not shown becomes the active speaker, the Video Composer will automatically add the new speaker to the grid in place of the least recently active speaker.
  • Automatically highlights the current active speaker.
  • Automatically shows audio and video muted indicators.

Getting Started

To use a Video Composer in a Twilio Live application, specify the Video Composer extension name and extension context parameters when creating a MediaProcessor.

curl -X POST '' \
  -d 'Extension="video-composer-v1"' \
  -d 'ExtensionContext={"room": {"name": "RM123"}, "outputs": ["VJXXX"]}'

Extension Context

The snippet below describes the Video Composer extension context parameters.

  // Room Parameters (required)
  "room": {
      "name": "RM123", // required

  // Extension Identity (optional, video-composer-v1 by default)
  "identity": "video-composer-v1",

  // Media destinations (required)
  "outputs": ["VJXXX"],

  // Audio bitrate (optional)
  "audioBitrate": 128,

    // Resolution (optional)
  "resolution": "1280x720"
Rate this page:

Need some help?

We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd by visiting Twilio's Stack Overflow Collective or browsing the Twilio tag on Stack Overflow.

Loading Code Sample...

        Thank you for your feedback!

        Please select the reason(s) for your feedback. The additional information you provide helps us improve our documentation:

        Sending your feedback...
        🎉 Thank you for your feedback!
        Something went wrong. Please try again.

        Thanks for your feedback!