Skip to main content
SANA-Streaming is a real-time video editing model. Feed it a video clip or a live webcam feed and describe a change in plain text. The model outputs an edited video stream alongside the source footage. The edit lands where you aim it; everything you don’t mention carries through from the source untouched. SANA-Streaming edits the video you bring rather than generating one from scratch. The prompt describes a change to apply, not a world to create, and the model’s job is to make that change and preserve everything else. The SANA-Streaming reference is split across four pages: this overview, the complete command and message schema, the prompt guide for writing surgical edit prompts, and an end-to-end tutorial. Build on SANA-Streaming with the typed @reactor-models/sana-streaming SDK: a <SanaStreamingProvider> and hooks for React, a SanaStreamingModel class for plain JavaScript, with every command, message, and track checked at compile time. It wraps the same base wire protocol every Reactor model speaks, so you can also drive it from the base Reactor client by command name (the path for Python). SANA-Streaming’s surface adds commands for setting the source video and applying edit prompts.

At a glance

The model name is reactor/sana-streaming. The typed SDK bakes it in (new SanaStreamingModel(), <SanaStreamingProvider>); with the base class you pass it yourself (new Reactor({ modelName: "reactor/sana-streaming" })). See Pricing & Billing for how billing works.

Key features

Surgical edits

Change the one thing you name and nothing else.

Real-time responsiveness

Send a new edit mid-stream and watch it land about a second later, not after a re-render.

Live webcam input

Restyle yourself, your room, or your product demo as it streams.

Quick start

The fastest path to a working SANA-Streaming app is the create-reactor-app CLI, which scaffolds a runnable project for you. You can also clone the open-source reference frontend directly, or follow the tutorial for a guided walkthrough.
Working in Python instead? The CLI is JavaScript-only, so install the SDK with pip install reactor-sdk and drive the same edit from the base SDK — see From Python below (and the quickstart for the full walkthrough). A minimal connect-and-edit flow in React wraps your app in <SanaStreamingProvider> and drives the edit from a child component with useSanaStreaming():
publish and uploadFile come from the base SDK and work the same on every model; useSanaStreaming() exposes them next to the typed commands (see Tracks and File Uploads). To change the edit mid-stream, call setPrompt again: the new edit lands at the next chunk boundary, about a second later. Prefer plain JavaScript? new SanaStreamingModel() carries the same typed methods; see the schema’s complete example.

From Python

The base SDK drives the same edit from Python. Upload a clip, set it as the source, describe the edit, then start; edited frames arrive as NumPy arrays. For a live camera source instead, publish a track with publish_track() and use set_mode with "live".

How it works

On connect the model is live but idle. Give it a source (your camera or an uploaded clip) and call start; the edited stream begins on main_video. A prompt is optional: with none the model streams a near-reconstruction of the source, and setting one steers the edit. From there you direct it in real time: send a new prompt and the change lands at the next chunk boundary, so successive edits feel like adjustments to a live feed rather than separate render jobs. The architecture comes from the paper SANA-Streaming: Real-time Streaming Video Editing with Hybrid Diffusion Transformer (Zhao et al., 2026), research led by NVIDIA with collaborators at MIT, THU, NUS, and HKU. See the schema for every command and message, and the prompt guide for how to write edit prompts that land where you aim them.