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 mobi 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

Releases & CI/CD

This project uses a monorepo structure with automated deployments triggered by git tags:

  • iOS (TestFlight): Push a tag starting with ios-v (e.g., git tag ios-v1.0.0) to trigger Xcode Cloud builds.

  • Python (PyPI): Push a tag starting with py-v (e.g., git tag py-v1.0.0) to trigger the GitHub Actions publishing workflow.

Note: Ensure you increment the version number in pyproject.toml before tagging to avoid "Version Already Exists" errors.

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.2.tar.gz (29.1 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.2-py3-none-any.whl (25.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sotto-0.1.2.tar.gz
  • Upload date:
  • Size: 29.1 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.2.tar.gz
Algorithm Hash digest
SHA256 76ac07bd8b5768f28298a95fa0d2d672e20a0ff0953fcdde8023bcfc888d1263
MD5 8fc120a4caccabae3f6cd587c2dc4836
BLAKE2b-256 32cf8a08968ab596d15cf464170ca952ca5f90deb654128c3861fea5d39972ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for sotto-0.1.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: sotto-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 25.2 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 10e57169a05841a7caa4adf64acc62cbe99d96ad71e9c26780faed894a20e6fe
MD5 c1ca92bdac0a348105af3a7af284a241
BLAKE2b-256 fea4e408e3ef724d87aa4c3f0ff88f861899420d6382254504af0fb1a04cace6

See more details on using hashes here.

Provenance

The following attestation bundles were made for sotto-0.1.2-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