Skip to content

Reference: VideoPlayerConfig

VideoPlayerConfig<T> extends the kit’s BasePlayerConfig (baseUrl, auth, playlist, storage, platform, and the rest, shared with the music player). This page covers only the fields video adds. One inherited field is worth flagging here even though video didn’t add it: controls renders the native <video controls> bar, and loading DesktopUiPlugin or TvKeyHandlerPlugin alongside controls: true doubles the UI, pick one.

Playback

FieldTypeDefaultNotes
mutedbooleanSeeded onto the backend before any play() call, satisfies the browser’s autoplay-with-sound policy. Call unmute() after a user gesture.
autoPlaybooleanWhether the item setup() already primed also starts playing once ready() resolves. Every non-empty playlist primes a start item either way, see below.
playbackRatesnumber[]Available speeds, read by playbackRates() and the speed key bindings.
preloadHtmlPreloadMode'auto' / 'metadata' / 'none', maps directly to the <video> element’s preload attribute.
disableMediaControlsbooleanfalseGates only the hardware MediaX key bindings, see Plugin: Key Handler.
disableControlsbooleanfalseShort-circuits KeyHandlerPlugin’s addDefaults() entirely.

Display

FieldTypeDefaultNotes
stretchingStretching'uniform'Initial aspectRatio() value.
theaterDefaultbooleanStarts in theater mode once setup() resolves.
baseImageUrlstringPrefix for relative image/poster/thumbnail paths, useful for a TMDB-style relative path catalogue. Absolute URLs pass through unchanged.

Backend

FieldTypeDefaultNotes
backendFactoryVideoBackendFactoryresolves Html5VideoBackendOverrides backend resolution. See Adapter: Video Backend.

Track & quality defaults

FieldTypeDefaultNotes
defaultSubtitleLanguagestringAuto-selects a matching subtitle track once tracks are available. Exact tag first, then prefix match ('en' matches 'en-US').
defaultAudioLanguagestringSame matching rule, for audio tracks.
defaultQuality'auto' | number'auto'Applied once, after the first manifest parse. Interactive changes afterward persist across item transitions.

Queue behavior

FieldTypeDefaultNotes
autoAdvancebooleantrueCalls next() automatically when the current item ends. Set false when an external orchestrator (Cast sync, a WebSocket-driven session) drives next() itself, to avoid duplicate advances.
playlistT[] | stringSame field as BasePlayerConfig, retyped here from BasePlaylistItem[] to T[] (T defaults to VideoPlaylistItem) — the wire-format normalizer (file, tracks[], {time, date} progress) applies to every item, canonical items pass through unchanged.

Transition defaults

Video’s setup() wrapper injects three defaults BasePlayerConfig alone doesn’t set, all overridable by passing your own value explicitly:

FieldDefault for videoNotes
crossfadeEnabledfalseA hard cut between items, unlike music’s true. Preloading still happens, preloadLeadSeconds (kit default 10) is unaffected.
transitionStrategyGaplessTransitionStrategyMatches the hard-cut default above.
preloadStrategyVideoPreloadStrategyPrefetches the next item’s video assets (HLS manifest, poster, sprite VTT, subtitle and chapter sidecars, ASS fonts) so the next item starts instantly on the hard cut. Extends the kit’s DefaultPreloadStrategy.

Start-item selection, and what autoPlay gates

Every setup() call with a non-empty playlist primes a start item once ready() resolves, reading each item’s progress field (WatchProgress) to pick it: most recently watched wins, over 90% watched rolls forward to the next item, otherwise resumes at the saved time (passed as startAt, so the backend fetches from the offset directly). This runs regardless of autoPlay, a player without it still mounts paused on the right item and the right position instead of blank. autoPlay: true decides the one thing this selection doesn’t do on its own: whether that primed item also starts playing. See Recipe: Persistence & Resume for the full pattern, including saving progress in the first place.

Next steps