AnyTool
Your files never leave your device. All processing happens locally in your browser.

How do I record my screen in the browser?

Open AnyTool Screen Recorder, choose whether to include system / tab audio and your microphone, pick a quality, then press Start recording. Your browser shows its own picker so you choose what to capture — your whole screen, a single window, or one browser tab — with a “Share audio” checkbox for sound. A live preview and a REC timer show the capture; Pause / Resume and Stop give you full control, and you can also click the browser’s “Stop sharing” bar to finish. When you stop, the clip plays back in a video player and you can download it as a WebM file. Everything happens locally — the recording is created and stored entirely in your browser using the native getDisplayMedia and MediaRecorder APIs, it is never uploaded, and the file is saved to disk only when you click Download.

  • Capture your whole screen, a single window, or one browser tab via the native picker
  • Record system / tab audio plus optional microphone narration (mixed locally with Web Audio)
  • Live preview, REC timer, and Pause / Resume / Stop controls
  • Preview the result and download it as a WebM (VP9/VP8) file
  • 100% client-side: the recording is built in your browser and is never uploaded

What is

Screen Recorder

A screen recorder captures what is on your display — the whole screen, a window or a browser tab — as a video, optionally with system audio and a microphone voice-over. A browser-based recorder uses the Screen Capture API (navigator.mediaDevices.getDisplayMedia) to ask permission and stream the display, the MediaRecorder API to encode that stream into a WebM file, and the Web Audio API to mix system and microphone audio into a single track — all on your device, with nothing uploaded.

Generators

Related terms

getDisplayMediaScreen Capture APIMediaRecorderWeb Audio APIAudioContextWebM (VP9/VP8)System audioScreencast

Frequently Asked Questions

No. The recording is created and stored entirely in your browser. It is never uploaded — there is no server and we never see your screen — and the file is saved to disk only when you click Download.

Everything happens locally. The browser captures the screen with getDisplayMedia only after you choose a source and grant permission, and the MediaRecorder API encodes the stream into a WebM blob held in your browser’s memory — there is no account, no cloud and nothing transmitted. The video is written to disk only if you press Download; until then it is a temporary blob that is discarded when you record again or leave the page. Screen capture runs only while you are recording: pressing Stop, clicking the browser’s own “Stop sharing” bar, or leaving the page immediately ends the capture and releases every screen, audio and microphone track.

Yes. Tick “Share audio” in the browser’s sharing dialog to include system / tab sound, and enable the microphone toggle for narration; the tool mixes them locally with the Web Audio API into one track.

System or tab audio is captured as part of getDisplayMedia when you tick the “Share audio” (or “Share tab audio”) checkbox in the browser’s picker. The microphone is opened separately with getUserMedia. Because MediaRecorder can only record a single audio track, the tool uses a Web Audio AudioContext to mix both sources through gain nodes into one MediaStreamAudioDestinationNode, then combines that mixed audio with the display video into one stream for recording. System-audio support varies by browser and OS — it works best in Chrome and Edge, especially when sharing a browser tab — while Safari and Firefox capture it inconsistently or not at all.

It saves WebM (VP9 or VP8 video with Opus audio), which is what browsers record natively. There’s no MP4 directly; convert the WebM afterwards with another tool if you need MP4.

Browser screen recording uses the MediaRecorder API, which outputs WebM — the tool calls MediaRecorder.isTypeSupported to pick the best available codec (VP9 then VP8, with Opus audio). MP4 isn’t produced directly because that would require transcoding the video in the browser, which is slow and out of scope here. WebM plays in most modern browsers and video players; if you specifically need MP4 (for example for some editing or social apps), record the WebM here and convert it with a separate video converter afterwards.

Usually the “Share audio” box wasn’t ticked, or your browser/OS doesn’t capture system audio. For start failures, you likely cancelled the picker, are on an unsupported or mobile browser, or aren’t on HTTPS.

A silent recording almost always means the “Share audio” / “Share tab audio” checkbox was left unticked in the browser’s sharing dialog, or that your browser and OS don’t support system-audio capture (best in Chrome/Edge when sharing a tab; limited in Safari and Firefox). Enable the microphone toggle if you just want narration. If recording won’t start at all, you may have cancelled or blocked the sharing prompt — click Start again and pick a source — or you’re on a browser without the getDisplayMedia API. Screen recording is desktop-oriented and unavailable on most mobile browsers, and it requires a secure (https) page. The tool maps each case to a clear on-screen message.

Detailed Explanation

Methodology

How the Screen Recorder Captures and Encodes

AnyTool Screen Recorder runs entirely on the native Screen Capture, MediaStream Recording and Web Audio APIs — navigator.mediaDevices.getDisplayMedia, MediaRecorder and AudioContext — with no library, CDN or upload. Pressing Start recording checks window.isSecureContext and calls getDisplayMedia({ video: { frameRate, height }, audio }), which triggers the browser’s own native picker so the user chooses what to capture — the whole screen, a single window, or one browser tab — together with a “Share audio” checkbox for system / tab sound. The returned display stream is previewed live in a muted, playsInline <video> element (muted to avoid echo) and is never sent anywhere. A MediaRecorder is created over the combined stream after MediaRecorder.isTypeSupported selects the best WebM codec (VP9 then VP8, with Opus audio) and a target video bitrate; it is started with a 1-second timeslice so ondataavailable accumulates resilient chunks, and onstop assembles them into a Blob → object URL fed to a <video controls> for playback and a .webm download. A video-track ‘ended’ listener finishes the file the instant the user clicks the browser’s built-in “Stop sharing” bar.

  • getDisplayMedia({ video, audio }) → native screen / window / tab picker with a Share-audio option
  • Muted live preview of the display stream; MediaRecorder.isTypeSupported picks VP9/VP8 + Opus WebM
  • MediaRecorder.start(1000) → 1-second chunks; onstop → Blob → object URL → <video> + .webm download
  • Video-track ‘ended’ listener catches the browser’s own “Stop sharing” to end the recording
  • Secure-context check and quality hints (720p / 1080p / native, 15–60 fps) passed as constraints
How It Works

Mixing System and Microphone Audio

Because MediaRecorder records only a single audio track, capturing both system sound and a microphone voice-over requires mixing. System / tab audio arrives as audio tracks on the getDisplayMedia stream when the user ticks “Share audio”; the microphone is opened separately with getUserMedia({ audio }). When both are present the tool builds a Web Audio AudioContext, wraps each source in a MediaStreamAudioSourceNode, routes it through a GainNode (≈0.85) and connects them into a single MediaStreamAudioDestinationNode, then combines that one mixed audio track with the display video track into the MediaStream handed to MediaRecorder. When only one audio source exists it is used directly with no mixing, and when none is available the recording is video-only. Pause and Resume call MediaRecorder.pause() and resume() while a timer subtracts paused spans so the elapsed time stays accurate, and the options (system audio, microphone, resolution, fps) are locked for the duration of a recording.

  • System / tab audio = getDisplayMedia audio tracks (needs the picker’s Share-audio checkbox)
  • Microphone = a separate getUserMedia({ audio }) stream
  • Both → AudioContext: MediaStreamAudioSourceNode → GainNode → one MediaStreamAudioDestinationNode
  • Mixed audio track + display video track → one MediaStream for the single-track MediaRecorder
  • Pause / Resume via MediaRecorder.pause()/resume(); a paused-time offset keeps the timer correct
Limitations

Privacy and Honest Limits

Because the screen is captured and encoded entirely in the browser, the recording is created and stored only on your device and is never uploaded — there is no server, no account and nothing transmitted, and the tool never sees your screen. The encoded video is an in-memory blob written to disk only if you press Download, and it is discarded when you record again or leave the page; pressing Stop, clicking the browser’s “Stop sharing” bar, leaving the page or unmounting immediately ends the capture and stops every screen, system-audio and microphone track, then closes the AudioContext and revokes object URLs. Honestly, the output is WebM (VP9/VP8 + Opus), not MP4 — converting to MP4 would require in-browser transcoding and is out of scope, so use a separate converter if you need MP4. System / tab audio capture varies by browser and OS: it is best in Chrome and Edge (especially when sharing a browser tab and ticking “Share tab audio”) and is limited or absent in Safari and Firefox, so a recording can be silent if the audio box is left unticked. Screen recording is desktop-oriented — most mobile browsers cannot use getDisplayMedia at all — requires a secure (https) page, and for long recordings you need enough free memory and disk because the whole clip is held in the browser until downloaded.

Screen Recorder: in-browser (AnyTool) vs typical online recorders
CapabilityAnyToolTypical online recorders
CaptureNative getDisplayMedia — screen / window / tabgetDisplayMedia, varies
System audioYes via Share-audio (best in Chrome/Edge)Sometimes
MicrophoneYes — mixed locally with Web AudioSometimes
Pause / resumeYes (MediaRecorder pause/resume)Often none
OutputWebM (VP9/VP8 + Opus), downloaded locallyVaries / watermarked
Where it runs100% in your browser, nothing uploadedOften uploads to a server
PrivacyRecording stays on your device until you downloadMay store recordings in the cloud

AnyTool records your screen locally with the native getDisplayMedia, MediaRecorder and Web Audio APIs; the recording is built in your browser and is never uploaded — it is saved only when you click Download.