Skip to main content

Streamlit Wavesurfer Component

PyPI version

Forked and extended from PiotrDabkowski/streamlit_wavesurfer

A powerful, extensible Streamlit component for interactive audio waveform visualization and annotation, powered by wavesurfer.js.

Features

  • Customizable Waveform: Style the waveform and progress bar, set height, and more.
  • Regions: Add, edit, and remove regions with callbacks to Python. Supports region metadata and color mapping with colormap.
  • Keyboard Shortcuts: Nudge, play/pause, and and navigate regions with the keyboard for more for efficient annotation.
  • Plugin System: Enable/disable wavesurfer.js plugins (regions, spectrogram, timeline, zoom, hover, minimap, overlay) with type-safe configuration from Python.
  • Spectrogram View: Visualize audio frequency content (enable via plugin).
  • Extensible: Add your own plugins or overlays via my other project wavesurfer-overlay-plugin.
  • Numpy Audio Support: Load audio directly from numpy arrays or via popular python libs like librosa, pydub or soundfile.
  • Type-Safe, Modern React Frontend: Built with Jotai, shadcn/ui, and TailwindCSS.

Quickstart

1. Install

pip install streamlit-wavesurfer

2. Basic Usage

import streamlit as st
from streamlit_wavesurfer import wavesurfer, Region

# Define regions
regions = [
    Region(start=0, end=5, content="Intro"),
    Region(start=5, end=10, content="Verse"),
]

# Display the waveform
wavesurfer(
    audio_src="https://example.com/audio.mp3",
    regions=regions,
    plugins=["regions", "timeline", "zoom"],  # Enable desired plugins
    show_controls=True,
)

3. Advanced: Custom Plugin Configuration

from streamlit_wavesurfer import WaveSurferPluginConfiguration, OverlayPluginOptions

overlay_plugin = WaveSurferPluginConfiguration(
    name="overlay",
    options=OverlayPluginOptions(
        imageUrl="https://example.com/overlay.png",
        position="overlay",
        opacity=0.5,
    ),
)

wavesurfer(
    audio_src="https://example.com/audio.mp3",
    plugins=[overlay_plugin, "regions", "timeline"],
)

Supported Plugins

  • regions: Mark and annotate audio segments.
  • timeline: Show time notches and labels.
  • zoom: Zoom in/out of the waveform.
  • hover: Show time on hover.
  • minimap: Scrollbar-style mini waveform.
  • spectrogram: Frequency visualization.
  • overlay: Overlay images on the waveform.

See the wavesurfer.js plugin docs for details.

API

wavesurfer(...)

Argument Type Description
audio_src str URL or path to audio file (or base64/numpy, planned)
regions list List of Region or dicts
plugins list List of plugin names or WaveSurferPluginConfiguration
wave_options object Waveform display options
region_colormap str Colormap for region coloring
show_controls bool Show play/pause/skip controls
key str Streamlit component key

Returns:

  • The current state, including regions and last update timestamp.

Region

Region(start: float, end: float, content: str, id: Optional[str] = None, color: Optional[str] = None)

🛠️ Development

  • Frontend: React, TypeScript, Jotai, shadcn/ui, TailwindCSS
  • Backend: Python, Streamlit
  • Package manager: bun (not npm)

Build Frontend

cd streamlit_wavesurfer/frontend
bun install
bun run build

Run Example App

streamlit run streamlit_wavesurfer/__init__.py

Known Issues / TODO

  • Allow skipping to region/time from Python
  • Load audio from numpy arrays
  • Region validation from Python
  • Keyboard shortcuts require initial button press

See wavesurfer.js docs and Streamlit docs for more.


Contributions welcome!
LICENSE MIT
© 2025 Liam Power


Metadata

Release files for streamlit_wavesurfer 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for streamlit_wavesurfer 0.6.0
File Size Uploaded
streamlit_wavesurfer-0.6.0.tar.gz 119.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for streamlit_wavesurfer 0.6.0
File Interpreter ABI Platform
streamlit_wavesurfer-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 238.0 kB

Release files / streamlit_wavesurfer-0.6.0.tar.gz

Download URL streamlit_wavesurfer-0.6.0.tar.gz
Size 119.3 kB
Tags Source
SHA-256 checksum
How to use checksums
fd2f40bc563bb8b0c217089a4ebbb7c7251fc29886c4bf8928cf02881a694f62
BLAKE2b-256 checksum
How to use checksums
b641ef8d4ba12e29e3e2af34a4d7027bc84d298d93c278bceec765622af17e7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / streamlit_wavesurfer-0.6.0-py3-none-any.whl

Download URL streamlit_wavesurfer-0.6.0-py3-none-any.whl
Size 118.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
02837f879fad056be6b89cc7ba106470fd482d1dfc9b61dfb6fe9db89b09ab11
BLAKE2b-256 checksum
How to use checksums
0ad11461290a6360747caffb8e86c4f13a474a27103082c3754139f0f42e1100
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.10

2 release files

0.1.7

2 release files

0.1.4

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.7

2 release files

0.0.6

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page