An offline, privacy-focused voice input keyboard and live subtitle tool for Android, built with Rust.
- Offline Transcription: Uses deep learning models (Parakeet TDT) to transcribe speech entirely on-device.
- Supported Languages: Bulgarian, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Slovak, Slovenian, Spanish, Swedish, Russian, Ukrainian
- Voice Input Keyboard Use your voice as a text field input method.
- Live Subtitles: Real-time captions for any audio/video playing on your device.
- Privacy-First: No audio data leaves your device.
- Rust Backend: Efficient and safe native code using transcribe-rs.
| Dependency | Installation |
|---|---|
| JDK 17 | Android Studio (bundled) or sudo pacman -S jdk17-openjdk |
| Android SDK | Via Android Studio or sdkmanager |
| Android NDK | sdkmanager "ndk;28.0.13004108" |
| Rust | rustup.rs + rustup target add aarch64-linux-android |
| cargo-ndk | cargo install cargo-ndk |
Create a local.properties file in the project root (this file is gitignored):
sdk.dir=/path/to/your/Android/SdkIf your default Java is not JDK 17, uncomment and set org.gradle.java.home in gradle.properties:
org.gradle.java.home=/path/to/jdk17
# Examples:
# /opt/android-studio/jbr (Android Studio bundled JBR)
# /usr/lib/jvm/java-17-openjdk (System JDK 17)./gradlew assembleDebug
# Output: app/build/outputs/apk/debug/app-debug.apk./gradlew assembleRelease
# Output: app/build/outputs/apk/release/app-release.apk./gradlew bundleRelease
# Output: app/build/outputs/bundle/release/app-release.aabFor release builds, place a release.keystore in the project root and set these environment variables:
export KEY_ALIAS=release
export KEY_PASS=yourpassword
export STORE_PASS=yourpasswordThe Parakeet TDT model files (~670 MB) are automatically downloaded from HuggingFace during the first build via a Gradle task. Checksums are verified with SHA-256. No manual download is needed.
├── app/
│ └── src/main/
│ ├── AndroidManifest.xml
│ ├── java/dev/notune/transcribe/ # Android Java code
│ ├── res/ # Resources (layouts, drawables, etc.)
│ ├── assets/ # Model files (downloaded at build time)
│ └── jniLibs/ # Native .so files (built by cargo-ndk)
├── src/ # Rust source code (cdylib)
├── transcribe-rs/ # Rust transcription library (submodule)
├── Cargo.toml # Rust workspace
├── build.gradle.kts # Root Gradle config
├── app/build.gradle.kts # App module config (AGP 8.7.3)
├── settings.gradle.kts
├── gradle.properties
└── fastlane/metadata/android/ # F-Droid metadata
- Speech Model: Parakeet TDT 0.6b v3 by NVIDIA.
- Inference Backend: transcribe-rs by CJ Pais.




