If OpenScreen saves you time, a star on the repo helps others find it. Full Changelog: https://github.com/getopenscreen/openscreen/compare/v2.2.1...v2.2.2
If OpenScreen saves you time, a star on the repo helps others find it. Full Changelog: https://github.com/getopenscreen/openscreen/compare/v2.2.1...v2.2.2
If OpenScreen saves you time, a star on the repo helps others find it.
ci: retry validating the stapled macOS DMG when Apple drops the connection by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1433
fix: pick the YCbCr matrix per frame on macOS by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1421
docs: e2e results on main before the next prerelease by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1434
fix(export): bound a clip by the container duration, not a one-frame video stream by @dropafterfree in https://github.com/getopenscreen/openscreen/pull/1418
fix: ship app-update.yml in the macOS app so it can update itself by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1432
fix(updater): install Windows updates silently so only UAC shows by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1439
fix(hud): accept the system language prompt on Enter by @My-Denia in https://github.com/getopenscreen/openscreen/pull/1442
fix(speed): accept a trailing × or x in the custom speed field by @ITx-prash in https://github.com/getopenscreen/openscreen/pull/1444
fix(updates): let a release candidate's manual check see newer RCs by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1448
fix(compositor): share one wgpu device across the Linux unit tests by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1451
fix(linux): keep the user's --enable/--disable-features on Wayland by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1453
fix(export): tag the MP4's colour matrix, primaries, transfer and range by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1460
docs(website): target Screen Studio 4 on the Screen Studio alternative page by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1464
fix(updater): keep OpenScreen running when UAC is declined by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1463
chore(release): release v2.2.0 into main by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1466
fix(cli): keep render settings when exporting a v2 project by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1469
test(cli): guard the v2 loader keeping render settings by @EtienneLescot in https://github.com/getopenscreen/openscreen/pull/1470
@dropafterfree made their first contribution in https://github.com/getopenscreen/openscreen/pull/1418
@ITx-prash made their first contribution in https://github.com/getopenscreen/openscreen/pull/1444
Full Changelog: https://github.com/getopenscreen/openscreen/compare/v2.2.0...v2.2.1
Répond à 3 idées
OpenScreen 2.2 brings layout changes to the timeline, separate tracks for overlapping annotations, and an update button that puts you in control of installation. This release also improves recording, playback, audio timing and export across Windows, macOS and Linux.
The new Layouts track lets you switch between picture-in-picture, side-by-side, top/bottom, camera-only and screen-only arrangements as your video plays. Place a change at the playhead, move its boundary to adjust the timing, and let the screen and camera transition smoothly into their next positions.
Layout edits support undo/redo and the AI/MCP tools. Existing Full Camera sections migrate to camera-only layouts while preserving their original easing. #1404
Annotations that overlap now have their own timeline rows. You can select, move, resize or delete each annotation, even when their timing is identical. Drag vertically to change the stacking order, or horizontally to change when an annotation appears; timing and layer changes undo together. #1243

The chat composer now has a Stop control for a running agent turn. Completed edits and the partial reply are retained, and you can continue with another message. A whole turn produces one undo step, including turns that make many edits. #1368
The CLI and MCP tools can now export the full project mix or one imported audio track to WAV or M4A, preserving its placement, trims, gain, fades and speed changes. Useful for taking narration into another audio editor or reusing a finished mix. #1383
Custom shader effects also gain footage(p): access to the recording at its source resolution, so a loupe or close-up can retain detail that has been scaled down in the composed picture. #1396
Self-updating builds check and download new versions in the background, then show a blue update button in the recording bar and editor. Installation starts on your click; an ordinary quit keeps the current version. MCP-only sessions can tell you that a newer release is available and direct you to the app. #1425
On Windows, declining the administrator prompt now keeps OpenScreen open and usable. Accepting it completes the update and restarts the app. Store and Nix installations continue to use their package manager. #1463
Windows screen capture: added a DXGI Desktop Duplication fallback, including recovery, adapter selection, rotation, resizing and correctly sized cursors. #1254
macOS webcam: restored continuous webcam recordings and kept VP8 for recordings at 1080p or below. #1297
macOS screen picker: reset Apple's picker for each request and ignore stale or unrequested selections. #1370
macOS audio: start system-audio capture after the microphone and handle blocked sample queues without treating a temporary stall as a silent source or keeping a dead source alive. #1374, #1412, #1414
Cursor placement: align macOS pointer samples with captured content and selected-window bounds; preserve visibility when capture bounds are rebased. #1306
Cursor motion: land the flat cursor on clicks more accurately, reduce default smoothing, and handle short gaps between a click hold and the next movement. Changes
Linux: start KDE window captures on their first frame, bound window-crop waits by elapsed time, and ignore a second Record press while the portal picker is open. #1351, #1353, #1413
Linux cursor/webcam: keep cursor telemetry aligned across pauses, fall back to metadata cursors when embedded cursors are unavailable, and attach the webcam using the stored cursor mode. #1275, #1363
Linux configuration: preserve user-supplied Wayland feature flags and support Mesa's RADV_EXPERIMENTAL Vulkan encode path. Changes, #1349
Restart playback from the beginning after reaching the end, preserve play/pause intent, and isolate seeks between different sources. #1400
Record voiceovers against the uncut source timeline so they remain aligned through trimmed sections. #1236
Play imported audio continuously across its timeline region so speed changes keep it on the correct clock; stop a voiceover piece where the next one begins. #1355, #1362
Preserve timeline sizing when annotation tracks reach the panel's height limit. #1243
Preserve zoom framing and rounded camera corners across layout transitions, including migrated Full Camera sections. #1404
Offer 3D Orbit only when the recording has cursor data. #1399
Accept custom speed values with a trailing x or ×, such as 1.5x and 1.25×. Changes
Accept the suggested system language with Enter and improve Japanese tooltips. Language prompt, #1375
Correct macOS rendering of 10-bit HEVC/iPhone footage and full-range VideoToolbox frames; choose the colour-conversion matrix from each frame, with correct 10-bit bounds. #1408, colour follow-up
Tag exported MP4s with their colour matrix, primaries, transfer function and range. #1460
Export clips from mostly static recordings using the container duration and hold their available screen frame when the clip begins later. Preserve first-frame holds for offset sources. Static-recording fixes, frame hold
Detect unreadable screen/camera starts, large video gaps and empty output; keep recovery bounded to normal video tails and inspect only the requested clips. #1377, #1379
Validate a staged MP4 before replacing the destination, and show localized validation errors. Destination validation, #1387
Improve macOS 8-bit H.264 preview decoding and shared-texture reuse. #1384, #1373
Improve Linux VA-API export compatibility, restricting the extra VPP copy to Intel iHD; configure VA-API driver paths in Nix packages. #1200, #1367
Read Whisper model paths as UTF-8 on Windows and download transcription models through Chromium's network stack. #1407, #1332
Allow MCP addZoom calls to supply customScale without depth; report recording-start failure when the requested camera cannot be opened. #1356, #1371
Package the OpenScreen demo workflow for Claude Code and Codex, with installation guides for Claude Code, Codex and ChatGPT. Plugin and setup guide
Find Microsoft Store installations when setting up the plugin, provide an openscreen execution alias for Store packages, and guide users when the installed app lacks the required MCP tools. #1354
Correct active-install counting for MCP-only sessions and publish clearer documentation about AI-provider data and exported-media sharing. Usage-count fix, Privacy policy
Keep Windows interactive when elevation is declined; prevent overlapping update attempts and recheck recording/editor readiness before handing control to the installer. #1463
Simplify the supported machine-wide Windows update path to the administrator prompt; retain the installer wizard when install scope is ambiguous or cannot be established. #1439
Include the correct updater configuration in macOS bundles, including object-form and platform-specific publish settings. macOS updater fix
Let manual checks from release candidates discover newer candidates. Changes
Improve release-version synchronization, Nix hash handling, Intel Mac test coverage and resilience to transient Apple stapling/validation failures. The complete maintenance, test and documentation history is included below.
The closed v2.2.0 milestone contains these 14 user reports and tracking issues:
The Layouts track replaces the Full Camera lane. Existing sections migrate with their camera envelopes and easing; saved projects use project schema v9.
Automation can use addLayoutChange, setLayoutPreset and moveLayoutBoundary. Legacy camera executors remain compatibility aliases.
After a Windows update, OpenScreen returns to the recording bar (HUD). Saved projects remain available through Open Studio.
These notes describe the promoted RC5 source. Recording/edit/export/persistence smoke checks ran on Windows, Apple Silicon macOS and Ubuntu; Windows UAC refusal and acceptance were verified on the final candidate. Validation used a targeted scope with documented gaps.
Legacy v2 project exports through the CLI: some 3D-cursor, click-effect, webcam and master audio-gain settings can fall back to their defaults when loading the older { version, media, editor } format. This has been reported on v2.2.0 and remains open; the issue includes a comparison with a document-format project. #1467
Other open reports and feature requests remain tracked in GitHub issues.
OpenScreen is free and open source. Thanks to everyone who contributed code, translations, bug reports and release testing.
Compare all changes from v2.1.2 to v2.2.0.
<details> <summary>Every commit in the release range (192 entries)</summary>
This chronological source history includes fixes, features, tests, documentation, packaging, release bookkeeping and intermediate implementation steps. Release branches also carry forward changes previously shipped in 2.1.x; the highlights above describe the resulting changes from v2.1.2.
fix(preview): advance the camera while a screen frame is held — f85f66251
fix(timeline): copy a whole pill, not the fragment clicked — bb754945c
docs(testing): compare 2.0.0 and main performance on Windows — e92a7527d
docs(testing): add the 60 Hz pass to the 2.0.0 against main comparison — 88be6faac
docs(testing): bisect the startup slowdown, retract the editor-open one — 30b268726
docs(testing): say which bisection runs overlapped another session's A/B — 4a3062d7b
docs(testing): the 60 Hz steps back come from slot reuse, not from main — 298422327
fix(perf-ab): address the review of the bench scripts — 9f9dd6b7c
fix(compositor): read the macOS preview back through Managed textures on Intel Macs — 7c9b215cb
ci: run the compositor tests on an Intel Mac runner — d530c2e5d
docs(testing): log the targeted Windows pass of v2.1.0-rc.2 build run 38868631147 — a9384dcc3
docs(testing): note the perf bench ran during the rc.2 smoothness measure — 0efceb9f5
fix(preview): give a shared frame's slot back 40 ms after Chromium lets go — c5d3dcde2
fix(preview): eight ring slots, and a slow display's two frames as the hold floor — 099d54027
test(compositor): the stale-ready test holds every slot but the last, whatever the ring size — 0bbc8cc4e
docs(testing): log the Windows diff pass of v2.1.0-rc.3 build run 38878886935 — b57864005
fix(ai): rewind a chat message from the view it was sent in — 57b746d86
fix(ai): point an open rewind confirmation at the stored message id — 405852bde
docs(testing): log the Linux pass of v2.1.0-rc.3 — f37cbbbb8
docs(testing): log the macOS pass of v2.1.0-rc.3 — bb4660b11
fix(compositor): no Full Camera trail on a clip's first frame when its start is inexact in f32 — bbbf8da2c
docs(testing): log the Windows rewind check of v2.1.0-rc.4 build run 38948496658 — 763cfedc3
fix(preview): restart the playback clock at the requested time on a held frame — a3a632be9
fix(preview): recompose a paused frame at the time it was shown at — 13631421c
docs(testing): log the Windows pass of v2.1.0-rc.5 build run 39003658928 — e76ff2c82
docs(testing): log the macOS pass of v2.1.0-rc.5 — baf12faca
docs(testing): log the Linux pass of v2.1.0-rc.5 — f2b4edc2f
fix(export): no Full Camera trail at a cut whose chunk start rounds up — a90ae5fb3
test(timeline): assert a cut-edge piece bound equals the cut in f32 — abe64d566
docs(blog): Off-Menu video editing, the agent writes the functions the editor lacks — ccefc92c1
docs(blog): describe both figures in their alt text — 2b8314813
docs(testing): log the Windows pass of v2.1.0-rc.6 build run 39010637863 — bcb1f8525
docs(testing): name where the rc.6 version was read — eaf427c62
docs(testing): log the macOS pass of v2.1.0-rc.6 — 50febd022
docs(testing): log the Linux pass of v2.1.0-rc.6 — a16c7826e
build(store): give the MSIX an openscreen execution alias — 5ea72a298
docs: register the MCP server with a placeholder executable, not the macOS path — 095332269
docs(website): align the site with OpenScreen 2.1.0 — d65bfecd5
docs(website): list the transcription models and the legacy font fetch, not annotation fonts — 2505ab7a8
chore(release): release v2.1.0 into main — e4039ae50
fix(compositor): tilt the whole card under a filled format — 58fdafe13
docs(testing): log the Windows and Linux pass of the filled-card tilt fix — 6adba77f4
docs(testing): log the macOS and Linux GPU pass of the filled-card tilt fix — d5d7523de
fix(compositor): keep blur masks and motion blur right on a tilted filled card — 124f62247
feat(website): a home page section for coding agents — 422a5cc79
fix(website): no Copy error without a clipboard, and announce Copied — 6cdafcbb3
chore(release): release v2.1.1 into main — 3a8bc5ca2
docs(testing): log the v2.1.1-rc.1 pass on Windows, macOS and Linux — 1d729ca90
docs(website): name the product category in the homepage H1 — bfaa716b0
docs(website): keep the slogan as headline, category as h1 kicker — fdeb4372e
chore: add glama.json so the org can claim its Glama MCP listing — 9991ca7d0
ci(release): sync only the version into main at promote — 7d3747e98
ci(release): never set main back, and say the sync is incomplete — 91a8b8ca3
feat(website): offer the Windows ARM64 installer on /download/ — 476aeb827
fix(cursor): land the flat cursor on each click, and smooth less by default — 836d06967
fix(cursor): share a short gap between a click's hold and the next approach — d79ff7d86
feat: package the openscreen-demo skill as a Claude Code plugin — b0c0dfac8
docs(plugin): say when the exported video leaves the machine — 88b65f374
feat(plugin): add the app icon for the Claude directory listing — 3fef4630a
docs(website): publish a privacy policy — 9be4686c2
docs(website): say in the privacy policy's opening that AI features send project data — e2cbe899d
feat(plugin): add the Codex manifest for OpenAI's plugin directory — 2c2336018
docs: put the one-sentence demo prompt first in the README and the home hero — fc1ffeb81
docs: make the demo prompt work in any coding agent — bdeb38ab6
docs: keep the badge's paste instruction on screen for 4 s — 269c34c00
docs: say AI agent, not coding agent, around the demo prompt — 4f02aa342
docs: send the badge's no-clipboard fallback to the docs that show its prompt — e9c5ed99f
fix: count installs driven through openscreen mcp as active — 095955b92
docs: say openscreen mcp sends the daily count on the privacy page — 432e8364c
docs: log the v2.1.2-rc.1 MCP smoke on Windows, macOS and Linux — f345e391d
chore(release): release v2.1.2 into main — 532ee6c6a
ci(release): read stdin without readFileSync(0) in the promote scripts — 00f332b62
docs(website): add an "Edit videos with Claude" feature page — 721a860b1
docs(website): use the agent-neutral skill install on the Claude page — a8eebd9de
fix(linux): start a KDE window recording on its first frame — 6cd855aa6
fix(capture-linux): support RADV_EXPERIMENTAL for Mesa 24.1+ Vulkan encode — 3620cf806
docs(ai-editing): install the OpenScreen plugin in Claude Code, Codex and ChatGPT — 07c332c1c
docs(ai-editing): add the marketplace before installing the plugin in Claude Code — 399fc948c
fix(linux): compact cursor telemetry across pauses — 3957984ee
fix(stt): download models through Chromium's network stack — 3c9bd5db0
fix(mcp): let addZoom take customScale without depth — 1e9171096
fix(plugin): find a Store install and hand over when the MCP tools are missing — d8bf2d813
docs: prevent incorrect assumptions about CI coverage — 3066a50ce
docs: distinguish capture core tests from helper builds — 7e2dc0267
docs: point contributors to the native GIF export path — f8d89a6f8
fix(linux): copy the export dmabuf through scale_vaapi before h264_vaapi — 3278fb44e
fix(linux): take the VPP copy only on Intel iHD — 1eba1d97b
docs(effects): recipe for lifting real UI blocks out of the recording — e522e3e8f
docs(effects): convert rects for screen and window takes, require an editable cursor — 3a51ffd56
fix(linux): fall back to metadata cursor when the portal lacks embedded — cf47b2df6
fix(linux): attach the webcam with the cursor mode main stored — b664d491c
fix(export): stop a voiceover piece where the next one starts — 0b8b4065c
fix(cli): fail a camera take when the camera cannot be opened — 8c19db83a
fix(audio): play a track once across its pill, so speed regions keep it on the clock — f34971a8a
fix(nix): configure VA-API driver paths for hardware acceleration — 58cee528c
feat: add stacked timeline tracks for annotations — 633c6a9e6
fix: preserve timeline base height when resizing capped tracks — 264975d8f
fix(i18n): polish Japanese tooltips — f63ffb1c6
fix(preview): rotate shared-texture slots so a just-released one is rewritten last — 645622827
fix(export): reject unreadable camera clips and empty output — 3b4863147
fix(export): bound clip-start recovery to normal video tails — c9b723ae0
docs: record desktop export follow-up and timing limits — 035375743
fix(export): validate staged MP4 before replacing destination — 1efff3da5
fix(export): stop frame inspection before unrequested clips — 79c3aa244
fix(export): reject clip starts across large video gaps — 1f38eddd3
fix(export): preserve first-frame hold for offset sources — f09670cbb
fix(audio): start the macOS system-audio tap after the microphone — da6496e41
feat: add Stop control for agent turns — 6d1f6bcb1
fix: preserve one undo step per agent turn — 7632d5c93
fix: update agent undo docs and keep Stop tooltip accessible — d8e573da3
feat(mcp): export a project's audio, or one track alone, to WAV or M4A — 7921b6de2
fix(cli): clean up an audio export's render without --out, and name the track id audioId takes — 729a91727
test(export): clean temporary outputs on assertion failure — d68bb2032
docs(test): describe temporary directory ownership and cleanup — d433e7ce8
fix(mac): reset Apple's picker before each presentation and ignore unrequested picks — fed3a4574
perf(preview): decode 8-bit H.264 in software on macOS — 6388ae77f
fix: localize native export validation errors — 6e09c9d18
fix(editor): record voiceovers against the uncut timeline (#1195) — 2159f42ca
feat(effects): footage() reads the recording at its own resolution — c85e3c776
fix(editor): offer 3D Orbit only with a recorded cursor — 007714507
fix: align macOS mouse pointer with captured content — e6ec9c2ed
fix: rebase cursor samples on capture bounds, use window bounds for picked windows — 14c0b4793
fix: recompute cursor visibility when rebasing on capture bounds — 5bb1b3fb5
fix(linux): bound the window crop wait by time, not by frame count — 0abf010c0
docs: simplify the roadmap around planned work — 9dac6f953
docs: remove resolved work from the roadmap — 27d9be27b
feat: add timeline layout changes with smooth transitions — 46bcb0c9d
fix: address timeline layout review feedback — 164cc1563
test: verify shared layout contracts over MCP — 3bd8f6414
fix: guard layout edits outside clip passages — 51d607078
docs: clarify removed modifier identifiers — d14249970
fix: preserve layout zoom framing and camera roundness — 06bd7f2e7
fix: keep macOS webcam recordings continuous with VP8 — 93a1e2bd4
fix: keep VP8 for macOS webcams at 1080p or below — b9f9d853f
fix(audio): don't read a blocked sample queue as silent sources on macOS — daf23f7a5
fix(linux): ignore a second record press while the portal picker is up — 1b861830c
test: assert the prepared recording id reaches the start request — 243ac2782
fix(audio): keep a sluggish queue from holding a dead source inside the grace — 549f13da0
fix(audio): credit all but one ticker period of a queue stall — d12d0071c
fix(captions): read whisper-stt paths as UTF-8 on Windows — 079ee05ce
fix(editor): restart playback from the timeline beginning when ended — 4f064c5b1
fix(editor): preserve playback intent and isolate cross-source seeks — b87772477
fix(win): add a DXGI Desktop Duplication fallback for screen capture — db6c9bfcf
fix(win): harden the DXGI fallback (reacquire, adapter, cursor, rotation, resize) — e7cc7f474
fix(win): draw the DXGI cursor at its real size — 1b8d3f527
fix(compositor): read 10-bit VideoToolbox frames as 16-bit planes on macOS — c8914fbd0
fix(compositor): convert full-range VideoToolbox frames with full-range BT.709 on macOS — 76894bc66
docs: fix the documented ffmpeg command in the HEVC test — 9e7faac97
test(compositor): check the P010 and full-range views without a media file — 5d82a0cb2
feat(update): check in the background, show an update button, install on quit — 4c10aab08
feat(mcp): tell the agent when a newer OpenScreen is out — 201d52950
docs(testing): an end-to-end pass for updating in place — d9d2b5d94
refactor(update): one update flow, installed only by a click — fa728ae66
fix(update): address review on the update button and the MCP notice — 520a5f091
test(mcp): check openscreen mcp forwards the update notice — af4280322
test(mcp): a Store install gets no update notice — c79554efa
test(mcp): use the real channel rule, and a stale cache in the Store case — 1ee4043f3
ci: install Rust before the macOS compositor build in build.yml — 09ed9a231
ci: retry stapling the macOS DMG when Apple drops the connection — 8c45bcf42
ci: don't sleep after the last staple attempt — f3db06877
chore(release): bump to 2.2.0-rc.1 [skip ci] — d9baa3f96
ci: retry validating the stapled macOS DMG when Apple drops the connection — e4b50518e
fix(mac): write app-update.yml into the .app so it can update itself — cc96d234c
fix(mac): accept an object-form publish config in afterPack — 4fbca3d6f
fix(mac): prefer mac.publish when writing app-update.yml — c6f69f2bf
test(mac): pin the first mac.publish entry — b201ad214
fix(updater): install Windows updates silently so only UAC shows — b24f721f2
fix(updater): keep the wizard when a per-user and a per-machine install coexist — e040cb0c9
fix(updater): keep the wizard when reg cannot answer, and test the dual-install handoff — 5dc8a1850
chore(release): bump to 2.2.0-rc.2 [skip ci] — c8e4598a2
fix(compositor): pick the YCbCr matrix per frame on macOS — 2bdee374f
fix(compositor): leave BT.2020 CL on the default path, convert 10-bit samples with 10-bit bounds — c80e64802
fix(export): bound a clip by the container duration, not a one-frame video stream — 953a9d6a0
fix(export): hold the only screen frame when a clip starts after it — 54017faad
fix(hud): accept the system language prompt on Enter — decaee747
fix(speed): accept a trailing × or x in the custom speed field — f35c5b802
fix(updates): let a release candidate's manual check see newer RCs — 9a66b0e56
fix(compositor): share one wgpu device across the Linux unit tests — c924db313
fix(linux): keep the user's --enable/--disable-features on Wayland — 4ba1b33e3
chore(release): bump to 2.2.0-rc.3 [skip ci] — b8b807f4d
fix(export): tag the MP4's colour matrix, primaries, transfer and range — 504a45166
chore(release): bump to 2.2.0-rc.4 [skip ci] — ab00a373f
fix(updater): retain the app when Windows elevation is declined — 1cc923d76
fix(updater): wait for the PowerShell elevation result — ee0893b74
fix(updater): await the bundled elevation helper — 15f5f7f3a
fix(updater): serialize elevation and block new takes — 531fa0700
fix(updater): recheck readiness and reserve browser starts — 957dd00f0
fix(updater): complete recording startup and failure guards — 1f2baf0ec
fix(updater): confirm missing registry keys before silent install — 8a7fb0887
fix(updater): allow larger registry enumeration output — 1e1bd86fb
chore(release): bump to 2.2.0-rc.5 [skip ci] — cf9fa7f5b
chore(release): bump to 2.2.0 [skip ci] — 0cc291725
</details>
Répond à 1 idée
If OpenScreen saves you time, a star on the repo helps others find it. Full Changelog: https://github.com/getopenscreen/openscreen/compare/v2.1.1...v2.1.2