Skip to content

About

Private, offline voice recorder for Android: recording with pause and resume, a live level meter, AAC or Opus, stereo and microphone modes, and a player with speed control. Recordings stay in private storage until you share them. No internet permission, Google-free and telemetry-free. Part of the Ctrl series by VKNXWorks.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

RecorderCtrl

A private, offline voice recorder that replaces your phone's recorder app.

Latest release Android 15+ License: GPL-3.0 Telemetry-free Offline Sponsor

RecorderCtrl records voice notes, talks and music with a live level meter, keeps going with the screen off, and keeps every recording in its own private storage until you share it or save a copy. It never goes online.

Part of the Ctrl series by VKNXWorks.

Get it on Obtainium Get it from our F-Droid repo

Features

  • Works fully offline. RecorderCtrl doesn't have the internet permission and never goes online
  • Recording with a timer and live level meter, Pause and Resume, Stop and save, and Discard. It keeps going with the screen off or in another app, with Pause and Stop in the notification
  • Quality: Standard and High (AAC .m4a) or Small (Opus .ogg), mono or stereo, and the microphone tuned for normal sound, voice (less noise and echo) or unprocessed for music
  • Recordings: a list with name, date, length and size, search, and a player with seeking and 0.75× to 2× speed
  • Speech to text on the phone with whisper.cpp: transcribe a recording in the background with progress and Cancel, in the language you pick or detected automatically. The transcript shows every line with its time (tap one to play from there), is searchable from the Recordings tab, and exports as .txt or .srt. You import the model file yourself (RecorderCtrl never downloads anything); nothing is uploaded
  • Private by default: recordings are stored in RecorderCtrl's own storage, which other apps can't read. Share one, or save a copy to the phone's Recordings folder, when you want to
  • Recovers cut-off recordings when the phone was switched off or the app was stopped while recording, where the file can still be read
  • Works with other apps: apps that ask for a voice recording get it from RecorderCtrl, with access to that one file only
  • App lock with its own PIN and optional fingerprint unlock, and Hide in screenshots / Hide in recent apps (both off until you turn them on)
  • Ctrl / Signal look, shared by every Ctrl app: dark and light, following your phone's dark theme setting, high contrast, one violet accent, Space Grotesk and JetBrains Mono; landscape, tablet and foldable layouts

Requirements

  • Android 15 or newer, on a 64-bit ARM phone (nearly every phone from the last several years)
  • Works on any Android ROM as a normal app: stock Android, LineageOS, GrapheneOS, CalyxOS, /e/OS and the phone makers' own systems. It doesn't need root or to be built into the system.
  • Google-free and de-Googled: no Google Play services, Firebase or other Google libraries, and the app never contacts Google.

Install

  1. Open the latest release on your phone, scroll down to Assets and tap the file that ends in .apk (for example RecorderCtrl-v0.1.0.apk). The "Source code" zip and tar.gz files are not the app; you don't need them.
  2. Open it on your phone. Android may ask you to allow installing apps from your browser or file manager.
  3. Updates install over the old version. Your settings are kept.

Automatic updates: on your phone, tap one of the buttons above.

  • Obtainium: install Obtainium first. The button adds RecorderCtrl and installs every new release for you.
  • F-Droid: adds the CtrlF-Droid repo to F-Droid, Droid-ify or Neo Store, with every Ctrl app and automatic updates.

If the Obtainium button doesn't open the app, add https://github.com/VoidedKN0X/RecorderCtrl in Obtainium by hand.

Use it as your recorder: apps that ask for a voice recording open RecorderCtrl; if another recorder app is installed, Android may ask which app to use the first time. RecorderCtrl works as a normal app on any Android 15+ ROM; it doesn't need to be built into the system.

Getting started

  • Record: tap Record, allow the microphone, then Pause or Stop and save. The bin discards the recording.
  • Recordings: tap a recording to open its player, then play, seek, change the speed, share, save a copy, rename or delete it.
  • Speech to text: download a whisper.cpp model such as ggml-base.bin (Settings > Speech to text > Where do I get a model? opens the page), import it under Import a model, then open a recording and tap Transcribe. Bigger models (ggml-small.bin, ggml-medium.bin) are more accurate but slower and need more memory; quantised ones (q5_1, q8_0) are smaller and faster.
  • Settings (profile picture): quality, stereo, the microphone mode, keeping the screen on, and the speech-to-text model and language.

Settings and About are behind your profile picture at the top right of every tab.

Is it safe to install?

  • Open source. All of RecorderCtrl's code is in this repo, under the GPL-3.0 licence. Anyone can read it.

  • Built by GitHub, not on a personal computer. Every release on the Releases page is built by the build workflow on GitHub Actions, straight from the code in this repo. Each build also checks that the app has no network permission and no Google libraries.

  • Always signed with the same key. Android refuses to install an update signed with a different key over RecorderCtrl, and the CtrlF-Droid repo only accepts APKs signed with this key. The SHA-256 fingerprint of RecorderCtrl's signing certificate is:

    5C:67:DD:AA:1C:0D:00:5A:76:30:83:6A:A1:F4:29:A2:D9:B4:9D:A2:5F:3D:FC:F5:30:71:EE:DA:54:CC:B2:4F
    

    Advanced users can check it with AppVerifier.

Check a download. Every release is built and published by GitHub Actions, never on a personal computer:

  • The release notes end with the APK's SHA-256 checksum. Compare it with sha256sum RecorderCtrl-vX.Y.Z.apk (or Get-FileHash on Windows).
  • Each release APK has a signed build provenance attestation. With the GitHub CLI, gh attestation verify RecorderCtrl-vX.Y.Z.apk -R VoidedKN0X/RecorderCtrl proves it was built by this repo's workflow from the tagged commit.
  • The signing-certificate fingerprint above stays the same for every release.

Permissions. RecorderCtrl has no internet permission: it can't go online at all. It asks only for what it needs, when it needs it:

Permission What RecorderCtrl uses it for
Record audio Recording from the microphone, only while you record.
Foreground service, and foreground service (microphone) Recording with the screen off or while you use other apps. Only while a recording is running.
Foreground service (media processing) Speech to text keeps going with the screen off or while you use other apps. Only while a transcription is running; Android limits it to 6 hours a day.
Prevent phone from sleeping Keeps the processor awake while a transcription runs, released as soon as it ends.
Notifications The Recording notification with Pause and Stop, and the Transcribing notification with progress and Cancel.
Use biometric hardware Optional fingerprint unlock for the app lock.
App-internal broadcasts (com.vknxworks.recorderctrl.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION) Added by AndroidX so that only RecorderCtrl itself can send to its own internal receivers. It isn't something you grant and gives no access to anything.
Hide other apps' floating windows over the PIN screen While the lock or PIN screen, or a delete or reset confirmation, is showing, other apps' floating windows (chat heads, overlays) are hidden over it, so nothing can cover or imitate it. No prompt; overlays work as usual everywhere else.

See Privacy for what happens to your data.

App lock

Turn it on under Settings > Privacy and security > App lock (tap your profile picture at the top right, then Settings). It's off until you turn it on.

  • Its own app PIN of at least 6 digits, separate from your phone's screen lock. Very obvious PINs such as 111111 or 123456 are refused.
  • Unlock with fingerprint (optional) only accepts strong biometrics, checked by the phone's secure hardware. The PIN is still needed after the phone restarts and at least every 72 hours.
  • The PIN is never stored. It's stretched with 600,000 rounds of PBKDF2 and mixed with a key held in the phone's secure hardware.
  • Wrong PINs: after 5 tries you wait 30 seconds, doubling up to 15 minutes. Restarting the app or the phone, or changing the clock, doesn't skip the wait.
  • Lock again: as soon as you leave the app (the default), after 1, 5 or 15 minutes or 1 hour away, or only when the app restarts.
  • Forgot your PIN? It can't be recovered. The lock screen offers to reset RecorderCtrl's own settings and turn the lock off. The recordings kept in RecorderCtrl are deleted (they're what the lock protects). Copies you saved to the Recordings folder or shared stay where they are.
  • A running recording keeps going when the app locks; the notification still has Pause and Stop.

Hide in screenshots and Hide in recent apps (both off by default): the first keeps RecorderCtrl out of screenshots and screen recordings, the second shows a blank card in the recent-apps view while screenshots still work. With the app lock on, the recent-apps view always shows a blank card.

Privacy

Telemetry-free. RecorderCtrl has no analytics, crash reporting, usage stats or tracking of any kind. It has no internet permission, works fully offline and never connects to the internet. Every build checks that the app has no network permission and no Google libraries.

  • Recordings are stored in RecorderCtrl's private app storage, encrypted with the phone, and can't be read by other apps.
  • Sharing hands the receiving app read access to that one file only. Save a copy puts a copy in Recordings/RecorderCtrl, where other apps with media access can see it.
  • Speech to text runs on the phone. The model you import is copied into RecorderCtrl's private storage; recordings and transcripts are never uploaded (RecorderCtrl can't go online). Transcripts are stored next to their recordings and deleted with them. Where do I get a model? only opens a web page in your browser.
  • Android backups don't include RecorderCtrl's recordings.
  • RecorderCtrl is left out of Android's cloud backup and its phone-to-phone transfer.
  • The Support, Report a bug, Source code and Licence links on the You page open in your browser, only when you tap them.

How RecorderCtrl is made

RecorderCtrl is a one-person project by VoidedKN0X (VKNXWorks). Much of the code is written with the help of AI (Claude, by Anthropic). I decide what the app does, review the changes and use the app myself. Every change is listed in the changelog, and you can read every line of code here.

Build from source

You need Android Studio, or JDK 17 and the Android SDK with the NDK (27.0.12077973) and CMake (3.22.1); Gradle installs them if they're missing. The speech-to-text engine is built from source: whisper.cpp 1.9.5 (commit d1be6fde11ac6e0407606b4e42fe72d34add8037) is included in app/src/main/cpp/whisper.cpp, trimmed to what the CPU build needs, so nothing is downloaded at build time.

  1. Clone the repo:
    git clone https://github.com/VoidedKN0X/RecorderCtrl.git
    cd RecorderCtrl
  2. Build the app:
    ./gradlew assembleDebug
    On Windows, use gradlew.bat assembleDebug.
  3. The APK is in app/build/outputs/apk/debug/. Copy it to your phone and install it.

Or open the folder in Android Studio and press Run with your phone connected.

Dependency verification. Every library and build plugin download is checked against the sha256 checksums in gradle/verification-metadata.xml, and the build fails on any mismatch. When you change a dependency, a plugin or the Gradle version, run the Dependency verification metadata workflow (Actions tab, Run workflow), check the diff of the file it prints and commit it in the same push.

Support the project

RecorderCtrl is free and open source. If it's useful to you, you can support development on GitHub Sponsors. In the app, tap your profile picture: About at the bottom of the You page has Support RecorderCtrl and Report a bug, which opens the issue tracker. Please report bugs and ideas with the bug report and feature request forms. Starring the repo helps too.

Found a security problem? Please don't open a public issue; see SECURITY.md.

The Ctrl series

Native Android apps for self-hosted services and everyday tools, all with the same design.

App What it's for
AdCtrl Control your AdGuard Home DNS server
ArrCtrl Radarr, Sonarr, Prowlarr, Bazarr, qBittorrent, autobrr and Cleanuparr in one app
BeamCtrl TV remote for phones with an IR blaster
CallCtrl Phone app: dialer, call history and in-call screen
CameraCtrl Private camera with RAW (DNG) on every lens
ChatCtrl Matrix chat client for matrix.org and self-hosted Synapse
ClockCtrl Alarms, timers, stopwatch and world clock
ContactCtrl Contacts: browse, edit, import and export
CraftyCtrl Manage Minecraft servers on Crafty Controller
DateCtrl Calendar for the calendars on your phone and your accounts
FilesCtrl File manager with NFS, SMB, SFTP, FTP and WebDAV
FrigateCtrl Watch and review your Frigate NVR cameras
GalleryCtrl Private, offline gallery with an encrypted vault
ImmichCtrl Photos and backup for your Immich server
JellyCtrl Movies, shows, music and Live TV from Jellyfin
LijnCtrl Live De Lijn bus and tram departures
LumenCtrl Private, offline photo and video editor
MailCtrl Email for Gmail and Proton Mail
MapsCtrl Private, offline maps and navigation
MemoCtrl Notes on your Memos server
NaviCtrl Music player for Navidrome servers
PaperCtrl Scan and browse documents on Paperless-ngx
PrintCtrl Bambu Lab printers through Bambuddy, and Spoolman spools
ProxCtrl Manage your Proxmox VE server
RecorderCtrl (this app) Private, offline voice recorder
RideCtrl Offline maintenance, fuel and mod log for your vehicles
SeerrCtrl Request movies and shows on Seerr / Jellyseerr
ShutterCtrl Remote control and photo transfer for Canon cameras
SoundCtrl JBL headphones and speakers, without the account
SumCtrl Offline calculator, unit converter and work tools
SynapseCtrl Administer your Matrix Synapse server
TalkCtrl Cardo intercom settings, radio and updates
TapoCtrl Tapo plugs and bulbs on your home network
TextCtrl Private SMS and MMS messaging
TrueCtrl Monitor and manage your TrueNAS server
WakeCtrl Keep the screen awake, per app or while charging
WrtCtrl Manage your OpenWrt router

License

RecorderCtrl is licensed under the GNU General Public License v3.0. © VKNXWorks

Speech to text uses whisper.cpp and ggml, © The ggml authors, under the MIT licence (app/src/main/cpp/whisper.cpp/LICENSE); the app shows it under Open-source parts on the You page. , bundled in the app (nothing is downloaded): Space Grotesk and JetBrains Mono, both under the SIL Open Font License 1.1 (FONT-LICENSE-SpaceGrotesk.txt, FONT-LICENSE-JetBrainsMono.txt).

About

Private, offline voice recorder for Android: recording with pause and resume, a live level meter, AAC or Opus, stereo and microphone modes, and a player with speed control. Recordings stay in private storage until you share them. No internet permission, Google-free and telemetry-free. Part of the Ctrl series by VKNXWorks.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages