Skip to content

Offline voice input keyboard & live subtitle tool for Android

License

Notifications You must be signed in to change notification settings

notune/android_transcribe_app

Repository files navigation

Offline Voice Input (Android)

An offline, privacy-focused voice input keyboard and live subtitle tool for Android, built with Rust.

Get it on GitHub Get it on Google Play

Features

  • 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.

Screenshots

Prerequisites

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

Local Configuration

Create a local.properties file in the project root (this file is gitignored):

sdk.dir=/path/to/your/Android/Sdk

If 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)

Building

Debug APK

./gradlew assembleDebug
# Output: app/build/outputs/apk/debug/app-debug.apk

Release APK

./gradlew assembleRelease
# Output: app/build/outputs/apk/release/app-release.apk

Release AAB (Google Play)

./gradlew bundleRelease
# Output: app/build/outputs/bundle/release/app-release.aab

Signing

For 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=yourpassword

Model Assets

The 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.

Project Structure

├── 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

Acknowledgments

License

MIT

About

Offline voice input keyboard & live subtitle tool for Android

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •