mstar.model.waypoint.config

Contents

mstar.model.waypoint.config#

Configuration for Waypoint-1.5 (autoregressive video world model).

Hardcodes the published 720P/360P checkpoint manifests so constructing the model never touches the network. Attention geometry is per-layer heterogeneous (local vs. global window; see global_layers / ring_frames), and each frame costs 4 non-committing Euler passes plus 1 committing pass that writes the settled K/V into the ring.

Functions

waypoint_1_5_1b_360p()

The 360P checkpoint: 128 tokens/frame over a 16x32 latent grid.

waypoint_1_5_1b_720p()

The default checkpoint: 512 tokens/frame over a 32x64 latent grid.

Classes

WaypointConfig([variant, n_layers, n_heads, ...])

Waypoint-1.5-1B model configuration.

class mstar.model.waypoint.config.WaypointConfig(variant='waypoint-1.5-1b-720p', n_layers=24, n_heads=32, n_kv_heads=16, d_model=2048, mlp_ratio=4, channels=32, tokens_per_frame=512, height=16, width=32, patch=(2, 2), local_window=16, global_window=128, global_pinned_dilation=8, global_attn_period=4, global_attn_offset=-1, rope_impl='ortho', rope_nyquist_frac=0.8, rope_theta=10000.0, noise_conditioning='wan', value_residual=True, gated_attn=False, moe=False, prompt_conditioning=None, ctrl_conditioning=True, ctrl_cond_dropout=0.0, ctrl_conditioning_period=3, n_buttons=256, scheduler_sigmas=(1.0, 0.9, 0.75, 0.3, 0.0), base_fps=15, inference_fps=60, temporal_compression=4, max_frames=512, taehv_ae=True, ae_uri='Overworld-Models/taehv1_5', auto_aspect_ratio=True, full_global_ring=False, reference_compat=True, compile_dit=True, accelerator_graph=True, seed_capture_sizes=(), capture_dit_prime=True, step_batch_size=1, _supported_rope_impls=('ortho',), _supported_noise_conditioning=('wan',))[source]#

Bases: object

Waypoint-1.5-1B model configuration.

Field names track the reference config.yaml keys, not mstar’s usual spellings, so this diffs directly against the checkpoint’s YAML.

Parameters:
  • variant (str)

  • n_layers (int)

  • n_heads (int)

  • n_kv_heads (int)

  • d_model (int)

  • mlp_ratio (int)

  • channels (int)

  • tokens_per_frame (int)

  • height (int)

  • width (int)

  • patch (tuple[int, int])

  • local_window (int)

  • global_window (int)

  • global_pinned_dilation (int)

  • global_attn_period (int)

  • global_attn_offset (int)

  • rope_impl (str)

  • rope_nyquist_frac (float)

  • rope_theta (float)

  • noise_conditioning (str)

  • value_residual (bool)

  • gated_attn (bool)

  • moe (bool)

  • prompt_conditioning (str | None)

  • ctrl_conditioning (bool)

  • ctrl_cond_dropout (float)

  • ctrl_conditioning_period (int)

  • n_buttons (int)

  • scheduler_sigmas (tuple[float, ...])

  • base_fps (int)

  • inference_fps (int)

  • temporal_compression (int)

  • max_frames (int)

  • taehv_ae (bool)

  • ae_uri (str)

  • auto_aspect_ratio (bool)

  • full_global_ring (bool)

  • reference_compat (bool)

  • compile_dit (bool)

  • accelerator_graph (bool)

  • seed_capture_sizes (tuple[tuple[int, int], ...])

  • capture_dit_prime (bool)

  • step_batch_size (int)

  • _supported_rope_impls (tuple[str, ...])

  • _supported_noise_conditioning (tuple[str, ...])

accelerator_graph: bool = True#
ae_uri: str = 'Overworld-Models/taehv1_5'#
auto_aspect_ratio: bool = True#
base_fps: int = 15#
capture_dit_prime: bool = True#
channels: int = 32#
compile_dit: bool = True#
ctrl_cond_dropout: float = 0.0#
ctrl_conditioning: bool = True#
ctrl_conditioning_period: int = 3#
property ctrl_layers: frozenset[int]#

Layer indices that fuse controller conditioning (8 of 24).

property d_ctrl_in: int#

mouse(2) + button(n_buttons) + scroll(1), concatenated in that order by ControllerInputEmbedding.forward.

Type:

Controller feature width

property d_head: int#

Per-head width (64). OrthoRoPE rotates exactly half of it.

d_model: int = 2048#
property enable_gqa: bool#
full_global_ring: bool = False#
gated_attn: bool = False#
global_attn_offset: int = -1#
global_attn_period: int = 4#
property global_layers: frozenset[int]#

Layer indices attending over the dilated 128-frame window.

{3, 7, 11, 15, 19, 23}: the offset is taken modulo the period first, so offset=-1 means “the last layer of each period”.

global_pinned_dilation: int = 8#
global_window: int = 128#
height: int = 16#
inference_fps: int = 60#
is_global_layer(layer_idx)[source]#
Parameters:

layer_idx (int)

Return type:

bool

kv_capacity(layer_idx)[source]#

Total KV slots for this layer, in tokens.

ring + one scratch frame. The scratch frame at the tail is where a frozen denoise pass parks its K/V so the current frame can attend to itself; permanently visible, overwritten every forward.

Parameters:

layer_idx (int)

Return type:

int

property latent_height: int#

Latent frame height in cells, pre-patchify (32).

property latent_shape: tuple[int, int, int]#

One latent frame as (channels, height, width) = (32, 32, 64).

property latent_width: int#

Latent frame width in cells, pre-patchify (64).

local_window: int = 16#
max_frames: int = 512#
mlp_ratio: int = 4#
moe: bool = False#
n_buttons: int = 256#
n_heads: int = 32#
n_kv_heads: int = 16#
n_layers: int = 24#
noise_conditioning: str = 'wan'#
property num_denoise_steps: int#

Euler steps per frame (4). The committing pass is separate.

patch: tuple[int, int] = (2, 2)#
pinned_dilation(layer_idx)[source]#

Frame stride this layer retains history at (8 global, 1 local).

Parameters:

layer_idx (int)

Return type:

int

prompt_conditioning: str | None = None#
reference_compat: bool = True#
ring_buckets(layer_idx)[source]#

Addressable ring slots. Equals ring_frames unless full_global_ring is set, in which case it is 8x smaller.

Parameters:

layer_idx (int)

Return type:

int

ring_frames(layer_idx)[source]#

Number of frame slots in this layer’s ring.

Local: 16 consecutive frames. Global: 16 slots holding frames 8 apart, spanning 128 frames. full_global_ring restores the reference’s 8x-oversized global allocation, whose extra slots are unreachable.

Parameters:

layer_idx (int)

Return type:

int

rope_impl: str = 'ortho'#
rope_nyquist_frac: float = 0.8#
rope_theta: float = 10000.0#
scheduler_sigmas: tuple[float, ...] = (1.0, 0.9, 0.75, 0.3, 0.0)#
seed_capture_sizes: tuple[tuple[int, int], ...] = ()#
step_batch_size: int = 1#
taehv_ae: bool = True#
temporal_compression: int = 4#
tokens_per_frame: int = 512#
property ts_mult: int#

RoPE time-axis stride per latent frame; here equal to 1.

Keeps the RoPE clock (t_pos) and ring-bucketing clock (f_pos) in step; conflating them drifts silently rather than crashing.

validate_supported_deployment()[source]#

Reject a config that is internally valid but not a released shape.

Separate from __post_init__ because unit tests construct smaller, internally consistent models. Startup calls it before allocating storage.

Return type:

None

value_residual: bool = True#
variant: str = 'waypoint-1.5-1b-720p'#
width: int = 32#
mstar.model.waypoint.config.waypoint_1_5_1b_360p()[source]#

The 360P checkpoint: 128 tokens/frame over a 16x32 latent grid.

Return type:

WaypointConfig

mstar.model.waypoint.config.waypoint_1_5_1b_720p()[source]#

The default checkpoint: 512 tokens/frame over a 32x64 latent grid.

Return type:

WaypointConfig