Repository navigation
quest: plan studio autosave, scene editing, broadcast sync, Wayland sources #6839
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| # [S] Studio autosave | ||
|
|
||
| ## Goal | ||
|
|
||
| `moq-studio` writes every change to the scene collection to its scene file | ||
| shortly after it happens, with no save step and no prompt on quit. A crash | ||
| loses at most the edits inside the debounce window. A failed write shows in the | ||
| UI rather than being dropped. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-26 (maintainer): autosave, not a dirty flag and a quit prompt. | ||
| Debounce bursts such as dragging a slider, flush on quit, and write | ||
| atomically (temporary file plus rename) so a crash never leaves a half-written | ||
| file. The scene file stays diffable, so an autosave that changes nothing | ||
| writes nothing. A scene path that does not exist yet is created by the first | ||
| autosave, replacing the guide's "created on the first save" and | ||
| **File > Save**. Update `doc/bin/studio.md`. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| # [M] Broadcast sources play in sync | ||
|
|
||
| ## Goal | ||
|
|
||
| A subscribed MoQ broadcast in `moq-studio`, guests included, plays its audio | ||
| and video on the publisher's timestamps, so lip sync holds through network | ||
| jitter and stalls. Today each track plays at its own live edge, so a stall | ||
| can leave audio and video apart. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-26 (maintainer): | ||
|
|
||
| - **Scope:** broadcast sources only. Local devices keep the manual | ||
| per-source offsets in [Audio mixes](/quest/m3/studio/mixes.md). | ||
| - **Delay:** reuse `moq play`'s timing, the `--delay auto` target from | ||
| moq-audio's jitter estimate (`rs/moq-audio/src/jitter.rs`, | ||
| `doc/concept/audio-jitter.md`), rather than a second algorithm or a manual | ||
| setting. As in `moq play`, the estimate is the broadcast's audio track's, | ||
| and video follows it rather than keeping its own, so one delay governs the | ||
| whole broadcast. A broadcast with no audio keeps video's own short delay. | ||
| Show each source's delay in the UI. | ||
|
|
||
| Lift the shared part out of `moq play` into a library both binaries use, | ||
| rather than copying it. The video side holds frames until their audio-aligned | ||
| time, and a source still repeats its last frame rather than stalling the | ||
| canvas. This replaces the live-edge behavior the studio app PR chose, where | ||
| replaying a publisher's timestamp gaps pushed audio behind its own video. Here | ||
| video waits for audio instead. Update `doc/bin/studio.md`. | ||
|
|
||
| ## Related | ||
|
|
||
| - [Audio jitter target](/quest/m1/audio-jitter-target/README.md) - the delay estimate this reuses | ||
| - [Guests](/quest/m3/studio/guests.md) - guests are broadcast sources and inherit this |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| # [M] Scene editing | ||
|
|
||
| ## Goal | ||
|
|
||
| In `moq-studio`, scenes can be renamed and reordered, and the canvas can be | ||
| resized while live, with no restart. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-26 (maintainer): a resize while publishing adds a new video | ||
| rendition under a new track name in a catalog update, and viewers switch to | ||
| it. A track name never changes what it means (AGENTS.md), so the old track | ||
| ends rather than changing resolution mid-stream. The compositor reallocates | ||
| its canvas textures and the program encoder restarts on the new size. | ||
|
|
||
| A rename updates every reference to the scene in the collection. Reordering | ||
| is the order of the scene file's list. Update | ||
| `doc/bin/studio.md`. | ||
|
|
||
| ## Related | ||
|
|
||
| - [Multiple canvases](/quest/m3/studio/multi-canvas.md) - canvases of different sizes at once, sharing the resize path |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| # [M] Wayland display and window sources | ||
|
|
||
| ## Goal | ||
|
|
||
| On a Wayland desktop, `moq-studio` adds display and window sources through | ||
| the xdg-desktop-portal picker. A source the user approved once reopens | ||
| without the picker, across restarts of the studio. Today display and window | ||
| sources capture only X11 and XWayland. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-26 (maintainer): | ||
|
|
||
| - **Token:** the portal restore token is persisted, which | ||
| [Linux capture parity](/quest/m2/capture-linux.md) makes possible in | ||
| moq-video. This quest consumes it. | ||
| - **Storage:** the token lives in per-machine state (the XDG state directory, | ||
| keyed by scene collection and source), never in the scene file, so the scene | ||
| file stays portable and diffable. On another machine, or when the portal | ||
| rejects the token, the picker shows once and the new token is stored. | ||
| - **Scene file:** the scene item records that the source is portal-picked, not | ||
| which monitor or window was picked, since only the portal knows that. | ||
|
|
||
| Add the source kinds next to the X11 ones in moq-scene and the Sources panel, | ||
| and update `doc/bin/studio.md`, which says display and window sources are | ||
| X11-only. | ||
|
|
||
| ## Required | ||
|
|
||
| - [Linux capture parity](/quest/m2/capture-linux.md) - the portal restore token becomes persistable |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.