https://framer.com/m/VideoPro2-vfkv.js

Io / Enhancements / CustomVideoPlayer

CustomVideoPlayer

CustomVideoPlayer plays uploads, direct URLs, YouTube or Vimeo behind one set of controls you style yourself, with chapters and accessibility settings of its own.

Enhancements17 controlsfour sourceschapters

Examples

Live specimens for every control the component exposes.

Setup

Four arrays cover the sources — uploaded files, direct URLs, YouTube ids and Vimeo ids — so one player can carry a playlist from more than one place. manualChapters adds a chapter list over the timeline.

0:00 / 0:00

Playback

showControls swaps between the styled controls and none at all. loop and autoPlay behave as they do natively, which means autoplay needs the track muted in most browsers.

controls on

0:00 / 0:00

controls off

looping

0:00 / 0:00

Appearance

The style groups cover the frame, the control bar, the play overlay and its glow. useCustomPlayButton replaces the built-in play affordance with your own.

default overlay

0:00 / 0:00

custom play button

0:00 / 0:00

autoplay

0:00 / 0:00

Props

The controls exposed on the instance panel.

PropTypeBehaviour
sourceTypeenumfile · url · youtube · vimeo. Picks which source field below applies.
modeenumsingle · playlist. One video, or a list the player steps through.
videoFilefileUploaded video file.
videoUrlstringDirect URL to the video file.
youtubeIdstringYouTube URL or bare video id.
vimeoIdstringVimeo video id.
videoFilesarrayUploaded video files.
videoUrlsarrayDirect video addresses.
youtubeIdsarrayYouTube ids to play.
vimeoIdsarrayVimeo ids to play.
showControlsbooleanShows the styled control bar.
controlsModeenumdefault · minimal. Full control bar, or a pared-back one.
loopbooleanRepeats the track.
autoPlaybooleanStarts on load. Browsers require the track muted.
manualChaptersarrayChapter marks over the timeline.
chaptersModeenumembedded · external. Chapters in the timeline, or driven from outside.
controlsobjectWhich controls appear in the bar.
posterImageimageStill shown before playback starts.
accessibilityobjectCaptions and keyboard behaviour.
styleobjectFrame, radius and fill of the player.
controlsStyleobjectLook of the control bar.
defaultSettingsobjectStarting volume, speed and quality.
useCustomPlayButtonbooleanUses your own play affordance.
customPlayButtonslotAny canvas layer used as the play button.
showPlayButtonOnlyOnInitialbooleanShows that button only before the first play.
playOverlayobjectLook of the overlay before playback.
buttonStyleobjectLook of the play button.
glowobjectGlow behind the player.
PropTypeBehaviour
sourceTypeenumfile · url · youtube · vimeo. Picks which source field below applies.
modeenumsingle · playlist. One video, or a list the player steps through.
videoFilefileUploaded video file.
videoUrlstringDirect URL to the video file.
youtubeIdstringYouTube URL or bare video id.
vimeoIdstringVimeo video id.
videoFilesarrayUploaded video files.
videoUrlsarrayDirect video addresses.
youtubeIdsarrayYouTube ids to play.
vimeoIdsarrayVimeo ids to play.
showControlsbooleanShows the styled control bar.
controlsModeenumdefault · minimal. Full control bar, or a pared-back one.
loopbooleanRepeats the track.
autoPlaybooleanStarts on load. Browsers require the track muted.
manualChaptersarrayChapter marks over the timeline.
chaptersModeenumembedded · external. Chapters in the timeline, or driven from outside.
controlsobjectWhich controls appear in the bar.
posterImageimageStill shown before playback starts.
accessibilityobjectCaptions and keyboard behaviour.
styleobjectFrame, radius and fill of the player.
controlsStyleobjectLook of the control bar.
defaultSettingsobjectStarting volume, speed and quality.
useCustomPlayButtonbooleanUses your own play affordance.
customPlayButtonslotAny canvas layer used as the play button.
showPlayButtonOnlyOnInitialbooleanShows that button only before the first play.
playOverlayobjectLook of the overlay before playback.
buttonStyleobjectLook of the play button.
glowobjectGlow behind the player.

Usage

Guidance carried over from the component definition.

Reach for CustomVideoPlayer

One player must handle uploads, YouTube and Vimeo alike.

The control bar has to match the site rather than the browser.

The video is long enough to need chapters.

The player must look the same whatever the source is.

Reach for something else

The video should scrub with the scroll — use ScrollVideoPlayer.

A plain embed would do — use the Video component.

The footage is decorative background; a player is too much.

Io — Enhancements

Every specimen above is a live component instance. Colour, type and radius resolve from the project theme tokens.

io

An experiment in what a design system becomes when AI can consume it.

© 2026 io

Contact me

Create a free website with Framer, the website builder loved by startups, designers and agencies.