Open-source project
sipeter/CloneTTS avatar
sipeter/CloneTTS

CloneTTS: an offline Android TTS engine with 1 to 3 second voice cloning

A lightweight, offline Android Text-to-Speech (TTS) engine enabling seamless system-wide voice cloning and high-fidelity text reading. / 运行在安卓本地的轻量级文字转语音 (TTS) 引擎,支持离线发音人提取、零门槛音色克隆与双擎系统级全局听书。

819 stars24 forksUnknownLicense varies

At a glance

What is it?
CloneTTS turns a short phone recording into a local Android TTS voice and registers itself as a system engine, so readers like Legado can speak without a network. The trade-off is a manual battery setup and a device benchmark you should run before trusting it.
Who is it for?
CloneTTS suits Android users who want a private, offline TTS voice and are willing to run the built-in benchmark, set battery optimization to Unrestricted, and lock the app in the recent tasks view. It is the wrong choice for iOS, for desktop readers, and for anyone who wants a hosted API or one-tap setup.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository last received commits 53 days ago.
What is it written in?
GitHub does not report a main language for this repository.

Answers come from the project's GitHub data, last synced on September 21, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What CloneTTS solves, and who it is actually for

Most phone readers depend on a cloud TTS endpoint or a vendor engine with a fixed set of voices. CloneTTS takes a different route: it runs the synthesis model on the device and lets you add your own voice by recording 1 to 3 seconds of speech. The README describes the project as an offline, native TTS engine for Android that allows you to clone desired voices and read books or long texts with no internet connection. All inference runs locally.

The people this fits are Android users who read long text in apps such as Legado or Moon+ Reader and want a voice that is not tied to a subscription or a network round trip. It also fits users who want role-based reading, where different characters get different voices. That is the point of the alias field on a voice card: the README says the alias is the binding key external readers use for role-based TTS through the HTTP API. If you only need a generic system voice, the built-in Android engines already do that, and CloneTTS adds setup work for no gain.

How the engine, the voice store and the HTTP server fit together

The app is a single Android application that holds three things: the synthesis model, a library of cloned voices, and an optional local HTTP server. On first launch the README says the app extracts AI model data in the background, so the model ships inside the APK rather than being downloaded later. That is what makes the offline claim possible, and it also explains the wait on first start.

A voice is a small record: reference audio, the exact transcript of that audio, an alias, and a num_steps value. The README is explicit that the transcript must match the recording perfectly, and that mismatches severely degrade synthesis quality. num_steps controls compute precision. The default is 2, 4 buys quality at the cost of speed, and the README states the maximum is 8, with values above 8 giving no further improvement.

Reading can happen through two paths. The first is the Android system TTS route, where CloneTTS registers as an engine and any app that calls the platform TTS API can use it. The second is the built-in HTTP server, which the README documents on port 8080 with GET and POST support. Version 0.6.0 added reader-specific endpoints: /api/legado/default follows the currently selected default voice, /api/legado?voice=voiceAlias locks to one voice, and /api/legado/multirole drives the multi-character flow. The voice parameter matches by name or alias, which is why duplicate alias checking exists.

Installing the APK and cloning your first voice

There is no package manager step here. The README points to the Releases page of the GitHub repository, where you download the latest .apk file and tap it to install, allowing installation from unknown sources if your phone prompts for it. The Google Play closed beta is mentioned in the README as a preview track for an upcoming release with neural noise reduction and device benchmarking, and it requires joining a Google Group and opting in on the Play testing page.

After install, the first launch extracts model data in the background. Run the built-in performance benchmark before you invest time in voices. The README gives a hard threshold: if your RTF is greater than 1, your device may not be powerful enough for smooth real-time synthesis. The same panel reports the decoding backend, NPU or CPU, and the thread allocation.

Adding a voice happens in the app. Open the Voices tab, tap the overflow menu, and choose Add Voice. Record with Studio Recording or pick a local file with Select External. The reference clip should be 1 to 3 seconds, a single clear sentence, with no background noise.

The README gives the HTTP request forms for reader integration. The GET form is shown as http://127.0.0.1:8080/api/tts?text={{speakText}}&voice=voiceName, and the README states that POST supports application/x-www-form-urlencoded and application/json formats for sending long texts. The voice parameter matches by voice name or alias. If you prefer the system route, search your phone's settings for TTS Settings or Text-to-Speech Output and set the preferred engine to CloneTTS, after which Read Aloud in any reader app uses it with variable speech rate.

The battery and background-execution requirement is not optional

The README marks this section as mandatory in capital letters, and it is the most common way the project fails for new users. Android kills background processes, and a reader that speaks while the screen is off looks exactly like a background process. The instructions are to set the app's battery optimization policy to Unrestricted or Allow background activity in system settings, and then to lock the app card in the recent tasks view by swiping down on it or tapping a lock icon. The README notes that the lock option varies by device brand and that some phones do not offer it at all.

That is a real limitation rather than a documentation gap. On a phone without the lock option, or with an aggressive vendor power manager, long reading sessions with the screen off may stop partway through. The app cannot fix that from inside; it depends on the OEM's policy. Treat the benchmark threshold and the battery setting as two separate gates. Passing the benchmark only tells you the device can synthesize fast enough. It says nothing about whether the OS will let the process live.

NPU acceleration, and the devices it excludes

Version 0.7.0 added NPU hardware acceleration. The README limits it to supported Qualcomm Snapdragon flagship devices and names 8 Gen 2, 8 Gen 3, 8 Elite and 8 Elite Gen 5. On those devices the README states synthesis can be offloaded to the on-device NPU for roughly 2x speed and significantly lower heat.

That is a narrow list. Most Android phones in use are not on it, and the feature does nothing for them. The same release also changed sentence splitting, and the README says that improvement benefits all devices: punctuation-graded pauses, dialogue quotes that no longer split apart, and mixed Chinese-English long phrases that are no longer chopped. Between the two changes, the splitting work is the one that reaches every user.

The performance console matters more than the headline number. By enabling detailed logging in settings, the README says you can watch the RTF and inference latency for every audio chunk in a waterfall log panel. That per-chunk view is more useful than a single average, because stutter usually comes from a few slow chunks rather than uniform slowness. The docs folder contains a Beginner Guide that covers NPU mode; the README itself only points to it.

Where CloneTTS is the wrong tool, and what to use instead

CloneTTS is Android only. If you read on iOS, on a desktop reader, or through a browser extension, none of the integration paths in the README apply to you, and the APK is not a component you can embed elsewhere. It is also a poor fit if you want a hosted endpoint that several people share, since the HTTP server is described as local, bound to 127.0.0.1 in the documented example.

A concrete alternative in the same space is MultiTTS, which appears in the related searches around this project. The difference in approach is the voice source. MultiTTS is a front end that routes text to TTS engines and services you configure, which means its voices come from those engines. CloneTTS carries its own synthesis model and builds voices from your recordings, which is why it can run with no network and why it needs a benchmark to tell you whether your phone can keep up. If your phone is slow, MultiTTS plus a cloud engine will sound better than a local model that cannot hit real time. If you want the voice to stay on the device, the routing approach does not give you that.

Two smaller boundaries are worth stating. The README does not document rollback to an earlier release, so keeping the APK you installed is the only obvious way back. And the model extraction on first launch is described as a wait, not a progress dialog with an estimate, so a slow first start is expected behaviour rather than a fault.

Maintenance, upgrades and the licence question

The repository is not archived, and the last push was on 2026-07-30, which is also the date of the v0.7.0 release. Before that, v0.6.5 landed on 2026-06-17 and v0.6.4 on 2026-05-18, so the recent cadence has been roughly one release every four to six weeks. That is a real cadence, but it is not a support commitment, and it does not tell you how long the current model will stay compatible with new Android versions.

Upgrade cost is low in normal use: install the newer APK over the old one. The part that needs care is voice data. The README describes ZIP-based export and import with append and overwrite modes, which is the migration path between installs or devices. Export before upgrading if you have built several voices, because the README does not describe a downgrade path and does not state whether a future model change would invalidate existing voice records.

The licence is the open question. The repository metadata given here does not include a licence identifier, and the README does not state one either. For an app that ships model weights and performs voice cloning, the licence terms matter for anyone who wants to redistribute the APK, bundle it in a product, or use cloned voices commercially. Until a licence file appears in the repository, treat redistribution and commercial use as unresolved and check the project's own channels. This is not legal advice; it is a note that the terms are not visible in the repository as described.

Editorial conclusion

CloneTTS suits Android users who want a private, offline TTS voice and are willing to run the built-in benchmark, set battery optimization to Unrestricted, and lock the app in the recent tasks view. It is the wrong choice for iOS, for desktop readers, and for anyone who wants a hosted API or one-tap setup. Before adopting it, install the latest APK from the Releases page, run the performance benchmark, and confirm that your RTF is at or below 1 and that your reader app appears in the system TTS engine list.

Frequently asked questions

Is voice cloning with CloneTTS illegal?

The README does not discuss the legality of voice cloning, and the repository as described carries no licence identifier. What the README does cover is the technical side: recording 1 to 3 seconds of speech and using it locally on the device. Whether a specific use is lawful depends on your jurisdiction and on whose voice you clone, and the project material does not answer that.

How much does it cost to clone a voice with CloneTTS?

The README describes the app as free to download from the GitHub Releases page and as running all inference locally, so there is no per-request or subscription cost documented. The Google Play closed beta is presented as an upcoming release track rather than a paid tier, and the README states no pricing.

Which TTS is the most popular?

The README makes no popularity claim and gives no comparison with other TTS engines. It describes CloneTTS as an offline Android engine that registers as a system TTS engine, and mentions Legado and Moon+ Reader as compatible readers. Any ranking of TTS engines would have to come from outside this material.

How do TTS voices in CloneTTS work?

A voice is built from a 1 to 3 second reference recording plus the exact transcript of that recording, and the README warns that a mismatched transcript severely degrades quality. Each voice also carries a num_steps value, default 2, with 4 for higher quality and 8 as the documented maximum. The alias on a voice card is what external readers use to select it.

Official sources

  1. Issues
  2. README
  3. Releases
  4. sipeter/CloneTTS on GitHub
Community notes

Community notes