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
19 changes: 12 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ Every panel is a tab you can drag, split, or stack.
| Scenes | Pick the scene in preview, and add, rename (double-click), reorder, or remove one. A scene on program, or still fading out, cannot be removed, even by an undo, until program cuts away from it. |
| History | See every edit, and undo or redo back to any of them. |
| Items | Place, show, hide, and order what the preview scene or the top layer draws, back to front. Select an item to filter or copy it. |
| Sources | Add a source by hand, see whether each and its own track are live and where it is shown, clone one, and remove one. Select a source to filter it. A camera or broadcast without a new picture, or a microphone or system audio without new sound, for a second reads as stalled. A browser source shows whether its page is copied on the GPU or, as a fallback, uploaded from memory (CPU), in place of a track. |
| Sources | Add a source by hand, see whether each and its own track are live and where it is shown, clone one, and remove one. Select a source to filter it. A camera or broadcast without a new picture, or a microphone or system audio without new sound, for a second reads as stalled. A browser source shows whether its page is copied on the GPU or, as a fallback, uploaded from memory (CPU), in place of a track, and **Reload** restarts its page. |
| Devices | List this machine's cameras, displays, windows, and audio inputs, and add one as a source. |
| Guests | Invite a guest, show their join link as a QR code, see who joined, and take a guest out of every scene. |
| Filters | Crop the selected source or item, add, order, and set its filters, set an item's blend mode, and copy or paste filters. |
Expand Down Expand Up @@ -142,12 +142,17 @@ or not its scene is live; mute a source to leave it out.

A browser source renders a web page, such as an overlay, alert box, or chat
widget, at the canvas frame rate (CEF caps it at 60) over a transparent
background, and its sound joins the program audio. Each page runs in a
process of its own, so a page or browser crash fails that source, with the
reason, while the stream carries on; edit or re-add the source to restart it.
Every start is a fresh profile: no cookies or logins persist. A page opens
no other windows (`window.open` and new-tab links do nothing), and its
dropdown lists, such as a `<select>`'s, are not drawn yet.
background, and its sound joins the program audio. Every page shares one
browser profile, kept in `$XDG_DATA_HOME/moq-studio/browser`
(`~/.local/share/moq-studio/browser` by default) rather than beside the scene
file, so cookies and logins, such as an alert service's, survive a reload and
a restart of the studio. One studio at a time can use it: a second one's
browser sources fail saying so. Each page renders in a process of its own, so
a page that crashes fails only its own source, with the reason, while the
stream carries on. A crash of the browser itself fails every browser source.
**Reload** in Sources restarts a page, failed or not. A page opens no other
windows (`window.open` and new-tab links do nothing), and its dropdown lists,
such as a `<select>`'s, are not drawn yet.

## Guests

Expand Down
1 change: 0 additions & 1 deletion quest/m0/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ repository.
- [Audio mixes](/quest/m0/mixes.md) - per-output mixes, meters, monitoring, and sync offsets
- [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
- [Browser sources keep a profile](/quest/m0/browser-profile.md) - one persistent profile, so logins survive restarts, and a reload action
- [Browser source popups](/quest/m0/browser-popups.md) - dropdowns and other in-page popups draw and take input
- [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
Expand Down
24 changes: 0 additions & 24 deletions quest/m0/browser-profile.md

This file was deleted.

15 changes: 9 additions & 6 deletions quest/m0/browser-source.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
Browser sources run on macOS and Windows as they do on Linux: a URL (an
overlay, alert box, or chat widget) renders into the compositor at the canvas
frame rate, the creator can interact with it, its audio joins the bus, and a
crash in the browser process drops that source, never the stream.
crash drops browser sources, never the stream: a page's renderer only its own
source, the shared browser process every browser source.

## Plan

Expand All @@ -20,11 +21,13 @@ Decided 2026-10-22: use CEF through `cef-rs`, desktop only.
path is the fallback and shows in stats.
- **Process:** CEF runs out of process.

Linux landed first (`moq_scene::browser`): one helper process per page,
which is the studio's executable started again, talking over a Unix socket
on its stdin that carries the DMA-BUF descriptors, and `cef-rs`'s
`osr_texture_import` copies each texture on the studio's device. What the
other platforms need on top:
Linux landed first (`moq_scene::browser`): one helper process every page
shares, on one persistent profile, which is the studio's executable started
again, talking over a Unix socket on its stdin that carries the DMA-BUF
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
descriptors, and `cef-rs`'s `osr_texture_import` copies each texture on the
studio's device. The profile lives in the XDG data directory
(`engine::browser_profile`); each platform keeps it in its own per-user data
directory instead. What the other platforms need on top:
- **Windows:** a channel without Unix sockets, such as the helper's stdio
pipes. The studio duplicates CEF's NT handle out of the helper with
`DuplicateHandle` before `cef-rs` imports it.
Expand Down
Loading