Sténtor features

Everything live performance text needs,
from script to audience.

Sténtor brings surtitles, translations, audio-description notes, live cueing, screens and audience phones into one focused workflow for theatre, festivals and live performance.

01 — Script

One script, many layers of performance text.

Prepare the original script, translations, surtitles, notes and project metadata in one place. Sténtor keeps the structure of the performance visible while letting each cue remain editable.

  • Import from Word, TXT, SRT, WebVTT, CSV or JSON
  • Keep title, company, languages and production notes together
  • Leave speaker or character fields empty when they are not needed
Read the workflow
schemas/billing.lambda.ts · synced v 142 · 0.3s
customers
id · textPK
email · textUNIQUE
tier · enumfree|pro|ent
created_at · tsnow()
subscriptions
id · textPK
customer_id · textFK
plan · ref(Plan)FK
status · enum3 vals
renews_at · tsnullable
.lambda/generated/clients/typescript.ts type-safe
1// Auto-generated. Edit billing.lambda.ts instead.
2const sub = await lambda.subscriptions.create(({
3  customer: customer.id,
4  plan:     "pro_monthly",
5  status:   "active",         // ← autocompletes
6});
trace · req_01HF8Q3K2ZX · 312ms 7 spans · 4 services
Current cue LIVE
Operator
└ surtitles on screen
synced
└ translation layer
ready
└ audio-description note
queued
└ audience phones sync
connected
└ next cue preview
next
02 — Operator view

A clear operator view for the live moment.

During rehearsal or performance, the operator view gives the cue operator a focused interface: current cue, next cue, blackout, timing and the confidence to move through the show without visual noise.

  • Advance, rewind and blackout from one live view
  • Keep timing, current cue and next cue visible
  • Use the same project from rehearsal to performance
Cue a show
03 — Live Sync

Screens and audience phones follow the operator.

Sténtor can send the live cue state to venue screens and to spectators connected with their own smartphones. The operator stays in control while each device follows the performance text in sync.

  • Audience web client for personal devices
  • Screen output for surtitles and translations
  • Local-network mode for rehearsal rooms and venues
See theatre use cases
edge · live 38 regions · last 60s
OP · live SCREEN · synced PHONE · synced AD · ready IT · text EN · translation
GET /api/me 11ms
POST /api/orders 42ms
PUT /api/sessions 24ms

Built for the work around the performance.

Practical tools for people preparing, cueing, translating, describing and sharing live performance text.

Audio description beside the script
Prepare description notes with their cue context, then revise, rehearse and export them without separating them from the performance text.
AD notesCue linksTXTCSVVTTAudio
Import and export
Bring in scripts and subtitle files, then export structured material for revision, rehearsal, archiving or touring.
import script.docx cues detected
export show.en.srt ready
Project metadata
Keep title, company or collective, languages, notes and production context inside the same project file.
metadata · languages · notes · cue layers
Audience devices
Spectators can use their own smartphones to follow surtitles, translations or audio descriptions during the show.
Cross-platform desktop
Sténtor is designed as a desktop-first tool for macOS, Windows and Linux, with web views for audience and screens.
macOS · Windows · Linux
desktop app + audience web client
Research feedback
After rehearsals or performances, usage notes and audience responses can help improve the tool and the research around live text.
OperatorsAudiencesVenuesUsage notesFeedbackResearch

A project file, not a black box.

Sténtor keeps performance text structured: metadata, languages, cues, translations, audio-description notes and live state can all remain understandable and portable.

// Find every active Pro subscription that renews this week.
import { lambda } from "@acme/lambda";

const renewals = await lambda.subscriptions.list(({
  where: {
    plan:      "pro_monthly",
    status:    "active",
    renews_at: { lte: lambda.days(7) },
  },
  include: { customer: true },
  limit: 100,
});

for (const sub of renewals) {
  await lambda.queue.send("renewal_reminder", { id: sub.id });
}
// Same query, idiomatic Go. Errors elided for brevity.
import "github.com/acme/lambda-go"

renewals, _ := lambda.Subscriptions.List(ctx, &lambda.SubscriptionListParams{
    Plan:     "pro_monthly",
    Status:   "active",
    RenewsAt: lambda.LTE(time.Now().Add(7 * 24 * time.Hour)),
    Include:  []string{"customer"},
    Limit:    100,
})

for _, sub := range renewals {
    lambda.Queue.Send(ctx, "renewal_reminder", lambda.M{"id": sub.ID})
}
# Same query, Pythonic. Async by default.
from acme.lambda import lambda_

renewals = await lambda_.subscriptions.list(
    where={
        "plan":      "pro_monthly",
        "status":    "active",
        "renews_at": { "lte": lambda_.days(7) },
    },
    include={"customer": True},
    limit=100,
)

for sub in renewals:
    await lambda_.queue.send("renewal_reminder", id=sub.id)
# Bare HTTP — every SDK is built on this.
curl https://api.lambda.dev/v1/subscriptions \
  -H "Authorization: Bearer $LAMBDA_KEY" \
  -H "Content-Type: application/json" \
  -G \
  --data-urlencode 'where[plan]=pro_monthly' \
  --data-urlencode 'where[status]=active' \
  --data-urlencode 'where[renews_at][lte]=2026-05-05T00:00:00Z' \
  --data-urlencode 'include=customer' \
  --data-urlencode 'limit=100'
// HTTP/1.1 200 OK · application/json · 24ms · iad
{
  "data": [
    {
      "id":        "sub_01HF8Q3K2ZX",
      "plan":      "pro_monthly",
      "status":    "active",
      "renews_at": "2026-05-03T14:21:00Z",
      "customer": {
        "id":    "cus_01HF8Q1A0PQ",
        "email": "maya@acme.co",
        "tier":  "pro"
      }
    }
    // 99 more rows…
  ],
  "page": { "limit": 100, "next": "cur_..." }
}
Ready for rehearsal

Prepare the text.
Cue the show. Share it live.

Use Sténtor to bring surtitles, translations and audio descriptions from the script to the room, the screen and the audience device.