OpenScreen changelog

OpenScreen changelog

Back to OpenScreen

15 releases since August 2026 · GitHub releases, checked Oct 26, 2026

  1. 2.1.2Latest

    If OpenScreen saves you time, a star on the repo helps others find it.

  2. 2.1.1

    If OpenScreen saves you time, a star on the repo helps others find it.

  3. 2.1.0

    If OpenScreen saves you time, a star on the repo helps others find it.

    • chore(release): release v2.0.0 into main
    • feat(website): bring the live demo into the homepage hero
    • docs(testing): log the v2.0.0-rc.15 computer-use e2e pass
    • docs: add missing third-party notices
    • fix(preview): hold the webcam's last frame when a clip is entered past its end
    • fix(record): keep the Camera row off when no camera can be opened
    • ci: start release notes at the previous stable tag, by SemVer
    • fix(editor): keep Edit clip's Apply in view, and its edit through a backdrop click
    • fix(timeline): copy anchored modifiers onto a duplicated clip
    • fix: close menus on Escape and on a click on the empty top bar
    • fix(transcript): make a skipped word's restore control reachable
    • fix(editor): keep the Edit clip menu above the timeline and stop tooltips sticking after a click
    • fix(export): let an MP4 export be cancelled mid-render
    • fix(audio): keep imported audio on its own clips through a clip reorder
    • fix(timeline): keep a dragged region whole when it repels
    • fix(hud): keep the HUD's size while it is dragged at fractional scaling
    • fix(preview): stop the native free-run at the end of the programme
    • fix(timeline): edit one region of a merged pill, not the whole pill
    • feat(mcp): checkpoints to revert a whole agent turn in one step
    • fix(transcript): refuse every native edit the block does not handle
    • fix(hud): keyboard navigation in the language menu
    • fix(timeline): fan speed and Full Camera regions out to both halves of an insertion
    • fix: close the chat panel's reasoning menu and model quick-pick on Escape
    • fix(record): never record a microphone the OS does not list
    • fix(mac): count the HUD timer from the helper's first frame
    • docs(stt): record why transcript cuts are not snapped to quiet points
    • feat(ai-edition): tell the agent and MCP clients where zoom transitions are
    • fix(windows): keep the screen video on the clock when the writer misses ticks
    • perf(gif): make GIF export ~30× faster with exact output
    • feat(timeline): show each zoom's move-in and move-out as trails on the zoom lane
    • fix(inspector): use the shared tooltip on every icon-only control
    • chore: bump nix package to v2.0.0
    • feat(timeline): show and report the pan between chained zooms
    • feat(transcription): per-project names and terms for Whisper
    • fix(preview): stop Chromium decoding soundless recordings in speed regions
    • ci(nix): build PRs that touch the PipeWire and whisper sources, and assert the libEGL rpath
    • feat(timeline): flag zoom moves lost to a clip junction
    • fix(camera): keep Full Camera full across a trim inside it
    • fix(linux): enumerate screens and windows in separate calls under X11
    • ci(release): refresh the Nix npm hash in the version-bump commit
    • fix(macos): keep a Record mode screen pick valid when the HUD returns
    • fix(agent): preserve recorded cursor visibility
    • fix(macos): say when a restart discarded the take and drop the empty file a failed start leaves
    • fix(i18n): polish Simplified Chinese tooltips
    • fix(linux): respect an explicit Ozone display backend
    • fix(stt): preserve media-clock audio offsets
    • feat(cursor): add Glass Lens, a glass cursor that refracts the picture in 2D and 3D
    • docs: record the shader and background-cache fixes on a Mac mini M1
    • fix(nix): use wrapped Electron in dev shell
    • test(compositor): share the D3D11 render-test harness
    • build: ship the third-party licence texts in the installers
    • fix(linux): retry PipeWire capture with shared memory
    • fix(cli): let the Linux portal select recording sources
    • feat(linux): add standard AppImage update metadata
    • feat(workbench): keep versioned measurements and offline replay
    • feat(ai): persist Agent chat sessions per project
    • fix(linux): remove libfuse2 dependency from AppImages
    • feat(recording): choose the recordings folder, refuse takes on a full disk
    • feat(cursor): play a click sound on every recorded click
    • feat(agent): cut words by transcript ID
    • fix(recording): say when a Restart lost the take on Windows and Linux too
    • fix(audio): align waveform and STT with every audio track on the media clock
    • test(compositor): measure the Glass Lens refraction as an edge shift
    • feat(mcp): let MCP clients read and edit every project, not only the open one
    • fix(macos): record without the microphone when macOS lists no audio input
    • test(compositor): fix two local-only D3D11 render tests
    • fix(editor): never save back a project's own file from the open dialog
    • fix(nix): ship every public asset, cursors included
    • feat(build): Windows on ARM as a build target
    • feat(edit-clip): scrub the clip to frame the crop
    • docs: recommend udev rule for Wayland mouse click capture
    • docs: recommend the udev rule wherever Wayland clicks are mentioned
    • docs: add a security policy and a code of conduct
    • docs: explain why a quit-on-close utility can quit OpenScreen on macOS
    • docs: add the Product Hunt launch badge to the README and the homepage
    • docs: document the Windows 10 workaround for an unclickable recording bar
    • fix: make the HUD clickable on Windows before 11 22H2
    • fix(website): let links to our own repo send the referrer
    • feat: let a coding agent make a demo video through OpenScreen's MCP tools
    • fix: agent tools that edit like the editor, one clock, and a format tool
    • feat: let the agent set a zoom's 3D camera
    • docs: a pull request video recipe in the openscreen-demo skill
    • docs: show the #5 Product of the Day rank on the site and in the README
    • docs: one line to set OpenScreen up for a coding agent
    • fix(website): point /discord at a permanent invite
    • docs: add first-time macOS setup to CONTRIBUTING
    • fix(windows): preserve non-integer resampling continuity across packets
    • fix(recording): pick a webcam mode by frame rate before size
    • fix(homebrew): use symbol format for macOS dependency in cask template
    • fix(linux): give up when no first frame follows the portal picker
    • docs(testing): e2e checklist for what landed since v2.0.0, and an unattended macOS run
    • fix(recording): let a webcam's MJPEG mode win when it is faster or sharper
    • fix(macos): resolve microphones Chromium labels with a transport suffix
    • fix(cursor): play click sounds for every clip of a recording
    • fix(windows): repeat the owed screen slots so a loaded writer catches up
    • fix(hud): place toasts above the bar and let their close button take the click
    • fix: fit the chat agent's text annotations to their words, and refit them on a format change
    • fix(audio): hold the export's true peak under -1 dBTP
    • docs(testing): log the macOS e2e pass on v2.1.0 build 38252812147
    • docs(testing): log the macOS re-run of the merged fixes on build 38309126813
    • fix(export): put the whole timeline on one frame grid
    • fix(recording): keep the Windows screen video on the audio's clock
    • fix(mcp): refuse stdio edits to a project open in the app's editor
    • fix(cli): give each CLI run its own Chromium session data
    • fix(mcp): say that minimized and hidden windows are not listed
    • docs(mcp): stop promising a zoom on each recorded click
    • fix(timeline): stop a region dragged into an identical one flush against it
    • fix(chat): format every message time where it is drawn
    • fix(editor): open the highlighted project on Enter in the Open project dialog
    • fix(hud): put the bar back where it was dropped once a popover closes
    • docs(testing): log the v2.1.0 Windows e2e pass on build run 38252812147
    • fix(website): Discord pill in the header, and editor captions that fit their translation
    • refactor(mcp): one source for MCP text, setPointerTrack through the runner
    • docs(testing): log the Windows re-run of the merged fixes on build run 38370716184
    • feat(mcp): forward openscreen mcp document calls to the running app
    • feat(mcp): serve the media tools from the in-app server
    • feat(agent): region tools set and read every zoom, annotation and audio setting
    • feat(mcp): setEditorSettings and the project's look in getCurrentDocument
    • feat(mcp): rename a project, import and remove its media, create one
    • feat(mcp): export with the Export dialog's options, record the webcam
    • feat(mcp): insert, duplicate and crop clips, re-run auto zooms
    • feat(mcp): captions, caption translation and transcription over MCP
    • docs: drop the split-and-insert dialog the editor never shows
    • fix(mcp): send no quality with a GIF export
    • fix(windows): keep the recording bar always on top after a popover or dialog closes
    • fix(export): make a GIF with looping off play only once
    • docs(testing): log the Windows MCP pass on main build run 38538195250
    • docs(testing): log the Windows MCP re-run on main build run 38564622152
    • fix(mcp): let startRecording see a native take start
    • docs(testing): log the Windows pass of the in-app MCP server
    • ci(website): deploy the site to Cloudflare Workers instead of GitHub Pages
    • docs(testing): log a headless Linux pass under WSL on build run 38564622152
    • docs(testing): log the macOS e2e pass on main build run 38581408372
    • fix(linux): ship the shared ffmpeg CLI so transcription works over MCP and the CLI
    • docs(testing): log the macOS retest of the in-app MCP recording on build run 38598557320
    • fix(mcp): let getFrames read a GIF export
    • fix(cli): open the app when macOS hands a launch to a running CLI process
    • fix(macos): record the whole system audio mix in a window take
    • fix(stt): drop the renderer audio-decode fallback and say ffmpeg is missing
    • test: wait for the held export to start instead of sleeping 20 ms
    • docs(testing): log the macOS retest of #1214, #1215 and #1216 on build run 38615516865
    • fix(mcp): record the window an in-app take names, even where Apple's picker owns sources
    • fix(cli): hide the Dock icon again after opening the GUI from a CLI run
    • fix(macos): log each step of Apple's picker flow and any lost process
    • docs(testing): log the macOS retest of #1232 and #1233 on build run 38627769728
    • feat: shader effects integration
    • docs(testing): log the macOS pass on release/v2.1.0 build 38370716184
    • fix(cli): give a CLI run no application menu
    • feat(website): cookieless PostHog analytics, download clicks and a Store campaign ID
    • feat: count active installs with one anonymous daily ping
    • fix(cli): set the empty menu before macOS launches the CLI run
    • docs(testing): log the Windows retest of v2.1.0 build run 38714540858
    • fix: fall back to a copy when a save's rename hits EXDEV
    • docs(testing): log the Windows pass of v2.1.0-rc.1
    • fix(mcp): read no click telemetry when getFrames renders from the main process
    • fix(ai): drop the rewound message from the agent's history
    • fix(ai): run a turn's tool calls one at a time so parallel writes all land
    • fix(annotations): refit frame text whenever the Auto frame changes shape
    • docs(testing): grant wgc-capture.exe so computer-use leaves the icon cover up
    • fix(recording): keep the countdown's last digit out of frame 0 on Linux
    • fix(hud): restore the Linux HUD from the tray and keep the vertical bar on screen on Wayland
    • fix(editor): let the editor un-maximize on Wayland and stop its bounds drifting
    • docs(capture-linux): document the window-take shadow border and cursor coverage
    • fix(capture-linux): cap the VAAPI QP so the first keyframe stays legible
    • fix(diagnostics): keep main-process logs and the Linux helper output in Save Diagnostics
    • fix(preview): no motion-blur trail into a cut inside Full Camera
    • docs(testing): log the Linux pass of v2.1.0-rc.1
    • docs(testing): log the macOS pass on v2.1.0-rc.1
    • fix(preview): cursor holds
    • @marcgabe15 made their first contribution in
    • @satwiksharma01 made their first contribution in
    • @entity-0-0-2 made their first contribution in
    • @mcmah309 made their first contribution in
    • @bet4it made their first contribution in
    • @quotentiroler made their first contribution in
    • @kiwikreativo made their first contribution in
    • @akahoz94 made their first contribution in
    • @prayaslashkari made their first contribution in
    • @vorburger made their first contribution in
    • @easonwong-de made their first contribution in
  4. 2.0.0Big update

    **⬇ Windows (Microsoft Store)** · **⬇ Windows (.exe)** · **⬇ macOS (Apple Silicon)** · **⬇ macOS (Intel)** · **⬇ Linux (AppImage)**

    The Microsoft Store version is signed and updates through the Store. Also .deb, .rpm and .pacman. Homebrew, WinGet, Nix and the AUR follow automatically. Already on 1.x? The app offers the update on its own.

    OpenScreen 2.0 is built on one promise: your demo looks good without touching anything, and touching the settings can't make it ugly.

    We audited 1.x against that rule and it failed most of it: a cursor four times the size of the system arrow, a shadow nobody could see, a vertical export that filled a fifth of the frame. 2.0 fixes all of that, ships a new editor, and adds automatic zooms planned from your clicks. It is still free for everyone, personal and commercial, with nothing behind a paywall.

    The story of how it came together: Making of v2: a demo is never ugly.

    Record, stop, and it's already edited

    • Zooms planned from your clicks. Stop a take and the editor opens with zooms already placed on the moments you clicked, planned as shots rather than one zoom per click.
    • Record from the editor. A Record mode sits next to Edit, with auto-zoom after recording and *Hide desktop icons* one click away.
    • New projects start from your look. The wallpaper, padding, cursor and camera of your last project carry over.

    Good defaults, bounded settings

    • A cursor the size of a cursor, half its old default, and a shadow you can actually see.
    • Every value has a floor, a ceiling and a reset, whoever sets it: the panel, a preset, the AI agent or a hand-edited project file.
    • What you see is what you export. Text renders in the font you picked (five open-licensed families are embedded), and gradients use every colour stop.

    Auto format

    • The frame shapes itself around your composition, and Auto is the default for new projects.
    • A 16:9 take in a 9:16 export fills the frame with a window that follows your cursor, instead of a small strip in the middle.

    A new editor

    • One click per choice. Format, frame style, zoom level, 3D camera, cursor style and caption font are rows of buttons, not dropdowns.
    • A timeline you read by colour, with a navigator that shows what it navigates, a smoother waveform and a *Clear timeline* button.
    • Names instead of numbers. A shadow is None, Light, Medium or Strong.

    3D that looks intentional

    • 3D Orbit, a camera that moves with your zooms, follows the same focus mode as a flat zoom, and never rolls.
    • Five original cursor themes, each with a sculpted 3D version: Prism Glow (ray-traced as a glass crystal), Pop Coral, Pixel Candy, Studio Ink and Star Sprout.
    • Click impact as a cursor setting, for every camera.

    Camera

    • Captured at the camera's real resolution and frame rate.
    • Frame the webcam by dragging it, and zoom it from its corners.
    • Square by default (or *Original* to keep its proportions), a larger default size, and up to 60% of the frame.

    Sound that's ready to post

    • Voice normalised to -16 LUFS with a soft limiter instead of a hard clip.
    • Music beds start at -18 dB with one-second fades, and duck under your voice.

    Transcripts that line up

    • On-device transcription now skips silence first (Silero VAD) and re-times every word on the audio, so a cut made from the transcript lands where the word was spoken.

    Export

    • One settings panel with four destinations: Web / YouTube, Social, Studio and README GIF. Codec details live under *Advanced*.
    • The bitrate you pay for: 1.x exported at 8 Mb/s whatever the frame rate; 2.0 exports 1080p60 at 18.7 Mb/s. GIFs are dithered.

    macOS

    • Apple's system picker to choose what to record on macOS 15.2 and later.
    • System audio recorded from a Core Audio tap.
    • One permissions window on first run, and notifications kept out of your recordings.

    For automation

    • The AI agent's tools over a local MCP server, so your own agent can edit a project the way the built-in assistant does.
    • The CLI still records, edits and exports headlessly, with NDJSON output.
    • Your projects open as they are. New projects use the new defaults; existing ones keep their settings.
    • The 17 third-party cursor packs are gone, because their terms don't allow redistribution. The five original themes replace them.
    • Exports are always H.264. The codec picker is gone.
    • The .openscreen project format and the CLI can still change between releases.

    To everyone who reported a bug, tested a release candidate or sent a pull request: 2.0 is better because of you. If a default still makes your demo worse, that is exactly the bug this release is about. Tell us on Discord or in an issue.

    If OpenScreen saves you time, a star on the repo helps others find it.

    • fix(macos): decode 24-bit integer microphone audio
    • fix(macos): keep the Dock icon, Cmd+Tab and the menu bar
    • chore(release): release v1.12.1 into main
    • chore(release): release v1.12.2 into main
    • fix(macos): accept 8-bit integer PCM microphone input
    • chore: bump nix package to v1.12.2
    • chore: name @My-Denia code owner for Windows capture
    • fix(export): wait for GIF cancel to finish native cleanup
    • fix(capture-linux): latch capture-started so an early first frame is not lost
    • feat(auto-zoom): place suggestions on recorded clicks
    • feat(stt): add cross-platform Silero VAD pre-pass via whisper.cpp
    • perf(build): optimize package payload, deduplicate assets, and prune locales
    • feat(macos): first-run permissions window
    • fix(macos): stop HUD dialogs painting a grey rectangle over the desktop
    • feat(macos): pick sources in Apple's system picker on macOS 15.2+
    • fix(gif): accumulate fractional frame delays so GIF playback matches its fps
    • fix(shortcuts): show ⌘ for fixed undo/redo rows on macOS
    • docs(inspector): stop listing the retired frame-stepping hint as rewired
    • chore: normalize electron/native/README.md to LF
    • fix: attach file dialogs to their window so the export save panel cannot get lost
    • fix: headless export honors editor cursor tuning keys and cropRegion from v2 projects
    • fix(audio): allow imported audio tracks below -12 dB
    • docs: e2e results for v1.13.0-rc.4 (macOS)
    • docs: e2e results for v1.13.0-rc.6 (macOS)
    • chore(release): release v1.13.0 into main
    • chore: bump nix package to v1.13.0
    • ci(aur): verify sources the way a user's makepkg resolves them
    • fix: restore public/ copies of demo.gif and preview images for hotlinks
    • ci(winget): name the missing token scope before komac's CreateRef fails
    • feat(export): ask for a star once, after the first export
    • ci: put one star line at the head of stable release notes
    • ci: unpin the macOS compositor runner from macos-14
    • feat(website): offer a star once a download has started
    • fix(transcript): load projects whose transcript ends before it starts
    • fix(zoom): pace transitions by zoom level and keep them at screen speed
    • fix(windows): keep the render endpoint busy during mic-only recordings
    • feat(ui): soften the interface without changing its layout
    • feat(compositor): continuous corners on every rounded shape
    • fix(preview): no background fringe around the card's rounded corners
    • feat(format): add Auto, the default format that fits the composition
    • docs(roadmap): review the roadmap at v1.13.0
    • docs: AGENTS.md no longer describes Pixi.js as the renderer
    • feat(inspector): buttons for fixed choices, free rows, drag-to-frame webcam
    • feat(editor): a shorter top bar, and a first run that offers to record
    • feat(timeline): a softer clip card, a smooth waveform and a readable navigator
    • feat(editor): camera roundness slider and anchored positions
    • fix(website): lift the smooth waveform into the recreation data
    • feat(inspector): pick the zoom level from a row of buttons or a free field
    • feat(editor): inline background, grab handles and a wider inspector
    • fix(compositor): mask the screen with its slot in block layouts
    • feat(format): offer Auto only for a timeline of one composition
    • feat(cursor): option to always render the arrow cursor
    • feat(editor): new default wallpaper, first in the picker
    • fix(timeline): keep queued zoom levels through span and focus saves
    • fix: fill rounded background color swatch
    • fix(cli): carry the recording frame through v2 project exports
    • fix(compositor): let the screen's edges follow the motion blur
    • fix(cli): export projects saved by the editor
    • refactor(cursor): drop the always-true click effects gate
    • fix(ai-edition): let chat message text be selected and copied
    • fix(ai-edition): copy chat messages via main-process clipboard on Windows
    • ci(nix): retain Xvfb diagnostics for capture probes
    • perf(compositor): compile the Windows shaders at build time
    • fix(compositor): draw the webcam on Linux during a Full Camera hold
    • feat: a demo is never ugly (audit integration)
    • feat(cursor): raise the default cursor size
    • fix(editor): make the output format part of a style preset again
    • feat(export): one settings panel in the export dialog
    • fix(camera): shrink to 70% in a zoom, whatever its depth
    • fix: prevent duplicate frames at trimmed speed boundaries
    • feat(cursor): set the default cursor size at the marked position
    • fix: handle macOS capture permission failures
    • feat(recording): capture the webcam at its real resolution and frame rate
    • feat(export): always export H.264 and drop the codec picker
    • feat(cursor): remodel the 3D cursors after the new reference sheet
    • docs(testing): cover webcam capture quality in the manual e2e checklist
    • fix(editor): hide the cursor settings when a take has no cursor data
    • fix(compositor): copy the decoder surface before sampling it
    • fix(recording): remember the display picked in Apple's picker across a relaunch
    • feat(cursor): render Prism Glow as a glass crystal in 3D
    • feat(timeline): add a Clear timeline button
    • fix(capture): include menus and popups in Windows window recordings
    • fix(recording): keep the remembered display out of the Record-mode source row
    • fix(annotations): masks and their gimbals follow the footage, arrows get a tight gimbal
    • fix(editor): let the audio element free-run instead of re-seeking it every frame
    • feat(hud): rewrite the recording bar tooltips
    • feat(editor): drop the tooltips that repeat their label
    • feat(editor): rewrite the editor tooltips
    • fix(stt): keep transcript words on the audio's clock when the VAD cuts silence
    • feat: expose the AI agent's tools over a local MCP server
    • refactor(stt): drop the unreachable /vad endpoint and stt:vad IPC
    • fix(release): stage the whisper helper built from the release's own sources
    • fix(editor): keep the preview's boosted audio from clipping at the speakers
    • fix(macos): size the video bitrate from the actual capture, not the 4K ceiling
    • fix(linux): convert and tag the PipeWire helper's video as BT.709
    • fix(windows): stop the audio mixer from punching holes in a continuous voice
    • fix(macos): pin the keyframe interval to 1 s and count dropped video frames
    • perf(windows): raise the capture helpers' timer resolution and use MMCSS
    • fix: keep the display awake while a recording runs
    • fix(linux): keep the capture clock ticking while cursor messages flow
    • perf(windows): skip the webcam frame copy when its sequence has not changed
    • fix(windows): end the audio track where the video ends
    • fix(windows): encode H.264 High with the BT.709 colour the compositor expects
    • fix(stt): start each transcript word at the end of the token before it
    • fix(linux): write fragmented MP4 so a killed helper keeps its take
    • perf(windows): repeat the last frame instead of reading back an unchanged screen
    • fix(macos): capture and tag the screen track as BT.709 studio range
    • feat(stt): align words with character-level DTW
    • feat(stt): re-time whisper's words on a CTC forced aligner
    • fix(hud): keep the bar in place across a vertical↔horizontal flip
    • fix(release): read every helper build when staging, and say why one is rejected
    • docs(e2e): log the v2.0.0-rc.1 and rc.6 Windows passes
    • feat(camera): square camera by default, "Original" keeps the camera's own proportions
    • fix(stt): keep a sentence's last word in the stretch it closes
    • fix(main): quit when the hidden countdown overlay is the last window left
    • docs(testing): log the v2.0.0-rc.8 e2e pass and fix the export peak check
    • fix(preview): hand out no native view while the view for a new source is created
    • fix(editor): keep wordmark menu rows on one line in long locales
    • fix(macos): keep the HUD out of takes after the editor round trip
    • fix(timeline): show the bound shortcut in the empty-lane hints
    • fix(hud): keep camEnabled off when no camera can be opened
    • fix(stt): show a readable message when transcription cannot read the audio
    • perf(preview): stop decoding pictures the hidden media elements never show
    • perf(preview): hand composed frames to the canvas as shared GPU textures
    • fix(preview): stop re-seeking the native view at every cut and in speed regions
    • fix(preview): keep the right clip when scrubbing into the end of a clip
    • feat(website): demo loops on the homepage and feature pages, lazily loaded from R2
    • feat(website): track the demo loops, declare them as videos, keep them out of the page load
    • docs(readme): show the current editor in the demo GIF
    • fix(compositor): restore the export speed lost to the 3D models in the layer shader
    • perf(compositor): bring the background cache and the trail scissor to Windows and macOS
    • docs: record the Windows A/B of the layer-shader fix
    • docs(testing): log the v2.0.0-rc.13 computer-use e2e pass
    • feat: larger default camera, 60% cap, scissors on the trim tool
    • docs(testing): log the macOS RC e2e passes from v1.10.0-rc.3 to v2.0.0-rc.13
    • perf(preview): stop decoding the stand-in camera when a clip has none
    • @askalf made their first contribution in
    • @atharva9167j made their first contribution in
    • @jfkconstruct made their first contribution in
    • @apodacaduron made their first contribution in
    • @christian-wr made their first contribution in
    • @davidjayana made their first contribution in
  5. 1.13.0

    Thanks @heyitsR1 for the macOS permission diagnosis in #302, which led to the HUD dialog fix in this release.

    • fix(export): 9:16 projects exported as stretched 16:9
    • fix(compositor): clamp the click-bounce cursor size at zero
    • fix(compositor): keep privacy blur on its content under zoom and 3D tilt
    • fix(compositor): match the Linux background blur to the HLSL/Metal Kawase
    • feat: add German (de) locale
    • feat(website): SEO pages, v1.11.0 fact fixes, 8 locales and Docusaurus Faster
    • docs(website): keep comparison pages to the choices that matter
    • feat(3d): follow-cursor camera, modelled 3D cursor and 3D effects
    • revert: back out the 3D effects until they run on macOS and Linux
    • fix(audio): boost the mic only over system audio, and clamp the mix once
    • feat(3d): follow-cursor camera, modelled 3D cursor and 3D effects
    • feat(frames): model the device frames in 3D
    • chore(release): release v1.12.0 into main
    • @mario-soller made their first contribution in
  6. 1.12.2

    • fix(macos): decode 24-bit integer microphone audio
    • fix(macos): keep the Dock icon, Cmd+Tab and the menu bar
    • chore(release): release v1.12.1 into main
  7. 1.12.1

    • fix(export): 9:16 projects exported as stretched 16:9
    • fix(compositor): clamp the click-bounce cursor size at zero
    • fix(compositor): keep privacy blur on its content under zoom and 3D tilt
    • fix(compositor): match the Linux background blur to the HLSL/Metal Kawase
    • feat: add German (de) locale
    • feat(website): SEO pages, v1.11.0 fact fixes, 8 locales and Docusaurus Faster
    • docs(website): keep comparison pages to the choices that matter
    • feat(3d): follow-cursor camera, modelled 3D cursor and 3D effects
    • revert: back out the 3D effects until they run on macOS and Linux
    • fix(audio): boost the mic only over system audio, and clamp the mix once
    • feat(3d): follow-cursor camera, modelled 3D cursor and 3D effects
    • feat(frames): model the device frames in 3D
    • chore(release): release v1.12.0 into main
    • @mario-soller made their first contribution in
  8. 1.12.0

    • fix: avoid AV1 clip-switch crashes on Windows
    • chore(release): release v1.11.0 into main
    • fix: stop background writes clobbering a concurrent user edit
    • fix(rec): the microphone can't be disabled in the Studio Rec tab
    • fix(capture): make Linux preview seek robust at/past the last frame
    • fix(captioning): correct web-demuxer.wasm URL — transcription always failed with "Failed to fetch"
    • fix(macos): exclude recording controls from display captures
    • fix(capture): stamp Linux video frames with wall-clock PTS to stop time-compression
    • fix(windows): let the default microphone id veto the device name
    • fix(editor): suggest cursor-dwell zooms after a fresh recording
    • chore: bump nix package to v1.11.0
    • fix(macos): warn when recording the default microphone
    • refactor(schema): drop the declarations nothing has ever read
    • fix(capture-linux): measure the cursor against the window, not its mo…
    • fix(transcription): a recording with no audio is a verdict, not a failed job
    • fix(macos): resolve Chromium USB microphone labels
    • feat(cursor): add smart cursor auto-hide and zoom hide
    • fix(linux): validate mapped DMA-BUF frames
    • fix(macos): drop video frames whose timestamp does not advance
    • fix(macos): stop the take when the writer dies mid-capture, and tell the user
    • fix(macos): settle the native stop on the helper's exit, not its first error
    • fix(macos): recover the take a dead writer or a killed helper left on disk
    • fix(wgc): read the config argument as UTF-16 so non-ASCII output paths resolve
    • fix(timeline): coalesce scrub state updates per frame
    • fix(windows): low-pass before decimating so 96/192 kHz sources stop aliasing
    • fix(ai): report every modifier removed with a pill
    • ci(whisper-stt): drop the msvc-dev-cmd step the Windows build never used
    • docs(linux): bring the platform table back in line with what the code does
    • fix(capture-linux): re-apply the vaMapBuffer2 guard to the dmabuf encoder's CPU upload
    • fix(hud): keep a dragged HUD inside the display work area
    • feat(editor): show what a trim keeps, while the handles are still moving
    • feat(launch): make post-recording auto-zoom systematic and remove toggle button
    • fix(hud): keep open popovers on screen and harden the work-area clamp
    • fix(build): re-fetch a staged ONNX Runtime that is the right version from the wrong archive
    • feat: add Czech (cs) locale
    • fix(hud): label recording controls for assistive technology
    • feat(settings): persist recording setup and project appearance defaults
    • docs(perf): record the HEVC 8-bit macOS decode measurements
    • feat(editor): reusable style presets for project appearance
    • @bosskopp made their first contribution in
    • @Crnobog9527 made their first contribution in
    • @Mamdasn made their first contribution in
    • @im10furry made their first contribution in
    • @SupermanAdam007 made their first contribution in
    • @CyberSparkx made their first contribution in
  9. 1.11.0

    > macOS 13 and 14: on-device transcription is fixed. In v1.10.0 the speech-to-text > helper never loaded on Ventura or Sonoma, and the captions pane reported > Failed to fetch — which looked like a network fault but was the helper aborting in > the dynamic loader. Updating to v1.11.0 fixes it. Recording, editing and export were > never affected, and macOS 15 and later were never affected. See #538 for the analysis.

    • docs(testing): say who runs the manual e2e pass, and that a slice counts
    • fix(timeline): remove the dead Add Full Camera toolbar button
    • fix(editor): remove the redundant top-bar settings button
    • fix(editor): close the clip picker on an outside click
    • fix(stt): offer every whisper.cpp language in the regenerate picker
    • revert: remove the dead Add Full Camera toolbar button
    • fix(editor): light theme contrast + gradient palette
    • fix(editor): zoom/pan the whole timeline pane on scroll
    • fix(captions): position presets you can click, sliders that reach the true edge
    • fix(editor): timeline clip delete icon contrast in light theme
    • fix(captions): place captions by anchor and margin, not by an invisible band
    • docs(testing): log the v1.10.0-rc.3 Windows e2e run
    • fix: initialise CoreGraphics before building a macOS window capture filter
    • fix(recording): use hardware H.264 on Windows by default
    • fix(app,recording): Save Diagnostics UI + faster #460 shutdown
    • chore(release): release v1.10.0 into main
    • docs: publish minimum and recommended system requirements
    • fix(website): match recreation generator's param name to amplitude
    • fix(ci): don't let the docs refresh block Microsoft Store publishing
    • chore: bump nix package to v1.10.0
    • fix(build): stop the Windows cargo env values from breaking Linux builds
    • refactor(editor): delete the orphaned v3 left rail and media pane
    • fix(capture): zero-copy dmabuf→VAAPI capture — fix whole-screen recording freeze on GNOME/AMD
    • feat(linux): capture mouse clicks on Wayland via evdev
    • fix(macos): make recording work on Monterey, and stop calling a dead helper a denied permission
    • feat(webcam): add AI background cutout, blur, and custom wallpapers
    • fix(compositor): bound the image texture cache, which never freed anything
    • fix(webcam): ask the machine whether it can segment, instead of guessing
    • perf(wallpapers): cap the bundled backgrounds at 3840px
    • perf(audio): stretch speed regions through libavfilter atempo instead of WSOLA — fixes exports frozen at ~80%
    • fix(nix): unbreak nix build, and let it run on the PRs that can break it
    • fix(export): keep the progress bar honest and moving during the audio phase
    • fix(preview): show the modifiers under a trim when the playhead is on it
    • feat(website): add a development journal at /blog
    • feat(website): route all Discord links through getopenscreen.com/discord
    • perf(linux): convert to YUV on the GPU, halving the export readback
    • chore: add FUNDING.yml
    • perf(linux): take the export from 3.33x the floor to 1.17x, and onto the GPU
    • fix(export): give the Linux encoder a keyframe interval and a chosen QP window
    • fix(build): stop hiding the shared dependencies behind cfg(linux)
    • chore(ffmpeg): say that the encoder list is reported, not verified
    • refactor(export): drop send_rgba and the state that existed only for it (Linux)
    • fix: reset themed cursor when sidecar type is null or omitted
    • feat(update): add update settings and a background check
    • feat(editor): persist and restore the editor window bounds
    • feat(editor): crop at pixel resolution with a larger preview
    • fix: snap illegal AAC sample rates to 48 kHz on Windows
    • fix(stt): distinguish initializing from transcribing on every spinner
    • perf(export): decode H.264 in software on the macOS export walk (1.82x floor -> 1.30x)
    • fix(packaging): unblock the Windows build, and cover what landed after v1.10.0
    • docs(perf): record the macOS export measurements, including what failed
    • docs(perf): capping the macOS decoder's threads is a loss, and why the fixture said otherwise
    • ci(onnx): build ONNX Runtime for macOS with the floor the app declares
    • ci(build): do not run the release matrix for internal v0.0.0-* tags
    • fix(wgc): pull-based frame delivery to stop CopyResource wedging the stop path
    • fix(macos): serve ONNX Runtime from a build that respects the 13.0 floor
    • docs(perf): settle the macOS export's 4 s cold start, and kill the asar lever
    • fix(ci): read the runner image instead of interpolating an empty string
    • feat(editor): imported audio, and transcript words you can correct, add and delete
    • docs(e2e): checks for imported audio, voice-over and word insertion
    • build: pin electron exactly, so packaging works without a second declaration
    • fix(insertions): the deleted word stayed in the transcript
    • fix(i18n): simplify transcript panel title across all locales
    • fix(editor): reset all parameters on audio track pane reset
    • fix(editor): polish UI layout, slider gauge, icons and captions panel
    • fix(timeline): expand initial timeline height and dynamically adjust for stacked audio lanes
    • fix(editor): keep the camera preset labels inside their button
    • fix(compositor): high-quality motion blur and gaussian webcam blur
    • fix(editor): keep the top bar usable when the window gets narrow
    • fix(build): ship the ffmpeg CLI in the macOS .app so transcription works without a system ffmpeg
    • chore: name @Beetix code owner for Linux/Wayland capture
    • @naadydev made their first contribution in
    • @Beetix made their first contribution in
    • @superkc2026 made their first contribution in
    • @abduznik made their first contribution in
  10. 1.10.0

    • fix(notes): keep the note stylesheet in the production bundle
    • chore(release): sync the v1.9.0 RC fixes into main
    • feat(editor): turn on roundness, shadow and motion blur by default
    • fix(cursor): make the Windows cursor sampler DPI-aware
    • fix(hud): stop being born click-through, wait for the renderer to ask
    • fix(media): watch the background path refresh instead of firing it into the void
    • fix(agent): stop cutting the transcript at the 800th word
    • fix(ci): scope RC release notes to the previous RC
    • test(media): inject the failed registry write instead of chmod-ing the temp dir
    • feat(agent): add addTrims and addZooms, so a cut stops costing a round trip
    • perf(test): run Vitest in node by default, and fix the workflow guidance around it
    • fix(ai): stop compacting the chat on a context window we never measured
    • chore(release): release v1.9.0 into main
    • fix(ci): re-pin ffmpeg on a month-end BtbN build
    • fix(ci): harden the AUR publish pipeline and repair its distribution CI
    • fix(release): publish before syncing main, and stop racing the merge
    • ci(linux): guard the native payload, declare patchelf, drop the dead zsync glob
    • fix(appx): ship branded Store tiles instead of electron-builder's placeholders
    • fix(win): ship the compositor addon beside its ffmpeg DLLs
    • fix(linux): give the capture helper's ffmpeg libraries their own directory name
    • fix(linux): negotiate DMA-BUF so capture works on niri and other wlroots compositors
    • ci(release): make the Discord announcement dispatchable on its own
    • test(ci): cover the missing-tag path under STRICT
    • fix(release): bump package-lock.json alongside package.json
    • ci: bump pinned GitHub Actions to their Node 24 majors
    • fix(linux): make the Linux build work on arm64
    • feat: add Fedora RPM packaging support
    • ci(docs): bump the SHA-pinned Pages actions to their Node 24 majors
    • docs(ci): correct the include-hidden-files rationale in docs.yml
    • fix(linux): give the compositor's build.rs its own freestanding-header fallback
    • fix(linux): recover the DMA-BUF plane size the producer leaves at zero
    • test(media): stop the media-links temp-dir cleanup failing its own race
    • fix(linux): stop the packages needing a glibc newer than the target distro
    • fix(win): stop depending on the Visual C++ Redistributable
    • fix(linux): declare the libraries the packages need, and prove it on a clean machine
    • fix(linux): bundle libgomp in the AppImage, the one format that cannot declare it
    • ci(store): submit the appx to the Microsoft Store from the release build
    • fix(linux): declare xdg-desktop-portal and name its backend; ci(winget): stop skipping in silence
    • docs(dist): make the Microsoft Store the recommended Windows route
    • fix(win): ship the OpenMP runtime the ggml backends actually import
    • fix(wgc): GPU DXGI encode path for Windows capture, with a fallback at every step
    • fix(win): pace the capture loop to a deadline instead of sleeping a full period
    • feat(wgc): report which GPU capture landed on, and let the tool test audio
    • fix(ci): start release notes from a tag that exists
    • fix(wgc): make the GPU encode path opt-in until it earns the default
    • fix(recording): write fragmented MP4 so a killed helper keeps its file
    • fix(wgc): report adapter LUIDs, because the descriptions can be identical
    • ci(packaging): make the dormant Homebrew cask job visible, and add the AppStream metadata Flathub needs
    • ci(flatpak): spike how far Flathub actually is
    • docs(agents): add development principles, slim release flow, correct branch contract
    • fix(waveform): stop re-decoding audio-less recordings, and unify "no camera"
    • fix(wgc): make the Windows recorder DPI-aware and stop guessing its monitor
    • feat(build): let a developer package on a distro newer than the floor
    • fix(compositor): say when a declared camera is unreadable
    • fix(recording): open the recording a failed stop left playable
    • fix(editor): import a recording once, so reopening keeps the project you saved
    • feat(editor): delete a project from the Open project dialog
    • docs(e2e): correct the computer-use testing guidance, HUD to helpers
    • docs(testing): log the 1.9.5-rc.2 regression pass
    • docs(testing): "the machine is at 100%" is not a reason to skip DPI
    • docs(testing): batch the computer-use grants so the operator can leave
    • docs(testing): log the macOS 1.9.5-rc.1 pass — fragmenting is active, but a clean stop cannot prove it
    • fix(recording): stop macOS fragments carrying an offset the box cannot hold
    • chore(release): set main to 1.9.5
    • fix(store): give msstore a project to publish, not just a package
    • ci(store): add a retry path for Store submission that rebuilds nothing
    • fix(store): the option is --inputDirectory, and it takes a directory
    • feat(update): add manual release checking
    • feat(update): in-place updates on Windows, macOS and Linux
    • ci(aur): say which key AUR refused, instead of just that it refused one
    • docs: stop telling macOS users to strip the quarantine flag
    • fix(hud): give click-through a way out that Windows cannot revoke
    • docs(agents): the HUD lift is a cursor poll now, not a WH_MOUSE_LL hook
    • feat(website): rebuild the landing page around a live editor
    • chore(release): set main to 1.9.6
    • fix(store): pin msstore-cli, whose v0.4.0 cancels every upload instantly
    • fix(recording): the camera that was chosen is the camera that gets recorded
    • fix(recording): carry the microphone's name, not just its id
    • fix(recording): advance the audio timeline on the clock, not on the data
    • fix(recording): stop a camera name from matching a different camera
    • fix(preview): stop the scrub seek storm that emptied the editor
    • fix(workbench): one tool roster, pinned in CI, instead of three hand-written ones
    • fix(compositor): anchor Linux annotations on the un-zoomed screen rect
    • fix(editor): restore spacing between slider labels and values
    • fix(layout): show no-webcam for camera-less projects
    • fix(ai): report compacted model context
    • fix(timeline): preserve partially anchored regions
    • fix(editor): surface failed timeline saves
    • fix(ai): prevent stale agent edit overwrites
    • fix(ai): restore the agent rollback a dead catch had silenced
    • fix(captions): place subtitles against the output frame, and let the offsets reach its edges
    • feat(editor): add webcam crop, output gain, and Add to timeline
    • fix(captions): recover from a failed GPU start, and stop the helper on quit
    • fix(recording): advance the macOS audio timeline on the clock, not on the data
    • fix(editor): lay the camera box out from the camera, not from a guess
    • feat(stt): surface transcription timing and backend, drop the dead --cuda variant
    • fix(editor): keep the webcam pan when the zoom passes through 100%
    • test(e2e): drop the two stale checklist tests, clean their leftovers
    • test(recording): measure the Linux audio timeline instead of trusting it
    • fix(hud): keep the click-through mirror, its guard test, and its docs honest
    • feat(app): give the app an About box and a reachable update check
    • test(app): pin the copyright the bundle and the About box share
    • feat(nix): package the compositor, verify the build in CI, and bound two CLI hangs
    • fix(recording): size the capture buffer from the filter, not the display mode
    • fix(recording): count the tap's catch-up apart from audio it lost
    • feat(editor): reach the AI provider settings from the app menu
    • fix(editor): stop editor shortcuts reaching the timeline under a modal
    • ci(nix): let the build job finish, and name the stage that fails
    • feat(ai-edition): a zoom write reports where the pointer really was
    • feat(workbench): split the behaviour axis, judge the half that reads
    • ci(nix): print the get-sources duration on every attempt, not just failures
    • fix(workbench): union the zoom denominator, derive the turn timeout from the harness
    • ci(nix): run record before sources, to test whether position is the cause
    • fix(editor): suppress editor shortcuts under every modal, not just some
    • fix(editor): treat a malformed legacyEditor envelope as absent, not as a crash
    • fix(editor): apply Edit Clip as one save, and refuse Full Camera with no webcam
    • test(ai-edition): share one base document in the addZoom invariant
    • feat(export): keep "Show in folder" on the success panel, not only in the toast
    • test(ai-edition): pin the fixture clock instead of racing it
    • ci(nix): put record back after sources, and record why the experiment failed
    • fix(workbench): make the third verdict reachable, then migrate onto it
    • fix(hud): dismiss the HUD popovers when the window loses focus
    • feat(nix): package the PipeWire capture helper
    • fix(editor): make undo/redo actually apply
    • fix(nix): build whisper-stt CPU-only; the Vulkan shader gen cannot fork
    • refactor(workbench): retire the last meaning regex, under a new check id
    • fix(workbench): retire beh.sandbox from the baseline, confirmed at n=10
    • refactor(workbench): retire the meaning regex a scenario file hid
    • test(workbench): wire the second half of a bidirectional rubric
    • fix(nix): add dlopen RPATH entries in postFixup, after the shrink
    • feat(editor): merge the background facet into video effects
    • fix(editor): light theme contrast + gradient palette (cherry-pick for 1.10.0-rc.2)
    • fix(editor): close the clip picker on an outside click (1.10.0.rc2 cherry-pick)
    • fix(stt): offer every whisper.cpp language in the regenerate picker (cherry-pick to 1.10.0.rc2)
    • fix(editor): zoom/pan the whole timeline pane on scroll, not just the lanes (cherry-pick for 1.10.0-rc.2)
    • fix(editor): remove the redundant top-bar settings button (cherry-pick for 1.10.0-rc.2)
    • fix(editor): timeline clip delete icon contrast in light theme (cherry-pick for 1.10.0-rc.3)
    • fix(captions): place captions by anchor and margin, not by an invisible band (rc.3)
    • fix: initialise CoreGraphics before building a window capture filter (cherry-pick for 1.10.0-rc.4)
    • @zebster-cmd made their first contribution in
    • @Mundo-Dev0ps made their first contribution in
    • @tebuevd made their first contribution in
    • @vitaligusatinsky made their first contribution in
  11. 1.9.6

  12. 1.9.5

  13. 1.9.2

    • fix(linux): declare the libraries the packages need, and prove it on a clean machine
  14. 1.9.1

    • fix(notes): keep the note stylesheet in the production bundle
    • chore(release): sync the v1.9.0 RC fixes into main
    • feat(editor): turn on roundness, shadow and motion blur by default
    • fix(cursor): make the Windows cursor sampler DPI-aware
    • fix(hud): stop being born click-through, wait for the renderer to ask
    • fix(media): watch the background path refresh instead of firing it into the void
    • fix(agent): stop cutting the transcript at the 800th word
    • fix(ci): scope RC release notes to the previous RC
    • test(media): inject the failed registry write instead of chmod-ing the temp dir
    • feat(agent): add addTrims and addZooms, so a cut stops costing a round trip
    • perf(test): run Vitest in node by default, and fix the workflow guidance around it
    • fix(ai): stop compacting the chat on a context window we never measured
    • chore(release): release v1.9.0 into main
    • fix(ci): re-pin ffmpeg on a month-end BtbN build
    • fix(ci): harden the AUR publish pipeline and repair its distribution CI
    • fix(release): publish before syncing main, and stop racing the merge
    • ci(linux): guard the native payload, declare patchelf, drop the dead zsync glob
    • fix(appx): ship branded Store tiles instead of electron-builder's placeholders
    • fix(win): ship the compositor addon beside its ffmpeg DLLs
    • fix(linux): give the capture helper's ffmpeg libraries their own directory name
    • fix(linux): negotiate DMA-BUF so capture works on niri and other wlroots compositors
    • ci(release): make the Discord announcement dispatchable on its own
    • test(ci): cover the missing-tag path under STRICT
    • fix(release): bump package-lock.json alongside package.json
    • ci: bump pinned GitHub Actions to their Node 24 majors
    • fix(linux): make the Linux build work on arm64
    • feat: add Fedora RPM packaging support
    • ci(docs): bump the SHA-pinned Pages actions to their Node 24 majors
    • docs(ci): correct the include-hidden-files rationale in docs.yml
    • fix(linux): give the compositor's build.rs its own freestanding-header fallback
    • fix(linux): recover the DMA-BUF plane size the producer leaves at zero
    • test(media): stop the media-links temp-dir cleanup failing its own race
    • fix(linux): stop the packages needing a glibc newer than the target distro
    • fix(win): stop depending on the Visual C++ Redistributable
    • @zebster-cmd made their first contribution in
    • @Mundo-Dev0ps made their first contribution in
  15. 1.9.0

    • feat: add Notes teleprompter mode
    • ci(nix): fix the bump workflow's PR creation, and catch npmDepsHash drift
    • fix(notes): make mirrored teleprompter content read-only
    • feat(cli): headless record / export / info commands
    • fix(timeline): size pills and clips in px, not in fractions of the timeline
    • chore(release): release v1.8.0 into main
    • fix(build): name Etienne Lescot as the Windows publisher
    • fix(timeline): carry rounded timecode seconds
    • fix(export): keep speed segments non-overlapping
    • fix(editor): cascade clip modifier deletion
    • fix(electron): drop the PID-file instance lock that could brick startup
    • fix(media): require an executable when resolving ffmpeg
    • fix(recording): record the window Linux users actually pick
    • fix(ai): replace summarized chat history
    • fix(stt): verify cached model checksum
    • fix(projects): relink moved media from registry
    • fix(deps): patch dev toolchain vulnerabilities
    • fix(deps): upgrade electron-builder security patches
    • fix(ci): sign the macOS .app ad-hoc when no certificate is available
    • fix(recording): stream the native webcam to disk instead of losing it
    • test(recording): make the re-index suite run off Linux
    • fix(ci): notarize release candidates like stable releases
    • fix(build): declare all 13 supported locales in the AppX package
    • ci(macos): reject a MAC_CSC_NAME that carries its certificate type
    • fix(recording): stop the WGC helper from hanging on stop
    • fix(layout): apply the webcam layout only to clips that have a camera
    • fix(notes): keep the note stylesheet in the production bundle
    • fix(hud): stop being born click-through, wait for the renderer to ask
    • @PeterTakahashi made their first contribution in
    • @arhxam made their first contribution in