Spinne Software

Transcribing video without uploading it

Whisper runs on your own machine. Getting from that to a subtitle file on a timeline is the part nobody writes down — and the part where footage quietly leaves the building.

The short answer

  • Name a Whisper model — tiny, base, small, medium or large-v3-turbo — and the audio never leaves your machine. Not “is encrypted in transit”. Does not leave.
  • Leave the engine on Auto and the answer changes, which is the next section.

Sparkle ships two local speech engines: whisper.cpp by preference, faster-whisper when it is not available. Both run locally, in the application's own backend. On Apple Silicon the bulk of the work is already on the Metal GPU.

When Auto does upload, and why

  • Auto is not local-first at any length. With a cloud engine configured, Auto sends the audio to it — Deepgram first, Google Cloud second — however short the file. Local Whisper is what Auto falls back to when no cloud engine is configured, or when every one of them fails.
  • The eight-minute threshold is not the local-versus-cloud gate. Past 480 seconds, measured with ffprobe before anything is sent, the request is pinned to Deepgram and Google drops out of the chain.

The reason for that threshold is the older Google engine, which caps out at roughly eight minutes of audio and was never a candidate for long files. It decides which cloud engine, not whether the cloud is used at all.

The fallback runs one way only, and it is worth being precise about it, because it is the whole promise:

  • A named local model never becomes a cloud call. The branch that talks to a cloud engine is entered only when the requested engine is a cloud engine, or is Auto. A request for small cannot reach it.
  • A cloud engine falls back to local. If Deepgram is unconfigured, unhealthy, or fails mid-job, the work lands on local Whisper rather than failing.

So the setting is the whole control surface. If footage is under embargo or covered by an NDA, name the model. Do not leave it on Auto and hope.

Which model to name

On Auto, when it does stay local, the priority is the largest model that will run: large-v3-turbo, then medium, small, base, tiny. Naming one explicitly overrides that.

There is no VRAM floor to clear. Sparkle does not refuse to run on a machine; it takes what the machine has and degrades. The practical limit is patience, not hardware.

One detail that costs people a hot laptop elsewhere: transcription threads are capped to the performance cores, roughly half the logical count and never more than eight. Saturating the efficiency cores too bought almost nothing — the heavy lifting on Apple Silicon is already on the GPU — and cooked the machine for it.

What else runs locally, and what it weighs

Transcription is not the only model Sparkle runs locally. The largest of them, by file size:

  • Segment Anything ViT-B — subject segmentation — 358 MB
  • Segment Anything 2.1, Hiera-small — mask tracking — 176 MB
  • Robust Video Matting, ResNet-50 — background removal, quality — 103 MB
  • MiDaS small — depth estimation — 64 MB
  • MobileSAM checkpoint — segmentation, fast path — 39 MB
  • MobileSAM encoder — segmentation, fast path — 27 MB
  • SAM ViT-H decoder — segmentation, decode — 16 MB
  • Robust Video Matting, MobileNetV3 — background removal, fast — 14 MB

None of these weights are inside the download. The application keeps its models in its own data folder, separately from the installer, which is why the sizes above are not what you fetch when you install it.

The neural accelerator is not always the fast path

This is the part that surprises people, and it is measured rather than assumed. On Apple Silicon, Sparkle deliberately runs background removal on the CPU and demotes CoreML below it:

  • RVM ResNet-50 — CPU ~76 ms/frame against CoreML ~150 ms/frame, twice as slow.
  • RVM MobileNetV3 — CPU ~43 ms/frame against CoreML ~104 ms/frame, 2.4 times as slow.

The cause is specific. The matting model carries recurrent state across frames and takes a float downsample_ratio input. The CoreML execution provider cannot run those, so it partitions the graph and hands the unsupported nodes back to the CPU one at a time, paying a copy between providers at every transition. The copies cost more than the acceleration saves.

CUDA and DirectML are real accelerators for this model and stay at the top of the order. CoreML sits below plain CPU as a last resort, for the case where the CPU provider is somehow absent. Measured on an M-series machine with ONNX Runtime 1.26.

What this will not do

  • Auto will not keep audio local, at any length. If a cloud engine is configured, Auto uses it. Name a model if that matters.
  • Mask tracking through SAM is not offered on Auto. Measured at 27 to 40 seconds per frame on an M2, it is too slow to hand to somebody without warning, so it is excluded from automatic selection rather than quietly chosen. The optical-flow tracking that ships in the editor is a different path and is not affected.
  • Generative work is cloud, and metered where you can see it. Credits are reserved before an operation and settled at what it actually cost.

Practical limits

  • Audio accepted for transcription — 8 GB
  • Imported subtitle file — 64 MB
  • Threshold that pins Auto to Deepgram — 480 seconds
  • Platforms — macOS on Apple Silicon and Intel; Windows 64-bit, in beta
  • Download — macOS 186 MB with presets, 142 MB without; Windows 192 MB and 148 MB
Open sparkle.software

Back to what Sparkle runs on your machine