What are animated thumbnails?
Animated thumbnails are short, looping video previews extracted from the main video. They replace static images to provide a more engaging browsing experience.
Animated thumbnails:
- Delivered as one or more HLS manifests
- Default duration: ~10 seconds
- Default start time: first frame (customizable)
- Intended for use in place of static posters/thumbnails in grids, lists, and other preview contexts
Configuring animated thumbnails with your Brightcove Player
To use animated thumbnails with your Brightcove Player, follow these steps:
- Open the Players module and select your player or create a new player.
- Set your Player version to 7.37.3 or later.
- On the Overview tab, expand the Plugins accordion.
- In the Plugins section, click the Add Plugin dropdown and select Brightcove Plugin.
- In the Brightcove Plugin dropdown, select Video Poster.
- Configure the plugin options as needed (see plugin options below).
- Click Add.
- Click Publish Changes to publish your changes.
Plugin options
| Option | Type | Description |
|---|---|---|
playMode |
string | "auto" – autoplay preview on load"hover" – play preview only on hover |
loop |
boolean | true to loop preview, false to play once |
delay |
number | Delay in milliseconds before preview starts (helps avoid unintended playback) |
playButtonVisible |
boolean | Shows the play button during preview (true) or hides it (false) |
previewDuration |
number | Length of the preview in seconds, as an integer between 1 and 10 (default 10) |
initialBandwidth |
number | Initial bandwidth estimate, in bits per second, used to select the starting HLS rendition. The preview begins at the highest rendition that fits within this value instead of the lowest. The default of 3000000 (3 Mbps) targets the 720p rendition on standard Brightcove ingest profiles. Set to 0 to let the player select the rendition on its own. |
lockRendition |
boolean | When true, the preview is held at the initialBandwidth-selected rendition for its entire duration, preventing the player's adaptive bitrate (ABR) logic from switching to a higher-bandwidth rendition. If no rendition fits within initialBandwidth, the lowest available rendition is used. This caps the bandwidth a preview can consume — useful when many previews play at once (for example, a grid of hover-to-play thumbnails). Has no effect unless initialBandwidth is set. Defaults to false. |
Example plugin configuration
When you add the videoPoster plugin using the dropdown menu, the following configuration will be applied to your player:
{
"plugins": [
{
"name": "videoPoster",
"options": {
"playMode": "hover",
"loop": true,
"delay": 300,
"playButtonVisible": true,
"previewDuration": 10,
"initialBandwidth": 3000000,
"lockRendition": false
},
"is_packaged": true
}
]
}
Tracking preview interactions with player events
The videoPoster plugin emits two events on the Brightcove Player so you can measure
how viewers interact with animated thumbnails — for example, how often a preview is watched and
how often it leads to a click into the full video. Because these are standard player events, you
can send them to any third-party analytics tool (Mixpanel, Adobe Analytics, Google Analytics, or
your own endpoint) without using Brightcove Analytics.
Events
| Event | When it fires |
|---|---|
videopreview-start |
A preview actually begins playing. Fires exactly once per preview session, and only after playback is confirmed — so it does not fire if autoplay is blocked by the browser, or if the viewer's pointer leaves the player before the delay has elapsed. |
videopreview-end |
The preview session ends, whether it played out naturally or was interrupted. Fires exactly once per preview session, and never fires for a preview that never started. |
Event properties
Both events include a videoId property. In addition:
| Event | Property | Type | Description |
|---|---|---|---|
videopreview-start |
playMode |
string | The effective playMode option for this player ("auto" or "hover") |
videopreview-start |
loop |
boolean | The effective loop option for this player |
videopreview-start |
previewDuration |
number | The effective previewDuration option for this player, in seconds |
videopreview-end |
reason |
string | Why the session ended — see end reasons below |
videopreview-end |
secondsViewed |
number | Accumulated preview watch time for the session, in seconds. Time is accumulated across loops, so a looping preview watched for 25 seconds reports 25 rather than resetting on each loop. |
End reasons
| Value | Meaning |
|---|---|
complete |
The preview played all the way through. This happens only when loop is false — see the note below. |
hover-out |
In hover mode, the viewer's pointer left the player |
click-through |
The viewer clicked the preview to start the full video. This is the event to measure if you want a preview-to-play conversion rate. |
main-play |
The full video started playing by some other means, such as the play button or a player.play() API call |
error |
The preview encountered a playback error after it had started |
teardown |
The video changed, a catalog error occurred, or the player was disposed while the preview was running |
Listening for the events
Add the listeners to your page alongside the player embed. Replace myAnalytics with
the tool you use.
videojs.getPlayer('myPlayerId').ready(function() {
var player = this;
player.on('videopreview-start', function(event) {
myAnalytics.track('preview_started', {
video: event.videoId,
mode: event.playMode
});
});
player.on('videopreview-end', function(event) {
myAnalytics.track('preview_ended', {
video: event.videoId,
reason: event.reason,
seconds: event.secondsViewed
});
// Preview-to-play conversion
if (event.reason === 'click-through') {
myAnalytics.track('preview_click_through', { video: event.videoId });
}
});
});
Capturing animated thumbnails using the Media Module
To capture an animated thumbnail, follow these steps:
- Open the Media Module and select your video.
- Put the video scrubber in the frame where you'd like the preview to start and Click Capture.
- Select Video Preview and click Capture.
Reviewing animated thumbnails using the API
The video_preview field is available through both the Playback API and the CMS API. This allows you to retrieve and manage animated thumbnail previews programmatically.
Playback API
The video_preview field is returned as a top-level property of videos in the Playback API for the following requests:
Example video_preview (playlist Playback API)
{
"account_id": "...",
"id": "...",
"videos": [
{
"account_id": "...",
"sources": [ "..." ],
"video_preview": [
{
"ext_x_version": "7",
"src": "http://manifest.prod.boltdns.net/.../preview.m3u8?...",
"type": "application/x-mpegURL"
},
{
"ext_x_version": "7",
"src": "https://manifest.prod.boltdns.net/.../preview.m3u8?...",
"type": "application/x-mpegURL"
}
]
}
]
}
CMS API
In addition to the Playback API, the video_preview field is also supported in the CMS API for retrieving and updating video previews.
Example request
https://cms.api.brightcove.com/v1/accounts/<account_id>/videos/<video_id>?include_video_preview=true
Example response
{
...
"video_preview": {
"start": 10000,
"sources": [ ... ] // Same format as Playback API
}
...
}
{
"video_preview": {
"start": new_value
}
}