Speech in.
Nothing out.

Syntony SDK runs multilingual transcription, speaker diarization and de-identification in one realtime pass, entirely on device — iOS, Android and web. Raw audio never leaves the process. Partials render live as people speak; the moment recording stops, your app receives the de-identified transcript plus a separate re-identification map to rehydrate it — where that map lives is your call, not ours.

closed beta · realtime on device · zero audio egress

syntony-sdk · on-device session
network: 0 B out
syntony run --local --lang auto
✓ ASR · speaker embeddings · de-id core loaded
● capturing — en-CA detected
S1Good morning Mrs. [NAME_1], what brings you in today?
S2I’ve been having dizzy spells since Tuesday morning.
S1Is the number on file still [PHONE_1]?
S2Yes — and my health-insurance card is [RAMQ_1].
→ handed to host app: 4 segments · 2 speakers · de-identified + re-id map
syntony run --local --lang auto
✓ ASR · speaker embeddings · de-id core loaded
● capturing — fr-CA detected
S1Bonjour madame [NOM_1], qu’est-ce qui vous amène aujourd’hui ?
S2J’ai des étourdissements depuis mardi matin.
S1Votre numéro au dossier, c’est toujours le [TEL_1] ?
S2Oui. Et ma carte RAMQ, c’est [RAMQ_1].
→ handed to host app: 4 segments · 2 speakers · de-identified + re-id map
syntony run --local --lang auto
✓ ASR · speaker embeddings · de-id core loaded
● capturing — es-419 detected
S1Buenos días, señora [NOMBRE_1], ¿qué la trae hoy?
S2Tengo mareos desde el martes por la mañana.
S1¿El número en su expediente sigue siendo el [TEL_1]?
S2Sí — y mi tarjeta RAMQ es [RAMQ_1].
→ handed to host app: 4 segments · 2 speakers · de-identified + re-id map

Synthetic sample — names and numbers are invented.

iOS — C FFI Android — JNI Web — WebAssembly English · French · Spanish Runs offline after model download

One pass, three stages

Audio goes in; a speaker-attributed, de-identified transcript comes out — partial results in realtime while people speak, the complete transcript the moment recording stops. Every stage runs in-process on the device — there is no server half.

Transcribe

State-of-the-art multilingual models run in-process — nothing streams to a cloud ASR. Voice-activity detection trims silence before it costs you compute.

IN   waveform · 16 kHz mono PCM
OUT  → “Good morning Mrs. Tremblay, what brings you in…”
OUT  → « Bonjour madame Tremblay, qu’est-ce qui vous amène… »
OUT  → «Buenos días, señora Tremblay, ¿qué la trae hoy?…»

Diarize

Speaker embeddings segment the conversation into turns — who said what, computed locally, with no voiceprint ever transmitted.

OUT  S1 “Good morning Mrs. Tremblay…”
     S2 “I’ve been having dizzy spells…”
OUT  S1 « Bonjour madame Tremblay… »
     S2 « J’ai des étourdissements… »
OUT  S1 «Buenos días, señora Tremblay…»
     S2 «Tengo mareos desde el martes…»

De-identify

A deterministic engine tokenizes structural identifiers — phone, date of birth, health-insurance number, address — every time. On-device NER catches spoken names on a best-effort basis. Your app receives stable tokens in place of everything the engine detects, plus a separate re-identification map that can rehydrate them — the SDK emits the map and stores nothing.

OUT  S1 “Good morning Mrs. [NAME_1]… still [PHONE_1]?”
     S2 “…my health-insurance card is [RAMQ_1].”
OUT  S1 « Bonjour madame [NOM_1]… le [TEL_1] ? »
     S2 « …ma carte RAMQ, c’est [RAMQ_1]. »
OUT  S1 «Buenos días, señora [NOMBRE_1]… ¿sigue siendo el [TEL_1]?»
     S2 «…mi tarjeta RAMQ es [RAMQ_1].»

Synthetic example — names and numbers are invented.

An SDK, not a service

Drop the pipeline into your app. Sessions are local objects, events are typed, and de-identified text is all that streams during capture — the re-identification map is handed over separately when recording stops, yours to protect.

  • One session API on every platform — same stages, same token vocabulary.
  • Partial results stream to your UI in realtime; the raw transcript never leaves the process.
  • When recording stops: the complete transcript plus its re-identification map. The SDK emits the map and stores nothing — keep it on device or in your own backend, encrypted.
  • No endpoints to secure, no audio buckets to audit, no DPA for transcription.

API preview — shapes may change before release.

import SyntonySDK

let session = try SyntonySession(
  languages: [.english, .french, .spanish],
  redaction: .structuralAndNames
)

for await event in session.transcribe(mic: .default) {
  switch event {
  case .partial(let seg): render(seg)  // realtime, on device only
  case .final(let seg):   store(seg.deidentified)
  }
}
let map = session.reidentificationMap  // yours to store; the SDK keeps nothing
Syntony core asr · diarization · de-id c ffi jni wasm iOS swift package Android aar / maven Web npm · wasm bundle same code · same redaction behavior · every platform Syntony core asr · diarization · de-id c ffi jni wasm iOS swift package Android aar / maven Web npm · wasm bundle same code · same redaction behavior every platform

One core. Three runtimes.

One compiled pipeline

The pipeline ships as a single compiled unit per platform — not three parallel implementations drifting apart. A fix lands everywhere at once.

Thin native adapters

C FFI on iOS, JNI on Android, WebAssembly in the browser. Each adapter is a binding layer, not a rewrite — platform-native packaging on top.

Deterministic tokens

De-identification is one shared Rust core: the same utterance produces the same tokens on every platform — the phone in the exam room, the desktop at the clinic workstation — so a re-identification map made on one client can rehydrate the transcript on another.

What never leaves the device can never leak.

Security by design, not by policy: the architecture is the compliance story. Built for teams answering to Loi 25, PIPEDA, GDPR or HIPAA — the cheapest byte to protect is the one that was never collected.

raw audio
Processed in memory, on device. Never uploaded, never written to a server.
raw transcript
Exists only inside the SDK process. Your application receives de-identified text.
identifiers
Phone, date of birth, RAMQ and addresses are tokenized deterministically — [PHONE_1] [RAMQ_1] — and spoken names are caught by on-device NER — [NAME_1].
re-id map
Emitted beside the transcript as a separate artifact so de-identified text can be rehydrated when you need the original. The SDK hands it to your app and stores nothing — keep it on device, or encrypt it into your own backend.
network
A one-time model download. Inference runs offline; the SDK sends no audio, no transcript and no map anywhere.

Request access

Syntony SDK is in closed development. Request access by email and we’ll be in touch as the private beta opens.

From the team behind MedicalScribe — Syntony’s clinical dictation product for Québec physicians, built on this pipeline.

Request access

Opens your mail client with a short template — answered by email. Private beta · no newsletter, one reply.