Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion quest/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ there first. A quest here that needs it waits on a pin quest, which
## Required

- [m0: the studio](/quest/m0/README.md) - the native and wasm studio for creators who rely on OBS today
- [m1: viewers compose](/quest/m1/README.md) - viewers and a server compose a broadcast from its sources and a layout track
- [m1: after the studio ships](/quest/m1/README.md) - viewers and a server compose a broadcast from its sources and a layout track, plus studio features held past m0
- [m2: later](/quest/m2/README.md) - work with no consumer yet
2 changes: 1 addition & 1 deletion quest/m0/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,14 +99,14 @@ repository.
- [Clap-to-measure sync delay](/quest/m0/sync-clap.md) - a clap sets a microphone's delay against its camera
- [Audio filters](/quest/m0/audio-filters.md) - per-source noise suppression, gate, compressor, limiter, and plugins, configured from the studio
- [Browser sources on macOS and Windows](/quest/m0/browser-source.md) - the out-of-process CEF pages Linux has, with shared GPU textures on the other desktops
- [Published independently](/quest/m0/publish-independently.md) - a source opts out of the program and publishes its own track for services that place it themselves
- [Web studio](/quest/m0/web.md) - the full studio in wasm on WebGPU and WebCodecs, served from this repository
- [Virtual camera](/quest/m0/vcam/README.md) - a canvas's program exposed as a system camera on Linux, Windows, and macOS
- [Clean quit](/quest/m0/clean-quit.md) - quitting finishes every track and closes the relay session, so the broadcast's tail arrives
- [Recover crashed recordings](/quest/m0/recording-repair.md) - a recording a crash left unfinished is repaired beside the original at launch
- [Premultiplied source sampling](/quest/m0/premultiply.md) - scaled transparent sources draw without edge fringes
- [Deterministic browser source startup](/quest/m0/cef-startup.md) - CEF on the CPU path paints its first frame without the GPU fallback hang
- [A browser renderer that dies on its first page](/quest/m0/browser-first-crash.md) - a renderer lost during the first navigation fails its source
- [Browser sources without an X display](/quest/m0/cef-headless.md) - CEF runs headless, so Wayland sessions and tests need no X server
- [Signing identities are available](/quest/m0/signing.md) - the Apple and Windows code-signing credentials packaging and the macOS camera need
- [Packaging](/quest/m0/packaging.md) - signed installers for macOS and Windows and a Flatpak for Linux
- [The persistable portal restore token is pinned](/quest/m0/pin-portal-token.md) - moq-video's restore token, for Wayland sources
Expand Down
32 changes: 32 additions & 0 deletions quest/m0/cef-headless.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# [S] Browser sources without an X display

## Goal

Browser sources run with no X server or `$DISPLAY` on both the CPU path and
the GPU (shared DMA-BUF texture) path, so the studio's CEF helper works under a
pure Wayland session without XWayland and `just render-sw` no longer needs
`xvfb-run`. Copy and paste under Interact still reach the desktop clipboard.

## Plan

From [moq-dev/studio#49](https://github.com/moq-dev/studio/pull/49), picked
2026-11-05 (maintainer, /quest-plan), m0 by the rule that fixes join m0. With
`--disable-gpu` alone CEF still fails with "Missing X server or $DISPLAY"; a
trial adding `--ozone-platform=headless` on the CPU path passed 10/10 runs
with no display at about 0.4 s, and the browser suite matched Xvfb.

Check first, and record the result in the PR:
- Whether Copy and Cut under Interact still reach the desktop clipboard with
the headless platform; if not, the studio's own clipboard (egui) relays
them.
- Whether the GPU path can go headless too. If it cannot, land the CPU path
and rewrite this quest to the GPU path's remaining work, with what blocks
it.

Then drop the `xvfb-run` wrapper from the `render-sw` recipe in the
`justfile` (the nightly job inherits it through the recipe), and say in
`README.md` that browser sources need no X server.

## Required

- [Deterministic browser source startup](/quest/m0/cef-startup.md) - the `--disable-gpu` CPU path this builds on
2 changes: 1 addition & 1 deletion quest/m1/compose/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ more encoder sessions than a consumer GPU has (decided 2026-11-03 on
are not published to the relay by default: a source's own track encodes only
while something in the studio uses it, such as an isolated recording or a
replay, and reaches viewers only when the creator ticks
[Published independently](/quest/m0/publish-independently.md). The Delivery
[Published independently](/quest/m2/publish-independently.md). The Delivery
and Cost bullets above, and this epic's parity goal, are deferred with it: a
source published independently is left out of the program, so no picture a
viewer composes from fetchable tracks matches the program today. When this
Expand Down
2 changes: 1 addition & 1 deletion quest/m1/compose/layout.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,5 @@ their scene went on program, so the layout says when that was on the media
clock, and a viewer that joins late lands at the same point of them.

Only sources the creator publishes independently
([Published independently](/quest/m0/publish-independently.md)) have tracks a
([Published independently](/quest/m2/publish-independently.md)) have tracks a
viewer can fetch; the rest reach viewers only in the program.
16 changes: 16 additions & 0 deletions quest/m2/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# m2: later

## Goal

Work with no consumer yet, held until m0 and m1 ship or until something needs
it.

## Plan

Opened 2026-11-05 (maintainer, /quest-plan) for publishing a source
independently, which no service uses yet. A quest moves up to m0 or m1 when a
consumer appears.

## Required

- [Published independently](/quest/m2/publish-independently.md) - a source opts out of the program and publishes its own track for services that place it themselves
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ mix on program) or while something reads its track, and naming a published
source among those on program (`Publish::set_on_program` in
`rs/moq-scene/src/publish.rs`) keeps it encoding.

Moved to m2 on 2026-11-05 (maintainer, /quest-plan): no service places
sources itself yet, so it waits behind m0 and m1.

Low priority: this is for services that move webcams and overlays themselves,
and none exists yet. The option lives on the source, in the scene file, so it
travels with the scene. The option and its effect on the program change what a
Expand Down