Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
229 commits
Select commit Hold shift + click to select a range
7fc43b5
feat(cursor): raise the default cursor size by 30%
EtienneLescot Sep 28, 2026
1d1c01a
fix(editor): make the output format part of a style preset again
EtienneLescot Sep 28, 2026
e0429ed
fix(editor): keep the preset mark on a visible row during a rename
EtienneLescot Sep 28, 2026
3a34628
feat(export): one settings panel in the export dialog
EtienneLescot Sep 28, 2026
65a155a
fix(export): name the GIF loop toggle for screen readers
EtienneLescot Sep 28, 2026
c8fb35a
fix(camera): shrink to 70% in a zoom, whatever its depth
EtienneLescot Sep 28, 2026
2416e44
fix(camera): no shrink under a zoom region that does not zoom
EtienneLescot Sep 28, 2026
4f35409
fix: skip empty speed regions in render plan
EtienneLescot Sep 28, 2026
9fe809b
feat(cursor): place the default cursor size at the target mark
EtienneLescot Sep 28, 2026
e534163
fix: handle macOS capture permission failures
EtienneLescot Sep 28, 2026
39c00d4
docs: stop take before retrying macOS permission check
EtienneLescot Sep 28, 2026
7b79cd5
fix: add settings shortcut to cursor permission warning
EtienneLescot Sep 28, 2026
d93a2b1
feat(recording): capture the webcam at its real resolution and frame …
christian-wr Sep 28, 2026
3fac1aa
fix(recording): ignore a camera quality change made during a take
christian-wr Sep 28, 2026
c6d3064
fix(recording): do not read studio-range black as a visible webcam frame
christian-wr Sep 28, 2026
e1814e9
fix(recording): size the browser webcam sidecar from its own camera s…
christian-wr Sep 28, 2026
8f5e083
fix(recording): copy padded NV12 rows a row at a time
christian-wr Sep 28, 2026
c71e69c
revert: drop the NV12 2-D copy path, which fixed a bug that cannot ha…
christian-wr Sep 29, 2026
6974e30
fix(recording): report the frame rate the DirectShow graph settled on
christian-wr Sep 29, 2026
63186d0
test(recording): update camera quality fixtures
My-Denia Sep 29, 2026
a53e079
feat(export): always export H.264 and drop the codec picker
EtienneLescot Sep 28, 2026
47e8c4b
docs: the export dialog no longer offers a codec choice
EtienneLescot Sep 28, 2026
8dbc9e4
docs(website): drop H.265 from the copy, in every locale
EtienneLescot Sep 28, 2026
cb5efd0
docs: describe the export checklist flow as one settings panel
EtienneLescot Sep 28, 2026
e40a09c
feat(cursor): rebuild the Star Sprout 3D models after its reference r…
claude Sep 29, 2026
09b5d20
feat(cursor): rebuild Studio Ink and Pop Coral 3D models after the ne…
claude Sep 29, 2026
c196711
feat(cursor): recut the Prism Glow 3D hand as a gem after the new sheet
claude Sep 29, 2026
51c217c
feat(cursor): rebuild the Pixel Candy models and the Prism Glow arrow…
claude Sep 29, 2026
3e6ac0a
feat(cursor): give Prism Glow the navy outline of its drawing, and Po…
claude Sep 29, 2026
ef941a5
feat(cursor): anti-alias the inner edges of the 3D cursors
claude Sep 29, 2026
71d52b6
feat(cursor): extrude Prism Glow's drawing instead of modelling it
claude Sep 29, 2026
54614e5
feat(cursor): make Pop Coral cut paper with flat tops
claude Sep 29, 2026
59b4c35
feat(cursor): redraw Pixel Candy as simple pixel art built from voxels
claude Sep 29, 2026
54bfe31
docs(cursor): say Prism Glow is extruded, not sculpted
claude Sep 29, 2026
37b97f4
docs(testing): cover webcam capture quality in the manual e2e checklist
EtienneLescot Sep 30, 2026
e2aedac
docs(testing): name camera-mode commands per platform, split the 24 f…
EtienneLescot Sep 30, 2026
59646c5
docs(testing): give the webm frame count its own ffprobe command
EtienneLescot Sep 30, 2026
a4e1fd0
fix(editor): hide the cursor settings when a take has no cursor data
EtienneLescot Sep 30, 2026
4c06058
fix(editor): read the cursor facet's availability off the current rec…
EtienneLescot Sep 30, 2026
fd542e7
fix(compositor): copy the decoder surface before sampling it
christian-wr Sep 29, 2026
bd9a697
fix(compositor): do not reuse a decoder copy across a resized source
EtienneLescot Sep 30, 2026
69a7982
fix(recording): name the last Apple picker pick after a relaunch
EtienneLescot Sep 30, 2026
95e9a89
feat(cursor): model Prism Glow as a mesh traced on its 2D art
EtienneLescot Sep 30, 2026
ddaec78
feat(compositor): ray-trace Prism Glow as a glass crystal in 3D
EtienneLescot Sep 30, 2026
cde8d08
fix(compositor): draw the cursor under the camera and the annotations…
EtienneLescot Sep 30, 2026
7b51bfc
perf(compositor): group Prism Glow's triangles in bounding boxes
EtienneLescot Sep 30, 2026
1d463c7
fix(compositor): refract the blurred picture, the cursor sharp on top
EtienneLescot Sep 30, 2026
b640445
feat(timeline): add a Clear zooms button
EtienneLescot Sep 30, 2026
e46850b
feat(timeline): widen Clear zooms into Clear timeline
EtienneLescot Sep 30, 2026
acb7f71
feat(timeline): move Clear timeline to the end of the toolbar behind …
EtienneLescot Sep 30, 2026
b2bef6b
fix(timeline): show Clear timeline from the stored regions, not the d…
EtienneLescot Sep 30, 2026
b8b9049
fix(capture): include menus and popups in Windows window recordings
EtienneLescot Sep 30, 2026
15a7b9e
test(capture): add a window-popup check to the WGC helper smoke test
EtienneLescot Sep 30, 2026
02a7fc4
docs(capture): state that a window over the recording hides the popup…
EtienneLescot Sep 30, 2026
268622b
docs(capture): cite the measurement behind the overlapped-window note
EtienneLescot Sep 30, 2026
8d244e5
fix(recording): keep the remembered display out of the Record-mode so…
EtienneLescot Sep 30, 2026
00a4d00
fix(annotations): masks and their gimbals follow the footage, arrows …
EtienneLescot Sep 30, 2026
599eeb5
fix(annotations): let an arrow's box start before the frame
EtienneLescot Sep 30, 2026
f1550df
fix(editor): let the audio element free-run instead of re-seeking it …
christian-wr Sep 29, 2026
bb6212f
docs(editor): put the resolveAudioTrackPlayback doc back above its fu…
EtienneLescot Sep 30, 2026
c870e3b
fix(editor): hold the audio to the picture by rate, and resync it aft…
EtienneLescot Sep 30, 2026
046e6ba
feat(ui): cap tooltip width, follow text direction, add a shortcut chip
EtienneLescot Sep 30, 2026
fb736c7
feat(hud): rewrite the recording bar tooltips
EtienneLescot Sep 30, 2026
bfa091e
test(i18n): guard tooltip placeholders and length in every locale
EtienneLescot Sep 30, 2026
874f058
docs: add the tooltip guidelines and a HUD hover check
EtienneLescot Sep 30, 2026
083c926
fix(i18n): correct HUD tooltip wording in ar, de, ja, ko, tr, vi
EtienneLescot Sep 30, 2026
22d7bf4
fix(hud): clear the bar with tooltips, and balance their lines
EtienneLescot Sep 30, 2026
f7b96fc
feat(editor): show a choice row's tooltip only for icon-only options
EtienneLescot Sep 30, 2026
ee0bc43
feat(editor): explain the ambiguous inspector switches with a tooltip
EtienneLescot Sep 30, 2026
020b725
fix(editor): reword three tooltips and drop the hints nobody could reach
EtienneLescot Sep 30, 2026
0cec4dc
docs: add the inspector hover check to the manual checklist
EtienneLescot Sep 30, 2026
4db2908
fix(editor): drop the tooltip on the caption font specimens
EtienneLescot Sep 30, 2026
e8d1246
fix(i18n): correct camera preview, roundness, transcript tooltips in …
EtienneLescot Sep 30, 2026
24bc56c
refactor: share the editable cursor check and format a fixed shortcut…
EtienneLescot Sep 30, 2026
c269d18
feat(editor): rewrite the editor tooltips
EtienneLescot Sep 30, 2026
22610c7
docs: rename the Record mode cursor row and the timeline tooltip labels
EtienneLescot Sep 30, 2026
08cf54f
docs(website): use the app's Editable cursor label in the Record mode…
EtienneLescot Sep 30, 2026
a98600d
fix(i18n): align editor tooltip wording with each locale's own terms …
EtienneLescot Sep 30, 2026
188ea2f
fix(editor): keep busy buttons hoverable and open Record mode tooltip…
EtienneLescot Sep 30, 2026
bc6fa48
fix(i18n): no-break space before punctuation in the French editor too…
EtienneLescot Sep 30, 2026
0f92f62
fix(stt): keep transcript words on the audio's clock when the VAD cut…
EtienneLescot Sep 30, 2026
4260bb7
fix(stt): end each phrase on its speech offset, and look past its kep…
EtienneLescot Sep 30, 2026
46c304e
fix(stt): tell which phrase a word belongs to by whisper's own start
EtienneLescot Sep 30, 2026
6a754d8
feat: expose the AI agent's tools over a local MCP server
davidjayana Sep 29, 2026
194360c
fix(mcp): wrap the connect commands instead of widening the settings …
davidjayana Sep 29, 2026
36dec5b
fix(mcp): make MCP writes a separate opt-in and validate renderer input
davidjayana Sep 29, 2026
bc1bb08
build(nix): update npmDepsHash for the MCP SDK dependency
davidjayana Sep 30, 2026
6fd9fb7
refactor(stt): drop the unreachable /vad endpoint and stt:vad IPC
EtienneLescot Sep 30, 2026
409cf4d
fix(release): stage the whisper helper built from the release's own s…
EtienneLescot Sep 30, 2026
9446101
fix(editor): keep the preview's boosted audio from clipping at the sp…
EtienneLescot Sep 30, 2026
a4d92a7
fix(macos): size the video bitrate from the actual capture, not the 4…
EtienneLescot Sep 30, 2026
345e225
fix(linux): convert and tag the PipeWire helper's video as BT.709
EtienneLescot Sep 30, 2026
af5d8fd
fix(windows): stop the audio mixer from punching holes in a continuou…
EtienneLescot Sep 30, 2026
025b2b2
fix(windows): keep the mixer's cushion across an instant resume and a…
EtienneLescot Sep 30, 2026
32857bb
docs: describe the mixer's resume handshake and clock anchoring
EtienneLescot Sep 30, 2026
2ad2293
fix(macos): pin the H.264 keyframe interval to 1 s and count dropped …
EtienneLescot Sep 30, 2026
e943004
perf(windows): raise the capture helpers' timer resolution and use MMCSS
EtienneLescot Sep 30, 2026
ab7d9dd
test(windows): retry the timer check so a busy host cannot fail the b…
EtienneLescot Sep 30, 2026
303eb7d
fix: keep the display awake while a recording runs
EtienneLescot Sep 30, 2026
63ae10e
fix: report a failed browser recording as stopped to the main process
EtienneLescot Sep 30, 2026
38c1239
fix(linux): keep the capture clock ticking while cursor messages flow
EtienneLescot Sep 30, 2026
1f5d9d8
perf(windows): skip the webcam frame copy when its sequence has not c…
EtienneLescot Sep 30, 2026
f9c4035
fix(windows): end the audio track where the video ends
EtienneLescot Sep 30, 2026
c729834
fix(windows): encode H.264 High with BT.709 colour the compositor exp…
EtienneLescot Sep 30, 2026
ea6a978
test(windows): widen the temp path through the ANSI code page
EtienneLescot Sep 30, 2026
da9b188
build(windows): link avrt into the encoder colour test, which compile…
EtienneLescot Sep 30, 2026
c9c5642
fix(stt): start each word at the end of the token before it
EtienneLescot Sep 30, 2026
ec93475
fix(linux): write fragmented MP4 so a killed helper keeps its take
EtienneLescot Sep 30, 2026
48da0dd
test(linux): give the killed-muxer test a per-process file and remove it
EtienneLescot Sep 30, 2026
9e45f7c
perf(windows): repeat the last frame instead of reading back an uncha…
EtienneLescot Sep 30, 2026
0511659
test(windows): widen the repeat tests' temp paths through the ANSI co…
EtienneLescot Sep 30, 2026
e04943a
fix(macos): capture and tag the screen track as BT.709 studio range
EtienneLescot Sep 30, 2026
c53ec9b
feat(stt): align words with character-level DTW
EtienneLescot Oct 1, 2026
9c86e71
docs(stt): match the char-dtw comment to the measured numbers
EtienneLescot Oct 1, 2026
04b7d15
fix(stt): fail configure if the patched whisper.cpp is not compiled; …
EtienneLescot Oct 1, 2026
14bf04b
feat(stt): re-time whisper's words on a CTC forced aligner
EtienneLescot Oct 1, 2026
f2051ca
fix(stt): never hold a chunk on the word aligner's download
EtienneLescot Oct 1, 2026
2c7604e
feat(stt): run the word aligner on the GPU only, measured against pha…
EtienneLescot Oct 1, 2026
50e8e64
docs(stt): correct the French take reading, and record the silent-let…
EtienneLescot Oct 1, 2026
341a72f
fix(stt-eval): say so when real-check has no word to compare
EtienneLescot Oct 1, 2026
75849dd
fix(hud): report the stack rect from the allocation, not a measurement
EtienneLescot Oct 1, 2026
05d3514
fix(release): read every helper build when staging, and say why one i…
EtienneLescot Oct 1, 2026
292c5f8
fix(release): list helper builds unfiltered into a file, and fail on …
EtienneLescot Oct 1, 2026
6f89b9d
docs(e2e): log the v2.0.0-rc.1 and rc.6 Windows passes
EtienneLescot Oct 1, 2026
a04329a
docs(e2e): record the rc.6 mixer check once the speakers were back on
EtienneLescot Oct 1, 2026
f459f0c
feat(camera): square camera by default, "Original" keeps the camera's…
EtienneLescot Oct 1, 2026
32c9370
fix(camera): fall back to the given shape's own default roundness
EtienneLescot Oct 1, 2026
899372c
fix(stt): keep a sentence's last word in the stretch it closes
EtienneLescot Oct 1, 2026
57684a9
fix(stt): stop a sentence end's punctuation scan at an opening bracket
EtienneLescot Oct 1, 2026
73e9b44
fix(main): quit when the hidden countdown overlay is the last window …
EtienneLescot Oct 1, 2026
12003a4
docs(testing): log the v2.0.0-rc.8 e2e pass and fix the export peak c…
EtienneLescot Oct 1, 2026
507c6d4
docs(testing): state the output level the rc.8 loudness export used
EtienneLescot Oct 1, 2026
b834416
fix(preview): hand out no native view while the view for a new source…
EtienneLescot Oct 1, 2026
3bee2d2
fix(editor): keep wordmark menu rows on one line in long locales
EtienneLescot Oct 2, 2026
c2a8559
fix(macos): keep the HUD out of takes after the editor round trip
EtienneLescot Oct 2, 2026
358c338
fix(timeline): show the bound shortcut in the empty-lane hints
EtienneLescot Oct 2, 2026
73879f9
fix(hud): keep camEnabled off when no camera can be opened
EtienneLescot Oct 2, 2026
cb8bb1e
fix(hud): clear a stored camera when the toggle finds none
EtienneLescot Oct 2, 2026
6b56f7b
fix(stt): show a readable message when transcription cannot read the …
EtienneLescot Oct 2, 2026
a1a2a76
fix(stt): key unreadable media on an extraction marker, not on wording
EtienneLescot Oct 2, 2026
bbeb37f
fix(stt): only mark an extraction timeout unreadable when nothing was…
EtienneLescot Oct 2, 2026
e73097c
perf(preview): stop decoding pictures the hidden media elements never…
EtienneLescot Oct 2, 2026
58f7fdf
perf(preview): hand composed frames to the canvas as shared GPU textures
EtienneLescot Oct 2, 2026
beddfc2
perf(preview): pull frames by the clock, not by display ticks
EtienneLescot Oct 2, 2026
33a6856
fix(preview): republish a frame that found no free slot, and drop the…
EtienneLescot Oct 2, 2026
7619e5f
fix(preview): never rewrite a shared slot Chromium still holds
EtienneLescot Oct 2, 2026
e358d77
fix(preview): stop re-seeking the native view at every cut and in spe…
EtienneLescot Oct 2, 2026
b519f23
fix(preview): count native drift in seconds of playback, and catch a …
EtienneLescot Oct 2, 2026
227b9b8
fix(preview): land on the last frame when a clip is entered past it
EtienneLescot Oct 2, 2026
83fbcec
fix(preview): hold the last frame for the webcam too when presenting …
EtienneLescot Oct 2, 2026
db8e7ed
feat(website): show the feature pages' demo loops, lazily, from R2
EtienneLescot Oct 2, 2026
55fa624
fix(website): start a loop that is already on screen when its sources…
EtienneLescot Oct 2, 2026
9658e0a
feat(website): film the homepage below the editor
EtienneLescot Oct 2, 2026
2eeb183
fix(website): smooth every loop, and blur the camera instead of cutti…
EtienneLescot Oct 2, 2026
d74e092
fix(website): give the format-and-blur block a title that reads as a …
EtienneLescot Oct 2, 2026
eba902a
fix(website): an agent claim that stands on its own, and du throughou…
EtienneLescot Oct 2, 2026
b879369
fix(website): address the review of the demo loops
EtienneLescot Oct 2, 2026
9f1a5b2
fix(website): give the recreation's lane hints their {{key}}
EtienneLescot Oct 2, 2026
bb4124d
feat(website): record the published demo loops, and check them in CI
EtienneLescot Oct 2, 2026
8e4d926
feat(website): declare each demo loop as a VideoObject where it is shown
EtienneLescot Oct 2, 2026
79bed86
perf(website): paint a loop's poster without waiting for script, and …
EtienneLescot Oct 2, 2026
de2fc91
fix(website): make the loop tooling refuse what would corrupt a cut
EtienneLescot Oct 2, 2026
69c14ad
docs(readme): show the current editor in the demo GIF
EtienneLescot Oct 2, 2026
acfc10f
fix(compositor): keep the 3D models out of the Linux layer pipeline
EtienneLescot Oct 2, 2026
4544fdd
perf(compositor): evaluate one corner distance per pixel on Linux
EtienneLescot Oct 2, 2026
6374638
perf(compositor): scissor the Linux cursor trail composite to the trail
EtienneLescot Oct 2, 2026
cafcdb6
perf(compositor): copy a static background instead of redrawing it on…
EtienneLescot Oct 2, 2026
f055ec4
docs(perf): record the Linux export regression of 2.0 and its fixes
EtienneLescot Oct 2, 2026
61f3c73
fix(compositor): pick the Linux layer pipeline from the layer's mode
EtienneLescot Oct 2, 2026
8caaa20
fix(compositor): keep the 3D models out of the D3D11 and Metal layer …
EtienneLescot Oct 2, 2026
2fb994e
perf(compositor): evaluate one corner distance per pixel on Windows a…
EtienneLescot Oct 2, 2026
39dafaf
docs(perf): record the per-mode pipeline choice and what Windows and …
EtienneLescot Oct 2, 2026
f698032
perf(compositor): compare the background key without copying the back…
EtienneLescot Oct 2, 2026
dd5e914
perf(compositor): bring the background cache and the trail scissor to…
EtienneLescot Oct 2, 2026
57da8eb
docs(perf): note the background cache and trail scissor on Windows an…
EtienneLescot Oct 2, 2026
0624c14
perf(compositor): reuse the kept background's texture on Windows and …
EtienneLescot Oct 2, 2026
b8bd917
docs(perf): record the Windows A/B of the layer-shader fix
EtienneLescot Oct 2, 2026
b2e8635
docs(perf): limit the byte-identical claim to the exports that were
EtienneLescot Oct 3, 2026
746277d
docs(testing): log the v2.0.0-rc.13 computer-use e2e pass
EtienneLescot Oct 3, 2026
845f58f
feat(timeline): show scissors on the trim tool
EtienneLescot Oct 3, 2026
db9ba2a
feat(webcam): default the camera to 40% and let it grow to 60%
EtienneLescot Oct 3, 2026
93e3ed0
docs(testing): log the v2.0.0-rc.13 macOS computer-use e2e pass
EtienneLescot Oct 3, 2026
40d062f
docs(testing): restore the macOS RC passes that never reached the res…
EtienneLescot Oct 3, 2026
54f4ea9
perf(preview): stop decoding the stand-in camera when a clip has none
EtienneLescot Oct 3, 2026
7d9ad96
docs(preview): record the free-run decode budget and what still falls…
EtienneLescot Oct 3, 2026
69b791b
test(preview): prove the stand-in never moves, and stop at a source t…
EtienneLescot Oct 3, 2026
821902a
chore(release): bump to 2.0.0-rc.1 [skip ci]
EtienneLescot Sep 27, 2026
fe52810
chore(release): bump to 2.0.0-rc.2 [skip ci]
github-actions[bot] Sep 30, 2026
2a9a01e
chore(release): bump to 2.0.0-rc.3 [skip ci]
github-actions[bot] Sep 30, 2026
c8512b6
chore(release): bump to 2.0.0-rc.4 [skip ci]
github-actions[bot] Oct 1, 2026
ca8126d
chore(release): bump to 2.0.0-rc.5 [skip ci]
github-actions[bot] Oct 1, 2026
f993b24
chore(release): bump to 2.0.0-rc.6 [skip ci]
github-actions[bot] Oct 1, 2026
c69ebaf
chore(release): bump to 2.0.0-rc.7 [skip ci]
github-actions[bot] Oct 1, 2026
4eabce5
chore(release): bump to 2.0.0-rc.8 [skip ci]
github-actions[bot] Oct 1, 2026
509242a
chore(release): bump to 2.0.0-rc.9 [skip ci]
github-actions[bot] Oct 1, 2026
5b9be8d
chore(release): bump to 2.0.0-rc.10 [skip ci]
github-actions[bot] Oct 2, 2026
836a2e8
chore(release): bump to 2.0.0-rc.11 [skip ci]
github-actions[bot] Oct 2, 2026
9af5662
chore(release): bump to 2.0.0-rc.12 [skip ci]
github-actions[bot] Oct 2, 2026
99cdc8d
chore(release): bump to 2.0.0-rc.13 [skip ci]
github-actions[bot] Oct 2, 2026
cbe7a92
chore(release): bump to 2.0.0-rc.14 [skip ci]
github-actions[bot] Oct 3, 2026
cbe97dd
chore(release): bump to 2.0.0-rc.15 [skip ci]
github-actions[bot] Oct 3, 2026
1d94186
chore(release): bump to 2.0.0 [skip ci]
github-actions[bot] Oct 3, 2026
981c914
feat(website): show a live demo in the hero
EtienneLescot Oct 3, 2026
359171a
fix(website): smooth docking and align the responsive preview
EtienneLescot Oct 3, 2026
8a14071
fix(website): keep framing aligned during pane transitions
EtienneLescot Oct 3, 2026
4246ca7
style(website): give the timeline tool palette more room
EtienneLescot Oct 3, 2026
9644d72
feat(website): announce v2 above the new homepage promise
EtienneLescot Oct 3, 2026
7a01d4d
fix(website): announce that OpenScreen v2 is here
EtienneLescot Oct 3, 2026
b60a519
fix(website): stabilize preview resizing and timeline spacing
EtienneLescot Oct 3, 2026
f9f422c
style(website): announce v2 with a compact hero badge
EtienneLescot Oct 3, 2026
f2c2146
style(website): remove the clipped preview glow
EtienneLescot Oct 3, 2026
9ba7955
style(website): cap the editor and footage width
EtienneLescot Oct 3, 2026
ea6e940
fix(website): retain larger footage at its natural ratio
EtienneLescot Oct 3, 2026
ad06bdc
style(website): give the homepage introduction more room
EtienneLescot Oct 3, 2026
f27f766
feat(website): detect the platform for direct downloads
EtienneLescot Oct 3, 2026
2c64f7e
perf(website): serve responsive wallpapers from Cloudflare R2
EtienneLescot Oct 3, 2026
ddd73e6
style(website): update the demo headline and translations
EtienneLescot Oct 3, 2026
fcc8e97
docs(testing): log the v2.0.0-rc.15 computer-use e2e pass
EtienneLescot Oct 3, 2026
2e0733e
docs(testing): link the rc.15 defects to their issues
EtienneLescot Oct 3, 2026
bf8efb9
docs: add missing third-party notices
EtienneLescot Oct 4, 2026
8563665
docs: limit the Recordly notice to the code taken from it
EtienneLescot Oct 4, 2026
8f3046c
docs: drop the upstream link from the Recordly notice
EtienneLescot Oct 4, 2026
0b30f51
wip: several cameras in the picture (CI snapshot)
christian-wr Oct 5, 2026
743ae75
wip: CI snapshot after drawing every camera layer
christian-wr Oct 5, 2026
a326bb9
wip: CI snapshot after decoding extra cameras
christian-wr Oct 5, 2026
6d9dd67
wip: CI snapshot after the end-to-end measurement
christian-wr Oct 5, 2026
57c6db0
wip: CI snapshot after the final-review fixes
christian-wr Oct 5, 2026
439c09b
wip: CI snapshot of the multi-camera editor
christian-wr Oct 5, 2026
d5e1b60
wip: CI snapshot of the multi-camera editor after review fixes
christian-wr Oct 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 6 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,12 @@ jobs:
uses: ./.github/actions/setup

# STT is the bundled whisper-stt-server (whisper.cpp with native DTW token
# timestamps); no VAD model is fetched here. The binary is built by
# build-whisper-stt.yml and staged below — without that step the installer
# ships without speech-to-text. See
# technical-documentation/architecture/transcription-and-captions.md.
# timestamps); no model is fetched here. The binary is built by
# build-whisper-stt.yml and staged below, from the run built from this
# commit's helper sources — without that step the installer ships without
# speech-to-text. See
# technical-documentation/architecture/transcription-and-captions.md, and
# technical-documentation/engineering/release-and-secrets.md for the run.
- name: Stage whisper-stt binaries
shell: bash
env:
Expand Down
13 changes: 12 additions & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,17 @@ jobs:
- name: Check media budget
working-directory: website
run: npm run check:media
# The demo loops are served from R2 (media.getopenscreen.com), not git, so
# nothing above would notice a loop a page names that was never uploaded,
# or a cut folder holding the wrong files. media/loops.json records what
# scripts/media/publish-loops.mjs uploaded; this holds the code to it and
# asks the CDN for every recorded file, paced under the zone's rate limit.
- name: Check demo loops
working-directory: website
run: npm run check:loops -- --live
- name: Check responsive backgrounds
working-directory: website
run: npm run check:backgrounds -- --live
# The recreation's data is generated from the app's own source and a
# vendored project document. It is committed, so it can go stale in either
# direction — a locale key moves, a timeline constant changes — and the
Expand Down Expand Up @@ -137,4 +148,4 @@ jobs:
id-token: write
steps:
- id: deployment
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ result-*
/tools/stt-eval/whispercpp-dtw-poc/fixtures/*.wav
/tools/stt-eval/whispercpp-dtw-poc/results/

# Word-timing harness (tools/stt-eval/word-timing): TTS corpus and results.
/tools/stt-eval/word-timing/data/

opencode.json
opencode.json

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<p align="center"><strong>A free, open-source desktop app for recording your screen and turning the result into polished product demos and walkthroughs.</strong></p>

<p align="center">
<img src="docs/assets/demo.gif" alt="Editing a recording in OpenScreen: wallpaper and video effects, an AI-assisted cut driven from the chat, then export" width="100%" />
<img src="docs/assets/demo.gif" alt="Editing a recording in OpenScreen: one click restyles the whole video, deleting a sentence in the transcript cuts it from the video, and the editor's agent adds a zoom on every click" width="100%" />
</p>

<p align="center">
Expand Down
149 changes: 147 additions & 2 deletions THIRD-PARTY-NOTICES.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
# Third-party notices

OpenScreen is MIT licensed (see [LICENSE](LICENSE)). The installers additionally
bundle the pre-built native components below. This file ships inside the
bundle the third-party components below. This file ships inside the
application resources and satisfies the attribution and source-offer obligations
that come with them.

npm dependencies are not listed here: they are resolved from `package.json` and
distributed by their own registries, not redistributed inside our binaries.
distributed by their own registries, not redistributed inside our binaries. The
exception is code bundled into the renderer whose licence asks for its notice in
the distributed form (js-aruco2 below): the bundler strips the source headers.

---

Expand Down Expand Up @@ -38,6 +40,23 @@ distributed by their own registries, not redistributed inside our binaries.
replace them with your own build of the same FFmpeg version by overwriting the
DLLs in `resources/electron/native/bin/win32-*/`.

## web-demuxer — WebAssembly demuxer

- **Component**: `wasm/web-demuxer.wasm`, inside the application bundle.
- **Used by**: the editor's streaming decoder, audio waveforms and caption audio
extraction, which demux recordings in the renderer with it.
- **License**: MIT for web-demuxer itself — Copyright (c) 2024 ForeverSc, under the
same permission notice as OpenScreen's own [LICENSE](LICENSE). The module also
contains FFmpeg code compiled to WebAssembly, under the **GNU Lesser General
Public License v2.1 or later**, as web-demuxer's README states.
- **Upstream**: the npm package `web-demuxer` 4.0.0,
<https://github.com/ForeverSc/web-demuxer>. The shipped file is byte-identical
to that release's `dist/wasm-files/web-demuxer.wasm`.
- **Corresponding source**: the web-demuxer repository at the 4.0.0 release, whose
`lib/` directory holds the FFmpeg-derived sources and their build scripts.
- **Replacing it**: the module is a separate file loaded at runtime, so it can be
replaced with your own build of the same version.

## whisper.cpp and ggml

- **Components**: `whisper-stt-server` and its ggml backend sidecars, under
Expand Down Expand Up @@ -147,6 +166,132 @@ distributed by their own registries, not redistributed inside our binaries.
- IBM Plex Mono 2.3 — Copyright © 2017 IBM Corp. `ofl/ibmplexmono/` of
<https://github.com/google/fonts> at `23e54b51dd`.

## Recordly — helper code

- **Components**: parts of the zoom, motion-smoothing and custom-cursor code, and a
few lines elsewhere, the native capture helpers included.
- **License**: MIT — Copyright (c) 2026 webadderall, under the same permission
notice as OpenScreen's own [LICENSE](LICENSE). Published by Recordly under MIT,
before its relicensing in March 2026.

## js-aruco2 — ArUco marker detection

- **Components**: `src/aruco.js` and `src/cv.js` of the npm package `js-aruco2`
2.0.0, compiled into the renderer bundle (`dist/assets/*.js`).
- **Used by**: the camera calibration dialog, which finds the four printed corner
markers in a camera still.
- **License**: MIT — Copyright (c) 2020 Damiano Falcioni, Copyright (c) 2011 Juan
Mellado, under the same permission notice as OpenScreen's own
[LICENSE](LICENSE).
- **Upstream**: <https://github.com/damianofalcioni/js-aruco2>, release 2.0.0.

## OpenCV — ArUco 4×4 dictionary codes

- **Component**: the marker codes in js-aruco2's
`src/dictionaries/aruco_4x4_1000.js`, compiled into the renderer bundle. They
are taken from OpenCV's `predefined_dictionaries.hpp`; the marker sheet the
editor prints draws markers 0–3 of this dictionary.
- **License**: BSD 3-Clause — Copyright (C) 2013, OpenCV Foundation, all rights
reserved. Third party copyrights are property of their respective owners.

> Redistribution and use in source and binary forms, with or without
> modification, are permitted provided that the following conditions are met:
>
> - Redistributions of source code must retain the above copyright notice,
> this list of conditions and the following disclaimer.
> - Redistributions in binary form must reproduce the above copyright notice,
> this list of conditions and the following disclaimer in the documentation
> and/or other materials provided with the distribution.
> - Neither the names of the copyright holders nor the names of the
> contributors may be used to endorse or promote products derived from this
> software without specific prior written permission.
>
> This software is provided by the copyright holders and contributors "as is"
> and any express or implied warranties, including, but not limited to, the
> implied warranties of merchantability and fitness for a particular purpose
> are disclaimed. In no event shall copyright holders or contributors be liable
> for any direct, indirect, incidental, special, exemplary, or consequential
> damages (including, but not limited to, procurement of substitute goods or
> services; loss of use, data, or profits; or business interruption) however
> caused and on any theory of liability, whether in contract, strict liability,
> or tort (including negligence or otherwise) arising in any way out of the use
> of this software, even if advised of the possibility of such damage.

## Rust crates — compiled into the compositor addon

- **Component**: `compositor_view.node`, under
`resources/electron/native/bin/<platform>-<arch>/`.
- **What is listed**: every third-party crate in the addon's dependency graph in
`crates/Cargo.lock`, across all platforms. Build-time crates (procedural macros,
build scripts) are included even though none of their code ships.
- **Licenses**: as each crate publishes them on crates.io. Where a crate offers a
choice, OpenScreen uses it under MIT or Apache-2.0. Each crate's licence text is
in its source package at the version listed.
- **MIT OR Apache-2.0** (155): android_system_properties 0.1.5, anyhow 1.0.103,
arrayvec 0.7.8, ash 0.38.0+1.3.281, autocfg 1.5.1, bit-set 0.8.0, bit-vec 0.8.0,
bitflags 1.3.2, bitflags 2.13.1, bumpalo 3.20.3, cc 1.2.67, cexpr 0.6.0, cfg-if
1.0.4, core-foundation 0.9.4, core-foundation-sys 0.8.7, core-graphics-types
0.1.3, cosmic-text 0.19.0, crc32fast 1.5.0, ctor 0.2.9, document-features
0.2.12, either 1.16.0, equivalent 1.0.2, fdeflate 0.3.7, find-msvc-tools 0.1.9,
flate2 1.1.9, font-types 0.11.3, font-types 0.12.2, foreign-types 0.5.0,
foreign-types-macros 0.2.4, foreign-types-shared 0.3.1, futures-core 0.3.33,
futures-task 0.3.33, futures-util 0.3.33, glob 0.3.3, gpu-alloc 0.6.2,
gpu-alloc-types 0.3.1, gpu-allocator 0.27.0, gpu-descriptor 0.3.2,
gpu-descriptor-types 0.2.0, hashbrown 0.15.5, hashbrown 0.17.1, heck 0.5.0,
image 0.25.10, indexmap 2.14.0, itertools 0.13.0, itoa 1.0.18, jni-sys 0.3.1,
jni-sys 0.4.1, jni-sys-macros 0.4.1, js-sys 0.3.103, khronos-egl 6.0.0, libc
0.2.186, linebender_resource_handle 0.1.1, litrs 1.0.0, lock_api 0.4.14, log
0.4.33, matrixmultiply 0.3.11, memmap2 0.9.11, metal 0.29.0, metal 0.31.0,
minimal-lexical 0.2.1, naga 24.0.0, ndarray 0.16.1, ndarray 0.17.2, ndk-sys
0.5.0+25.2.9519653, num-complex 0.4.6, num-integer 0.1.47, num-traits 0.2.19,
once_cell 1.21.4, ort 2.0.0-rc.13, ort-sys 2.0.0-rc.13, parking_lot 0.12.5,
parking_lot_core 0.9.12, paste 1.0.15, pin-project-lite 0.2.17, pkg-config
0.3.33, png 0.18.1, pollster 0.4.0, portable-atomic 1.15.0, portable-atomic-util
0.2.7, presser 0.3.1, prettyplease 0.2.37, proc-macro2 1.0.106, profiling
1.0.18, quote 1.0.46, range-alloc 0.1.5, rangemap 1.7.1, rawpointer 0.2.1,
read-fonts 0.37.0, read-fonts 0.41.0, regex 1.13.1, regex-automata 0.4.16,
regex-syntax 0.8.11, renderdoc-sys 1.1.0, roxmltree 0.20.0, rustc-hash 1.1.0,
rustc-hash 2.1.3, rustversion 1.0.23, scopeguard 1.2.0, semver 1.0.28, serde
1.0.228, serde_core 1.0.228, serde_derive 1.0.228, serde_json 1.0.150, shlex
1.3.0, shlex 2.0.1, skrifa 0.40.0, skrifa 0.44.0, smallvec 1.15.2, smol_str
0.3.6, static_assertions 1.1.0, swash 0.2.10, syn 2.0.119, syn 3.0.3, sys-locale
0.3.2, thiserror 1.0.69, thiserror 2.0.19, thiserror-impl 1.0.69, thiserror-impl
2.0.19, ttf-parser 0.25.1, unicode-bidi 0.3.18, unicode-script 0.5.8,
unicode-segmentation 1.13.3, unicode-width 0.1.14, unicode-xid 0.2.6,
version_check 0.9.5, wasm-bindgen 0.2.126, wasm-bindgen-futures 0.4.76,
wasm-bindgen-macro 0.2.126, wasm-bindgen-macro-support 0.2.126,
wasm-bindgen-shared 0.2.126, web-sys 0.3.103, wgpu 24.0.5, wgpu-core 24.0.5,
wgpu-hal 24.0.4, wgpu-types 24.0.0, windows 0.58.0, windows_aarch64_gnullvm
0.52.6, windows_aarch64_msvc 0.52.6, windows_i686_gnu 0.52.6,
windows_i686_gnullvm 0.52.6, windows_i686_msvc 0.52.6, windows_x86_64_gnu
0.52.6, windows_x86_64_gnullvm 0.52.6, windows_x86_64_msvc 0.52.6, windows-core
0.58.0, windows-implement 0.58.0, windows-interface 0.58.0, windows-link 0.2.1,
windows-result 0.2.0, windows-strings 0.1.0, windows-sys 0.61.2, windows-targets
0.52.6, yazi 0.2.1, zeno 0.3.3.
- **MIT** (26): block 0.1.6, cfg_aliases 0.2.2, convert_case 0.6.0, core_maths
0.1.1, fontconfig-parser 0.5.8, fontdb 0.23.0, harfrust 0.5.2, libm 0.2.16,
malloc_buf 0.0.6, napi 2.16.17, napi-build 2.3.2, napi-derive 2.16.13,
napi-derive-backend 1.0.75, napi-sys 2.4.0, nom 7.1.3, objc 0.2.7, ordered-float
4.6.0, redox_syscall 0.5.18, simd-adler32 0.3.10, slab 0.4.12, strum 0.26.3,
strum_macros 0.26.4, tracing 0.1.44, tracing-core 0.1.36, xml-rs 0.8.28, zmij
1.0.23.
- **MIT OR Apache-2.0 OR Zlib** (9): bytemuck 1.25.1, bytemuck_derive 1.11.0,
glow 0.16.0, miniz_oxide 0.8.9, raw-window-handle 0.6.2, tinyvec 1.12.0,
tinyvec_macros 0.1.1, zune-core 0.5.1, zune-jpeg 0.5.15.
- **Apache-2.0** (7): clang-sys 1.8.1, codespan-reporting 0.11.1, gl_generator
0.14.0, glutin_wgl_sys 0.6.1, khronos_api 3.1.0, spirv 0.3.0+sdk-1.3.268.0,
unicode-linebreak 0.1.5.
- **Unlicense OR MIT** (5): aho-corasick 1.1.4, byteorder-lite 0.1.0, memchr
2.8.3, termcolor 1.4.1, winapi-util 0.1.11.
- **Zlib** (2): foldhash 0.1.5, slotmap 1.1.1.
- **ISC** (2): libloading 0.8.9, libloading 0.9.0.
- **BSD-3-Clause OR Apache-2.0** (2): moxcms 0.8.1, pxfm 0.1.30.
- **0BSD OR MIT OR Apache-2.0** (1): adler2 2.0.1.
- **BSD-3-Clause** (1): bindgen 0.70.1.
- **CC0-1.0** (1): hexf-parse 0.2.1.
- **Apache-2.0 OR GPL-2.0-only** (1): self_cell 1.3.0.
- **(MIT OR Apache-2.0) AND Unicode-3.0** (1): unicode-ident 1.0.24.

## OpenScreen native helpers

`wgc-capture` (Windows Graphics Capture), the ScreenCaptureKit helper (macOS),
Expand Down
1 change: 1 addition & 0 deletions crates/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ features = [
"Win32_Graphics_Direct2D_Common", # D2D1_COLOR_F / PIXEL_FORMAT
"Win32_Graphics_DirectWrite", # mise en page + rastérisation du texte
"Win32_Graphics_Gdi", # brosses/police GUI de la preview (poc-d3d/src/app.rs)
"Win32_Security", # IDXGIResource1::CreateSharedHandle (shared_frames.rs)
"Win32_System_Performance", # QueryPerformanceCounter / Frequency (§10)
"Win32_System_LibraryLoader", # GetModuleHandleW (hInstance)
"Win32_UI_WindowsAndMessaging", # fenêtres (harnais live + GUI du POC)
Expand Down
Loading
Loading