streamlit-webrtc
Real-time video and audio processing on Streamlit
Decision gist · record as of 2026-08-14
Yes. The package is actively maintained, has no known vulnerabilities, installs with low friction, and solves a specific problem (real-time media in Streamlit) that is otherwise difficult to implement. MIT licensing removes legal barriers. Suitable if you need browser-based video/audio capture and processing in a Streamlit app; not necessary if you only need static media or pre-recorded files.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python 3.10 or later.
- Browser must support WebRTC and grant camera/microphone permissions.
- Callbacks run in forked threads and cannot call Streamlit methods directly.
License · maintenance · safety
MIT (permissive) — MIT license permits commercial and private use with minimal restrictions; suitable for most projects.
last release 2026-08-07 (7 days) · last repo commit 2026-08-13 · 1,705 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 97,508 downloads/mo, #13,148 on PyPI
Alternatives
Verify before relying
pip install streamlit-webrtc
from streamlit_webrtc import webrtc_streamer
import av
def video_frame_callback(frame):
img = frame.to_ndarray(format="bgr24")
flipped = img[::-1,:,:]
return av.VideoFrame.from_ndarray(flipped, format="bgr24")
webrtc_streamer(key="example", video_frame_callback=video_frame_callback)- Whether frame processing latency is acceptable for interactive real-time applications.
- Browser compatibility matrix and any known platform-specific WebRTC limitations.
- Performance characteristics with multiple concurrent streams or high-resolution video.
What it is and what it does
streamlit-webrtc bridges Streamlit and WebRTC to let you capture and process live video and audio streams directly in the browser. It exposes a single main component, `webrtc_streamer()`, which handles the peer connection setup, media negotiation, and frame delivery. You pass optional callbacks to intercept and transform video or audio frames using the PyAV library (av.VideoFrame, av.AudioFrame), then return the modified frames to the stream.
The package handles the complexity of WebRTC signaling and media transport so you can focus on the processing logic. Common patterns include object detection, audio filtering, style transfer, and speech-to-text. Callbacks execute in background threads independent of the main Streamlit script, so you must manage thread-safety and use locks when sharing state. The component includes built-in media toggle controls to let users mute camera or microphone without stopping the session.
Use it for
- Build a real-time video chat or conferencing app with minimal boilerplate.
- Apply live computer vision (object detection, pose estimation) to camera input.
- Process audio in real time for speech-to-text or audio filtering applications.
- Create interactive video effects or style transfer demos that run in the browser.
- Stream video from one peer to another with frame-level processing in between.
- Prototype media-heavy Streamlit apps without managing WebRTC infrastructure yourself.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes.
The package is actively maintained, has no known vulnerabilities, installs with low friction, and solves a specific problem (real-time media in Streamlit) that is otherwise difficult to implement. MIT licensing removes legal barriers. Suitable if you need browser-based video/audio capture and processing in a Streamlit app; not necessary if you only need static media or pre-recorded files.
Install
streamlit-webrtc on PyPI
Before you install
Low install friction with a pure-Python wheel. Active maintenance with a recent release (7 days old) and steady repository activity. Requires Python 3.10 or later.
Requires Python 3.10 or later. Browser must support WebRTC and grant camera/microphone permissions. Callbacks run in forked threads and cannot call Streamlit methods directly.
License in practice
MIT license permits commercial and private use with minimal restrictions; suitable for most projects.
Quickstart
pip install streamlit-webrtc
from streamlit_webrtc import webrtc_streamer
import av
def video_frame_callback(frame):
img = frame.to_ndarray(format="bgr24")
flipped = img[::-1,:,:]
return av.VideoFrame.from_ndarray(flipped, format="bgr24")
webrtc_streamer(key="example", video_frame_callback=video_frame_callback)
Verify before relying
- Whether frame processing latency is acceptable for interactive real-time applications.
- Browser compatibility matrix and any known platform-specific WebRTC limitations.
- Performance characteristics with multiple concurrent streams or high-resolution video.
Package facts
| License | MIT permissive |
| Python support | Supports the current Python release >=3.10 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | 5 packagesaioiceaiortcavpackagingstreamlit |
| Maintenance | Actively maintained 7 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 97,508 / month, #13,148 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
Evidence: streamlit_webrtc-0.77.0-py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “webrtc streaming streamlit”
- streamlit-webrtcAdds real-time video and audio streaming over WebRTC to Streamlit…
- go2rtc-clientAsynchronous Python client library for communicating with go2rtc…
- aiortcaiortc is a Python library implementing WebRTC and ORTC protocols for…
Give your agent the search over MCP, or paste the wish link into any chat.
More Dynamic Content packages
MarkupSafe provides a text object that escapes special characters so untrusted strings can be safely embedded in HTML and XML without injection attacks.
Jinja2 is a templating engine that renders dynamic content by combining templates with Python-like syntax and data, supporting template inheritance, macros, autoescaping, and sandboxed execution.
Soupsieve is a CSS selector library designed to work with Beautiful Soup 4 to select, match, and filter HTML and XML elements using modern CSS selectors from CSS level 1 through CSS level 4 specifications.
Install it if you use Beautiful Soup for HTML or XML parsing and want modern CSS selector support.
Werkzeug is a WSGI utility library providing request/response objects, URL routing, an interactive debugger, HTTP utilities, and a development server for building web applications.
Flask is a lightweight WSGI web application framework for building web applications in Python, from simple single-page sites to complex multi-route applications.
Mako compiles Python-embedded templates into Python modules for fast rendering, supporting layout inheritance, custom functions, and direct Python expressions within template syntax.
See also streamlit-camera-input-live · aiortc · livekit · livekit-protocol · pyrealsense2 · streamlit-keyup · webrtcvad · livekit-api · pipecat-ai-small-webrtc-prebuilt · ntgcalls