Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

Animo

animo is a planned CPU-first text-to-speech service built as a Rust Cargo workspace. It is the TTS counterpart to aximo: a small production-shaped wrapper around local inference rather than a demo script around a model.

The initial MVP targets three offline voices:

  • Russian: Piper/VITS ru_RU-dmitri-medium
  • English: Kokoro kokoro-int8-multi-lang-v1_1, English speaker
  • Chinese: Kokoro kokoro-int8-multi-lang-v1_1, Chinese speaker

The service is designed to run without paid APIs, without GPU requirements, and without committing model artifacts to git.

Status

animo is currently in the design/documentation stage. The repository is being bootstrapped with the intended API, architecture, model policy, and runtime contracts before implementation starts.

Planned API

  • POST /v1/speech for TTS synthesis
  • POST /v1/audio/speech as an OpenAI-compatible alias
  • GET /v1/voices for configured voice metadata
  • GET /v1/capabilities for runtime and model capability metadata
  • GET /health/live for process liveness
  • GET /health/ready for model/runtime readiness
  • GET /openapi.json for the OpenAPI schema
  • GET /docs/ for Swagger UI
  • GET /metrics for Prometheus-compatible metrics

The MVP response format is audio/wav. The request schema keeps a response_format field so ogg or mp3 can be added later without changing the client contract.

Example request:

{
  "input": "Hello from local text to speech.",
  "voice": "en",
  "model": "kokoro",
  "language": "en",
  "response_format": "wav",
  "speed": 1.0
}

Workspace

The planned workspace mirrors the boundaries that worked well in aximo:

crates/animo
  HTTP service, runtime wiring, docs, metrics, health checks

crates/animo-core
  TTS domain types, voice registry, scheduler, text chunking

crates/animo-inference
  TtsEngine trait and sherpa-onnx adapters

crates/animo-audio
  PCM helpers, WAV encoding, future compressed audio encoding

Model Policy

Models are runtime artifacts and live outside git. The service should load them from a configured model root such as /var/lib/animo/models or ./var/models.

Initial model choices:

  • kokoro-int8-multi-lang-v1_1 for English and Chinese via sherpa-onnx Kokoro support.
  • vits-piper-ru_RU-dmitri-medium for Russian via sherpa-onnx VITS/Piper support.

Every configured voice must expose license and provenance metadata through GET /v1/voices and GET /v1/capabilities. See docs/model-licenses.md.

Runtime Principles

  • CPU-first inference with explicit admission limits.
  • One loaded model instance has one model execution slot unless configured otherwise.
  • Request admission limits are separate from model execution gates.
  • Long text is split into bounded sentence chunks before inference.
  • Blocking model calls run outside the async runtime.
  • Readiness degrades after repeated model/runtime failures.
  • Metrics include synthesis latency, generated audio duration, realtime factor, wait time, timeout counts, and active model executions.

Documentation

About

CPU-first local TTS service with streaming voice synthesis APIs.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors