One API for local and remote text-to-speech providers. Switch between Piper, Kokoro and XTTS without changing your application.
The problem
Every TTS engine brings its own API, its own installation, its own configuration and its own way of managing voices. Supporting two of them means writing the integration twice; changing your mind later means rewriting it. ModelForce puts a single interface in front of them so the application stops caring which engine is underneath.
What it provides
- Provider abstraction — Piper, Kokoro and XTTS behind one interface, with room for more.
- Local inference — runs self-hosted and works offline; audio does not have to leave the machine.
- Four ways in — CLI, SDK, REST API and a web UI.
- Unified auth and configuration — one place to configure, not one per engine.
- No vendor lock-in — swapping the provider is a parameter, not a migration.
Usage
import { ModelForceClient } from "@modelforce/sdk";
const mf = new ModelForceClient();
await mf.synthesize({ provider: "piper", text: "Hello world" });
Status
Early development. The repository is public and actively worked on, with CI and documentation in place, but it is young — treat it as something to read and try, not something to depend on in production yet.
Stack
TypeScript/Node.js monorepo, pnpm workspaces, Turbo builds. Licensed MPL 2.0.
Where it fits
ModelForce is the same idea as USB and LeoSIS applied to speech: one portable surface over many interchangeable backends. Each of the three stands alone.