v1.9.17
LatestBSR landing page now redirects to screenslick.com with a 10-second countdown. Full app available behind REDIRECT_MODE flag
Track all updates, improvements, and fixes to BasedScreenRecorder.Building in public, one release at a time.
BSR landing page now redirects to screenslick.com with a 10-second countdown. Full app available behind REDIRECT_MODE flag
Screen Demo mode — choose between Screen Demo (1440p, screen only) and Screen + Camera (1080p) from the Recording Studio empty state before permissions are requested
1440p (2560×1440) resolution option in Download and Share dialogs for all recordings
2D drag pad controls replace the 4 clip position/tilt sliders in sidebar and timeline popover. Drag the dot to set X/Y simultaneously, with compact sliders for single-axis tweaks and center snap with yellow highlight
3D shadow & reflection — toggleable floor shadow and reflection beneath tilted clip and spotlight pop-out. Renders in both preview and canvas exports. Toggle in Background settings
Export quality toggle — download dialog now offers High (~6 Mbps, fast) and Very High (~12 Mbps, best quality) encoding options with rendering time warning
Deferred permissions — landing page 'Start Recording' now navigates to the Recording Studio without requesting permissions. Permissions only requested when selecting a screen inside the studio
Video source audio volume slider — adjust the original video's audio independently from background music, persisted to localStorage
Timeline reset on new video — clip position segments, music clips, and beat analysis now properly clear when recording a new video. Saved preset JSON preserved
Video playback freeze — fixed video becoming unresponsive after a few minutes by adding a safety timeout for the segment-skipping seeked event listener
Text overlay Fade In / Fade Out — new animation presets that fade only on enter or only on exit
Text border artifact — fixed elastic animation border/stroke rendering at wrong character positions in exports
Music track persistence — fixed background music track being wiped from localStorage when opening a new video
Clip escaping composition frame — fixed tilted/offset clip rendering outside the frame by using clip-path: inset(0) instead of overflow: hidden
Canvas dimensions raised to 2560×1440 for Screen Demo mode recordings (standard modes remain 1920×1080)
Beat detection now shows only key moments (top ~15% strongest beats — drops, transitions) instead of every beat. Button label shows drop count for clearer signal
Export now uses OffscreenCanvas so exports continue at full speed when the browser tab is in the background
Export audio with background music — fixed silent export when source video has no mic audio by falling back to silent buffer before mixing
Spotlight export perspective — split dim overlay and popout into separate render passes to avoid double-perspective, matching the preview
Spotlight glow clipping — glass border and glow no longer cut off at edges in the preview
Playhead freeze after heavy timeline use — fixed the requestAnimationFrame loop silently dying after extended scrubbing and song switching by moving segments to a ref and using a cancelled flag pattern
Recording fails on odd-resolution screens — fixed H.264 codec error on devices like 2015 MacBooks (1777×1080) by rounding all dimensions to even numbers in canvas compositing and export
Timeline Standard/Advanced mode toggle — Standard hides empty tracks, Advanced shows all. Persisted to localStorage
Sidebar accordion sections in Recording Studio and Video Preview settings tabs (Background, Watermark, Subtitles, Branding) with collapsible panels
Yellow brand accent (#FFDD00) replaces black active/selected states across sidebar tabs, switches, dialog option buttons, background selector rings, and subtitle style toggles
ScreenCharm affiliate banner moved from hero section to editor page below recorded videos with brutalist restyling
Destructive dialog buttons (Delete Recording, Reset All Cuts) standardized to red instead of black
Clip position editor popover for editing segments directly from the timeline with offset, tilt, entrance/exit animation, and ease duration controls
Exit animations now show directional labels ("Slide to Left" instead of "Slide from Left") for clarity
Brand favicon with black rounded square and red recording dot across favicon.ico, icon.svg, and apple-icon.svg
VideoPreview props refactored into 15 domain-specific interfaces defined in types/video-preview-props.ts
Spotlight counter-tilt timing during ease-in/hold/ease-out phases now correctly rotates forward and settles back
Clip position edit button now also selects the segment and shows controls instead of only toggling edit mode
DAW-style music clips — independent, moveable clips on the timeline that can be cut, dragged, and resized freely with gaps between them
Beat snap for music clips — moving or resizing snaps to detected beat markers within a 0.1s threshold
Independent music scissors — music timeline has its own cut mode toggle, click on a clip to split it at the click position
Music export rendering reads at sourceOffset + timeIntoClip for correct moved/trimmed clip playback
Preset system migrated from musicSegments to musicClips with automatic migration of old presets on load
Music timeline with per-segment volume control and mute — slice background music and adjust volume independently per section
Beat detection analyzes background music and shows purple beat guide lines on the cut and music timelines for rhythm-aligned editing
Timeline preset auto-save persists all edits to localStorage and restores them when reopening the same video
Export/import timeline presets as JSON files to share editing configurations between users or machines
Clip position segments timeline for placing multiple clip positions with independent entrance/exit animations at different points in the video
Clip-only mode toggle to hide the video clip between segments for reveal-style presentations
Global clip entrance/exit animations and clip position segments now correctly render in exported videos
Expanded text overlay font library with modern combinations including Jost, Inter, Outfit, Manrope, DM Sans, Sora, Urbanist, Space Grotesk, Plus Jakarta Sans, Syne, and more
Text overlays now auto-fit inside their boxes with much tighter padding, and resizing the box scales the rendered text more naturally instead of leaving oversized empty margins
Text font picker now previews each font directly in the dropdown, making it easier to compare combinations before applying them
Text tab labeling now follows the currently selected text layer instead of sticking to the total overlay count
Debounced color pickers now preserve local drag state more smoothly, reducing lag and jumpiness while scrubbing text and subtitle colors
Text export layout now matches the preview more closely by fitting multiline text within the overlay box instead of letting it overflow
Tilted export rendering quality — replaced seam-prone strip warping with a bounded adaptive triangle mesh, greatly reducing jagged high-contrast lines while preserving preview tilt direction
Tilted export artifacts — removed ghost/double-image misalignment by unifying projected-center math across quad masking and textured warp placement
Mesh seam lines in exports — eliminated dotted diagonal/horizontal artifacts by expanding triangle clip paths with controlled seam overlap
Tilted export performance guardrails — added supersampling and mesh-density budget caps to avoid browser freezes on large exports while maintaining clean output
Clip Position X/Y sliders — push the video left, right, up, or down within the background to create space for text overlays or asymmetric layouts
3D Perspective Tilt — Tilt Y rotates the video left/right and Tilt X tilts it forward/back, creating cinematic perspective effects like a leaning screen or angled display. Works in both preview and export
Per-segment mute in preview playback — muted segments now automatically silence audio during preview, not just in exports
Keyboard shortcuts (Delete/Backspace) no longer trigger zoom/spotlight delete confirmations when typing in text inputs like the share dialog message box
Export performance with tilt enabled — reduced perspective grid resolution from ~130,000 to 2,400 draw calls per frame, fixing extremely slow exports
Mute individual segments — select a cut segment and click Mute to silence its audio in the exported video while keeping the video visible, perfect for removing unwanted audio in specific sections
Fullscreen video playback — click the expand button in the custom control bar to enter fullscreen mode with adapted styling
Replaced native browser video controls with a slim custom control bar below the video featuring play/pause, draggable seek bar, time display, mute toggle, and fullscreen button
Replaced custom inline SVGs with lucide-react icons (Play, Pause, Maximize, Minimize) for consistency across the codebase
Zoom, spotlight, and blur drawing now works in the bottom region of the video — native browser controls no longer block mouse interaction
Background music — browse 136 tracks across 5 categories (Energetic, Chill, Cinematic, Electronic, Ambient), preview with inline playback, and select a track to mix into your exported video
Music browser with category filter pills, volume slider, and track selection in a new Music tab in both recording studio and video preview sidebars
Animated equalizer bars visualization on the currently playing track with waveform preview using wavesurfer.js for the selected track
Background music is automatically mixed into exports with adjustable volume, seamless looping for videos longer than the track, and sample rate resampling
Settings/Music tab system in the left sidebar with persistent track selection across recording and preview views
Replaced native browser video controls with a slim control bar below the video — play/pause, draggable seek bar, time display, and mute toggle with full video area available for editing
Zoom clicks and spotlight/blur drawing now work in the bottom region of the video, previously blocked by native browser controls overlapping the interaction layer
Fixed audio preview play state not updating when switching between tracks — detach event handlers before disposing audio elements to prevent stale callbacks
Recording diagnostics — every recorded video now captures detailed performance metadata logged to the console
Overhauled live recording pipeline with unified draw+encode scheduling, frozen canvas dimensions, live resolution cap, background blur caching, and monotonic frame pacing
Eliminated horizontal stripe artifacts in tilted spotlight pop-out export with 2x supersampled rendering pipeline, content underlay, and adaptive strip overlap
Border and glow effects now render inside the supersampled pipeline, matching the CSS preview appearance with crisp core borders and outer bloom layers
Spotlight export perspective scaling is now proportional to card size instead of a fixed value, matching the CSS preview tilt at any resolution
Spotlight overlay coordinates now transform through the composed CSS zoom, fixing preview/export misalignment when zoom keyframes are active
Selecting a background (or uploading a custom one) when padding is 0% now auto-sets 7% padding so the background is immediately visible
Moved transcript title, edit button, and generate subtitles button to the top of the sidebar for quicker access; generate button styled amber/yellow
Confirmation dialog when clicking 'Record New Video' warns that all edits will be lost, preventing accidental navigation
Spotlight effect — professional app-demo style spotlight zoom with 3D pop-out, two-phase animation, 6 border effects, perspective tilt, and full zoom composition
Fixed spotlight ease-out double image by adding a black backing layer and keeping dim overlay at full opacity while the canvas is still visible
Subtitles now appear progressively as each chunk is transcribed instead of waiting for the entire transcription to finish
Cancel button during transcription — terminates the worker and frees memory immediately
Regenerate subtitles button now includes a model size dropdown (Tiny/Base/Small) so you can switch models without starting over
Compression is now enabled by default when sharing videos, significantly reducing upload file size
Fixed spotlight centering mismatch between preview and rendered exports when regular zoom overlaps spotlight by aligning export zoom crop math with CSS transform-origin semantics
Fixed combined regular zoom + spotlight exports not matching preview magnification by using the same shared zoom composition math for scale and transform origin in both preview and export rendering
Improved spotlight export parity with preview by strengthening glow rendering, matching traveling-light intensity/timing closer to preview, and reducing strong-glow double-border artifacts
Dim overlay now correctly respects clip padding and border radius in both preview and export pipelines
Fixed zoom and spotlight option dropdowns closing prematurely during hover interactions in timeline floating controls
Zoom and spotlight floating editor popups now dismiss immediately on outside click instead of lingering until the auto-hide timeout
Default spotlight zoom is now subtler (1.1x) for more natural focus transitions
Reduced timeline track heights and tightened spacing to save vertical space and reduce scrolling
Moved watermark controls to the bottom of the preview sidebar for a cleaner settings flow
Delete confirmation dialog for zoom and spotlight areas with a 30-day 'Don't ask again' cookie option
Moved Delete Zoom, Delete Spotlight, and Reset actions to the top timeline row (right-aligned with segment speed controls)
Added confirmation dialog before Reset All Cuts is applied
Text-to-Speech voiceover — generate AI narration from transcript segments using Kokoro Web TTS with 11 voices (American & British, male & female)
Voice sample preview — listen to each voice before generating, with checkmark indicator on the selected voice
Full voiceover generation with per-segment progress tracking, cancellable at any time
Per-segment test generation to preview how individual transcript sections will sound
Click transcript cards to play that section from the generated voiceover
Voiceover sync toggle — mutes original audio and plays TTS voiceover in sync with video playback
Download voiceover as standalone WAV file
Audio track selector in Download and Share dialogs — choose between original audio or TTS voiceover when exporting
Stale voiceover detection — amber indicator when transcript is edited after generation
Per-segment hide/skip controls — hide a subtitle from export or skip the entire segment (cuts it from the video)
Clearing a transcript segment's text no longer crashes the export with 'Cannot read properties of undefined'
Returning to record after uploading a video no longer shows an empty black line — now shows a centered 'No screen selected' state with a Select Screen button, and Start Recording is disabled until a screen is shared
Cancelling the browser's screen picker now shows a toast notification instead of silently failing
A screen, window, or tab must always be shared before recording can start, even with camera enabled
Moved Privacy Blur timeline above Zoom timeline in the editor
Replaced inline tags below blur/zoom timeline items with auto-hiding floating controls that appear on click and fade out after 3 seconds, eliminating overflow and overlap
Delete button on zoom keyframe floating controls, matching the existing blur region controls
Per-segment voice preview now caches audio — click once to generate, then replay instantly with the speaker icon instead of regenerating every time
Clicking generate voice before the model is loaded now queues the request and automatically generates once ready, instead of requiring a second click
Subtitles now appear progressively as each chunk is transcribed instead of waiting for the entire transcription to finish
Cancel button during transcription — terminates the worker and frees memory immediately
Compression is now enabled by default when sharing videos, significantly reducing upload file size
Regenerate subtitles button now includes a model size dropdown (Tiny/Base/Small) so you can switch models without starting over
Replaced browser alert() dialogs with non-blocking sonner toast notifications for export errors and screen selection
Added 'Powered by' section to footer with Transformers.js and MediaBunny attribution links
Subtitles no longer skip sections — rewrote transcription worker to use manual audio chunking with stride-aware merging instead of the high-level Whisper pipeline
Recorded videos now open directly in preview mode when recording stops, instead of requiring users to scroll down and click the video card
Moved Delete/Restore and speed preset buttons above the timeline, left-aligned with reserved space so the layout doesn't shift when selecting segments
Added 1.25x speed preset for subtler speed-ups on selected segments
Camera and microphone streams are now automatically restored when returning from video preview to recording studio, so users no longer need to manually re-enable toggles
Videos open paused in preview mode instead of auto-playing
Record New Video button moved to the right of the page title with a bold red style so users can easily find it
Removed the confusing 'Stop Stream' button from recording controls — use the browser's built-in stop-sharing controls instead
Rewrote the entire export pipeline using Mediabunny's Conversion API and CanvasSink — exports are now 3-5x faster by replacing HTMLVideoElement random seeking with WebCodecs sequential decoding, audio passthrough, and pre-fetched frame iteration
Refined auto-zoom analysis UX so the Auto Zoom button turns into an in-place Cancel Analysis action while running, with a subtle inline progress indicator and no layout shift
Recordings no longer drop to 1 FPS when switching away from the tab — replaced main-thread timers with Web Worker timers that are exempt from Chrome's background tab throttling
Replaced all 10 low-resolution background wallpapers with 16 new high-resolution images including abstract gradients, fluid waves, and nature scenes
Added a background paper blur control so wallpaper backgrounds can be softened in the editor, live compositing, and exported videos
Unified microphone capture settings across recording start, mic toggle, and device switching so external microphones behave more consistently
Improved real-time audio mixing with source-aware gain staging, microphone filtering, compression, and output limiting for cleaner mic plus system-audio recordings
Completed camera-only recorder handling so preview, compositing, toggles, and recording startup all stay aligned even without a screen capture stream
Camera capture no longer requests unused webcam audio, reducing unnecessary permissions and preventing unused duplicate audio inputs
Reduced live canvas compositing from 60 FPS to 30 FPS to lower CPU/GPU pressure when recording heavy browser tabs
Reduced real-time MP4 recording from 60 FPS to 30 FPS to improve stability and prevent lag buildup during long recordings
Recording keeps the existing AVC encoder quality settings, so this release reduces workload without lowering image sharpness or compression quality
QR code displayed after successful share — scan with any phone to open the video instantly, with a branded BSR logo in the center (toggleable)
Download button in the share modal — download the processed video directly after sharing without closing the dialog
Shared videos failing to load on the watch page — COEP (require-corp) header was blocking R2 video URLs that don't carry Cross-Origin-Resource-Policy; header is now scoped to app routes only, excluding /watch/*
Cut exports no longer freeze when switching browser tabs — replaced remaining requestAnimationFrame with setTimeout in exportWithCuts
Microphone no longer sounds muffled when system audio is playing — disabled echoCancellation to stop the browser from suppressing voice as echo
Mic volume no longer drowned out by system audio — added GainNode-based mixing with balanced levels (system 0.5x, mic 1.5x)
Uploaded videos no longer freeze/stutter during export — removed 100ms seek timeout that skipped frames when decoding took longer
Exporting no longer fails when switching browser tabs — replaced requestAnimationFrame with setTimeout and added Web Locks to prevent codec reclamation
System audio no longer echoes through speakers while recording — preview video element now receives a video-only clone of the capture stream
Mic audio was missing from recordings when system audio was enabled — all audio inputs now mixed into a single track using Web Audio API
Prettier code formatting with consistent style across the entire codebase
Debounced color pickers — smooth dragging with 50ms debounced parent state updates
Optional FFmpeg WASM compression toggle to dramatically reduce file size (~10x smaller) in both Download and Share dialogs
Smart resolution skip — no longer re-encodes video when resolution already matches source dimensions
Added Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy headers to enable SharedArrayBuffer for FFmpeg WASM threading
Toggleable "bsr.getbasedapps.com" branding watermark — enabled by default, opt-out via edit sidebar toggle
Complete landing page redesign with six bold editorial sections, alternating black/white/yellow layouts, and magazine-style feature showcase
Beep timer — plays soft beeps every minute during recording to track duration without checking the timer
Export subtitle positioning and font size now perfectly match preview appearance
Pixel-perfect export sharpness — disabled image smoothing for video frames while keeping antialiased text
Word highlighting index bug in exports — fixed corrupted index mapping when filtering empty Whisper words
Camera-only mode now works from overlay layout in all aspect ratios and effect settings
Advanced subtitle effects: background toggle, text color picker, border width/color, drop shadow blur control
All settings (layout, position, aspect ratio, camera style) now adjustable in real-time during recording
Camera-only recording mode — record using just your webcam without screen capture, perfect for vlogs and talking head videos
Smooth elastic layout transitions (700ms) for camera position, size, and layout changes during recording
Hand gesture controls — change camera layout, toggle camera-only mode, and stop recording using hand gestures via MediaPipe
7 gesture mappings: point (overlay corners), peace (overlay corners), ILY/open palm (side-by-side), thumbs up (camera only), thumbs down (screen + camera), fist (stop recording)
Visual gesture indicator with SVG progress ring, emoji, and gesture label shown during hold
Gesture toggle button with active indicator dot in the format & layout bar
Gesture reference popup with full mapping table accessible via info button
Recording no longer freezes when switching to side-by-side or camera-only layouts mid-recording
Canvas dimensions now stay stable during recording to prevent video encoder stalls
Layout, position, and style changes no longer restart the compositing draw loop — changes apply on the next frame via refs
Auto-zoom detection - analyzes video for activity spikes and automatically adds zoom keyframes to highlight important moments
GIF generation - select any range of your video and export it as an animated GIF with real-time encoding progress
Draggable GIF range selector with resize handles on the timeline
Per-segment speed control - set playback speed (0.5x, 1x, 1.5x, 2x, 4x) on individual video segments
Speed applies during both preview playback and export with properly resampled audio
Speed badge on timeline segments showing non-default speeds
Output duration indicator in timeline stats that updates with speed and cut changes
Inner handles on zoom keyframes for fine-tuning easeIn/hold and hold/easeOut boundaries
Beta badge on Auto Zoom button
Live audio level meter with 5-bar visualization in the recording studio
Advanced subtitle customization - position control (top/middle/bottom), text border, drop shadow, and max words per line
Visual icon-based subtitle position buttons replacing text labels
Right sidebar layout with collapsible sections for recording options and camera style controls
Max upload file size increased to 500MB
Memory leaks - added cleanup for device switch timers, copied state timer, audio contexts, and blob URLs
Custom watermark/logo overlay - upload your brand logo and position it anywhere on your recordings
Watermark position presets - quickly place logo in any corner (top-left, top-right, bottom-left, bottom-right)
Watermark size control - adjust logo size from 5-30% of video width with slider
Watermark opacity control - fine-tune transparency from 10-100% for subtle or bold branding
Watermark rounded corners - adjust border radius from square to circular (0-50%)
Watermark settings persist to localStorage - logo and settings remembered across sessions
Watermark appears in live recording preview, video player, and baked into final exports
Camera-only toggle icon changed to MonitorOff for clearer visual meaning
Watermark customizer appears in both recording studio and video preview sidebars
Layout transitions no longer cross-fade when switching direction within same layout type (left↔right, top↔bottom)
Camera layout transitions now animate smoothly to correct position instead of popping after animation
Watermark now renders correctly in exported videos (was missing from export pipeline)
Countdown timer before recording starts - toggle on/off with 3s or 5s duration options
Audio beeps during countdown with higher pitch final beep when recording starts
Visual countdown overlay with large glowing numbers and 'Get Ready' message
Camera rounded corners with adjustable border radius (0-50px)
Camera border customization - adjustable width (0-20px) and color picker
Camera shadow effects with adjustable intensity (0-100)
Resolution picker when sharing videos - choose from Original, 1080p, 720p, or 480p
Rounded corners (20px) on privacy blur overlays for polished look
Intensity toggle button - click to show/hide blur intensity slider (cleaner timeline)
Visual feedback when editing blur regions - green border highlights the region being edited
Prevent overlapping blur regions - clicking 'Add Blur' on existing blur time automatically switches to edit mode
Countdown timer accessible in main settings bar next to Camera/Mic toggles for quick access
Privacy blur now uses pixelation at 100% intensity by default (most secure, hardest to reverse)
Edit blur button now allows redrawing the blur region from scratch with new size and position
Background settings (padding, border radius, etc.) now reset to defaults when entering video preview for clean editing
Tightened spacing in blur timeline controls to prevent overlap with other buttons
Blur type dropdown removed - pixelation is now the only option for maximum privacy
Blur regions now visible during edit mode so you can see what you're repositioning
Simplified blur repositioning - click and drag to redraw instead of confusing keyframe animation
Major performance improvements - recording browser tabs no longer causes slowdowns
"No output buffer" error when stopping recording - now shows helpful diagnostics if frames fail to encode
Video preview no longer crops browser tab recordings with non-16:9 aspect ratios
"Back" button now correctly returns to recording studio instead of landing page
Reduced video bitrates for smoother real-time encoding (1080p: 15→8 Mbps)
Encoder now uses 'realtime' mode instead of 'quality' for better performance
Preview and capture frame rates reduced from 60 to 30 FPS to reduce CPU usage
Camera and microphone toggles now turn off when entering video preview - re-enable manually when returning
Recording settings (background, padding, border radius) now persist to localStorage
Warning indicator on mic toggle when audio stream is not active
Editing settings no longer affect new recordings - settings are restored when returning from preview
Recording and editing settings are now separate - edit freely without affecting your recording defaults
Microphone not working after returning from video preview - audio stream was stopped but never restarted
All streams (screen share, camera, mic) now stop when entering video preview mode to free resources
Returning from preview now requires starting a fresh capture session for cleaner stream initialization
Edit button on zoom keyframes to reposition the zoom focus area
Click Edit, then click on video to set new zoom position
Improved zoom workflow - selection and editing are now separate actions
Refactored video timeline into modular components for better maintainability
Extracted custom hooks for waveform generation, timeline drag, and zoom keyframe interactions
Improved code organization with dedicated files for each timeline component
Zoom keyframes - click 'Add Zoom' then click on video to add zoom effects at specific moments
Adjustable zoom scale with dropdown menu (1.5x, 2x, 2.5x) on each zoom keyframe
Drag and resize zoom keyframes on timeline to adjust timing and duration
Smooth zoom animations with ease-in and ease-out transitions
Zoom effects apply to both preview and exported video
Moved timeline stats above the timelines for better visibility
Video preview now properly clips content with border radius and padding settings
Screen recording with webcam overlay
Microphone and system audio recording
AI-powered subtitle generation with Whisper
Video editing with cut/slice functionality
Auto-remove silences and filler words
Custom backgrounds with padding and effects
Face cover/blur for privacy
Video sharing with 24-hour expiring links
Multiple export resolutions (480p to original)
Fully offline - all processing in browser