Releases: getopenscreen/openscreen
Release list
v1.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.
What's Changed
- docs(testing): say who runs the manual e2e pass, and that a slice counts by @EtienneLescot in #461
- fix(timeline): remove the dead Add Full Camera toolbar button by @EtienneLescot in #466
- fix(editor): remove the redundant top-bar settings button by @EtienneLescot in #465
- fix(editor): close the clip picker on an outside click by @EtienneLescot in #464
- fix(stt): offer every whisper.cpp language in the regenerate picker by @EtienneLescot in #468
- revert: remove the dead Add Full Camera toolbar button by @EtienneLescot in #473
- fix(editor): light theme contrast + gradient palette by @EtienneLescot in #470
- fix(editor): zoom/pan the whole timeline pane on scroll by @EtienneLescot in #467
- fix(captions): position presets you can click, sliders that reach the true edge by @EtienneLescot in #471
- fix(editor): timeline clip delete icon contrast in light theme by @EtienneLescot in #480
- fix(captions): place captions by anchor and margin, not by an invisible band by @EtienneLescot in #482
- docs(testing): log the v1.10.0-rc.3 Windows e2e run by @EtienneLescot in #485
- fix: initialise CoreGraphics before building a macOS window capture filter by @naadydev in #488
- fix(recording): use hardware H.264 on Windows by default by @EtienneLescot in #489
- fix(app,recording): Save Diagnostics UI + faster #460 shutdown by @EtienneLescot in #492
- chore(release): release v1.10.0 into main by @EtienneLescot in #495
- docs: publish minimum and recommended system requirements by @EtienneLescot in #496
- fix(website): match recreation generator's param name to amplitude by @EtienneLescot in #498
- fix(ci): don't let the docs refresh block Microsoft Store publishing by @EtienneLescot in #499
- chore: bump nix package to v1.10.0 by @EtienneLescot in #497
- fix(build): stop the Windows cargo env values from breaking Linux builds by @EtienneLescot in #516
- refactor(editor): delete the orphaned v3 left rail and media pane by @EtienneLescot in #479
- fix(capture): zero-copy dmabuf→VAAPI capture — fix whole-screen recording freeze on GNOME/AMD (#507) by @Beetix in #508
- feat(linux): capture mouse clicks on Wayland via evdev by @Beetix in #501
- fix(macos): make recording work on Monterey, and stop calling a dead helper a denied permission by @EtienneLescot in #527
- feat(webcam): add AI background cutout, blur, and custom wallpapers (#291) by @EtienneLescot in #493
- fix(compositor): bound the image texture cache, which never freed anything by @EtienneLescot in #537
- fix(webcam): ask the machine whether it can segment, instead of guessing by @EtienneLescot in #541
- perf(wallpapers): cap the bundled backgrounds at 3840px by @EtienneLescot in #542
- perf(audio): stretch speed regions through libavfilter atempo instead of WSOLA — fixes exports frozen at ~80% by @superkc2026 in #371
- fix(nix): unbreak
nix build, and let it run on the PRs that can break it by @EtienneLescot in #545 - fix(export): keep the progress bar honest and moving during the audio phase by @EtienneLescot in #546
- fix(preview): show the modifiers under a trim when the playhead is on it by @EtienneLescot in #553
- feat(website): add a development journal at /blog by @EtienneLescot in #563
- feat(website): route all Discord links through getopenscreen.com/discord by @EtienneLescot in #568
- perf(linux): convert to YUV on the GPU, halving the export readback by @EtienneLescot in #555
- chore: add FUNDING.yml by @EtienneLescot in #574
- perf(linux): take the export from 3.33x the floor to 1.17x, and onto the GPU by @EtienneLescot in #559
- fix(export): give the Linux encoder a keyframe interval and a chosen QP window by @EtienneLescot in #575
- fix(build): stop hiding the shared dependencies behind cfg(linux) by @EtienneLescot in #581
- chore(ffmpeg): say that the encoder list is reported, not verified by @EtienneLescot in #579
- refactor(export): drop send_rgba and the state that existed only for it (Linux) by @EtienneLescot in #580
- fix: reset themed cursor when sidecar type is null or omitted by @My-Denia in #566
- feat(update): add update settings and a background check by @My-Denia in #525
- feat(editor): persist and restore the editor window bounds by @My-Denia in #524
- feat(editor): crop at pixel resolution with a larger preview by @My-Denia in #523
- fix: snap illegal AAC sample rates to 48 kHz on Windows by @My-Denia in #565
- fix(stt): distinguish initializing from transcribing on every spinner by @My-Denia in #522
- perf(export): decode H.264 in software on the macOS export walk (1.82x floor -> 1.30x) by @EtienneLescot in #583
- fix(packaging): unblock the Windows build, and cover what landed after v1.10.0 by @EtienneLescot in #589
- docs(perf): record the macOS export measurements, including what failed by @EtienneLescot in #594
- docs(perf): capping the macOS decoder's threads is a loss, and why the fixture said otherwise by @EtienneLescot in #597
- ci(onnx): build ONNX Runtime for macOS with the floor the app declares by @EtienneLescot in #595
- ci(build): do not run the release matrix for internal v0.0.0-* tags by @EtienneLescot in #598
- fix(wgc): pull-based frame delivery to stop CopyResource wedging the stop path by @abduznik in #306
- fix(macos): serve ONNX Runtime from a build that respects the 13.0 floor by @EtienneLescot in #599
- docs(perf): settle the macOS export's 4 s cold start, and kill the asar lever by @EtienneLescot in #600
- fix(ci): read the runner image instead of interpolating an empty string by @EtienneLescot in #601
- feat(editor): imported audio, and transcript words you can correct, add and delete by @EtienneLescot in #569
- docs(e2e): checks for imported audio, voice-over and word insertion by @EtienneLescot in #603
- build: pin electron exactly, so packaging works without a second declaration by @EtienneLescot in #605
- fix(insertions): the deleted word stayed in the transcript by @EtienneLescot in #604
- fix(i18n): simplify transcript panel title across all locales by @EtienneLescot in #607
- fix(editor): reset all parameters on audio track pane reset by @EtienneLescot in #609
- fix(editor): polish UI layout, slider gauge, icons and captions panel by @EtienneLescot in #610
- fix(timeline): expand initial timeline height and dynamically adjust for stacked audio lanes by @EtienneLescot in #611
- fix(editor): keep the camera preset labels inside their button by @etiennele...
v1.11.0-rc.1
Changes since v1.10.0
- docs(testing): say who runs the manual e2e pass, and that a slice counts
- docs(testing): keep the promote gate at the whole file
- 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
- fix(stt): wire the language list into the picker that's actually live
- fix(stt): validate regenLang against the known code list
- Revert "fix(timeline): remove the dead Add Full Camera toolbar button"
- 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): zoom/pan the whole timeline pane on scroll, not just the lanes
- test(editor): cover Shift+wheel pan from the ruler too
- fix(captions): position presets you can click, sliders that reach the true edge
- docs(captions): describe the position-preset derivation, fix a drifted anchor
- fix(captions): pick the closest position preset, not the first one checked
- 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
- feat(captions): draw the anchor line and the column while the pane is open
- 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
- revert(captions): drop the preview guide, it had nothing left to explain
- fix(captions): default the insets to what actually sits well with the padding
- docs(testing): log the v1.10.0-rc.3 Windows e2e run
- docs(testing): correct the rc.3 row - pause works, the verdict was wrong
- docs(testing): correct the rc.3 row again - STT works, the message lies
- docs(testing): retract the Escape finding - the driver ate the key
- docs(testing): close the caption gap on the rc.3 row
- fix: initialise CoreGraphics before building a window capture filter
- docs: name the MP4 as the recording, not a sidecar, in the results row
- refactor(macos-capture): name the CoreGraphics init call, cross-reference the other one
- fix(recording): use hardware H.264 on Windows by default, not just when asked
- fix(app): reach Save Diagnostics from the menu and tray, not nowhere
- fix(app): address CodeRabbit review on the Save Diagnostics PR
- fix(recording): stop burning the step budget on a join that cannot succeed
- docs: publish minimum and recommended system requirements
- docs: address CodeRabbit review on the system requirements PR
- fix(website): match the recreation generator's param name to ClipWaveform's amplitude rename
- 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
- fix(build): require lib/ as well as include/ when picking an ffmpeg tree
- fix(build): accept a LIBCLANG_PATH that names a library file, and skip libclang-cpp
- fix(build): match clang-sys's exact libclang filename patterns
- fix(build): only accept a LIBCLANG_PATH entry that is a regular file
- refactor(editor): delete the orphaned v3 left rail and media pane
- docs(editor-shell): fix the stale ChatStripPanel mount line reference
- docs(schema): drop the stale SourceTranscriptModal note from the language table
- fix(editor): finish the v3 rail removal — dead CSS, stale refs, unused import
- docs(editor): stop citing the deleted Source Transcript modal
- feat(capture): negotiate tiled dmabuf and plumb the GPU descriptor (#507)
- feat(capture): add the dmabuf -> VAAPI importer module (#507)
- feat(capture): wire the dmabuf importer through to the encoder (#507)
- fix(capture): make the dmabuf VAAPI import work on radeonsi (#507)
- feat(capture): auto-enable dmabuf import with shm fallback (#507)
- feat(capture): crop window captures on the GPU in the VPP (#507)
- fix(capture): address CodeRabbit review on #508
- fix(capture): invalidate held dmabuf buffers on remove (CodeRabbit #508)
- fix(capture): generation-tag held dmabuf buffers against slot reuse (CodeRabbit #508)
- fix(capture): null-check hw buffer inputs, add libglvnd to the rpath
- fix(capture): gate the dmabuf offer on the forced encoder, and allow a render-node override
- fix(capture): panic-safety, stale hw surface, and a non-fatal dmabuf drop
- refactor(capture): dedupe DmabufPlane, cover the fourcc map, fix a vendor comment
- fix(capture): decline an untracked dmabuf buffer instead of leaking it
- fix(capture): own the dmabuf plane fds so a destroyed buffer can't corrupt an import
- fix(capture): fail loudly when dmabuf import never works, not silently empty
- feat(linux): capture mouse clicks on Wayland via evdev
- fix(linux): gate evdev readers on cursor mode, and document the input group
- fix(cursor): enable click-bounce effect on Linux now that evdev captures clicks
- fix(linux): ignore clicks until the stream is live, dropping the portal "Share" press
- docs(linux): note that touchpad tap-to-click is not captured
- fix(linux): harden the evdev click reader (EINTR, hotplug, device loss, double-click)
- fix(linux): address CodeRabbit re-review of the click-capture path
- fix(macos): drop the native deployment floor to macOS 12
- fix(recording): stop reporting an unrunnable helper as a denied permission
- test(macos): pin the helper-unavailable taxonomy and the deployment floor
- fix(recording): address CodeRabbit review on #527
- fix(macos): declare macOS 13 as the floor instead of accommodating 12
- test(macos): stop the app-floor parser being fooled by prose
- refactor(scripts): give the app-floor parser one home
- fix(build): pin the macOS deployment target for ffmpeg and whisper
- feat(build): refuse to pack a macOS binary built above the supported floor
- fix(build): retarget the macOS floor to 13, matching the declared support
- test(build): read the declared floor through the shared parser
- fix(build): stop the floor guard advising a version it would reject
- docs(linux): align the two guides on what Linux actually captures
- feat(webcam): add AI background cutout, blur, and custom wallpapers (#291)
- fix(ci): update npmDepsHash in nix package and fix TypeScript types in ExportDialog and webcamSegmentation
- fix(nix): update npmDepsHash to match package-lock.json
- fix(webcam): address the review findings on the AI background PR
- docs(webcam): record where segmentation stands and what has to be measured
- docs(webcam): the workload is overhead-bound, so quantisation is the wrong lever
- docs(webcam): E0 falsifies the overhead-bound reading — it is bandwidth-bound
- docs(webcam): round 3 brief — settle the execution provider
- docs(webcam): settle on the CPU execution provider
- feat(webcam): composite the segmentation mask in the shader
- feat(webcam): vendor the ONNX segmentation model and its conversion script
- feat(webcam): load the segmentation model and produce the mask
- feat(webcam): extract the webcam frame and drive inference at 30 Hz
- feat(webcam): drive segmentation from compose_frame
- feat(webcam): start segmentation from the scene, and prove it on the bench
- feat(webcam): port the mask composite to Metal and WGSL
- feat(webcam): move segmentation into the compositor and delete the renderer path
- fix(webcam): hide the background control where it cannot work
- fix(webcam): a missing ONNX Runtime must not take the render thread down
- docs(webcam): brief for porting segmentation to a compositor back-end
- docs(webcam): add the per-back-end specifics to the port brief
- feat(webcam): port segmentation to the Metal back-end
- test(webcam): a visual harness for the mask, and what it cost to run
- build(webcam): stage ONNX Runtime, so the segmentation effect can actually run
- feat(webcam): port segmentation to the Linux compositor back-end
- build(webcam): ship ONNX Runtime on Linux, now that its back-end can use it
- fix(webcam): the three blockers that left the camera background non-functional
- fix(webcam): make the exported mask reproducible
- docs(webcam): close out the review threads on the measurement record
- fix(compositor): bound the image texture cache, which never freed anything
- fix(compositor): the frame marker protected one entry too many
- fix(webcam): ask the machine whether it can segment, instead of guessing
- fix(build): the ONNX requirement must not apply to Intel Macs
- perf(wallpapers): cap the bundled backgrounds at 3840px
- perf(audio): stretch speed regions through libavfilter atempo instead of WSOLA
- fix(audio): guard the decode and WSOLA loops against pathological stalls
- fix(review): address CodeRabbit findings on the atempo PR
- fix(review): address OpenScreen#371 blocking review (EtienneLescot)
- fix(packaging): CodeRabbit follow-up on #371 — require all six ffmpeg libs, guard --sdk-only
- fix(nix): stage and rename libavfilter for the compositor addon
- docs: describe the atempo stretch path and the six-library ffmpeg set
- perf(audio): make the atempo stretch land on the target without a hole
- fix(nix): refresh npmDepsHash, and format the new packaging test
- fix(audio): cap the atempo chain instead of stacking stages without a bound
- fix(nix): unbreak
nix build, and let it run on the PRs that can break it - fix(nix): trigger on this workflow's own edits, and narrow an overclaim
- ci(nix): prove the addon by exporting a synthesised clip, not by recording
- fix(export): keep the progress bar honest and moving during the audio phase
- fix(export): join the audio jobs on the error path, and state their real bound
- fix(preview): show the modifiers under a tri...
ONNX Runtime 1.27.1, macOS arm64 (internal)
Not a product release. A place to host one build dependency on a permanent public URL, the same way v0.0.0-stt-models hosts the Whisper model. v0.0.0-* tags are excluded from build.yml's release matrix and this is marked as a prerelease, so no package-manager workflow acts on it.
What this is
libonnxruntime 1.27.1 for macOS arm64, built from source with the deployment target pinned to the floor the app declares.
Microsoft's own onnxruntime-osx-arm64-1.27.1.tgz is built for macOS 14, while electron-builder.json5 declares minimumSystemVersion: "13.0" and scripts/before-pack.cjs refuses any binary demanding more than the floor — so npm run build:mac could not package at all. No published release satisfies a 13.0 floor: every one from 1.24 on is minos 14.0, and every one before it is at least 13.3.
Provenance
| built by | build-onnxruntime-macos.yml, run 33881629679 from main |
| source | microsoft/onnxruntime@df2ba1cf8108aa63627cf4cdf8f807880b938616 (the commit v1.27.1 names) |
| sha256 | b8b7e62786eea42fc867bdbc2d3f573655a4b0e602c6938c4cea151a9ef71623 |
| deployment target | minos 13.0, verified by the workflow |
| architecture | arm64 |
Provenance is attested and verifiable:
gh attestation verify onnxruntime-osx-arm64-1.27.1.tgz --repo getopenscreen/openscreenWhat it does not contain
The CoreML execution provider, which is why it is ~22 MB rather than upstream's ~37 MB. segmentation.rs builds its session with no explicit provider — the CPU EP — which technical-documentation/engineering/webcam-segmentation.md records as a measured decision.
Rebuilding
Re-running the workflow does not reproduce these bytes: paths, timestamps and the runner's compiler version all move. Pin this artifact by digest; do not rebuild expecting a match.
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