Quantum visualiser · Reachy Mini

Reachy Bloch

A robot that acts out a quantum circuit — its body becomes a physical Bloch sphere, replaying every gate and narrating as it goes.

Qiskit Bloch sphere 1–2 qubits Aer · IBM Quantum Reachy Mini
|0⟩ |1⟩ |+⟩
01

See it move

The head rises to |0⟩, a Hadamard tips it to superposition, a CNOT entangles a pair, and a measurement snaps it to a definite state.

02

State → motion

A single-qubit pure state |ψ⟩ = cos(θ/2)|0⟩ + e sin(θ/2)|1⟩ has Bloch coordinates (θ, φ). Reachy Bloch drives one robot channel per coordinate.

Quantum quantityRobot channelConvention
θ — polar angle Head pitch |0⟩ → head up (−30°), |1⟩ → head down (+30°), |+⟩ → level.
φ — azimuth Head yaw Mapped 1:1 across ±180°, so |+i⟩ → +90°. Phase becomes a head turn.
phase / concurrence Antennas A redundant phase cue for one qubit; for two, the antennas droop with concurrence (entanglement). Capped at ±60°.
qubit 1 (reduced θ) Body yaw Two-qubit only — qubit 1's reduced polar angle, scaled across a gentle ±60°.
measurement Cartoon snap The head snaps to the measured pole; entangled qubits always collapse together.
An honest simplification. One robot can't hold a full two-qubit entangled state — that needs a higher-dimensional surface. So Reachy Bloch shows each qubit's reduced state and signals entanglement through the antennas. A Bell pair ends with the head centred and antennas drooping: "neither qubit has a definite state on its own." The narration says exactly this.
03

The pipeline

Pure-Python maths and circuit logic (unit-tested off-robot); the hardware layer is import-guarded so the package stays testable without the SDK.

Executor

executor.py

Steps the circuit instruction-by-instruction, evolving and collapsing one statevector so entangled measurements correlate. Aer locally; IBM for the real final shot.

State mapper

state_mapper.py

Statevector → Bloch (θ, φ) via Pauli expectations → head / antenna / body pose. Computes concurrence.

Choreographer

choreographer.py

Per-gate animation styles and the measurement snap, plus narration timed to each gate.

Reachy Mini

reachy_mini SDK

Smooth goto_target moves on the head, antennas and body — in sim or on hardware.

04

Example circuits

Six circuits ship built-in. Or upload your own 1–2 qubit QPY file straight from the control panel — it's validated, diagrammed and played, with unknown gates narrated generically.

bell_state2 qubits · entangling
from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2)
qc.h(0)            # superposition
qc.cx(0, 1)        # entangle
qc.measure([0, 1], [0, 1])
┌───┐ ┌─┐ q_0: ┤ H ├──■──┤M├─── └───┘┌─┴─┐└╥┘┌─┐ q_1: ─────┤ X ├─╫─┤M├ └───┘ ║ └╥┘ c: 2/═══════════╩══╩═
your own circuit.qpy · any 1–2 qubits
from qiskit import QuantumCircuit, qpy

qc = QuantumCircuit(1, 1)
qc.h(0); qc.t(0); qc.h(0)
qc.measure(0, 0)

with open("my_circuit.qpy", "wb") as f:
    qpy.dump(qc, f)

# then upload my_circuit.qpy in the control panel
┌───┐┌───┐┌───┐┌─┐ q: ┤ H ├┤ T ├┤ H ├┤M├ └───┘└───┘└───┘└╥┘ c: 1/════════════════╩═

Also baked in: hadamard_demo, bloch_tour (H·S·T·Z·H), superdense_dance, deutsch_jozsa, and grover_2q (search finding |11⟩).

05

Operator panel

A built-in web page picks the circuit — or uploads your own .qpy — shows its diagram, toggles narration and backend, and lets you drop in API keys, all live with no restart.

Reachy Bloch control panel
🎛️
control-panel.png
circuit picker + live diagram
Circuit picker with the live circuit diagram, backend toggle and narrate switch.
API keys panel
🔑
api-keys.png
ElevenLabs + IBM key entry
Optional in-form API keys (ElevenLabs, IBM Quantum) — held in memory for the session only.
06

Simulated trajectory, real dice

The gate-by-gate dance is always simulated (you can't pause a live quantum job mid-circuit). Switch the backend and the final measurement comes from real hardware.

Aer

Local statevector simulation via Qiskit Aer — the whole circuit runs on the machine driving the robot, with no account and no queue.

  • Every intermediate state computed locally
  • No network, no account

IBM Quantum

The trajectory is Aer-simulated; the final shot runs on a real IBM Quantum backend. The robot does a "thinking" idle sweep while the job queues, then narrates the truth: "the measurement came from ibm_brisbane, moments ago."

  • Needs an IBM Quantum API key (entered in the panel)
  • Falls back to simulation if unavailable
07

Built on