Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
139 commits
Select commit Hold shift + click to select a range
912512d
fix(ai-edition): floor Anthropic-wire maxTokens at 16k for unknown mo…
EtienneLescot Jul 28, 2026
cc97851
fix(topbar): project rename in the v4 header (#180)
EtienneLescot Jul 28, 2026
617900d
chore: remove + skip button in the chat panel
EtienneLescot Jul 28, 2026
6185855
chore: drop the now-unused aiEdition.runTimelineOperation IPC plumbing
EtienneLescot Jul 28, 2026
861fe21
refactor: extract useSequentialTimelineOps hook from NewEditorShell
EtienneLescot Jul 28, 2026
bdaad80
fix(ci): make useSequentialTimelineOps.test pass tsconfig.test.json, …
Jul 28, 2026
a590be4
feat(chat): stream reasoning trace into the chat panel
EtienneLescot Jul 28, 2026
c0e5cca
fix(export): keep the caption background plate through the native bridge
EtienneLescot Jul 28, 2026
212d5ef
fix(compositor): stop the colour parser panicking on non-ASCII, and f…
EtienneLescot Jul 28, 2026
f7d25d3
fix(preview): stop drawing captions twice in the preview
EtienneLescot Jul 28, 2026
07640ce
docs(captions): fold the two render paths into the one that survived
EtienneLescot Jul 28, 2026
e142715
fix(compositor): let zooms overflow the preview padding
EtienneLescot Jul 28, 2026
2bfa1ab
fix(compositor): don't let the screen shadow/roundness follow the zoo…
Jul 28, 2026
bed40c7
fix(compositor): make the zoom-frame growth continuous instead of bi…
Jul 28, 2026
d96aa0a
fix(compositor): split the zoom between the box and the source cut
EtienneLescot Jul 28, 2026
b702da1
fix(compositor): hand the whole zoom to the box, not a share of it
EtienneLescot Jul 28, 2026
338bdef
chore(cleanup): remove dead exports, scripts, and an always-true feat…
EtienneLescot Jul 28, 2026
9bc0977
docs: drop references to the scripts this PR deletes
sepion02 Jul 28, 2026
587148f
perf: make platformUtils synchronous via preload
EtienneLescot Jul 28, 2026
4a0c5d8
fix(platform): read platform from preload, not the renderer's absent …
sepion02 Jul 28, 2026
4230b02
test(platform): guard the renderer/browser platform read
sepion02 Jul 28, 2026
2420405
chore(cleanup): replace hand-rolled i18n loader with i18next
EtienneLescot Jul 28, 2026
6203774
fix(i18n): drop the dead module-scope localStorage read, restore key-…
sepion02 Jul 28, 2026
f5aca87
refactor: drop legacy single-session default chat path
EtienneLescot Jul 28, 2026
dfa15b0
chore(contracts): drop the three orphaned chat request arms
sepion02 Jul 28, 2026
9769287
chore(cleanup): move pure-math out of components/video-editor/videoPl…
EtienneLescot Jul 28, 2026
8dfa5a7
refactor: shrink YAGNI signatures
EtienneLescot Jul 28, 2026
7547561
refactor(speed): reuse clampPlaybackSpeed, narrow the parser signature
sepion02 Jul 28, 2026
15de9a5
refactor: drop legacy 'native' AspectRatio via v6 schema migration
EtienneLescot Jul 28, 2026
6524293
fix(schema): migrate 'native' using CROPPED dims, and unbreak the mai…
sepion02 Jul 28, 2026
b915645
fix(schema): never force-bake 'native' before the source is probed
sepion02 Jul 29, 2026
67880f6
refactor: schema region consolidation + playback cap + deep-agent fold
EtienneLescot Jul 28, 2026
170f9a1
fix(docs,speed): repoint folded doc link, correct the cap comment
sepion02 Jul 28, 2026
d7439c2
revert(speed): restore the 100x playback cap
sepion02 Jul 28, 2026
cffe188
perf: hoist v3/v4/v5 schema migrations to load-time
EtienneLescot Jul 28, 2026
e95ba8e
fix(schema): keep the migration composer out of the aliased module graph
sepion02 Jul 28, 2026
8e8a75e
feat(export): add native GIF export pipeline (slice 1, behind flag)
EtienneLescot Jul 28, 2026
2987f14
fix(gif): one trailer per file, clean up a failed export, revert lock…
sepion02 Jul 28, 2026
4a24999
refactor(export): drive GIF from the video exporter's own frame walk
sepion02 Jul 28, 2026
503519e
feat(export): route GIF through the native exporter, delete the pixi …
sepion02 Jul 28, 2026
cb9a392
chore(pixi): remove pixi.js — the last consumers were already dead code
sepion02 Jul 29, 2026
694fa7e
perf(timeline): stop the playhead from re-rendering the whole editor …
EtienneLescot Jul 29, 2026
f8a15af
perf(preview): chemin rapide de seek — ne plus jeter l'état du décode…
EtienneLescot Jul 29, 2026
fbf5871
fix(preview): le <video> ne dicte plus la position de la timeline à l…
EtienneLescot Jul 29, 2026
b586cd8
perf(preview): livrer la frame sans la copier
EtienneLescot Jul 29, 2026
bf32268
chore(perf): sonde de fluidité de l'UI, segmentée par état
EtienneLescot Jul 30, 2026
7a73575
perf(timeline): ne plus re-rendre la timeline à chaque événement sour…
EtienneLescot Jul 30, 2026
bc19977
Revert "perf(timeline): ne plus re-rendre la timeline à chaque événem…
EtienneLescot Jul 30, 2026
0342368
chore(perf): la sonde sépare les mesures d'avant et d'après un franch…
EtienneLescot Jul 30, 2026
357191e
perf(preview): ne plus rouvrir les décodeurs quand seul le segment ch…
EtienneLescot Jul 30, 2026
571114c
fix(preview): vider le cache de SRV quand un jeu de décodeurs est fermé
EtienneLescot Jul 30, 2026
bee2f6b
fix(preview): repli sûr quand le repositionnement échoue, et ne plus …
EtienneLescot Jul 30, 2026
676745d
chore(perf): la sonde distingue le scrub timeline du scrub barre de p…
EtienneLescot Jul 30, 2026
55efd98
perf(transport): coalescer le drag de la barre de progression en rAF
EtienneLescot Jul 30, 2026
1d2a721
perf(transport): écrire le curseur de la barre directement dans le DO…
EtienneLescot Jul 30, 2026
1d8d158
feat(compositor): fail legibly when D3D11 init fails, instead of fall…
EtienneLescot Jul 27, 2026
8b8e131
docs(compositor): correct the WGC rationale -- capture is not mandatory
EtienneLescot Jul 27, 2026
3c86efb
feat(compositor): add a CPU backend -- WARP render + software decode,…
EtienneLescot Jul 27, 2026
128bcfb
feat(compositor): select the CPU backend automatically, and tell the …
EtienneLescot Jul 27, 2026
dcb8c45
feat(compositor): let the CPU backend reach the export encoder
EtienneLescot Jul 27, 2026
0728905
fix(compositor): CPU backend reach on the GIF-refactored pipeline
Jul 29, 2026
bb6e3a0
feat(compositor): scaffold macOS Metal+VideoToolbox port
Jul 28, 2026
05e315f
feat(compositor): mac_frames.rs — software decode → NV12 → CVPixelBuf…
Jul 28, 2026
e0e6635
feat(compositor): add d3d_macos, text_macos, wrapper_macos — backend …
Jul 28, 2026
9e22584
feat(compositor): compositor_macos — Compositor skeleton, CVMetalText…
Jul 28, 2026
004d8f1
feat(compositor): shaders.metal — MSL port of all 9 shader entry points
Jul 28, 2026
6fbba2e
feat(compositor): pipeline_macos — VideoToolbox hwaccel decode + dual…
Jul 28, 2026
145da9e
fix(compositor/build.rs): discover macOS SDK via xcrun on macOS
Jul 28, 2026
95f0add
fix(ci): indent the build: job so the macOS job parses
Jul 28, 2026
6614cea
feat(compositor): compositor_macos engine — render targets, MSL pipel…
Jul 28, 2026
66094a8
feat(compositor): pipeline_macos::Decoder — seek / next / cur_time_se…
Jul 28, 2026
c3b1b1c
feat(compositor): pipeline_macos::VideoEncoder — h264_videotoolbox + …
Jul 28, 2026
60a5845
feat(compositor): pipeline_macos::run_composited_multi — multi-clip e…
Jul 28, 2026
aa2cf64
feat(compositor): text_metal — CoreText/CoreGraphics text rasterizer
Jul 28, 2026
e365b11
fix(compositor): dedup `pub mod live` and `pub mod pipeline` in lib.rs
Jul 29, 2026
1773eba
fix(compositor/build.rs): reach the macOS ffmpeg and libclang at all
sepion02 Jul 29, 2026
03a0de3
fix(compositor): AVERROR(EAGAIN) is -35 on macOS, not -11
sepion02 Jul 29, 2026
debd755
refactor(compositor): move the timeline walk out of the Windows pipeline
sepion02 Jul 29, 2026
0f7b9b6
fix(compositor): port shaders.metal to MSL that actually compiles
sepion02 Jul 29, 2026
904b3d2
feat(compositor): make the Metal engine produce a frame
sepion02 Jul 29, 2026
758b5d8
fix(compositor): rewrite text_macos.rs on the CoreText C API
sepion02 Jul 29, 2026
e484274
fix(app): open the HUD without waiting for the microphone prompt
sepion02 Jul 29, 2026
2933405
fix(compositor-view): actually find the addon, unpackaged and packaged
sepion02 Jul 29, 2026
7fa5068
build(mac): add the macOS compositor addon build script
sepion02 Jul 29, 2026
8b261ac
ci(macos): run the compositor tests, not just a type-check
sepion02 Jul 29, 2026
bff9974
fix(build,test): unblock tsc, and stop assuming an x64 host
sepion02 Jul 29, 2026
9833783
docs(compositor): repoint the module map at the per-platform files
sepion02 Jul 29, 2026
81da1d4
ci(windows): cargo check the compositor on every PR
sepion02 Jul 29, 2026
1c78d62
refactor(compositor): move the pure geometry into frame_geometry
sepion02 Jul 29, 2026
56cc43a
refactor(compositor): one LayerCB, one LiveParams, for both backends
sepion02 Jul 29, 2026
ff7a5a8
refactor(compositor): compose_frame's geometry becomes plan_frame
sepion02 Jul 29, 2026
221fcb9
fix(build/mac): install the addon by rename, not by overwriting it
sepion02 Jul 29, 2026
258ecab
fix(compositor): three MSL modes that were mis-ported from HLSL
sepion02 Jul 29, 2026
98f6589
feat(compositor): draw the layers on Metal, not just the video
sepion02 Jul 29, 2026
826e1b1
feat(compositor): render the cursor on Metal, trail included
sepion02 Jul 29, 2026
6ce3db7
feat(compositor): wire the dual-Kawase background blur on Metal
sepion02 Jul 29, 2026
62bfe0b
fix(compositor): the shadow fix landed in dead code, and two more div…
sepion02 Jul 29, 2026
d5f9fb2
feat(compositor): render the 3D tilt on Metal — and unbreak modes 8, …
sepion02 Jul 29, 2026
61c0be8
fix(compositor): the three annotation modes were each a different shader
sepion02 Jul 29, 2026
7e69db6
feat(compositor): draw annotations on Metal, and call the CoreText ra…
sepion02 Jul 29, 2026
8039c02
feat(compositor): macOS export encodes — first MP4 out of the Metal e…
sepion02 Jul 29, 2026
1c48557
test(compositor): pin the iso-render claim to a number
sepion02 Jul 29, 2026
3ed2567
feat(compositor): mux audio into the macOS export
sepion02 Jul 29, 2026
10f68c3
fix(compositor): the annotation blur sampled mip 0 and so blurred not…
sepion02 Jul 29, 2026
f93b964
fix(compositor): text annotations were rendered upside down
sepion02 Jul 29, 2026
d5757cc
perf(compositor): 2.4x on macOS export — VideoToolbox was the slow path
sepion02 Jul 29, 2026
bfb5fdf
perf(compositor): render NV12 straight into the encoder's CVPixelBuffer
sepion02 Jul 29, 2026
1e77d82
build(mac): ship the ffmpeg dylibs, and vendor them LGPL by construction
sepion02 Jul 29, 2026
0104115
fix(compositor): mac was missing clear_srv_cache after the rebase ont…
sepion02 Jul 30, 2026
9c7c871
feat(compositor): re-express the Linux port on the v1.8.0 cross-backe…
EtienneLescot Jul 30, 2026
69158fe
feat(compositor): draw text annotations in compositor_linux (WGSL mod…
EtienneLescot Jul 30, 2026
cc51759
feat(compositor): draw the webcam PiP in compositor_linux compose_frame
EtienneLescot Jul 30, 2026
0b875bd
feat(compositor): background blur (dual-Kawase) in compositor_linux
EtienneLescot Jul 30, 2026
4e7859c
feat(compositor): themed cursor sprite (mode 7) in compositor_linux
EtienneLescot Jul 30, 2026
0cd452b
feat(compositor): Linux video export (WP6) — software encode + MP4 mux
EtienneLescot Jul 30, 2026
cd0d03d
feat(compositor): mux AAC audio in Linux export (WP6)
EtienneLescot Jul 30, 2026
6a2e1aa
feat(compositor): image background (WGSL mode 6 wallpaper) in composi…
EtienneLescot Jul 30, 2026
a849762
fix(hud): -0 out of Math.round crashed the main process on Wayland
sepion02 Jul 30, 2026
23b08d1
fix(hud): the drag region sat on the window root, not the grab handle
sepion02 Jul 30, 2026
49dbc9a
build(vite): stop watching the vendored ffmpeg tree
sepion02 Jul 30, 2026
14d2ebc
style(compositor): repair the mojibake and CRLF in the Linux sources
sepion02 Jul 30, 2026
f431e3a
fix(compositor): indexing the array twice made naga emit invalid SPIR-V
sepion02 Jul 30, 2026
af6f37c
build(linux): build the native compositor addon
sepion02 Jul 30, 2026
c005c06
fix(compositor): the addon bound to Chromium's ffmpeg, not ours
sepion02 Jul 30, 2026
67a125f
Revert "fix(compositor): the addon bound to Chromium's ffmpeg, not ours"
sepion02 Jul 30, 2026
933d31b
fix(compositor): rename the ffmpeg symbols so Chromium's cannot win
sepion02 Jul 30, 2026
02312d7
perf(compositor): stop re-seeking the decoder for every sequential frame
sepion02 Jul 31, 2026
8d4ffa6
perf(compositor): the readback zero-filled 8 MB it overwrote a line l…
sepion02 Jul 31, 2026
3b61766
fix(compositor): rewind and scan when the file has no seek index
sepion02 Jul 31, 2026
87f2c87
feat(cursor): capture real cursor telemetry on Wayland via the Screen…
sepion02 Jul 31, 2026
46b6448
fix(compositor): the webcam froze because the seek flag was 4, not 1
sepion02 Jul 31, 2026
8b5fc6f
perf(compositor): pipeline the export readback instead of stalling on it
sepion02 Jul 31, 2026
e47b382
fix(recording): remux Linux captures so they carry a real Duration
sepion02 Jul 31, 2026
513c6d8
docs(hud): record why the cursor-mode toggle is Windows/macOS only
sepion02 Jul 31, 2026
32b89c6
feat(capture): give the Linux helper a hardware H.264 encoder
sepion02 Jul 31, 2026
1307859
feat(capture): the Linux helper now records video, not just the cursor
sepion02 Jul 31, 2026
636cff4
feat(capture): record system audio and the microphone alongside the v…
sepion02 Jul 31, 2026
857ea64
feat(recording): route Linux capture through the native helper
sepion02 Jul 31, 2026
15b5244
fix(preview): stop leaking a decoded frame per scrub step
sepion02 Jul 31, 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
  •  
  •  
  •  
9 changes: 9 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# The compositor is developed across Windows, macOS and Linux. Without this, a
# checkout on Windows can reintroduce CRLF and the shader sources drift from the
# `end_of_line = lf` / `charset = utf-8` that .editorconfig already mandates —
# which is how blur.wgsl, layer.wgsl and linux_decode.rs ended up with CRLF and
# double-encoded French comments in the first place.
*.wgsl text eol=lf
*.rs text eol=lf
*.ts text eol=lf
*.tsx text eol=lf
112 changes: 109 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
- name: Typecheck tests against a baseline
shell: bash
env:
BASELINE: 80
BASELINE: 71
run: |
set -uo pipefail
COUNT=$(npx tsc -p tsconfig.test.json --noEmit 2>&1 | grep -c 'error TS' || true)
Expand Down Expand Up @@ -88,8 +88,6 @@ jobs:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup
- run: npm run test
- run: npm run test:browser:install
- run: npm run test:browser

build:
name: Build
Expand All @@ -99,6 +97,114 @@ jobs:
- uses: ./.github/actions/setup
- run: npx vite build

# PR #189 — port macOS du compositor (Metal + VideoToolbox).
#
# Compile check on a `macos-14` runner (Apple Silicon). Verifies that the
# scaffold + engine-layer code added by #189 actually compiles for
# `aarch64-apple-darwin` — bindgen + cc on macOS produce the ffmpeg FFI
# bindings + the VideoToolbox context that the Rust crate statically
# references, and the `metal`/`objc`/`block`/`core-foundation` crates need
# their macOS system frameworks (Metal/CoreVideo/CoreMedia) linked.
#
# ffmpeg via Homebrew: this job installs `ffmpeg` from homebrew-core on the
# runner to satisfy bindgen + the cargo:rustc-link-lib lines for avformat/
# avcodec/avutil/swscale/swresample. NB: homebrew's `ffmpeg` is GPL-3.0 (it
# bundles x264/x265/svt-av1 etc.) — that is fine for a CI compile-check, but
# the dev/runtime story is different: `scripts/fetch-ffmpeg.mjs` documents
# that BtbN publishes no macOS build, so a pinned LGPL macOS dylib has to
# land separately before we can ship. The vendored `electron/native/bin/
# darwin-*/` directory is the runtime pin and is empty today.
#
# Why this job runs at all today: every commit on #189 that touches
# compositor_macos.rs / pipeline_macos.rs / mac_frames.rs / shaders.metal /
# d3d_macos.rs / text_macos.rs is unverifiable from Windows (cross-compile
# requires the macOS SDK + headers, which we don't have). This job is the
# only signal that the macOS-side Rust still type-checks.
#
# `cargo test`, NOT just `cargo check` — and that difference is the whole point.
# Three of the bugs that kept the first macOS run from rendering anything are
# invisible to a type-check and are each pinned by a test now:
# * `shaders.metal` is compiled AT RUNTIME by `new_library_with_source`, so a
# whole file of invalid MSL (HLSL's global `cbuffer`/`Texture2D` have no MSL
# equivalent) type-checks perfectly — `every_shader_entry_point_compiles`
# catches it. macos-14 runners have a real Metal device, so it runs for real.
# * `AVERROR(EAGAIN)` is -11 on Windows/Linux and -35 on macOS. A hardcoded -11
# compiles anywhere and silently decodes zero frames —
# `averror_constants_match_the_ffmpeg_macros` confronts it with shim.c.
# * pipeline-state creation rejects shader/attachment mismatches only at
# `newRenderPipelineState` time — `the_compositor_builds_on_the_system_device`.
rust-macos-compositor-check:
name: Rust test (macOS compositor)
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --target aarch64-apple-darwin
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Install ffmpeg (homebrew-core) and verify headers/libs
run: |
brew update
brew install ffmpeg
ls /opt/homebrew/opt/ffmpeg/include | head -5
ls /opt/homebrew/opt/ffmpeg/lib | head -5
/opt/homebrew/opt/ffmpeg/bin/ffmpeg -hide_banner -version | head -1
# MAC_FFMPEG_DIR only reaches build.rs because it now takes precedence over
# FFMPEG_DIR on macOS. crates/.cargo/config.toml sets FFMPEG_DIR in a GLOBAL
# [env] block (cargo has no [target.<cfg>.env] — the macOS section in that file
# is inert and cargo warns "unused key"), so before that change this job pointed
# bindgen at the win64 tree and could never have gone green.
- name: cargo test (compositor, aarch64-apple-darwin)
env:
MAC_FFMPEG_DIR: /opt/homebrew/opt/ffmpeg
run: |
cd crates
cargo test -p openscreen-compositor --lib --tests
- name: cargo build (napi addon)
env:
MAC_FFMPEG_DIR: /opt/homebrew/opt/ffmpeg
run: |
cd crates
cargo build -p compositor-view-napi --release

# The Windows half of the compositor had NO type-check on any pull request.
# `ci.yml`'s only Rust job is the macOS one above; `compositor_windows.rs` — the
# 3654-line D3D11 engine that every Windows user actually runs — is compiled
# exclusively by `build.yml`'s `build-windows` step (`npm run build:win`), and
# build.yml triggers only on `push: tags: v*` or `workflow_dispatch`. A typo in
# that file therefore surfaced when someone cut a release, not when they pushed it.
#
# That gap is what makes any cross-platform refactor of the compositor a blind
# edit, so it gets closed before the refactor rather than after.
#
# `cargo check`, not `build`: the point is "does the Windows engine still compile",
# and check is roughly half the wall-time of a full build on a windows runner.
rust-windows-compositor-check:
name: Rust check (Windows compositor)
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
# bindgen needs libclang. `crates/.cargo/config.toml` pins LIBCLANG_PATH to
# C:\Program Files\LLVM\bin, which is where the windows-latest image already
# has LLVM — so the pin resolves with no extra install.
- name: Check LLVM is where the cargo config expects it
shell: bash
run: ls "/c/Program Files/LLVM/bin/libclang.dll"
# Vendors the pinned BtbN LGPL-shared build into
# crates/thirdparty/ffmpeg-n8.1.2-win64-lgpl-shared — the exact directory
# FFMPEG_DIR points at (crates/.cargo/config.toml). build.rs reads the headers
# from there and links the import libs.
- name: Vendor the pinned ffmpeg
run: npm run fetch:ffmpeg
- name: cargo check (compositor + napi addon)
shell: bash
run: |
cd crates
cargo check -p openscreen-compositor -p compositor-view-napi --all-targets

semantic-pr:
name: Validate PR title (semantic)
runs-on: ubuntu-latest
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ dist-ssr
/electron/native/screencapturekit/.build/
/electron/native/screencapturekit/.swiftpm/
/electron/native/bin/
/electron/native/pipewire-capture/build/
/electron/native/pipewire-capture/target/

# Native macOS generated files
DerivedData/
Expand Down
23 changes: 20 additions & 3 deletions THIRD-PARTY-NOTICES.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,28 @@ distributed by their own registries, not redistributed inside our binaries.
- The speech model (`ggml-*.bin`) is **not** bundled — it is downloaded into the
user's data directory on first use by `electron/stt/modelManager.ts`.

## PipeWire — headers (Linux only)

- **Components**: header sources under
`electron/native/pipewire-capture/vendor/pipewire-1.0.5/include/`, compiled
into `openscreen-pipewire-helper` (the Linux cursor/capture helper) under
`resources/electron/native/bin/linux-*/`.
- **License**: **MIT** — <https://gitlab.freedesktop.org/pipewire/pipewire>.
Every vendored file keeps its upstream `SPDX-License-Identifier: MIT` header,
and the project's licence text is copied alongside them as `COPYING`.
- **Upstream**: PipeWire release 1.0.5. Only the header subset the helper
includes was vendored; `vendor/README.md` records exactly what was copied and
how to reproduce the selection.
- **No PipeWire binary is redistributed.** The helper resolves
`libpipewire-0.3.so.0` with `dlopen` at runtime, from the user's own system,
so nothing of PipeWire's ships inside our installers beyond the compiled
result of its headers (inline functions and struct layouts).

## OpenScreen native helpers

`wgc-capture` (Windows Graphics Capture), the ScreenCaptureKit helper (macOS)
and the D3D11 compositor addon are part of this repository and are covered by
[LICENSE](LICENSE).
`wgc-capture` (Windows Graphics Capture), the ScreenCaptureKit helper (macOS),
the PipeWire helper (Linux) and the compositor addon are part of this repository
and are covered by [LICENSE](LICENSE).

---

Expand Down
7 changes: 7 additions & 0 deletions crates/.cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,10 @@
[env]
FFMPEG_DIR = { value = "thirdparty/ffmpeg-n8.1.2-win64-lgpl-shared", relative = true }
LIBCLANG_PATH = "C:\\Program Files\\LLVM\\bin"

# macOS : BtbN ne publie pas de build macOS (cf. scripts/fetch-ffmpeg.mjs), donc on
# laisse `crates/compositor/build.rs` chercher MAC_FFMPEG_DIR (env var explicite posée
# par la CI macOS ou par le dev local) ou un répertoire attendu sous `thirdparty/`.
# LIBCLANG_PATH est inutile sur macOS (clang est dans CommandLineTools), on ne le
# pose donc pas.
[target.'cfg(target_os = "macos")'.env]
9 changes: 7 additions & 2 deletions crates/.gitignore
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
# build
/target
# `cargo test` lancé DEPUIS crates/compositor/ y crée son propre target/, et les tests
# compose_linux y écrivent leurs PPM de preuve. Même nature que /target ci-dessus.
/compositor/target

# dépendance téléchargée : build ffmpeg LGPL-shared BtbN (~160 Mo, voir README)
/thirdparty

# sorties générées (vidéos C*.mp4, PNG, GIF, dumps)
/out
# sorties générées (vidéos C*.mp4, PNG, PPM, GIF, dumps). Le glob couvre les `--out`
# nommés par backend (out-hw/, out-cpu/) : un PPM de preuve pèse 6 Mo et il en sort un
# par cfg et par backend.
/out*
*.raw
*.nv12

Expand Down
Loading
Loading