---
title: Video playback speed (remembered between plays)
---

# Video playback speed (remembered between plays)

## What it is

Every video in Omniscio plays in the same player, and that player has a **speed control** in the control bar along the bottom. Inside the app, the speed you pick is **remembered** — the next video starts at that speed, and so does the first video after you restart the app.

It covers every place a video plays: your daily **drip** feed, a chat or gallery **lightbox**, a **screen recording** you are reviewing, a **Telegram** video message, the preview on an **inbox card**, a **shared link**, and the page other websites embed. The player itself is described in [The video player](video-player.md).

## Where to find it

The speed button sits in the **control bar along the bottom of the video**, next to full screen, and shows the current speed (for example **1×**). It is in the same spot on every video, in the app and on a shared link.

## How it behaves

### What you see

- Click the speed button to open the menu: **0.5× · 0.75× · 1× · 1.25× · 1.5× · 1.75× · 2× · 2.5× · 3×**.
- Pick one and the video plays at that speed straight away.
- On the keyboard, **Shift + >** speeds up one step and **Shift + <** slows down one step.
- Going **full screen** keeps the button — the whole player goes full screen, not just the picture.
- The menu opens **upward** out of the bar, so it never spills past the bottom of the video; on a very short player the list scrolls.
- Like the rest of the controls, the button goes with the bar while the video plays untouched, and comes back the moment you move the mouse or tap.

### Notes and remaining gaps

- There is no separate on/off switch — pick **1×** for normal speed.
- **A shared link starts at 1× every time.** A shared page is a public web page with no access to your Omniscio settings, so it cannot know the speed you picked in the app. Its menu offers the same speeds.
- Remaining gap: an iPhone has no full screen for a whole player, so full screen there hands the video to Safari's own full-screen player and our speed button is out of view until you leave full screen. An iPad keeps the whole player, button included.

## For agents

### How it works (under the hood)

- The chosen speed is saved as one global setting, `videoPlaybackRate` (range 0.5×–3×, default 1×). It's an ordinary Omniscio setting, so it persists to disk and syncs like the rest.
- The menu is part of the one video player ([`speed-menu.ts`](../../src/renderer/src/lib/video-player/speed-menu.ts)); the app mounts it through [`<VideoPlayer>`](../../src/renderer/src/components/ui/VideoPlayer.tsx).
- A small hook, [`useVideoPlaybackRate`](../../src/renderer/src/hooks/useVideoPlaybackRate.ts), applies the saved speed to each video when it loads — browsers reset a video's speed to normal on every new source, so re-applying on load is what makes the choice survive from one play to the next — and saves any change, whichever way it was made.
- Speed options + bounds live in one shared source ([video-speed.ts](../../src/shared/video-speed.ts)), so the menu and the saved-value range can never drift apart.

### CLI access

There is no dedicated control-server route — the speed is an ordinary setting, so an agent reads or sets it through the standard settings surface (the `videoPlaybackRate` field). There is nothing else to trigger; it is a per-player control.

## Related

[The video player](video-player.md) covers the whole player — controls, keyboard shortcuts, full screen and where it runs. [Opening a media link](media-link-open.md) covers what happens when an agent's message links to a video file rather than playing it inside the app. [Shared recording rich previews](shared-recording-rich-preview.md) covers the rich preview and embeddable player a shared recording gets when it is opened or pasted elsewhere.
