Skip to main content

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

DirectionNameTypeFormatRate
Outboundmain_videoVideo(N, H, W, 3) uint8 RGBAdaptive, paced to model throughput
Default resolution is 1664 x 960. There are no inbound tracks; all client → model communication is through commands.

Session lifecycle

LingBot runtime states: WAITING, GENERATING, PAUSED, with transitions driven by start, pause, resume, and reset
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.
CommandParamsEffect
set_promptprompt: stringStores the prompt. Emits prompt_accepted then conditions_ready.
set_imageimage: 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_movementmovement: "idle" | "forward" | "back" | "strafe_left" | "strafe_right" (default "idle")Sets WASD movement direction. idle holds position.
set_look_horizontallook_horizontal: "idle" | "left" | "right" (default "idle")Yaw rotation direction. idle holds the heading.
set_look_verticallook_vertical: "idle" | "up" | "down" (default "idle")Pitch rotation direction. idle holds the pitch.
set_rotation_speed_degrotation_speed_deg: float (0.0 – 30.0, default 5.0)Degrees the camera rotates per latent frame when a look axis is active.
set_seedseed: 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": { … } }.
EventWhenPayload
prompt_acceptedAfter set_prompt{ prompt: string }
image_acceptedAfter set_image decodes{ width: int, height: int }
conditions_readyAfter set_prompt or set_image{ has_prompt: bool, has_image: bool }
generation_startedAfter start{ prompt: string, chunk_num: int, frame_num: int }
chunk_completeAfter each chunk emits{ chunk_index: int, frames_emitted: int, active_prompt: string, active_action: string }
generation_pausedAfter pause{ chunk_index: int }
generation_resumedAfter resume{ chunk_index: int }
generation_completeAfter all chunks of a run finish{ total_chunks: int }
generation_resetAfter reset{ reason: string }
command_errorWhen a command is rejected{ command: string, reason: string }
stateOn connect, after every command, and after every chunk_completeFull 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.
FieldTypeMeaning
runningboolstarted && !paused. Equivalent to “frames are actively streaming”
startedboolTrue once start has been accepted; remains true through pauses and across auto-restarts. Flips back to false on reset
pausedboolTrue while in the PAUSED state
current_chunkintZero-based index of the last completed chunk; 0 before the first chunk and after reset
current_promptstring | nullThe prompt currently driving generation, or null if none set
has_promptboolWhether a prompt has been set this session
has_imageboolWhether a seed image has been set this session
current_actionstring+-joined composite of movement and look. E.g. "w+left", or "still" when idle
movementstringCurrent value of the movement input field
look_horizontalstringCurrent value of the look_horizontal input field
look_verticalstringCurrent value of the look_vertical input field
rotation_speed_degfloatCurrent rotation speed (0.0 – 30.0)
seedintCurrent seed value (effective only on the next start)