Silero VAD (Apple Silicon)

On-Device Apple SDK

TheStage Apple SDK

Original model: snakers4/silero-vad (Silero Team)

On-device Silero VAD packaged by TheStage AI for Apple Silicon. Stateful per-chunk speech probability — used as the mic gate in voice agents and as Whisper's optional internal VAD pre-pass.

Runtime TheStage Apple SDK (SileroVAD / start_model)
Chunk 512 samples (32 ms @ 16 kHz)
HF engines TheStageAI/silero-vad

Overview


This repo hosts CoreML engine bundles for Silero VAD. The model keeps an LSTM hidden state across calls — reset between independent utterances.

System Requirements


Property Value
Hardware Apple Silicon Mac, or physical iPhone / iPad
macOS 15.0+
iOS 18.0+
Xcode 16.0+
Swift 6.0+
Flutter (optional) 3.24+

Simulator is not supported — run on real Apple Silicon hardware.

TheStage AI Access Token


Create a token at app.thestage.ai and pass it to the SDK:

try await TheStageAI.shared.initialize(apiToken: "th_…")
await TheStageFlutterSDK.initialize(api_token: 'th_…');

Token is checked online in initialize (once per app process when reachable). Inference runs fully on-device. Offline initialize fails — reconnect and call initialize again.

TheStage Apple SDK


Docs: TheStage Apple SDK · VAD

Installation (SwiftPM)

In Xcode: File → Add Package Dependencies…, paste https://github.com/TheStageAI/AppleSDK.git, and add the TheStageSDK product. Or in Package.swift:

.package(
    url: "https://github.com/TheStageAI/AppleSDK.git",
    exact: Version(1, 1, 0)
)

Installation (Flutter / iOS)

# pubspec.yaml
dependencies:
  thestage_apple_sdk:
    git:
      url: https://github.com/TheStageAI/AppleSDK.git
      path: plugin/thestage_apple_sdk
      ref: 1.1.0

Swift

import TheStageSDK

try await TheStageAI.shared.initialize(apiToken: "th_…")

try await TheStageAI.shared.start_model(
    model_name: "vad",
    engines_path: "TheStageAI/silero-vad"
)

// Exactly 512 samples @ 16 kHz mono per call
let result = try TheStageAI.shared.infer(
    model_name: "vad",
    input_json: ["audio": audio_chunk]
)
let probability = result[0]["probability"] as! Double
if probability > 0.5 {
    print("Speech detected")
}

Pass "reset_state": true between independent utterances.

Flutter (iOS)

await TheStageFlutterSDK.start_model(
  model_name: 'vad',
  engines_path: 'TheStageAI/silero-vad',
);

final result = await TheStageFlutterSDK.infer(
  model_name: 'vad',
  input_json: {'audio': audio_chunk},  // Float32List, length 512
);
final probability = result[0]['probability'] as double;

Audio contract

Sample rate 16 kHz mono Float
Chunk size exactly 512 samples (smaller chunks are zero-padded; larger rejected)
Output probability in [0.0, 1.0]
State Stateful LSTM — reset between utterances

Acknowledgments


This work builds on Silero VAD by Silero Team: snakers4/silero-vad.

This Apple Silicon package is produced by TheStage AI; it is not an official Silero release.

Links


Downloads last month
186
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Collection including TheStageAI/silero-vad