Skip to content

J/K/L Navigation and Speed Control

JKL speed indicator showing 2x playback

OpenRV Web implements the professional J/K/L shuttle controls found in editing and review applications. These three keys provide fast, hands-on-keyboard control over playback speed and direction.

J/K/L Shuttle Controls

The J, K, and L keys map to standard industry conventions:

KeyActionBinding
JDecrease playback speed (step to previous preset)playback.slower
KPause playbackplayback.stop
LIncrease playback speed (step to next preset)playback.faster

Pressing L repeatedly steps through the forward speed presets: 1x, 2x, 4x, 8x. After reaching 8x, the next press wraps back to 1x. Pressing J steps backward through the presets: 1x, 0.5x, 0.25x, 0.1x.

Pressing K at any speed immediately pauses playback, regardless of the current speed or direction.

Speed Presets

The following speed presets are available:

SpeedUse Case
0.1xDetailed frame analysis, slow motion review
0.25xSlow motion
0.5xHalf speed for careful review
1xNormal playback (default)
2xQuick scan through footage
4xFast forward
8xRapid scan for long sequences

Speed Button

The speed button in the header bar displays the current playback speed (e.g., "1x", "2x", "0.5x"). It provides three interaction methods:

  • Click -- cycle forward through presets (1x, 2x, 4x, 8x, then back to 1x)
  • Shift+Click -- cycle backward through presets (decrease speed)
  • Right-click -- open a context menu showing all presets with the current speed highlighted

The button uses a monospace font for consistent width. When the speed is not 1x, the button highlights with the accent color to provide a visual reminder.

Reverse Playback

Press Up Arrow to toggle the playback direction between forward and reverse. The direction button icon in the header bar updates to reflect the current direction.

Reverse playback has a speed limit of 4x to prevent frame extraction issues with the WebCodecs decoder. Forward playback supports the full 8x maximum. If the speed is set to 8x and the direction toggles to reverse, the effective speed is capped at 4x.

Audio at Non-1x Speeds

Audio behavior changes at different playback speeds:

  • 1x forward -- audio plays normally with sync correction
  • Non-1x speeds -- audio is paused to avoid distorted playback
  • Reverse playback -- audio is automatically muted (reverse audio is not useful for review)
  • Return to 1x forward -- audio resumes at the previous volume level

The preservesPitch toggle in the speed context menu controls whether the browser attempts pitch correction during variable-speed playback (default: on). This setting affects the HTMLVideoElement playback rate behavior for native video sources.

Volume state is preserved across all speed and direction changes. Muting for speed or direction changes is handled separately from the user mute toggle, so the user's preferred volume always restores when returning to normal playback.

Speed During Playback

Changing speed during active playback takes effect immediately. The frame accumulator resets on speed change to prevent timing discontinuities -- the playback transitions smoothly to the new rate without frame jumps.

Changing direction during playback also resets timing to ensure clean transitions.

Scripting API

Playback speed is accessible through the public JavaScript API:

javascript
// Set playback speed
window.openrv.playback.setSpeed(2);

// Get current speed
const speed = window.openrv.playback.getSpeed?.();

// Play, pause, seek
window.openrv.playback.play();
window.openrv.playback.pause();
window.openrv.playback.seek(50);  // Go to frame 50

Keyboard Reference

KeyAction
JDecrease speed to previous preset
KPause playback
LIncrease speed to next preset
SpaceToggle play/pause
Up ArrowToggle forward/reverse direction
Left ArrowStep one frame backward
Right ArrowStep one frame forward

Released under the MIT License.