Skip to main content

Private voice transcription server — receive audio, transcribe locally, write clean text.

Project description

Sotto

Sotto voce: in a quiet voice. Your words, captured reliably, processed privately.

Sotto is a lightweight Python server that receives audio uploads, transcribes them locally with Whisper, generates a short title and summary via LLM, and writes clean text output to a configurable location.

Designed to run on hardware you control. Pairs with the Sotto iOS app for reliable voice capture.

Quickstart

pip install sotto
sotto init          # creates ~/.config/sotto/config.yaml
sotto start         # starts receiver + worker on port 8377

Configuration

sotto init
# Edit ~/.config/sotto/config.yaml
sotto start

Key settings:

  • storage.output_dir — where completed transcripts are written (default: ~/.local/share/sotto)
  • pipelines — separate pipelines for private (local LLM) and standard (API) processing
  • whisper.model — Whisper model size (default: large-v3)
  • whisper.devicecuda or cpu
  • auth.tokens — bearer tokens for authenticating uploads from the iOS app

API

Upload audio

POST /upload
Content-Type: multipart/form-data
Authorization: Bearer <token>

file: <audio file>
privacy: "private" | "standard"

Returns: {"uuid": "...", "status": "pending"}

Check job status

GET /jobs/<uuid>
Authorization: Bearer <token>

List jobs

GET /jobs?limit=50&offset=0
Authorization: Bearer <token>

Health check

GET /health

Output

For each completed job, two files are written to output_dir/completed/YYYY/MM/:

  • <uuid>.txt — clean transcript
  • <uuid>.json — metadata (title, summary, duration, pipeline info)

Prerequisites

  • Python 3.11+
  • Ollama running separately (for private pipeline)
  • Anthropic API key (for standard pipeline)
  • CUDA-capable GPU recommended for Whisper transcription

License

MIT — Built by Reed Shea. Open source. Private by design.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sotto-0.1.0.tar.gz (14.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sotto-0.1.0-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file sotto-0.1.0.tar.gz.

File metadata

  • Download URL: sotto-0.1.0.tar.gz
  • Upload date:
  • Size: 14.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sotto-0.1.0.tar.gz
Algorithm Hash digest
SHA256 23ab1536f00cb695cc5ec66440a011973bf6bb1e33d825d02a64045c01841959
MD5 1e85eafdb578e9bf95b12b1d456eb0c1
BLAKE2b-256 c69cc75500e49dde2c8287a31405b3395423104b2caaaafe22531b68f891173e

See more details on using hashes here.

Provenance

The following attestation bundles were made for sotto-0.1.0.tar.gz:

Publisher: publish.yml on reedshea/sotto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sotto-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sotto-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sotto-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eac1e69b5698e236d8e09c0eab0e305565fb8d40cceaae2c66f1876337abc192
MD5 2eb957fc1bdf67259685bbadc4900a5b
BLAKE2b-256 9247547c466d2c3e0efad68a02a2c734d88b4cccf5760d5ceda357690314e346

See more details on using hashes here.

Provenance

The following attestation bundles were made for sotto-0.1.0-py3-none-any.whl:

Publisher: publish.yml on reedshea/sotto

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page