Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
dadb090
chore(quest): claim quest/m0/encode-control.md
kixelated Nov 3, 2026
599ea4b
wip: ladder
kixelated Nov 3, 2026
2b4b46e
feat(studio)!: simulcast ladders that follow the bandwidth grant
kixelated Nov 3, 2026
7c3a72a
Merge remote-tracking branch 'origin/main' into quest/m0/encode-control
kixelated Nov 3, 2026
33d4e1d
Merge remote-tracking branch 'origin/main' into quest/m0/encode-control
kixelated Nov 4, 2026
79c6084
feat(studio)!: a two-size program that follows the bandwidth grant, a…
kixelated Nov 4, 2026
66becb6
docs: two-size program, local source tracks, and replay of a source o…
kixelated Nov 4, 2026
ab18068
Merge remote-tracking branch 'origin/main' into quest/m0/encode-control
kixelated Nov 4, 2026
cc7e87f
quest: finish live encode control
kixelated Nov 4, 2026
0dc4b60
style: rustfmt
kixelated Nov 4, 2026
ce95160
fix(studio): replay the program from a size that holds video, and kee…
kixelated Nov 4, 2026
e3b5b8c
Merge remote-tracking branch 'origin/main' into quest/m0/encode-control
kixelated Nov 4, 2026
7065cb9
fix(scene): a take's renditions stay playable after the publisher dis…
kixelated Nov 4, 2026
cfa287b
Merge remote-tracking branch 'origin/main' into quest/m0/encode-control
kixelated Nov 4, 2026
22baf8a
fix: the half size fails alone, a take prefers pictures over gap mark…
kixelated Nov 4, 2026
6a994eb
fix(scene): rank a take by the pictures it holds inside the span
kixelated Nov 4, 2026
0f41c40
wip: a recording's own canvas-size encoder
kixelated Nov 4, 2026
8cfa730
feat(studio): a recording's own full-quality canvas-size encoder
kixelated Nov 4, 2026
2f71465
Merge remote-tracking branch 'origin/main' into quest/m0/encode-control
kixelated Nov 4, 2026
71b3248
fix(studio): a recording's audio copy restarts on the program clock a…
kixelated Nov 4, 2026
4c91769
Merge remote-tracking branch 'origin/main' into quest/m0/encode-control
kixelated Nov 4, 2026
b874149
fix(scene): rank a take by the time its pictures cover, broken at gaps
kixelated Nov 4, 2026
c30bb5d
Merge remote-tracking branch 'origin/main' into quest/m0/encode-control
kixelated Nov 4, 2026
d0be9dd
fix(studio): a failure of the recording's audio copy is the recording…
kixelated Nov 4, 2026
d571fd0
fix(scene): a still display or window going into use restarts its cap…
kixelated Nov 4, 2026
07c8dbf
fix(scene): a reopened capture maps its timeline onto the program clo…
kixelated Nov 4, 2026
bb666ea
Merge remote-tracking branch 'origin/main' into quest/m0/encode-control
kixelated Nov 4, 2026
e103f9d
Merge remote-tracking branch 'origin/main' into quest/m0/encode-control
kixelated Nov 4, 2026
693188e
Merge remote-tracking branch 'origin/main' into quest/m0/encode-control
kixelated Nov 4, 2026
c95e8e4
quest: record-mix builds on the recording broadcast
kixelated Nov 4, 2026
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
178 changes: 99 additions & 79 deletions README.md

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion quest/m0/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ repository.
- [Audio source tracks](/quest/m0/audio-source-tracks.md) - microphones and system audio get their own tracks, for isolated recording and replay
- [Broadcast sources play in sync](/quest/m0/broadcast-sync.md) - subscribed broadcasts and guests play audio and video on the publisher's timestamps, with `moq play`'s delay
- [Wayland display and window sources](/quest/m0/wayland-sources.md) - portal-picked sources that reopen without the picker
- [Live encode control](/quest/m0/encode-control.md) - simulcast rungs that follow the bandwidth grant, live bitrate and resolution, keyframes on request
- [Keyframes and stingers](/quest/m0/animation.md) - keyframed item properties with easing, and stinger transitions
- [ML video effects](/quest/m0/effects.md) - background removal and other ML effects, baked into their source's track
- [Destinations](/quest/m0/destinations.md) - RTMP, RTMPS, and WHIP push with per-destination codecs and shared encoders, on a UI-free egress library a hosted service can reuse
Expand Down
28 changes: 0 additions & 28 deletions quest/m0/encode-control.md

This file was deleted.

3 changes: 1 addition & 2 deletions quest/m0/publish-independently.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Decided 2026-11-03 (maintainer, on
[moq-dev/studio#21](https://github.com/moq-dev/studio/pull/21)): sources are
not published to the relay by default, since every encoding costs an encoder
session and consumer GPUs have few. A source published independently gets one
rendition, as sources do in the encode ladder, while the program keeps its
rendition, as every source track does, while the program keeps its
two sizes. It counts as used, so it encodes for as long as it is published
([Audio source tracks](/quest/m0/audio-source-tracks.md) states the rule).

Expand All @@ -25,5 +25,4 @@ user does, so `README.md` documents them.

## Related

- [Live encode control](/quest/m0/encode-control.md) - the encode ladder that makes source tracks local by default
- [Viewer-side composition](/quest/m1/compose/README.md) - the m1 epic that composes from independently published sources
17 changes: 7 additions & 10 deletions quest/m0/record-mix.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,16 @@ Split from [Audio mixes](https://github.com/moq-dev/studio/pull/32), which
landed the mixes, routing, meters, delay, listening, and the program's pick
(`[mixes] program`).

A recording reads the studio's broadcast the way a viewer does
(`rs/moq-studio/src/record.rs`), so a mix other than the program's needs an
Opus track of its own. Keep that track off the relay: a mix the creator left
off the stream must not be fetchable from it, as source tracks stay local
after [Live encode control](/quest/m0/encode-control.md). Encode it only while
a recording reads it, and record the program's video beside it in one file.
A recording reads the program from a broadcast the studio keeps off the relay
(`Recording` in `rs/moq-studio/src/engine.rs`, from
[moq-dev/studio#21](https://github.com/moq-dev/studio/pull/21)), beside the
recording's own canvas-size encoder: its Opus track is a second encoding of
the mix on program, made only while a recording reads it. Point that encoding
at the mix the recording picks instead, so a mix the creator left off the
stream is never fetchable from the relay.
The pick lives in the scene file beside `[mixes] program`, and the Output
panel shows it. Update `README.md`.

## Required

- [Live encode control](/quest/m0/encode-control.md) - the local broadcast a mix track stays off the relay in

## Related

- [Destinations](/quest/m0/destinations.md) - each destination picks a mix the same way
9 changes: 6 additions & 3 deletions rs/moq-scene/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@
//! - [`Compositor`] draws the scene in preview and the scene on program into
//! textures on the caller's `wgpu` device, cutting or running a
//! [`Transition`] between them. `moq_video::render::export` hands the
//! program to an encoder, on the GPU where the platform allows.
//! - [`publish`] gives each local source its own track in the studio's
//! broadcast, so viewers can compose the scene themselves.
//! program to an encoder, on the GPU where the platform allows, and a
//! [`Scaler`] draws it smaller for a smaller rendition.
//! - [`publish`] gives each local source its own track, in a broadcast the
//! studio keeps to itself, to replay or record the source on its own.
//!
//! Every picture is drawn on the program clock the caller ticks
//! [`Compositor::render`] with, from whatever each source delivered last: a
Expand All @@ -38,6 +39,7 @@ mod lut;
mod overlay;
pub mod publish;
pub mod replay;
mod scale;
pub mod source;

pub use clip::Clip;
Expand All @@ -47,6 +49,7 @@ pub use collection::{
};
pub use compositor::{Compositor, FORMAT};
pub use edit::{Change, Draft, Edit, History};
pub use scale::Scaler;

/// The `wgpu` the compositor draws with: `moq_video`'s, so its textures and
/// the decoder's are the same type.
Expand Down
Loading