Documentation Index
Fetch the complete documentation index at: https://docs.reactor.inc/llms.txt
Use this file to discover all available pages before exploring further.
This page documents the complete LingBot wire surface: the media tracks it produces, the session
lifecycle, every command you can send, and the messages the model emits back. For what LingBot is
and a quick start, see the overview.
Tracks
| Direction | Name | Type | Format | Rate |
|---|
| Outbound | main_video | Video | (N, H, W, 3) uint8 RGB | Adaptive, paced to model throughput |
Default resolution is 1664 x 960. There are no inbound tracks; all client → model communication is
through commands.
Session lifecycle
Once the connection reaches ready, the session begins in WAITING. start transitions to
GENERATING (provided a prompt and seed image are set); pause moves to PAUSED; resume returns
to GENERATING; reset clears state and returns to WAITING from any state. The
Commands table below lists each command’s preconditions and effects. See
Sessions for the separate connection-level lifecycle
(disconnected → connecting → waiting → ready) the session passes through before reaching the
runtime states above.
When all chunks of a run complete and the session is still started, the server automatically kicks
off the next run with the same prompt and image. Call reset to stop the loop and re-stage with new
conditions.
Commands
Setter commands (set_*) take effect at the next chunk boundary.
| Command | Params | Effect |
|---|
set_prompt | prompt: string | Stores the prompt. Emits prompt_accepted then conditions_ready. |
set_image | image: FileRef (from uploadFile) | Decodes the uploaded file and caches it as the seed image. Rejects non-image MIME types with command_error. Emits image_accepted then conditions_ready. |
set_movement | movement: "idle" | "forward" | "back" | "strafe_left" | "strafe_right" (default "idle") | Sets WASD movement direction. idle holds position. |
set_look_horizontal | look_horizontal: "idle" | "left" | "right" (default "idle") | Yaw rotation direction. idle holds the heading. |
set_look_vertical | look_vertical: "idle" | "up" | "down" (default "idle") | Pitch rotation direction. idle holds the pitch. |
set_rotation_speed_deg | rotation_speed_deg: float (0.0 – 30.0, default 5.0) | Degrees the camera rotates per latent frame when a look axis is active. |
set_seed | seed: int (≥ 0, default 42) | RNG seed for the next generation. Read once when start fires; later changes require reset then a new start. |
start | - | Begins generation. Requires both a prompt and a seed image to be set; fails with command_error otherwise. Emits generation_started. |
pause | - | Pauses after the current chunk finishes. Valid only while GENERATING. Emits generation_paused. |
resume | - | Resumes generation. Valid only while PAUSED. Emits generation_resumed. |
reset | - | Clears prompt, image, and the started flag. Returns to WAITING. Emits generation_reset. |
Movement and look
Movement and look are persistent state, not pulses. Sending set_movement with "forward" puts
the character into a forward-walking state that continues across chunks until you send "idle" or a
different direction. The same applies to the two look axes. To stop moving, explicitly send the
"idle" value.
Look-axis rotation rate is governed by set_rotation_speed_deg: 5° per latent frame by default.
Setting it to 0 disables rotation entirely even if a look axis is non-idle.
Messages
LingBot emits the following messages. Every message is delivered as JSON
{ "type": "<name>", "data": { … } }.
| Event | When | Payload |
|---|
prompt_accepted | After set_prompt | { prompt: string } |
image_accepted | After set_image decodes | { width: int, height: int } |
conditions_ready | After set_prompt or set_image | { has_prompt: bool, has_image: bool } |
generation_started | After start | { prompt: string, chunk_num: int, frame_num: int } |
chunk_complete | After each chunk emits | { chunk_index: int, frames_emitted: int, active_prompt: string, active_action: string } |
generation_paused | After pause | { chunk_index: int } |
generation_resumed | After resume | { chunk_index: int } |
generation_complete | After all chunks of a run finish | { total_chunks: int } |
generation_reset | After reset | { reason: string } |
command_error | When a command is rejected | { command: string, reason: string } |
state | On connect, after every command, and after every chunk_complete | Full session snapshot |
state payload
state is the single source of truth for driving UI. Subscribe once and treat it as the
authoritative session snapshot; you generally do not need to track individual set_* and
chunk_complete events yourself.
| Field | Type | Meaning |
|---|
running | bool | started && !paused. Equivalent to “frames are actively streaming” |
started | bool | True once start has been accepted; remains true through pauses and across auto-restarts. Flips back to false on reset |
paused | bool | True while in the PAUSED state |
current_chunk | int | Zero-based index of the last completed chunk; 0 before the first chunk and after reset |
current_prompt | string | null | The prompt currently driving generation, or null if none set |
has_prompt | bool | Whether a prompt has been set this session |
has_image | bool | Whether a seed image has been set this session |
current_action | string | +-joined composite of movement and look. E.g. "w+left", or "still" when idle |
movement | string | Current value of the movement input field |
look_horizontal | string | Current value of the look_horizontal input field |
look_vertical | string | Current value of the look_vertical input field |
rotation_speed_deg | float | Current rotation speed (0.0 – 30.0) |
seed | int | Current seed value (effective only on the next start) |