Screen Recorder
Record your screen, a window or a single tab — with system sound and a microphone voiceover — entirely inside your browser, with nothing installed and nothing uploaded.
Your browser opens its own picker, and the picker decides what is shared and at what size — a tab, one window, or a whole monitor. This page cannot choose for you and sees nothing at all until you pick something.
The preview is muted on purpose — an unmuted preview would loop your own system audio back into the recording. Recorded so far counts real bytes, but the encoder only flushes once a second, so it can lag reality by about a second. The faders go past 100% for a quiet source, but there is no limiter after them, so pushing an already-loud source above 100% will clip it in the file. While paused the meters keep reading the live sources — nothing is being written until you resume. Capture stops the instant you press Stop, press your browser's own Stop sharing button, or leave this page.
This player makes sound when you press play. It starts at 15% volume on purpose — a recording of a game or a video can be far louder than this page, and plenty of people are in headphones. Raise it with the slider below.
How to record your screen
- Pick a codec and a quality. Only the formats your browser can genuinely encode are listed — anything it would refuse is hidden rather than offered and failed. VP9 in WebM is the safe default; choose H.264 in MP4 if the file has to open on a phone or in Windows Photos.
- Decide about sound before you start. Tick system / tab audio for game or video sound, and microphone for a voiceover. Ticking the mic asks for permission straight away so that the share picker cannot time out later.
- Press Start recording and choose what to share in your browser's picker. In Chrome and Edge the picker has its own Share tab audio or Share system audio tick box — it is easy to miss and it is the single most common reason a recording ends up silent.
- Watch the level meters. They move when audio is actually reaching the encoder. If a bar never moves for the first few seconds, this page says so instead of letting you find out twenty minutes later.
- Pause and resume freely. Paused time is not recorded and is not counted in the timer, so the finished file matches the number on screen.
- Stop with the button here, or with the browser's own Stop sharing bar — both end the recording cleanly and keep everything captured up to that moment.
- Play it back and download it. The file is assembled in memory by your browser and saved by your browser's own download. Save it before you record again — starting a new recording discards the previous one.
What the browser is actually doing
Capture is change driven, not clock driven. getDisplayMedia hands you a video track that only produces a frame when something on screen changed. A still desktop can legitimately deliver two or three frames per second, and that is correct behaviour, not a stall — it is why a recording of a slide deck is tiny while a recording of a game is huge. The frame rate you pick here becomes a ceiling (frameRate: { max }), never a guarantee. The preview fps readout above counts frames as your browser presents them, so it is the delivered rate, not the requested one. It only counts while this tab is on screen; when you switch away it stops counting and shows a dash, because the page genuinely cannot see the frames any more.
Encoding happens live, in real time. MediaRecorder compresses each frame as it arrives and flushes a chunk once per second. If the machine cannot encode as fast as frames come in, the browser drops frames rather than falling behind — so an overloaded encoder gives you a short, skippy file rather than audio that slowly drifts out of sync. AV1 is by far the heaviest option; VP8 is by far the lightest. If a recording is skippy but the CPU is not pinned, the bottleneck is usually the capture size: recording one window instead of a 4K monitor cuts the pixel count by an order of magnitude.
Audio is a separate capability from video, and it is where most recordings go wrong. The video track and the audio track come from different parts of the operating system, and the browser exposes the audio switch inside its own picker where this page cannot reach it. Chromium on Windows can capture whole-system audio; Chromium on macOS can normally only capture audio from a shared tab, and whole-screen sound needs a loopback driver such as BlackHole or Loopback. Firefox does not capture screen audio at all. Safari does not either, and it shares only a whole screen. The support lines at the top of the tool say which of these applies to the browser you are reading this in right now.
Two sources, two faders. When you record system sound and a microphone together, both are routed through a Web Audio graph — a gain node each, an analyser each for the meters, then a channel merger into the single audio track that goes to the recorder. System audio is split so it keeps its stereo image; the mono microphone is summed into both sides. Nothing in that graph is connected to your speakers, so moving a fader can never make a sound come out of your headphones — it only changes what is written into the file. Level changes are ramped over about sixty milliseconds because an instant jump writes an audible click into the recording.
The file is written as a stream, which is why the seek bar misbehaves. A normal video file has its total duration in the header, written last, after the encoder knows how long the video turned out to be. A live recording cannot do that: the header is written first and never revisited, so the duration field is missing or infinite. Some players cope, some show 0:00, and some give you a seek bar you cannot drag even though every frame is there. This page nudges its own player into recalculating the length, and it prints a duration that it measured with a clock rather than reading from the file. To fix the file itself, remux it without re-encoding: ffmpeg -i in.webm -c copy out.webm.
Everything lives in RAM until you stop. Chunks are held in memory and only become a file at the end, so an eight megabit recording costs roughly sixty megabytes a minute of memory as well as disk. A half-hour session is close to two gigabytes; if the tab is killed mid-recording, that recording is gone. For anything long, record in shorter takes.
When the recording comes out wrong
- Completely silent. The audio tick box in the picker was not ticked, or your browser cannot capture that kind of audio at all. Re-share and look for Share tab audio at the bottom left of the picker. The meters here will confirm it before you waste a take.
- Black rectangle where the video should be. Copy-protected playback (Netflix, Disney Plus, some banking apps) is blacked out deliberately. Games in exclusive full screen and some hardware-overlay video players are invisible to window capture — switch the game to borderless windowed, or share the whole screen instead of the window.
- Blocky, smeared motion. The bitrate is too low for what is on screen. Text and slides survive 1.5 Mbps; fast game footage at 1440p wants 8 Mbps or more. Raise the quality setting, not the frame rate.
- Judder that the preview does not show. The encoder is saturated. Drop to 30 fps, switch from AV1 or VP9 to VP8, or record a single window.
- Recording stopped on its own. You pressed the browser's floating Stop sharing bar, or closed the window you were sharing. Everything captured up to that instant is kept — this page finishes the file properly instead of throwing it away.
- Mouse cursor missing. Some platforms and some capture surfaces omit the cursor entirely; there is no web API that can force it back on.
- Player shows 0:00 or will not seek. Expected — see the duration explanation above, and remux with ffmpeg if the file has to behave in a specific editor.
FAQ
Why does my screen recording have no sound?
Audio is a separate capability from video and the browser hides the switch inside its own picker. In Chrome or Edge you have to tick Share tab audio when you pick a tab, or Share system audio when you pick a whole screen, and leaving it unticked fails silently. Firefox does not capture screen audio at all, and Safari does not either. This page shows a live level meter while you record so you can see whether sound is actually arriving.
Why is the seek bar broken in my recording?
The browser writes the file as a live stream, so it never goes back to fill in the total duration in the container header. Players that trust that field show 0:00, or a bar you cannot drag, even though every frame is present. Playing the file through to the end usually fixes it, and remuxing with ffmpeg -i in.webm -c copy out.webm rebuilds the header properly. The duration printed on this page is measured by the page itself, so it is correct.
Why is the recorded video black?
Something is being drawn outside the path the browser is allowed to read. Copy-protected video such as Netflix or Disney Plus is deliberately blacked out. Games running in exclusive full screen are often invisible to window capture, so switch them to borderless windowed. Hardware overlay in some video players and in remote desktop sessions does the same thing. Sharing the whole screen instead of a single window usually brings the picture back.
Does my recording get uploaded anywhere?
No. The video is encoded by your own browser, held in memory as it is produced, and turned into a file by your browser's own download. This page contains no code that sends the recording anywhere, and there is no account, no sign-up and no server involved at any point.
Why is my 60 fps recording choppy or only a few frames per second?
Screen capture is change driven: the browser only produces a frame when something on screen actually changed, so a still desktop can legitimately deliver two or three frames per second and that is not a fault. The frame rate you pick is a ceiling, not a promise. Choppiness during real motion means the encoder cannot keep up, so lower the bitrate, choose VP8 instead of AV1, record a window instead of a 4K screen, or close whatever else is eating the CPU.
Can I record my screen on an iPhone or iPad?
Not from a web page. iOS and iPadOS give browsers no access to screen capture at all, so no website can do it there. Use the built-in recorder instead: add Screen Recording to Control Centre in Settings, then swipe down from the top right corner and tap the record button. Android browsers do not support web page screen capture either.