Skip to content

recorder ​

Native screen recorder encoding on the GPU's video encoder.

An output is captured into GPU memory and encoded to H.264 there, through Vulkan Video or the GPU's VA-API driver, with Opus audio; a GPU without a video encoder cannot record.

Click the bar button to start/stop; the dropdown exposes the recording options below. Controllable from the CLI / RPC socket: lys-shell recorder start|stop|toggle|pause|status.

Add it to your layout with recorder:

yaml
bar:
  layout:
    - monitor: "*"
      right: [recorder]

General ​

FieldTypeDefaultDescription
icon-idlestring"ld-video-symbolic"Icon when idle (not recording).
icon-recordingstring"ld-circle-dot-symbolic"Icon while recording.
icon-pausedstring"ld-circle-pause-symbolic"Icon while recording is paused.
formatstring"{{ elapsed }}"Format string for the label.
microphoneboolfalseCapture the microphone in the recording.
microphone-devicestring""Microphone PipeWire/PulseAudio source name. Empty uses the default source.
system-audiobooltrueCapture desktop (system) audio in the recording.
framerateu3260Capture framerate in frames per second.
webcam-enabledboolfalseOverlay a webcam picture-in-picture frame into the recording.
webcam-devicestring""Webcam V4L2 device path. Empty auto-selects the first camera.
webcam-xPercentage100Webcam frame horizontal position, as a percentage of the free horizontal space (0 = flush left, 100 = flush right). Stored relative so it stays correct across monitors of different resolutions.
webcam-yPercentage100Webcam frame vertical position, as a percentage of the free vertical space (0 = flush top, 100 = flush bottom). Stored relative so it stays correct across monitors of different resolutions.
webcam-sizePercentage20Webcam frame width as a percentage of the recording width.
output-directorystring""Output directory for recordings. Empty uses the XDG Videos directory.
output-formatRecorderFormat"mkv"Container format / codec preset.
show-cursorbooltrueDraw the mouse cursor in the recording.
start-delay-msu321400Delay between choosing the capture source and the recording actually starting, in milliseconds. Gives on-screen UI (the start toast) time to clear so it isn't captured in the video.
border-showboolfalseDisplay border around button.
icon-showbooltrueDisplay module icon.
label-showbooltrueDisplay label.
label-max-lengthu320Max label characters before truncation with ellipsis. Set to 0 to disable.
More about format

Placeholders ​

  • {{ state }} - Recorder state text (Idle, Recording, Paused)
  • {{ elapsed }} - Elapsed recording time (e.g., "01:23", "--" when idle)

Colors ​

FieldTypeDefaultDescription
border-colorColorValue"red"Border color token.
icon-colorColorValue"auto"Icon foreground color. Auto selects based on variant for contrast.
icon-bg-colorColorValue"red"Icon container background color token.
label-colorColorValue"fg-default"Label text color token.
button-bg-colorColorValue"bg-surface-elevated"Button background color token.

Click actions ​

FieldTypeDefaultDescription
left-clickClickAction"lys-shell recorder toggle"Action on left click. Default toggles recording.
right-clickClickAction"dropdown:recorder"Action on right click. Default opens the recorder dropdown.
middle-clickClickAction""Action on middle click.
scroll-upClickAction""Action on scroll up.
scroll-downClickAction""Action on scroll down.

Default configuration ​

yaml
modules:
  recorder:
    icon-idle: ld-video-symbolic
    icon-recording: ld-circle-dot-symbolic
    icon-paused: ld-circle-pause-symbolic
    format: '{{ elapsed }}'
    microphone: false
    microphone-device: ""
    system-audio: true
    framerate: 60
    webcam-enabled: false
    webcam-device: ""
    webcam-x: 100
    webcam-y: 100
    webcam-size: 20
    output-directory: ""
    output-format: mkv
    show-cursor: true
    start-delay-ms: 1400
    border-show: false
    border-color: red
    icon-show: true
    icon-color: auto
    icon-bg-color: red
    label-show: true
    label-color: fg-default
    label-max-length: 0
    button-bg-color: bg-surface-elevated
    left-click: lys-shell recorder toggle
    right-click: dropdown:recorder
    middle-click: ""
    scroll-up: ""
    scroll-down: ""

Released under the MIT License.