Releases: getopenscreen/openscreen
Releases · getopenscreen/openscreen
Release list
v1.10.0
What's Changed
- fix(notes): keep the note stylesheet in the production bundle by @EtienneLescot in #270
- chore(release): sync the v1.9.0 RC fixes into main by @EtienneLescot in #275
- feat(editor): turn on roundness, shadow and motion blur by default by @EtienneLescot in #273
- fix(cursor): make the Windows cursor sampler DPI-aware by @EtienneLescot in #278
- fix(hud): stop being born click-through, wait for the renderer to ask by @EtienneLescot in #269
- fix(media): watch the background path refresh instead of firing it into the void by @EtienneLescot in #255
- fix(agent): stop cutting the transcript at the 800th word by @EtienneLescot in #256
- fix(ci): scope RC release notes to the previous RC by @EtienneLescot in #267
- test(media): inject the failed registry write instead of chmod-ing the temp dir by @EtienneLescot in #280
- feat(agent): add addTrims and addZooms, so a cut stops costing a round trip by @EtienneLescot in #258
- perf(test): run Vitest in node by default, and fix the workflow guidance around it by @EtienneLescot in #281
- fix(ai): stop compacting the chat on a context window we never measured by @EtienneLescot in #286
- chore(release): release v1.9.0 into main by @EtienneLescot in #288
- fix(ci): re-pin ffmpeg on a month-end BtbN build by @EtienneLescot in #295
- fix(ci): harden the AUR publish pipeline and repair its distribution CI by @EtienneLescot in #297
- fix(release): publish before syncing main, and stop racing the merge by @EtienneLescot in #296
- ci(linux): guard the native payload, declare patchelf, drop the dead zsync glob by @EtienneLescot in #298
- fix(appx): ship branded Store tiles instead of electron-builder's placeholders by @EtienneLescot in #294
- fix(win): ship the compositor addon beside its ffmpeg DLLs by @EtienneLescot in #303
- fix(linux): give the capture helper's ffmpeg libraries their own directory name by @EtienneLescot in #300
- fix(linux): negotiate DMA-BUF so capture works on niri and other wlroots compositors by @EtienneLescot in #299
- ci(release): make the Discord announcement dispatchable on its own by @EtienneLescot in #289
- test(ci): cover the missing-tag path under STRICT by @EtienneLescot in #314
- fix(release): bump package-lock.json alongside package.json by @EtienneLescot in #290
- ci: bump pinned GitHub Actions to their Node 24 majors by @EtienneLescot in #97
- fix(linux): make the Linux build work on arm64 by @zebster-cmd in #293
- feat: add Fedora RPM packaging support by @Mundo-Dev0ps in #101
- ci(docs): bump the SHA-pinned Pages actions to their Node 24 majors by @EtienneLescot in #316
- docs(ci): correct the include-hidden-files rationale in docs.yml by @EtienneLescot in #318
- fix(linux): give the compositor's build.rs its own freestanding-header fallback by @EtienneLescot in #315
- fix(linux): recover the DMA-BUF plane size the producer leaves at zero by @EtienneLescot in #319
- test(media): stop the media-links temp-dir cleanup failing its own race by @EtienneLescot in #320
- fix(linux): stop the packages needing a glibc newer than the target distro by @EtienneLescot in #322
- fix(win): stop depending on the Visual C++ Redistributable by @EtienneLescot in #321
- fix(linux): declare the libraries the packages need, and prove it on a clean machine by @EtienneLescot in #325
- fix(linux): bundle libgomp in the AppImage, the one format that cannot declare it by @EtienneLescot in #326
- ci(store): submit the appx to the Microsoft Store from the release build by @EtienneLescot in #311
- fix(linux): declare xdg-desktop-portal and name its backend; ci(winget): stop skipping in silence by @EtienneLescot in #329
- docs(dist): make the Microsoft Store the recommended Windows route by @EtienneLescot in #285
- fix(win): ship the OpenMP runtime the ggml backends actually import by @EtienneLescot in #330
- fix(wgc): GPU DXGI encode path for Windows capture, with a fallback at every step by @EtienneLescot in #305
- fix(win): pace the capture loop to a deadline instead of sleeping a full period by @EtienneLescot in #331
- feat(wgc): report which GPU capture landed on, and let the tool test audio by @EtienneLescot in #332
- fix(ci): start release notes from a tag that exists by @EtienneLescot in #333
- fix(wgc): make the GPU encode path opt-in until it earns the default by @EtienneLescot in #337
- fix(recording): write fragmented MP4 so a killed helper keeps its file by @EtienneLescot in #338
- fix(wgc): report adapter LUIDs, because the descriptions can be identical by @EtienneLescot in #342
- ci(packaging): make the dormant Homebrew cask job visible, and add the AppStream metadata Flathub needs by @EtienneLescot in #340
- ci(flatpak): spike how far Flathub actually is by @EtienneLescot in #347
- docs(agents): add development principles, slim release flow, correct branch contract by @EtienneLescot in #96
- fix(waveform): stop re-decoding audio-less recordings, and unify "no camera" (#348) by @EtienneLescot in #349
- fix(wgc): make the Windows recorder DPI-aware and stop guessing its monitor by @EtienneLescot in #351
- feat(build): let a developer package on a distro newer than the floor by @EtienneLescot in #360
- fix(compositor): say when a declared camera is unreadable by @EtienneLescot in #357
- fix(recording): open the recording a failed stop left playable by @EtienneLescot in #363
- fix(editor): import a recording once, so reopening keeps the project you saved by @EtienneLescot in #366
- feat(editor): delete a project from the Open project dialog by @EtienneLescot in #367
- docs(e2e): correct the computer-use testing guidance, HUD to helpers by @EtienneLescot in #361
- docs(testing): log the 1.9.5-rc.2 regression pass by @EtienneLescot in #369
- docs(testing): "the machine is at 100%" is not a reason to skip DPI by @EtienneLescot in #372
- docs(testing): batch the computer-use grants so the operator can leave by @EtienneLescot in #373
- docs(testing): log the macOS 1.9.5-rc.1 pass — fragmenting is active, but a clean stop cannot prove it by @EtienneLescot in #374
- fix(recording): stop macOS fragments carrying an offset the box cannot hold by @EtienneLescot in #375
- chore(release): set main to 1.9.5 by @EtienneLescot in #378
- fix(store): give msstore a project to publish, not just a package by @EtienneLescot in #379
- ci(store): add a retry path for Store submission that rebuilds nothing by @EtienneLescot in #380
- fix(store): the option is --inputDirectory, and it takes a directory by @EtienneLescot in #381
- feat(update): add manual release checking by @arhxam in #313
- feat(update): in-place updates on Windows, macOS and Linux by @EtienneLescot in #358
- ci(aur): say which key AUR refused, i...
v1.10.0-rc.4
Changes since v1.10.0-rc.3
- fix: initialise CoreGraphics before building a window capture filter
- fix(recording): use hardware H.264 on Windows by default, not just when asked
Full Changelog: v1.10.0-rc.3...v1.10.0-rc.4
v1.10.0-rc.3
Changes since v1.10.0-rc.2
- fix(editor): give the timeline clip's delete icon the same dark-chip treatment as its label
- feat(compositor): let a text region pin an edge instead of centring its block
- fix(captions): place captions by anchor and margin, not by an invisible band
- test(compositor): anchor on the line box, not on the last pixel of ink
- fix(captions): reserve the plate's margin on the anchored side, and migrate insetX
- fix(compositor): a doc comment cannot sit on a function parameter
- fix(captions): let the first write know the output aspect too
- docs(captions): describe the anchor model on the release branch too
- fix(captions): default the insets to what actually sits well with the padding
Full Changelog: v1.10.0-rc.2...v1.10.0-rc.3
v1.10.0-rc.2
Changes since v1.10.0-rc.1
- fix(editor): make the gradient picker and a couple of dialogs follow the light theme
- fix(editor): a subagent review of the previous commit's own diff, addressed
- fix(editor): close the clip picker on an outside click
- fix(stt): offer every whisper.cpp language in the regenerate picker
- fix(stt): wire the language list into the picker that's actually live
- fix(stt): validate regenLang against the known code list
- fix(editor): zoom/pan the whole timeline pane on scroll, not just the lanes
- test(editor): cover Shift+wheel pan from the ruler too
- fix(editor): remove the redundant top-bar settings button
- fix(captions): position presets you can click, sliders that reach the true edge
- fix(captions): pick the closest position preset, not the first one checked
Full Changelog: v1.10.0-rc.1...v1.10.0-rc.2
v1.10.0-rc.1
Changes since v1.9.0
- fix(notes): keep the note stylesheet in the production bundle
- 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(recording): stop a webcam finalize from discarding the screen capture
- ci(diagnostic): build the bundle for release branches too
- fix(export): stop drawing the screen inside the PiP box on camera-less clips
- fix(layout): resolve the webcam layout per clip, not once per timeline
- 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
- test(hud): pin that click-through is asked for, never born with
- docs(hud): replace the guessed exposure window with a measured one
- fix(media): watch the background path refresh instead of firing it into the void
- fix(agent): stop cutting the transcript at the 800th word
- docs(agent): the transcript tool no longer caps, so stop saying it does
- 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
- fix(agent): let a malformed batch entry fall alone, like every other one
- perf(test): run Vitest in node, and jsdom only where a DOM is needed
- docs(agents): run the tests you touched, not the whole suite each step
- fix(ci-scripts): clear the thread-validation timeout when fetch rejects
- fix(renderer): handle the detached promises that can actually reject
- fix(ai): stop compacting the chat on a context window we never measured
- docs(readme): replace the two static screenshots with an animated demo
- docs(readme): tighten the preamble and point the links at getopenscreen
- docs(readme): rebuild the demo GIF from the 1440p master
- fix(ci): re-pin ffmpeg on a month-end BtbN build
- chore(gitignore): ignore local AUR key material
- fix(ci): pin winget-releaser to a commit SHA
- fix(ci): harden the AUR publish pipeline and repair its makepkg install
- feat(ci): add a dry_run input to the AUR publish workflow
- fix(ci): close three gaps found in CodeRabbit review of the AUR audit
- fix(release): publish before syncing main, and stop racing the merge
- fix(release): fail sync_main when no PR exists and main is still behind
- ci(linux): guard the native payload, declare patchelf, drop the dead zsync glob
- ci(linux): require each compositor ffmpeg library family individually
- docs(readme): rebuild the demo GIF from the dark-theme master
- fix(appx): ship branded Store tiles instead of electron-builder's placeholders
- ci(windows-store): fail the build when the packaged tiles are not ours
- ci(windows-store): check tiles against the generator, not against build/appx
- 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
- fix(ci): fail a manual announcement that posts nothing
- test(ci): cover the missing-tag path under STRICT
- fix(release): bump package-lock.json alongside package.json
- fix(release): validate both manifests before writing either
- fix(release): reject a version that is not a release version
- ci: bump pinned GitHub Actions to their Node 24 majors
- fix(linux): make the Linux build work on arm64
- fix(linux): re-pin the arm64 ffmpeg asset and fix bindgen's include lookup at its source
- feat(build): add the Fedora RPM target
- 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
- ci(win): prove the Store package loads before shipping it
- fix(win): read delay imports too, and stop the guards masking each other
- fix(win): drain both helper pipes at once instead of one after the other
- fix(linux): declare the three libraries the packages need and never asked for
- fix(linux): stop the Arch package depending on one Arch deleted
- ci(linux): prove the packages resolve on a machine with nothing installed
- ci(release): announce off the release itself, not off the ceremony that made it
- fix(nix): refresh npmDepsHash, stale since well before this branch
- fix(linux): bundle libgomp in the AppImage, the one format that cannot declare it
- docs(build): fix a self-contradiction in the AppImage paragraph
- ci(store): submit the appx to the Microsoft Store from the release build
- fix(store): report the actual submission result, not the configuration
- fix(linux): declare the portal, and name the backend that implements it
- ci(winget): stop skipping the publish in silence
- docs(build): name the packages instead of counting them
- ci(winget): name the two gates that each cost a release to discover
- docs(dist): make the Microsoft Store the recommended Windows route
- docs(dist): describe the winget gate by its prerequisites, not its if
- docs(dist): stop calling the winget job switched off
- fix(win): ship the OpenMP runtime the ggml backends actually import
- fix(win): tell a directory from a file, and find Visual Studio where it is
- fix(wgc): add GPU DXGI path for Windows capture readback
- fix(wgc): make the GPU encode path degrade instead of failing
- fix(wgc): keep an encode off the frame lock, and name where it wedges
- fix(wgc): repair the four things the GPU path got wrong under review
- fix(wgc): build the bridge texture where a failure can still fall back
- fix(wgc): give the audio write its own breadcrumb instead of the video's
- fix(wgc): clear the breadcrumb by scope, not by remembering to
- 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
- style(diagnostic): wrap the two lines biome wanted wrapped
- fix(wgc): stop the adapter report dereferencing what DXGI did not give it
- fix(ci): start release notes from a tag that exists
- fix(ci): let each consumer decide what "no previous release" means
- fix(wgc): make the GPU encode path opt-in until it earns the default
- docs(recording): stop the paragraph contradicting itself on fallback
- fix(recording): write fragmented MP4 so a killed helper keeps its file
- fix(wgc): report adapter LUIDs, because the descriptions can be identical
- fix(wgc): tell "no outputs" apart from "outputs could not be read"
- ci(homebrew): stop reporting an unpublished cask as a green release
- feat(packaging): add the upstream AppStream metadata Flathub requires
- fix(ci): refuse a tap name brew cannot resolve
- docs(release): stop calling the notarized DMGs unsigned
- ci(flatpak): spike how far Flathub actually is
- fix(flatpak): point the spike at a repository that exists
- docs(agents): add development principles, slim release flow, correct branch contract
- docs(agents): address review feedback on the release-flow docs
- docs(release): make release-and-secrets.md the only release reference
- fix(docs-check): catch the retired branch naming in both spellings
- test(media): let callers await the registry's background path refresh
- fix(waveform): take ffmpeg's word when a recording has no audio track
- refactor(camera): one answer to "does this asset have a camera"
- fix(export): key the fallback webcam decoder by the file it actually opened
- fix(export): decide the webcam source, its cache key and the PiP together
- fix(wgc): make the Windows recorder DPI-aware and stop guessing its monitor
- fix(cursor): fail the sampler when DPI awareness cannot be set
- feat(build): let a developer package on a distro newer than the floor
- test(build): stop asserting the host ceiling clears the pinned floor
- fix(compositor): say when a declared camera is unreadable
- fix(compositor): use the shared predicate for "is this a real camera"
- 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): say what injected input can never prove about the HUD
- docs(e2e): give a binary-string check that works on Windows
- docs(agents): name the thing that actually builds a capture helper
- docs(agents): the HUD click-through rule is macOS too, not Windows only
- docs(agents): point at the testing docs, which only linked one way
- docs(testing): log the 1.9.5-rc.1 Windows pass in the results table
- docs(testing): the manual tester is an agent, so say what not to drive it with
- docs(testing): give the editor sections their own reason not to inject
- docs(agents): orient an agent toward computer-use before it needs to know
- docs(agents): show the control search, not just require it
- docs(testing): log the rc.2 regression pass, and what nearly faked a bug
- 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): fix the grant ordering, and name apps the way the resolver does
- docs(testing): log the macOS rc.1 pass, and why a clean stop proves nothing
- docs(testing):...
v1.9.6
v1.9.6-rc.1
Changes since v1.9.5
- fix(store): give msstore a project to publish, not just a package
- fix(store): drop the write token from the Store job, and stop calling a dispatch a dry run
- ci(store): add a retry path for Store submission that rebuilds nothing
- ci(store): fix an empty expression, a silent skip, and an unchecked run id
- fix(store): the option is --inputDirectory, and it takes a directory
- ci(aur): say which key AUR refused, instead of just that it refused one
- ci(aur): stop overclaiming what the probe proves, bound it, pin the key
- fix(hud): give click-through a way out that Windows cannot revoke
- test(hud): make the click-through negative case able to fail
- docs(agents): the HUD lift is a cursor poll now, not a WH_MOUSE_LL hook
- docs(agents): the poll keys off the cursor RELATIVE to the window
Full Changelog: v1.9.5...v1.9.6-rc.1
v1.9.5
v1.9.5-rc.2
Changes since v1.9.5-rc.1
- fix(recording): open the recording a failed stop left playable
- fix(editor): import a recording once, so reopening keeps the project you saved
- docs(e2e): say what injected input can never prove about the HUD
- docs(e2e): give a binary-string check that works on Windows
- docs(agents): name the thing that actually builds a capture helper
- docs(agents): the HUD click-through rule is macOS too, not Windows only
- docs(agents): point at the testing docs, which only linked one way
- docs(testing): log the 1.9.5-rc.1 Windows pass in the results table
- docs(testing): the manual tester is an agent, so say what not to drive it with
- docs(testing): give the editor sections their own reason not to inject
- docs(agents): orient an agent toward computer-use before it needs to know
- docs(agents): show the control search, not just require it
- docs(testing): log the rc.2 regression pass, and what nearly faked a bug
- 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): fix the grant ordering, and name apps the way the resolver does
- docs(testing): log the macOS rc.1 pass, and why a clean stop proves nothing
- docs(testing): fold in the by-hand macOS repro, and correct the 'no error dialog' claim
- docs(testing): kill the last confound — audio off, no screenshots, same death
- docs(testing): point the macOS blocker at its fix
- docs(testing): downgrade four claims the evidence does not carry
- fix(recording): stop macOS fragments carrying an offset the box cannot hold
- fix(recording): separate the two writer-failure events, and quote the rate
Full Changelog: v1.9.5-rc.1...v1.9.5-rc.2
v1.9.5-rc.1
Changes since v1.9.2
- fix(linux): bundle libgomp in the AppImage, the one format that cannot declare it
- docs(build): fix a self-contradiction in the AppImage paragraph
- ci(store): submit the appx to the Microsoft Store from the release build
- fix(store): report the actual submission result, not the configuration
- fix(linux): declare the portal, and name the backend that implements it
- ci(winget): stop skipping the publish in silence
- docs(build): name the packages instead of counting them
- ci(winget): name the two gates that each cost a release to discover
- docs(dist): make the Microsoft Store the recommended Windows route
- docs(dist): describe the winget gate by its prerequisites, not its if
- docs(dist): stop calling the winget job switched off
- fix(win): ship the OpenMP runtime the ggml backends actually import
- fix(win): tell a directory from a file, and find Visual Studio where it is
- fix(wgc): add GPU DXGI path for Windows capture readback
- fix(wgc): make the GPU encode path degrade instead of failing
- fix(wgc): keep an encode off the frame lock, and name where it wedges
- fix(wgc): repair the four things the GPU path got wrong under review
- fix(wgc): build the bridge texture where a failure can still fall back
- fix(wgc): give the audio write its own breadcrumb instead of the video's
- fix(wgc): clear the breadcrumb by scope, not by remembering to
- 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
- style(diagnostic): wrap the two lines biome wanted wrapped
- fix(wgc): stop the adapter report dereferencing what DXGI did not give it
- fix(ci): start release notes from a tag that exists
- fix(ci): let each consumer decide what "no previous release" means
- fix(wgc): make the GPU encode path opt-in until it earns the default
- docs(recording): stop the paragraph contradicting itself on fallback
- fix(recording): write fragmented MP4 so a killed helper keeps its file
- fix(wgc): report adapter LUIDs, because the descriptions can be identical
- fix(wgc): tell "no outputs" apart from "outputs could not be read"
- ci(homebrew): stop reporting an unpublished cask as a green release
- feat(packaging): add the upstream AppStream metadata Flathub requires
- fix(ci): refuse a tap name brew cannot resolve
- docs(release): stop calling the notarized DMGs unsigned
- ci(flatpak): spike how far Flathub actually is
- fix(flatpak): point the spike at a repository that exists
- docs(agents): add development principles, slim release flow, correct branch contract
- docs(agents): address review feedback on the release-flow docs
- docs(release): make release-and-secrets.md the only release reference
- fix(docs-check): catch the retired branch naming in both spellings
- test(media): let callers await the registry's background path refresh
- fix(waveform): take ffmpeg's word when a recording has no audio track
- refactor(camera): one answer to "does this asset have a camera"
- fix(export): key the fallback webcam decoder by the file it actually opened
- fix(export): decide the webcam source, its cache key and the PiP together
- fix(wgc): make the Windows recorder DPI-aware and stop guessing its monitor
- fix(cursor): fail the sampler when DPI awareness cannot be set
- feat(build): let a developer package on a distro newer than the floor
- test(build): stop asserting the host ceiling clears the pinned floor
- fix(compositor): say when a declared camera is unreadable
- fix(compositor): use the shared predicate for "is this a real camera"
Full Changelog: v1.9.2...v1.9.5-rc.1