Clients

Overview

Oscilla is a networked score system. Multiple performers connect to the same server and share a synchronized view of the score, playhead position, and interactive elements. Each connected device is a client.

The client system provides:


Client Indicators

The client list appears in the top-left corner of the interface. Each connected client is represented by a colored square.

Visual element Meaning
Colored square A connected client
White border Your own client (local)
Green checkmark Selected for targeted triggers

Hover over any indicator to see the client's display name in a tooltip.


Editing Your Identity

Double-click your own client indicator (the one with the white border) to open the client editor:

Your identity persists across browser sessions. Other performers see your name in tooltips and your color on shared markers and annotations.

Setting your performer name

If audio objects are targeted to specific client names, set your name to match:

  1. Double-click your client indicator
  2. Enter your performer name (e.g., "violin" to receive audio targeted to "violin")
  3. Click Save

If your name ends with * (the default for new clients), you'll hear all audio regardless of targeting.


Client Colors

Each client is assigned a unique color from a predefined palette. This color is used for:

Colors help identify at a glance who created which markers or annotations. You can change your color in the client editor, and individual markers can override their color in the marker editor.


Targeted Audio Triggers

When audio objects are set to shared scope, triggering them normally broadcasts to all connected clients. The client indicator system allows you to target specific clients instead.

Selecting targets

  1. Click any client indicator to toggle its selection
  2. Selected clients show a green checkmark overlay
  3. Multiple clients can be selected simultaneously
  4. Click a selected client again to deselect

Triggering to targets

With clients selected:

Clearing selection

Click all selected clients to deselect them, or simply leave them selected for subsequent triggers. When no clients are selected, triggers revert to broadcasting to everyone.

Use cases


Persistent Playback Targeting

Audio objects can be configured to always play on specific clients, regardless of runtime selection. This is set via the Playback dropdown in the audio object editor.

Saved client names

To target clients that aren't currently connected (e.g., when editing alone at home), add client names to your project:

  1. Open Settings (gear icon)
  2. Go to the Clients tab
  3. Type a client name and click Add
  4. Repeat for all performer names you need
  5. Click Save

These names appear in the Playback dropdown even when those clients aren't connected. Connected clients show with a solid color; saved-only names show with a dashed border and "saved" label.

Setting targets

  1. Open an audio object editor
  2. Find the Playback dropdown
  3. Select one or more client names (connected or saved)
  4. Save the audio object

The targeting is stored with the audio object and persists across server restarts.

DSL syntax

In the generated DSL, targeting appears as:

synth(..., playback:["violin", "cello"])
audio(..., playback:[conductor])

Client names with spaces must be quoted.

Workflow for distributed performance

  1. At home: Add performer names in Settings → Clients (e.g., "violin", "cello", "piano")
  2. At home: Create audio objects targeting those names
  3. At rehearsal: Musicians double-click their client indicator and set their name to match
  4. Playback routes automatically -- each device only plays its targeted audio

Hear All Mode

For testing and rehearsal, you may want to hear all audio on a single device regardless of targeting.

Default for new clients

New clients automatically start in "hear all" mode with a name like guest-ab12-*. This means:

To switch from review mode to performer mode, double-click your client indicator and change the name (removing the * suffix).

Enabling hear all mode

Set your client name to end with *:

How it works

When your client name ends with *, all playback targeting is bypassed:

This lets you test the full mix without changing audio object configurations.


Synchronization

Clients automatically synchronize:

Each client maintains its own local state for:

Network Sync Toggle

The network sync toggle in the top bar controls how your client participates in synchronization. Click the toggle to cycle through three states:

State Icon Transport Triggers Use case
Full Sync chain link send + receive send + receive Normal ensemble operation
Transport Muted muted speaker receive only send + receive Prevent accidental navigation changes affecting others
Disabled blocked none none Work independently

Transport Muted mode is useful when:

This allows a performer to scrub around their own view without disrupting the conductor's timeline, while still participating in shared audio cues.

The sync state persists across browser sessions.


Connection Status

The client list updates in real-time as performers connect and disconnect. When a client disconnects, their indicator disappears from the list, but their shared markers and annotations remain on the score.


Relationship to Other Session Features

The client system integrates with:

The client identity provides a consistent visual thread across all shared interaction features.

Tip: use ← → or ↑ ↓ to navigate the docs