288 lines (199 sloc) 8.18 KB


The On Screen Controller (short: OSC) is a minimal GUI integrated with mpv to offer basic mouse-controllability. It is intended to make interaction easier for new users and to enable precise and direct seeking.

The OSC is enabled by default if mpv was compiled with Lua support. It can be disabled entirely using the --osc=no option.

Using the OSC

By default, the OSC will show up whenever the mouse is moved inside the player window and will hide if the mouse is not moved outside the OSC for 0.5 seconds or if the mouse leaves the window.

The Interface

| pl prev | pl next  |  title                     |       cache |
| play | skip | skip | time    |  seekbar  | time | audio | sub |
|      | back | frwd | elapsed |           | left |       |     |
pl prev
left-click play previous file in playlist
right-click show playlist
shift+L-click show playlist
pl next
left-click play next file in playlist
right-click show playlist
shift+L-click show playlist
Displays current media-title or filename
left-click show playlist position and length and full title
right-click show filename
Shows current cache fill status
left-click toggle play/pause
skip back
left-click go to beginning of chapter / previous chapter
right-click show chapters
shift+L-click show chapters
skip frwd
left-click go to next chapter
right-click show chapters
shift+L-click show chapters
time elapsed
Shows current playback position timestamp
left-click toggle displaying timecodes with milliseconds
Indicates current playback position and position of chapters
left-click seek to position
time left
Shows remaining playback time timestamp
left-click toggle between total and remaining time
audio and sub
Displays selected track and amount of available tracks
left-click cycle audio/sub tracks forward
right-click cycle audio/sub tracks backwards
shift+L-click show available audio/sub tracks

Key Bindings

These key bindings are active by default if nothing else is already bound to these keys. In case of collision, the function needs to be bound to a different key. See the Script Commands section.

del Cycles visibility between never / auto (mouse-move) / always


The OSC offers limited configuration through a config file lua-settings/osc.conf placed in mpv's user dir and through the --script-opts command-line option. Options provided through the command-line will override those from the config file.

Config Syntax

The config file must exactly follow the following syntax:

# this is a comment

# can only be used at the beginning of a line and there may be no spaces around the = or anywhere else.

Command-line Syntax

To avoid collisions with other scripts, all options need to be prefixed with osc-.



Configurable Options


Default: bottombar

The layout for the OSC. Currently available are: box, slimbox, bottombar and topbar. Default pre-0.21.0 was 'box'.


Default: bar

Sets the style of the seekbar, slider (diamond marker), knob (circle marker with guide), or bar (fill). Default pre-0.21.0 was 'slider'.


Default: 0.5

Size of the deadzone. The deadzone is an area that makes the mouse act like leaving the window. Movement there won't make the OSC show up and it will hide immediately if the mouse enters it. The deadzone starts at the window border opposite to the OSC and the size controls how much of the window it will span. Values between 0.0 and 1.0, where 0 means the OSC will always popup with mouse movement in the window, and 1 means the OSC will only show up when the mouse hovers it. Default pre-0.21.0 was 0.


Default: 0

Minimum amount of pixels the mouse has to move between ticks to make the OSC show up. Default pre-0.21.0 was 3.


Default: yes

Enable the OSC when windowed


Default: yes

Enable the OSC when fullscreen


Default: 1.0

Scale factor of the OSC when windowed.


Default: 1.0

Scale factor of the OSC when fullscreen


Default: 2.0

Scale factor of the OSC when rendered on a forced (dummy) window


Default: yes

Scale the OSC with the video no tries to keep the OSC size constant as much as the window size allows


Default: 0.8

Vertical alignment, -1 (top) to 1 (bottom)


Default: 0.0

Horizontal alignment, -1 (left) to 1 (right)


Default: 0

Margin from bottom (bottombar) or top (topbar), in pixels


Default: 80

Alpha of the background box, 0 (opaque) to 255 (fully transparent)


Default: 500

Duration in ms until the OSC hides if no mouse movement, must not be negative


Default: 200

Duration of fade out in ms, 0 = no fade


Default: 1

Size of the tooltip outline when using bottombar or topbar layouts


Default: no

Show total time instead of time remaining


Default: no

Display timecodes with milliseconds


Default: auto (auto hide/show on mouse move)

Also supports never and always

Script Commands

The OSC script listens to certain script commands. These commands can bound in input.conf, or sent by other scripts.

Show a message on screen using the OSC. First argument is the message, second the duration in seconds.
Controls visibility mode never / auto (on mouse move) / always and also cycle to cycle between the modes


You could put this into input.conf to hide the OSC with the a key and to set auto mode (the default) with b:

a script-message osc-visibility never
b script-message osc-visibility auto
osc-playlist, osc-chapterlist, osc-tracklist
Shows a limited view of the respective type of list using the OSC. First argument is duration in seconds.