RemotionUI

Audio Scrubber

Waveform with travelling playhead and time labels. Install with npx remotion-ui@latest add audio-scrubber.

PrimitiveData & media

audio-scrubber30fps · 960×540
Install
$ npx remotion-ui@latest add audio-scrubber

A waveform with a travelling playhead, chapter marks and time labels.

import { AudioScrubber } from "@/remotion/primitives/audio-scrubber";

<AudioScrubber
  durationInFrames={120}
  marks={[{ atInFrames: 66, label: "Quote" }]}
/>

Position comes from frames

Not from audio analysis. The playhead lands exactly on the frame the edit says it should, rather than wherever a detector thinks the audio is — and the scrubber can front a clip that is only being described.

The waveform is static

The colour boundary moves through it. That is the shape of a file, known before playback; animating the bar heights would be a live spectrum, which is audiogram-bars.

Pass measured levels as waveform, or let a deterministic envelope be generated from seed. mirrored centres the bars the way an editor draws them; turn it off for a baseline-anchored bar chart.

Marks

marks places rules at frame positions with optional labels — chapter points, quotes, the cut you are about to make. They sit under the playhead, so the playhead is never hidden behind one.

Position comes from frames rather than audio analysis, so the playhead lands on the frame the edit says it should. The waveform is static and the colour boundary moves through it — animating the heights would make it a live spectrum, which is `audiogram-bars`. Marks sit under the playhead so it is never hidden behind one.

Agent notes

Install first, then import the copied source component locally. AI guide →

Import
@/remotion/primitives/audio-scrubber
  • Use when: audio-first videos, podcast clips, and waveform visuals.
  • Customize: durationInFrames, waveform, barCount, width, plus copied source for timing, layout, colors, and typography.
  • Rule: do not import this component from the remotion-ui npm package; it is copied into your project.

Usage

Example
import { AudioScrubber } from "@/remotion/primitives/audio-scrubber"; <AudioScrubber durationInFrames={120} marks={[{ atInFrames: 66, label: "Quote" }]} />

API Reference

PropTypeDescription
durationInFramesnumberClip length. The playhead crosses the track over exactly this.
waveformnumber[]Bar heights 0–1. Omitted, a deterministic envelope is built from `seed`.
barCountnumberBars drawn when the waveform is generated.
widthnumberOverall width, time labels included.
heightnumberTrack height. Type scales off it.
playedColorstringBars already played.
unplayedColorstringBars not yet reached.
marks{ atInFrames, label? }[]Chapter rules at frame positions.
mirroredbooleanCentre the bars the way an editor draws them.
showTimebooleanElapsed and total readouts either side of the track.
delayInFramesnumberFrames before the playhead starts moving.
framenumberFrame override — pass the parent frame inside a `<Sequence>`.

Related

On this page