Camera Recorder

Record video from your webcam and microphone directly in the browser, then download the file -- no upload, no server.

Record video from your webcam and microphone directly in the browser, then download the file -- no upload, no server. Record video from your webcam and microphone directly in the browser, then download the file -- no upload, no server.

00:00

Background

How browser recording works

Recording in the browser is a three-step pipeline. First, getUserMedia() captures a MediaStream from the camera and microphone after you grant permission -- browsers always ask, and they require a secure context (HTTPS or localhost). Second, a MediaRecorder consumes that stream and encodes incoming frames into a container format such as WebM, chopping the data into chunks as it goes. Third, when you stop, the chunks are assembled into a single Blob that can be played back and downloaded. Nothing is transmitted: the encoding happens on your device, which is why a browser recorder can produce a file even with the network turned off.

Containers and codecs

The container and codec depend on your browser and platform. WebM with VP8 or VP9 video and Opus audio is the safest bet and works in Chrome, Firefox, Edge, and Safari. MP4 is offered when the browser reports support for it, which is increasingly common on newer devices but not universal. If you pick a format the browser cannot encode, this page falls back to WebM automatically. When the recording finishes, the download button appears with the correct extension (.webm or .mp4) matching what was actually produced.

Privacy and permissions

Before the stream starts, the browser shows a permission prompt that lets you choose which camera and microphone to share -- the device dropdowns on this page are populated from enumerateDevices(), and you can switch devices and re-open the stream. All processing is local: the video bytes never leave your machine, and nothing is stored by the page itself. When you stop recording, the camera indicator light turns off and the stream's tracks are released, so no resource stays held after you finish. On some systems the camera light remains on as long as the page holds any stream, even when muted.

Practical notes

Preview mirrors correctly (muted playback avoids echo), and the timer tracks elapsed time while recording. For long recordings, note that in-memory chunks grow with duration, so very long sessions use more memory. If you need to record the screen instead of the camera, that requires a different API (getDisplayMedia) and is out of scope here. If the permission prompt was denied once, browsers usually lock the choice until you clear site settings.

Built in-house on the browser's native getUserMedia and MediaRecorder APIs. Recording happens locally; nothing is uploaded.

Frequently asked questions

Why does the page ask for camera/microphone permission?
getUserMedia() always requires explicit user consent for privacy. The browser shows a prompt listing exactly which devices will be shared; you can grant it once and the stream starts immediately after.
Why is my recording saved as .webm?
WebM (VP8/VP9 + Opus) is the container every major browser can encode natively. MP4 is only offered where the browser reports support; otherwise the page falls back to WebM automatically.
Is my video uploaded to a server?
No. Encoding happens locally via MediaRecorder and the result is a Blob in your browser's memory. Nothing is transmitted and the page stores nothing; you can record with the network off.
Why does the camera light stay on?
The light indicates that the page holds a live camera stream. It turns off when you stop recording and the tracks are released. Some systems keep the light on while any stream is active, even if muted or not recording.
Can I change devices mid-session?
Yes. Pick a different camera or microphone in the dropdowns and start a new recording; the page re-negotiates the stream with the new device selection on the next start.
What do I need for the recorder to work?
A browser that supports getUserMedia and MediaRecorder (all modern browsers), a camera and microphone, and a secure context: HTTPS or localhost. The page shows a notice instead of the controls if support is missing.