Getting Started with Conductor

Conductor is a free, private tool for coordinating groups of people using their phones. This guide walks you through everything, step by step.

Quick Start (5 Steps)

Step 1: Get the App

You have two options:

Either way, you get the same app. The download is nice because it works without internet forever.

Step 2: Try the Demo

When you open the app, you'll see a green Try the Demo button near the top. Tap it to load a pre-built sample called "The Stillness." It works immediately — no downloads needed. The beep countdowns keep sounding even with the phone locked in your pocket.

Step 3: Preview and Practice

After loading the demo, you'll see a preview screen showing:

Tap Start Practice to run through the event at your own pace. Use the speed slider to go faster (up to 5×). Your phone will speak each cue out loud at the right time.

Step 4: Import a Resource Pack (Optional)

In a real event, phones are locked and pocketed. Typed cues are read by the app's built-in robot voice, which is baked into the same pocket track as beeps and recordings. It's built to be understood, not to sound natural, so a pack of real recordings sounds much better.

A resource pack is a zip file with pre-recorded voice cues that replace the built-in robot voice with real recordings. See the Importing a Resource Pack section below.

Step 5: Share with Others

From the preview screen, tap Share QR Code. The share screen gives you several options:

The person who receives your link just taps it and they're in. No install, no signup.


Joining an Event (for Participants)

Someone shared an event with you? Here's how to get in — pick whichever matches how they sent it:

Once you're in, tap Start Practice to rehearse, then tap Go Live when the real event is close — Live opens 20 minutes before the first cue (see Going Live). If the event is password-protected, you'll be asked for the password the organizer gave you.


The Desktop → Phone Workflow

The most comfortable way to build an event is on a desktop or laptop — a real keyboard and mouse make writing the timeline fast. But you'll run it from your phone. Here's the bridge, and it needs no cables, accounts, or even a network at the phone:

  1. Build it on the desktop. Open Conductor in a desktop browser and create your event with the built-in editor (or paste a text/JSON script).
  2. Open Share. From the preview, tap Share QR Code.
  3. Beam it. Tap Beam to a phone. The desktop screen shows an animated QR code — a rotating sequence of frames that carries the whole event, even one too large for a single static QR.
  4. Scan on the phone. On the phone, open Conductor and tap Scan QR Code. Hold the camera up to the desktop screen and keep it steady. A progress bar fills as frames arrive.
  5. You're in. When the transfer completes, the phone jumps straight to the event preview. Practice, then go live from the phone (Live opens 20 minutes before the first cue).

This is the same animated-QR "beam" used for resource packs — it now carries events too. Nothing leaves the two devices: no server, no upload, no link to intercept. It's ideal when you've drafted something big at a desk and just want it on the phone you'll actually carry.

Tip: For small events, the plain static QR Code or Copy Link is quicker. Reach for Beam when the event is large, when you want a purely device-to-device handoff, or when there's no network to paste a link into.

Making the Text Bigger

Small text on a phone in bright sun is hard for anyone. Conductor has a Text size control with four steps (from normal up to largest) that zooms the whole interface. It's on the home screen and on the Preview, Practice, and Live screens — so you can bump the size up mid-event without stopping, right when you need to read a cue at arm's length.

Your choice is remembered on that device and applies everywhere in the app until you change it. The principle: it shouldn't matter how old your eyes are — you can still use it.


Importing a Resource Pack

Resource packs are real voice recordings that keep playing when the phone is locked in your pocket. They're optional — everything works without them — but they sound much better. You can record cues in your own voice right in the editor and share them as a pack.

Record Your Own Voice Cues

While editing an event, pick My Voice as the pack and use the 🎤 Record button next to each action to capture your own voice cue — or record them all in one pass, starting with the "Get ready to…" prep lead. The editor stores your recordings locally, and on the Review & Share step, you can export them as a standard resource pack and share it with your participants.

What You Need

A resource pack is a .zip file containing audio files and a manifest.json that tells the app what's inside.

How to Import

  1. Open Conductor in your browser.
  2. On the main screen, tap Import Resource Pack (or Manage Packs → Import Pack).
  3. Pick your .zip file from your device.
  4. The app reads the zip, checks its contents, and shows you what it found.

What to Expect

After a successful import, you'll see:

From now on, whenever the app needs to speak a cue that matches one in your resource pack, it plays the recorded audio. Anything without a matching file is read by the built-in robot voice.

The Demo Packs

Each demo event has its own small voice pack — roughly 100–350 KB, so it downloads in seconds even on weak signal and is small enough to beam phone-to-phone via QR. Each pack bundles one event script plus every voice cue that event uses (and the shared "Get ready to…" prep lead). Grab the one for the event you're running:


Creating Events

There are three ways to create events. Pick whichever feels most natural.

Option 1: Use the Built-in Editor

The easiest way. No coding, no special formats.

  1. Tap Create New Event on the main screen.
  2. Step 1 — Fill in the title, description, start time, and timezone. Also here:
    • Playback mode — Cue (a beep prompts a person, the default) or Clip (the phone plays a recorded clip). See Cues and Clips
    • Repeat the sequence — loop it until a set time or a set number of times, with a rest between rounds. See Repeating an Event
  3. Step 2 — Build your timeline:
    • Tap Add Action to add a cue
    • Set the time offset (minutes and seconds from the start)
    • Type what should be announced (e.g., "Freeze in place")
    • Choose a style (normal, emphasis, or alert), and a per-step playback mode (Default, Cue, or Clip)
    • Toggle countdown, notice, and haptic options
    • Pick My Voice as the pack and tap 🎤 Record to record your own cues. Recordings sound much better than the robot voice, which also plays in a pocket
  4. Step 3 — Review everything, then share via link, QR code, or file.

Option 2: Write a Text File

For more control, write your event in any text editor. Save it as a .txt file and import it, or paste the text directly into the input field.

Here's a complete example:

# My event — lines starting with # are comments
Title: Flash Mob at Central Park
Description: Meet by the fountain, east side
Start: 2026-03-15 2:00 PM
Timezone: America/New_York
Countdown: true      # event-level: all actions get a countdown by default

0:00  Get ready
0:15  [emphasis] Wave left
0:30  [emphasis, countdown] Wave right
1:00  [alert, countdown:3, haptic:triple] Jump!
1:30  Freeze in place
2:00  Walk away casually

The basics:

Countdown — two levels: The header Countdown: true turns on a countdown for every action in the event by default. The per-action tag [countdown] (or [no-countdown]) overrides that default for a single action.

Notices, styles, and haptics:

Before each action, the app gives you a heads-up (e.g., "Get ready to wave left"). These advance warnings are called notices. You can control them with NotifyWindow (event-level) or [notify:N] / [no-notify] (per-action). With a resource pack installed, the heads-up is assembled from the pack's "Get ready to…" prep-lead clip plus the named cue clips — so it plays in the pack voice, even from a pocket.

The three styles change how an action looks on screen:

Haptic (vibration) tags make the phone vibrate on cue. Note: haptic works on Android. iPhones do not support vibration from web apps.

Tags go in square brackets before the action text:

Combine them with commas: [alert, countdown:3, haptic:triple]

Timezone: Start is read as a clock time in the Timezone you give — 2:00 PM New York stays 2:00 PM New York on a phone in California. Leave Timezone out and it uses the phone's own zone.

For the full reference with all tags, briefing blocks, and advanced features, see the Text Format Reference.

Option 3: Write JSON

For programmers or anyone generating events from code, you can write raw JSON:

{
  "title": "Flash Mob",
  "startTime": "2026-03-15T14:00:00-04:00",
  "timezone": "America/New_York",
  "description": "Meet by the fountain",
  "timeline": [
    { "time": 0, "text": "Get ready" },
    { "time": 15, "text": "Wave left", "style": "emphasis" },
    { "time": 30, "text": "Wave right", "style": "emphasis", "countdown": true },
    { "time": 60, "text": "Jump!", "style": "alert", "countdown": 3, "haptic": "triple" }
  ]
}

Paste the JSON into the input field or save it as a .json file and import it.


Cues and Clips

Every step in an event plays one of two ways:

Set the default for the whole event (editor Playback mode, or Mode: clip in a text file), then override any single step (the step's Default/Cue/Clip toggle, or a [clip] / [cue] tag). One event can mix both. A clip step needs recorded audio to play in a pocket — without it, the built-in robot voice reads the line, and that is baked into the pocket track too (recordings sound far better).


Repeating an Event

Turn on Repeat the sequence (or use the text headers) to loop the whole timeline:

Set both and whichever ends first wins. Details in the Text Format Reference.


Going Live

Practice works any time. Go Live opens 20 minutes before the first cue. Tap it earlier and the app tells you when Live opens and suggests practicing meanwhile.

Why: going live builds the event's whole audio track up front so it keeps playing with your phone locked in a pocket — and starts holding the screen and audio awake. Doing that hours early wastes battery and memory. If an event's times have all passed (an old draft), Go Live offers to restart it one minute from now.


Adapting a Demo Pack

Want to use a demo pack as a starting point for your own? Here's how.

What's Inside the Zip

demo-the-stillness.zip
├── manifest.json              # Describes the pack contents
├── voices/
│   ├── freeze.mp3             # Action cues
│   ├── hold.mp3
│   ├── prep-lead.mp3          # The "Get ready to…" prep lead
│   └── ...
└── events/
    └── the-stillness.json     # The bundled event script

Swapping Audio Files

  1. Unzip the demo pack to a folder on your computer.
  2. Replace any audio file with your own recording, keeping the same filename (or update the manifest to match a new name).
  3. Audio format: WAV or MP3, any sample rate. Keep files under 500KB each for best performance.
  4. Re-zip the folder contents (not the folder itself — the files should be at the root of the zip).
  5. Import your modified zip into the app.

Editing the Manifest

The manifest.json tells the app what cues are in the pack. If you add or remove audio files, update the manifest to match.

Cues are listed as key-value pairs — the key is the cue ID and the value is the file path:

{
  "cues": {
    "hold": "voices/hold.wav",
    "walk": "voices/walk.wav"
  }
}

Adding Your Own Cues

  1. Record your audio file.
  2. Put it in the voices/ folder.
  3. Add an entry to the cues object in manifest.json.
  4. Reference the cue in your event text — the app matches cue IDs to action text automatically.

Creating Packs from Scratch

Minimum Viable Pack

You only need two things: a manifest.json and at least one audio file.

manifest.json:

{
  "id": "my-pack",
  "name": "My Custom Pack",
  "version": "1.0.0",
  "cues": {
    "go": "voices/go.wav"
  }
}

Folder structure:

my-pack/
├── manifest.json
└── voices/
    └── go.wav

Zip it up, import it, and any event action containing "go" will play your audio file instead of the robot voice.

Folder Conventions

FolderWhat goes in it
audio/Clips — music beds, sound effects, longer recordings
voices/Action cues — the main spoken prompts — plus the prep-lead clip
events/Bundled event scripts (JSON format)

These are conventions, not requirements. The app finds files by the file path in each cue entry, so you could put everything in one folder if you wanted. But following the convention makes packs easier to understand and share.

Recording Tips

Bundling Events

  1. Create your events (using the editor or text format).
  2. Export them as JSON files.
  3. Put them in the events/ folder.
  4. Add them to the manifest:
{
  "id": "my-pack",
  "name": "My Pack",
  "version": "1.0.0",
  "events": [
    { "file": "events/my-event.json", "name": "My Cool Event" }
  ],
  "cues": {
    "go": "voices/go.wav",
    "freeze": "voices/freeze.wav"
  }
}

When someone imports your pack, the app validates that your audio cues cover all the actions in your bundled events and shows a report.

Validation

When you import a pack, the app checks:

If something's missing, you'll see a warning with details about what's not covered. The event will still work — uncovered cues are just read by the robot voice.


Phone in Your Pocket

The realistic live-event posture is phone locked, in a pocket — eyes on your surroundings, hands free. Conductor is built for that: when an event goes live, the app pre-renders every countdown beep, trigger beep, and resource-pack voice cue into one continuous audio track that keeps playing with the screen off.

Tested on iPhone (iOS 18) with the phone locked in a pocket; iOS 26 and longer events are being tested now — help us test.

What keeps playing from a pocket:

Typed cue text is covered too: the app has a built-in robot voice (US English only) that reads the trigger word, "Get ready to…" heads-ups (even when the pack has no prep-lead clip), and clip-mode lines with no recording. Those lines are pre-rendered into the same track, so they are meant to keep playing with the screen locked. The locked-screen playback of that track is what has been tested on iOS 18; nobody has yet tested the robot-voice lines on a locked phone. The robot voice is about being understood, not sounding natural; recordings sound much better.

The one exception: if the robot voice fails to load, the app falls back to your phone's own speech, which only plays while the screen is on. The Sound check tells you if that happens.

For organizers:

On the rare browser that can't pre-render audio, the app warns you when you go live — keep the screen on there.


If Something Changes During an Event

There is no remote stop. Conductor has no server and phones don't talk to each other, so once a phone is live nothing the organizer does can reach it. Only that phone's own Stop button stops it.

Plan for that before the event:

Nobody can clear someone else's phone either. Each person can remove their own drafts, packs and recordings with Clear This Phone at the bottom of the home screen. It doesn't clear browser history or files that were downloaded, and a browser tab, a Home Screen icon and a downloaded copy each keep their own data, so clear each one that was used.


FAQ

How do I join an event someone sent me?

Tap their link, or open Conductor and use Scan QR Code / paste their v1_… code. Full details in Joining an Event.

How do I get an event I built on my computer onto my phone?

Use Beam to a phone from the Share screen and scan it with the phone. See The Desktop → Phone Workflow.

Can I beam an event, or only resource packs?

Both. The animated-QR beam now carries events as well as packs — handy for events too big for a single static QR.

How do I edit an event I already made?

Open it (from a link, code, or a saved draft), then start a new event from it in the editor, or reopen your draft. Conductor auto-saves editor drafts to your device, so a work-in-progress event is waiting under the editor when you come back. Note that an event someone shared with you comes in as finished data — to change it, load it and rebuild the parts you want in the editor.

Why won't Go Live start?

Live opens 20 minutes before the first cue. Earlier than that, the app shows when it opens — use Practice until then. See Going Live.

How do I password-protect an event?

In the editor's share step, turn on encryption and set a password. The event is encrypted with AES-256-GCM and its code gets a v1e_ prefix. Share the code as usual and give the password to participants separately — it never leaves anyone's device. When they open it, they're prompted for the password.

The text is too small — can I make it bigger?

Yes. Use the Text size control (home screen and every event screen). See Making the Text Bigger.

Why did the spoken cues go quiet when I locked my phone?

Beeps, recordings, and the built-in robot voice are all pre-rendered into one track that is meant to keep playing in your pocket. If the robot voice failed to load, your phone's own speech is used instead, and that only plays with the screen on (the Sound check says so). For the best-sounding pocket use, cover your cues with a resource pack. See Phone in Your Pocket.

My iPhone won't vibrate.

iPhones don't support vibration from web apps — haptics work on Android only. Everything else (audio, timing, visuals) works on both.

Do I need internet during the event?

No. Load the app and your event beforehand (over wifi or data). After that it runs offline, and you can still pass it to others phone-to-phone via beam, QR, or a shared file.

Nothing plays at all — what's wrong?

Make sure your ringer/media volume is up, tap the audio toggle so it's on, and (on the first cue) that you've interacted with the page so the browser allows audio. Run Practice first to confirm you hear cues before the real event.


Reference

Tips