Cyberwave is in Private Beta.
Request early access to get access to the Cyberwave dashboard.
Overview
The Cyberwave Python SDK (cyberwave) is a unified client that wraps both the Cyberwave REST API and MQTT API into a single Python interface. It handles authentication, protocol negotiation, and message serialization so you can interact with digital twins, control physical robots, stream video, manage workflows, and handle alerts, all using Python.
Installation
- Standard Cameras (OpenCV)
- Intel RealSense (RGB + Depth)
- Host Microphones
Requirements: - Python 3.10 or higher - A Cyberwave API key (generate one
from your Profile page)
Quick Start
Authentication
The SDK authenticates using an API key. You can provide it in two ways: Option 1: Environment variable (recommended):cw.twin() always targets the same environment:
cw.twin("the-robot-studio/so101") will return the first SO101 twin in that environment, or create one if it doesn’t exist.
1
Generate an API key
Go to the Cyberwave dashboard → Profile → API Tokens and create a
new key.
2
Set the environment variable
Export
CYBERWAVE_API_KEY in your shell or add it to your .env file.3
Initialize the client
Call
Cyberwave(), the SDK picks up the key and establishes connections to
both the REST and MQTT endpoints.Affect Simulation vs Live Environment
Usecw.affect() to decide whether high-level robot actions should impact the simulation or the live robot.
"real-world" is also accepted as an alias for "live".
affect() is chainable, so you can also write cw.affect("simulation").twin("unitree/go2").
Digital Twins
Create or Retrieve a Twin
cw.twin() is the primary method for working with digital twins. Pass an asset registry ID (vendor/model) to create or retrieve a twin:
- Queries the Asset Catalog (REST) to resolve the asset by registry ID
- Creates a new twin instance in your environment, or retrieves an existing one
- Returns a capability-specific Twin class based on the asset’s metadata
.slug property (e.g. twin.slug).
If no default environment is configured (via CYBERWAVE_ENVIRONMENT_ID or environment_id parameter), the SDK auto-creates a “Quickstart Environment” and places the twin there.
Position, Rotation, and Scale
Update a twin’s 3D pose in the environment:edit_position.
Move a Twin Between Environments
- Creates a deep copy of the twin in the target environment
- Marks the original twin as deleted
- Deletes the source environment if it has no remaining twins
Joint Control
Send real-time joint commands to a robot arm or any articulated twin. Positions are radians by default; passdegrees=True for degrees:
print_joint_states() fetches the latest state from the server and prints a formatted table:
Frame Capture
Capture the latest camera frame from a twin without setting up a full video stream:camera namespace with convenience methods:
Video Streaming (WebRTC)
Stream live camera feeds to digital twins using WebRTC. The streaming is initiated directly from the twin object.Standard Camera
Intel RealSense (RGB + Depth)
For depth cameras, change the twin name and the SDK handles the rest:Camera Discovery
Discover cameras attached to your device:Streaming from simulation
stub — pending human curation.
cw.affect("simulation"), twin.start_streaming() starts a simulation for the twin’s environment and streams its camera. Switch to cw.affect("real-world") and the same code runs against real hardware.
get_video() to consume frames. It connects to the live ongoing WebRTC stream from the twin — either the physical camera or the MuJoCo virtual camera, depending on cw.affect(). If both a simulation and a live stream are running at the same time, cw.affect() correctly routes to the right one:
start_streaming() again while a simulation is already running is safe — it reuses the running simulation. get_video() waits for the simulation’s camera producer to come online, so no manual sleep is needed.
Workspaces, Projects, and Environments
Asset Catalog
Search and browse pre-built robot assets:Upload GLB Assets
The SDK supports large GLB uploads by automatically switching to a signed URL flow when files exceed the standard upload limit:Edge Management
Manage edge devices (Raspberry Pi, Jetson, etc.) that run the Cyberwave Edge Core:fingerprint is a stable hardware identifier derived from hostname, OS, architecture, and MAC address. The Edge Core generates and persists it automatically at ~/.cyberwave/fingerprint.json on first boot.
Workflows
List, trigger, and monitor workflows programmatically:is_running() returns True when any run has status running, waiting, or requested.
Agent SDK
The SDK exposes typed agent namespaces undercw.agents. stub: use direct resource APIs for deterministic commands, and agent APIs when you want backend planning, previews, setup guidance, or explicit dispatch.
cw.agents.environment: environment editor agent messages and agent-created environments.cw.agents.workflow: workflow planning, preview, setup-and-draft, and constrained workflow edits.cw.agents.control: control surfaces, route/action planning, route resolution, and explicit dispatch.cw.agents.embodiment: server-built embodiment context for an environment or twin.
cw.control is a convenience alias for cw.agents.control.
Use cw.agents.control.surfaces(...) to inspect metadata-derived twin controls, then cw.agents.control.plan(...) or cw.agents.control.resolve_route(...) to get a plan. Dispatch one selected action with cw.control.dispatch(..., confirmed=True) and monitor it with cw.actions.get_status(...) or cw.actions.wait(...).
Relative movement is available through the same navigation surface: twin.navigation.relative_move([-1, 0, 0], frame="body", metadata={"source": "control_agent"}) moves backward one meter in the robot body frame.
Alerts
Create, manage, and respond to alerts on a twin. Alerts notify operators that action is needed (e.g., a robot needs calibration or a sensor reading is out of range).
Manage alert lifecycle:
Environment Previews
Render a static PNG snapshot of an environment:POST /api/v1/environments/{uuid}/preview and returns attachment metadata including the rendered image URL.
Datasets
Import, manage, and export robotics datasets.Export / download a converted format
Both calls are idempotent: if a conversion artifact already exists it is returned immediately; otherwise conversion is kicked off automatically.
See Dataset Export & Format Conversion for the full format matrix and coming-soon targets.
ML Models
cw.models is the unified entry point for both the model catalog and runtime inference.
Browse the catalog
Load and predict
Delete a catalog record
SDK Architecture
The SDK operates across two communication layers:Related Resources
API Key
Generate your API key
PyPI
View the package on PyPI
GitHub
Source code and examples
REST API Reference
Full REST endpoint documentation
MQTT API Reference
Real-time messaging specification
Edge VLM Tutorial
Build an edge-to-cloud vision pipeline
Live Teleoperation
Control physical robots in real time via the SDK