Skip to main content

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

For camera streaming, install the optional extras:
Video streaming also requires FFMPEG:
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):
Option 2: Explicit API key:
You can also set a default environment so cw.twin() always targets the same environment:
With both set, 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 → ProfileAPI 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

Use cw.affect() to decide whether high-level robot actions should impact the simulation or the live robot.
Accepted values are: "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:
This method:
  1. Queries the Asset Catalog (REST) to resolve the asset by registry ID
  2. Creates a new twin instance in your environment, or retrieves an existing one
  3. Returns a capability-specific Twin class based on the asset’s metadata
You can also target a specific environment or retrieve a twin by UUID or unified slug:
Slugs and UUIDs are interchangeable wherever an identifier is accepted. Access an entity’s slug via the .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:
Both keyword arguments and list format are supported for edit_position.

Move a Twin Between Environments

This operation:
  • 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; pass degrees=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:
Batch capture multiple frames:
For multi-camera twins, specify a sensor:
There’s also a 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:
For RealSense devices:

Streaming from simulation

stub — pending human curation.
With 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.
Once the background stream is running, use 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:
Calling 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.
start_streaming() starts a simulation for the entire environment, not just the calling twin. All other twins in that environment that have camera sensors will also begin streaming.

Workspaces, Projects, and Environments


Asset Catalog

Search and browse pre-built robot assets:
The search returns both public assets (available at cyberwave.com/catalog) and private assets belonging to your organization.

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:
The 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:
You can also start from a Workflow object:
List and filter past runs:
Check if a workflow is currently running:
is_running() returns True when any run has status running, waiting, or requested.

Agent SDK

The SDK exposes typed agent namespaces under cw.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:
To bypass backend deduplication and always create a new alert:

Environment Previews

Render a static PNG snapshot of an environment:
This calls POST /api/v1/environments/{uuid}/preview and returns attachment metadata including the rendered image URL.

Datasets

Import, manage, and export robotics datasets.
See Import Datasets for the full format support matrix.

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

For the full reference (catalog methods, runtime API, and the catalog-to-runtime workflow), see ML Models SDK.

SDK Architecture

The SDK operates across two communication layers:

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