> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cerulion.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Visualize a running graph

> Watch live local or remote topics on the Cerulion Studio stage — no visualization node, no YAML, no config file.

Cerulion Studio is the desktop app you watch your robot in. There is nothing to wire for it: no visualization node in your graph, no config file, no script. Start a graph, check a topic in the sidebar, and its frames render on the stage.

<Info>
  Studio is part of the closed alpha and is distributed during onboarding along with the CLI — see [Installation](/cerulion/installation).
</Info>

## Before you start

Studio drives the same `cerulion` CLI you use in a terminal, so the CLI has to be installed and on your `PATH`. If it is somewhere else, set its path in the sidebar's settings block — Studio tells you which path it tried when it cannot find it.

## Attach a topic

<Steps>
  <Step title="Run a graph">
    ```bash theme={null}
    cerulion graph run perception
    ```
  </Step>

  <Step title="Scan for topics">
    Studio's **Robots & Topics** sidebar lists what it found, grouped into **Local** (topics on this machine's shared memory) and **Robots** (robots discovered on your network). **Refresh** re-scans.
  </Step>

  <Step title="Check the topic you want">
    Each row has a toggle. Checking it attaches the topic; the stage switches from its empty state to the live scene, and the row shows the archetype and schema the frames were decoded as. Unchecking it detaches the topic again.
  </Step>
</Steps>

Topics that are silent, or whose type cannot be resolved, are still listed — Studio reports what it knows about each row rather than hiding it.

## Watch a remote robot

A robot on your network appears under **Robots** with its topic count and locator. Connecting to it pulls its topics to your desk: the frames are re-injected into your machine's shared memory and decoded **here**, so the robot ships raw bytes and nothing else.

The first connection to a robot needs pairing. Studio prompts for the pairing code shown for that robot, and remembers the result. A robot that discovery cannot reach can be connected by endpoint id instead, from the sidebar's **Connect a robot by endpoint id** field.

<Note>
  Verified robots carry a live indicator; unverified candidates are labelled as such, so a name discovered on the network never reads as a confirmed-online robot.
</Note>

For the underlying network model — allow-lists, pairing, and demanding topics from the terminal — see [Reach remote robots](/cerulion/guides/network-and-remote-robots).

## Watch a recording

Playback publishes onto local shared memory, so a bag playing back is indistinguishable from a live robot as far as Studio is concerned. Play the bag in a terminal:

```bash theme={null}
cerulion bag play session.mcap --loop
```

and check its topics in the sidebar as usual.

<Warning>
  Use plain `bag play` for this, not `--resim`. A re-execution deliberately never reads the wall clock — it runs as fast as it can — so it cannot pace a viewer. See [Record and replay a run](/cerulion/guides/record-and-replay).
</Warning>

## The viewer outlives the app

Studio does not own the decoding. A long-lived `cerulion-vizd` daemon owns the taps, the decode, and the scene; Studio starts it if it is not already running and speaks to it over a socket. The daemon is started detached, so it keeps running after you close Studio — reopening the app reattaches to the same scene instead of rebuilding it.

That also means the daemon is shared: Studio, a terminal, and the Studio agent can all attach topics to the same scene.

## Next steps

<CardGroup cols={2}>
  <Card title="Inspect topics" icon="satellite-dish" href="/cerulion/guides/inspect-topics" color="#0080FF">
    `topic list`, `echo`, and `hz` for the questions a viewer does not answer.
  </Card>

  <Card title="Reach remote robots" icon="network-wired" href="/cerulion/guides/network-and-remote-robots" color="#0080FF">
    Pairing, discovery, and pulling a robot's topics to your desk.
  </Card>
</CardGroup>
