Repository navigation
Releases: getopenscreen/openscreen
Release list
v1.9.1
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
New Contributors
- @zebster-cmd made their first contribution in #293
- @Mundo-Dev0ps made their first contribution in #101
Full Changelog: v1.9.0...v1.9.1
v1.9.0
What's Changed
- feat: add Notes teleprompter mode by @My-Denia in #152
- ci(nix): fix the bump workflow's PR creation, and catch npmDepsHash drift by @EtienneLescot in #230
- fix(notes): make mirrored teleprompter content read-only by @My-Denia in #228
- feat(cli): headless record / export / info commands by @PeterTakahashi in #176
- fix(timeline): size pills and clips in px, not in fractions of the timeline by @EtienneLescot in #233
- chore(release): release v1.8.0 into main by @EtienneLescot in #245
- fix(build): name Etienne Lescot as the Windows publisher by @EtienneLescot in #246
- fix(timeline): carry rounded timecode seconds by @arhxam in #236
- fix(export): keep speed segments non-overlapping by @arhxam in #237
- fix(editor): cascade clip modifier deletion by @arhxam in #242
- fix(electron): drop the PID-file instance lock that could brick startup by @EtienneLescot in #247
- fix(media): require an executable when resolving ffmpeg by @EtienneLescot in #251
- fix(recording): record the window Linux users actually pick by @EtienneLescot in #250
- fix(ai): replace summarized chat history by @arhxam in #238
- fix(stt): verify cached model checksum by @arhxam in #239
- fix(projects): relink moved media from registry by @arhxam in #235
- fix(deps): patch dev toolchain vulnerabilities by @arhxam in #244
- fix(deps): upgrade electron-builder security patches by @arhxam in #243
- fix(ci): sign the macOS .app ad-hoc when no certificate is available by @EtienneLescot in #257
- fix(recording): stream the native webcam to disk instead of losing it by @EtienneLescot in #259
- test(recording): make the re-index suite run off Linux by @EtienneLescot in #260
- fix(ci): notarize release candidates like stable releases by @EtienneLescot in #262
- fix(build): declare all 13 supported locales in the AppX package by @EtienneLescot in #263
- ci(macos): reject a MAC_CSC_NAME that carries its certificate type by @EtienneLescot in #264
- fix(recording): stop the WGC helper from hanging on stop by @EtienneLescot in #254
- fix(layout): apply the webcam layout only to clips that have a camera by @EtienneLescot in #261
- fix(notes): keep the note stylesheet in the production bundle by @EtienneLescot in #276
- fix(hud): stop being born click-through, wait for the renderer to ask by @EtienneLescot in #279
New Contributors
- @PeterTakahashi made their first contribution in #176
- @arhxam made their first contribution in #236
Full Changelog: v1.8.0...v1.9.0
v1.9.0-rc.4
Changes since v1.9.0-rc.3
- fix(ai): stop compacting the chat on a context window we never measured
Full Changelog: v1.9.0-rc.3...v1.9.0-rc.4
v1.9.0-rc.3
Changes since v1.9.0-rc.2
- fix(notes): keep the note stylesheet in the production bundle
- 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(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
- 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
- fix(media): watch the background path refresh instead of firing it into the void
- test(media): inject the failed registry write instead of chmod-ing the temp dir
- 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
Full Changelog: v1.9.0-rc.2...v1.9.0-rc.3
v1.9.0-rc.2
Changes since v1.9.0-rc.1
- 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
Full Changelog: v1.9.0-rc.1...v1.9.0-rc.2
v1.9.0-rc.1
What's Changed
- feat: add Notes teleprompter mode by @My-Denia in #152
- ci(nix): fix the bump workflow's PR creation, and catch npmDepsHash drift by @EtienneLescot in #230
- fix(notes): make mirrored teleprompter content read-only by @My-Denia in #228
- feat(cli): headless record / export / info commands by @PeterTakahashi in #176
- fix(timeline): size pills and clips in px, not in fractions of the timeline by @EtienneLescot in #233
- chore(release): release v1.8.0 into main by @EtienneLescot in #245
- fix(build): name Etienne Lescot as the Windows publisher by @EtienneLescot in #246
- fix(timeline): carry rounded timecode seconds by @arhxam in #236
- fix(export): keep speed segments non-overlapping by @arhxam in #237
- fix(editor): cascade clip modifier deletion by @arhxam in #242
- fix(electron): drop the PID-file instance lock that could brick startup by @EtienneLescot in #247
- fix(media): require an executable when resolving ffmpeg by @EtienneLescot in #251
- fix(recording): record the window Linux users actually pick by @EtienneLescot in #250
- fix(ai): replace summarized chat history by @arhxam in #238
- fix(stt): verify cached model checksum by @arhxam in #239
- fix(projects): relink moved media from registry by @arhxam in #235
- fix(deps): patch dev toolchain vulnerabilities by @arhxam in #244
- fix(deps): upgrade electron-builder security patches by @arhxam in #243
New Contributors
- @PeterTakahashi made their first contribution in #176
- @arhxam made their first contribution in #236
Full Changelog: v1.8.0...v1.9.0-rc.1
v1.8.0
1.8.0 is two things: an optional AI editing layer, and a native rendering engine that takes export from ~8 fps to ~126 fps on the reference machine. Everything else follows from those. It ships on Windows, macOS and Linux.
🤖 The AI Edition — opt-in, off by default
A Descript-style editing layer that sits beside the recorder without changing it. If you never enable it, nothing downloads and no model is contacted.
- On-device transcription — whisper.cpp with DTW word timestamps, running locally. Nothing is uploaded; it works offline.
- Transcript-driven editing — edit video like a document. Select words, delete, and the span is cut from playback and export, through a skip-range model with per-asset regeneration.
- Captions as a derived layer — cues are a live view of the transcript, not generated text you then maintain. Restyle or regroup with no regeneration step.
- Edit by chat — a deepagents runtime with per-message rewind and manual compaction. The agent applies real, undoable timeline operations;
Ctrl/Cmd + Zcovers them exactly like manual edits. - Bring your own LLM key — provider and reasoning parity, model discovery, SSE streaming, context compaction. Keys live in your OS credential store, and requests go straight from your machine to the provider.
⚡ One native engine — and export an order of magnitude faster
The live preview and MP4 export now run on the same Rust compositor, replacing the browser-based pipeline 1.7.0 shipped:
demux → hardware decode → GPU composite → RGB→NV12 → hardware encode → MP4 mux
Every stage stays GPU-resident — there is no CPU readback between any two of them.
| Export path | fps @ 1080p60, full effects |
|---|---|
| Native compositor — 1.8.0 | ~126 |
| Browser pipeline — what 1.7.0 shipped | ~8 |
Measured end to end — demux, decode, composite, encode and mux inside a single timed window — on an AMD Ryzen 5 7520U with integrated Radeon graphics, deliberately chosen as the weak case. The effect set is not a reduced one: animated layout, zooms, rounded corners, SDF masks and drop shadows, dual-Kawase background blur, per-velocity motion blur, and a custom cursor with click bounce. Absolute fps drifts with this passive iGPU's thermal state, and the multiple will differ on your machine and your project; the order of magnitude does not.
Two changes compound to get there, and the second only became findable because of the first. The old Canvas2D compositor was rebuilt to cache by what invalidates a cache rather than by layer — worth roughly 2×, with byte-identical output, SSIM 1.000000 across all 1418 frames. That made the real bottleneck legible: the encoder was never the wall. On the same export, compositing was 79 % of the time and encoding 4.5 % — so the compositor is what got replaced.
Preview and export consume the same SceneDescription the app builds, so the frame you see in the editor is the frame the export writes — there is no second renderer that can drift.
Around that engine, export gained: an encoder picked from the host's hardware with a software fallback, multi-asset timelines through a segment loop, timeline speed applied per sub-segment, output sized from every clip's cropped footprint, and real native progress reported to the UI.
🖥️ Three backends behind one scene contract
Windows — Direct3D 11 and HLSL. The original backend: D3D11VA decode, HLSL composite, hardware encode.
macOS — Metal and VideoToolbox. All nine shader entry points ported to MSL, plus a CoreText/CoreGraphics text rasterizer. Layers, annotations, the cursor and its trail, the 3D tilt zoom and the dual-Kawase background blur are all drawn on Metal. VideoToolbox hardware decode and encode (h264_videotoolbox, with libopenh264 as fallback), multi-clip export, and audio muxed into the output.
Linux — WGSL. compositor_linux carries the background blur, image and wallpaper backgrounds, the webcam PiP, screen and camera shadows, the themed cursor sprite, tilted 3D zoom, and text annotations — plus arrows, blur/mosaic masks and images. Video export is software H.264 encode with MP4 mux and AAC audio.
A CPU backend for machines with no usable GPU. Software render and decode, selected automatically and surfaced in the UI so you know which path you are on. It reaches the export encoder like any other backend. D3D11 now fails legibly instead of silently degrading to WARP.
⚡ macOS export, 2.4× faster
Profiling the first working Metal export found the cost somewhere unexpected: 74 % of the wall time was decode, while the compositor itself ran at 0.2 ms/frame.
Measured on a 1920×1080@60 Constrained Baseline capture, decode only:
| Decoder | 240 frames | fps |
|---|---|---|
| VideoToolbox (hardware) | 1.11 s | 215 |
| libavcodec (software) | 0.08 s | 3000 |
The hardware decoder pays a fixed per-frame latency and allocates a CVPixelBuffer/IOSurface for each frame, while a Baseline profile decodes in a few hundred microseconds across cores that — unlike the decode block — are plural. End to end on the export that is 76 fps against 182 — 2.4× — even though the software path additionally pays swscale and a full memcpy into the IOSurface every frame.
So the decoder is now chosen by profile rather than by flipping a default: Baseline and Constrained Baseline (what OpenScreen's own capture produces, and what Chrome's MediaRecorder emits) decode in software; High, 10-bit, HEVC and 4K, where the arbitration reverses, keep VideoToolbox. OPENSCREEN_MAC_DECODE=software|videotoolbox overrides.
Two per-frame pipeline stalls went with it — compose_frame and render_nv12 each committed and immediately waited, draining the GPU before the CPU had anything to do — along with a full-resolution RGBA mirror blit the export never reads.
🎥 Native capture on Linux
Recording routes through the native helper: real video capture with a hardware H.264 encoder, system audio and microphone captured alongside it, and real cursor telemetry on Wayland via the ScreenCast portal. Linux captures are remuxed so they carry a real duration.
🎞️ Native GIF export
GIF is routed through the native exporter and the old pixi.js path is deleted — one rendering path for every output format.
⚡ Preview and timeline responsiveness
- Preview — a decoder pool, so scrubbing across a clip boundary no longer reopens decoders; a fast seek path that stops discarding decoder state; frames delivered without a copy; and a decoded-frame leak per scrub step fixed.
- Timeline — no more re-rendering the whole editor on every playhead frame, or the timeline on every mouse event during a scrub. Progress-bar drags coalesce into rAF.
- Schema migrations hoisted to load time.
✂️ OpenScreen Editor v4
Rebuilt around Media / Edit / Rec, and now the only editor — the pre-v4 shell is gone.
- Multi-clip timeline — clips, lanes, viewport, snapping guides and a redesigned ruler.
.openscreenproject files — non-destructive, so every edit stays re-editable.- Per-clip crop with exact ratios, real audio waveforms, a free speed field beyond 3x, gradients, the File menu and Full Camera.
- Screen and camera welded into one contain-fitted block, so the camera keeps its frame.
- The playhead and ruler reworked to the reference design, project rename in the v4 header, and a header that stops re-flowing on every state change.
And the rest
- Annotations — arrows, blur/mosaic masks, images and text, rendered in the native compositor so preview and export agree, and created or edited straight from the inspector.
- Zoom — 3D rotation presets, a global auto-focus toggle, steadier eases, and zoom focus that can follow the cursor.
- Chat and agent — the reasoning trace streams into the chat panel, the model receives the actual cursor trajectory instead of a detector's verdict, and the AI timeline wizard is scoped to cuts only.
- Microsoft Store (MSIX) packaging.
- Geist — the typeface the design system always specified — the transparent brand mark, and a seamless window titlebar.
- A Docusaurus documentation site, deployed to GitHub Pages.
Downloads
| Asset | For |
|---|---|
Openscreen.Setup.1.8.0.exe |
Windows |
Openscreen-macOS-Apple-Silicon-1.8.0.dmg |
macOS — Apple Silicon (M1, M2, M3, M4) |
Openscreen-macOS-Intel-1.8.0.dmg |
macOS — Intel |
Openscreen-Linux-1.8.0.AppImage |
Linux — portable, any distribution |
Openscreen-Linux-1.8.0.deb |
Linux — Debian, Ubuntu |
Openscreen-Linux-1.8.0.pacman |
Linux — Arch, Manjaro |
Not sure which Mac you have? menu → About This Mac → Chip. "Apple M1/M2/M3/M4" means Apple Silicon; "Intel Core" means Intel. The Intel build does launch on Apple Silicon, but it runs under Rosetta 2 — the compositor, the encoder and the transcription engine all get translated, and the app becomes slow enough to be unusable. Take the arm64 one.
Upgrade notes
- Project files migrate to schema v6 on open. The legacy
nativeaspect ratio is migrated using cropped dimensions. - The macOS builds are not signed or notarized. Gatekeeper will refuse the first launch: right-click the app → Open → Open, or clear the quarantine flag with
xattr -d com.apple.quarantine /Applications/Openscreen.app. - ChatGPT and GitHub Copilot are no longer available as LLM providers. Reaching a user's subscription meant shipping GitHub's and OpenAI's own client IDs against endpoints reserved for first-party clients. They will come back on the vendors' sanctioned surfaces — the Copilot SDK, and
codex app-server. Anthropic, OpenAI, Google, Mistral, OpenRouter, MiniMax and any OpenAI-compatible endpoint are unaffected.
Known gaps
- Linux MP4 export is software-encoded — correct output, but slower than the hardware paths on Windows and macOS.
- macOS and Linux rendering is new in this release. Pleas...
v1.8.0-rc.9
What's Changed
- fix(zoom): auto-placed zoom regions follow the cursor for their whole span by @EtienneLescot in #118
- fix(wgc): stop holding the frame mutex across blocking WriteSample calls by @EtienneLescot in #119
- fix(recording): round window-capture dimensions up to even for WGC by @EtienneLescot in #122
- fix(timeline): decouple playhead from ancestor re-renders so it tracks playback by @EtienneLescot in #120
- fix(recording): bound the video-writer frame wait as a hang safety net by @EtienneLescot in #123
- fix(export): mix all source audio tracks so the mic isn't dropped by @barnaclebarnes in #109
- docs(testing): add an RC end-to-end computer-use checklist by @EtienneLescot in #126
- fix(editor): fix annotation placeholder text and post-reload duration cap by @EtienneLescot in #127
- fix(overlay): stop the HUD drag from drifting away from the cursor by @EtienneLescot in #125
- chore(release): release v1.7.0 into main by @EtienneLescot in #134
- chore: temp workflow to fire the missed v1.7.0 Discord announce by @EtienneLescot in #137
- chore: remove one-off Discord-announce workflow by @EtienneLescot in #138
- feat(release): add Microsoft Store (MSIX) packaging by @EtienneLescot in #142
- feat: port du compositeur macOS/Linux, capture native, agent d'édition (rebase 1.8.0) by @EtienneLescot in #219
- fix(ci): restaurer les builds macOS et Linux sur main by @EtienneLescot in #220
- fix(macos): guard the DMG architecture, name installers Intel / Apple-Silicon, and stop the startup Keychain prompt by @EtienneLescot in #225
- fix(compositor): on Linux, the subtitle plate hugs the text by @EtienneLescot in #222
- fix(build): fall back to a mirror when ffmpeg.org refuses the runner by @EtienneLescot in #226
- fix(export): stop counting letterbox rows as an upscale by @EtienneLescot in #229
- fix(nix): make the v1.8.0 tag buildable by @EtienneLescot in #231
- fix(compositor): live preview holds the current frame instead of consuming one per tick by @eduumach in #227
- fix(stt): chunked transcription with progress, retry, and no 300s cliff by @EtienneLescot in #232
- fix(timeline): size pills and clips in px, not in fractions of the timeline by @EtienneLescot in #234
New Contributors
- @barnaclebarnes made their first contribution in #109
- @eduumach made their first contribution in #227
Full Changelog: v1.7.0...v1.8.0-rc.9
v1.8.0-rc.8
What's Changed
- fix(zoom): auto-placed zoom regions follow the cursor for their whole span by @EtienneLescot in #118
- fix(wgc): stop holding the frame mutex across blocking WriteSample calls by @EtienneLescot in #119
- fix(recording): round window-capture dimensions up to even for WGC by @EtienneLescot in #122
- fix(timeline): decouple playhead from ancestor re-renders so it tracks playback by @EtienneLescot in #120
- fix(recording): bound the video-writer frame wait as a hang safety net by @EtienneLescot in #123
- fix(export): mix all source audio tracks so the mic isn't dropped by @barnaclebarnes in #109
- docs(testing): add an RC end-to-end computer-use checklist by @EtienneLescot in #126
- fix(editor): fix annotation placeholder text and post-reload duration cap by @EtienneLescot in #127
- fix(overlay): stop the HUD drag from drifting away from the cursor by @EtienneLescot in #125
- chore(release): release v1.7.0 into main by @EtienneLescot in #134
- chore: temp workflow to fire the missed v1.7.0 Discord announce by @EtienneLescot in #137
- chore: remove one-off Discord-announce workflow by @EtienneLescot in #138
- feat(release): add Microsoft Store (MSIX) packaging by @EtienneLescot in #142
- feat: port du compositeur macOS/Linux, capture native, agent d'édition (rebase 1.8.0) by @EtienneLescot in #219
- fix(ci): restaurer les builds macOS et Linux sur main by @EtienneLescot in #220
- fix(macos): guard the DMG architecture, name installers Intel / Apple-Silicon, and stop the startup Keychain prompt by @EtienneLescot in #225
- fix(compositor): on Linux, the subtitle plate hugs the text by @EtienneLescot in #222
- fix(build): fall back to a mirror when ffmpeg.org refuses the runner by @EtienneLescot in #226
- fix(export): stop counting letterbox rows as an upscale by @EtienneLescot in #229
- fix(nix): make the v1.8.0 tag buildable by @EtienneLescot in #231
- fix(compositor): live preview holds the current frame instead of consuming one per tick by @eduumach in #227
- fix(stt): chunked transcription with progress, retry, and no 300s cliff by @EtienneLescot in #232
- fix(timeline): size pills and clips in px, not in fractions of the timeline by @EtienneLescot in #234
New Contributors
- @barnaclebarnes made their first contribution in #109
- @eduumach made their first contribution in #227
Full Changelog: v1.7.0...v1.8.0-rc.8
v1.8.0-rc.7
What's Changed
- fix(zoom): auto-placed zoom regions follow the cursor for their whole span by @EtienneLescot in #118
- fix(wgc): stop holding the frame mutex across blocking WriteSample calls by @EtienneLescot in #119
- fix(recording): round window-capture dimensions up to even for WGC by @EtienneLescot in #122
- fix(timeline): decouple playhead from ancestor re-renders so it tracks playback by @EtienneLescot in #120
- fix(recording): bound the video-writer frame wait as a hang safety net by @EtienneLescot in #123
- fix(export): mix all source audio tracks so the mic isn't dropped by @barnaclebarnes in #109
- docs(testing): add an RC end-to-end computer-use checklist by @EtienneLescot in #126
- fix(editor): fix annotation placeholder text and post-reload duration cap by @EtienneLescot in #127
- fix(overlay): stop the HUD drag from drifting away from the cursor by @EtienneLescot in #125
- chore(release): release v1.7.0 into main by @EtienneLescot in #134
- chore: temp workflow to fire the missed v1.7.0 Discord announce by @EtienneLescot in #137
- chore: remove one-off Discord-announce workflow by @EtienneLescot in #138
- feat(release): add Microsoft Store (MSIX) packaging by @EtienneLescot in #142
- feat: port du compositeur macOS/Linux, capture native, agent d'édition (rebase 1.8.0) by @EtienneLescot in #219
- fix(ci): restaurer les builds macOS et Linux sur main by @EtienneLescot in #220
- fix(macos): guard the DMG architecture, name installers Intel / Apple-Silicon, and stop the startup Keychain prompt by @EtienneLescot in #225
- fix(compositor): on Linux, the subtitle plate hugs the text by @EtienneLescot in #222
- fix(build): fall back to a mirror when ffmpeg.org refuses the runner by @EtienneLescot in #226
- fix(export): stop counting letterbox rows as an upscale by @EtienneLescot in #229
- fix(nix): make the v1.8.0 tag buildable by @EtienneLescot in #231
- fix(compositor): live preview holds the current frame instead of consuming one per tick by @eduumach in #227
- fix(stt): chunked transcription with progress, retry, and no 300s cliff by @EtienneLescot in #232
- fix(timeline): size pills and clips in px, not in fractions of the timeline by @EtienneLescot in #234
New Contributors
- @barnaclebarnes made their first contribution in #109
- @eduumach made their first contribution in #227
Full Changelog: v1.7.0...v1.8.0-rc.7