Privacy Policy
1. Summary
BABA Real-Time Chat Translator (“the app”) reads a rectangle of your screen that you position yourself, recognizes the messages inside it, and translates them. This section states the whole of it in short; the sections that follow give the detail.
- Your conversations never come to BABA SOFTWARE. There is no server of ours involved in translation, and we receive no information about your conversations, translations, screen captures or API keys. The only server we operate is a record used to give the Android version's free trial once per device; it holds a hash of a device identifier and the time the trial began, nothing else (section 11).
- The app obtains conversation text in one of two ways: it reads the text your chat program publishes to assistive technologies such as screen readers, or it captures a rectangle of the screen and recognizes the characters in that picture. The channel the first method uses has a different name on each operating system — the Windows version uses UI Automation, the Android version uses the accessibility service. On Android it is off by default, you have to turn it on yourself in Android settings, and you can turn it off again at any time (section 4). The app decides which method to use; in the Windows version you can pin it to the second one in settings. Screen capture continues either way. On Windows, what is captured is never the whole screen — only one rectangle whose position and size you set. On Android the whole screen is captured on the device and only the reading area you set is cut out and read; the capture never leaves the device.
- Translation requires sending your message text to one outside service — the one you chose and configured with your own API key. That service is the only recipient.
- Captured images do not leave your device. The exception applies only when the app is reading by screen capture, and then only if the language is set to automatic detection or Windows cannot read the language you named; in that case the picture is sent to Google as a PNG. Google is the only service the app can send a picture to. Section 4 explains how to avoid it. The Android version never sends a picture anywhere — its character recognition always runs on the device.
- Nothing captured, recognized or translated is written to disk. The only files the app writes are its own settings. The single exception is on Android, when you yourself press the diagnostics button in settings: one screen is then kept as a file on the device (section 10).
- No analytics, no crash reporting, no update checks. The app does check whether you have bought it, and whether a trial period is still running. What that sends and stores is set out in section 11.
2. Screen capture
The app's window has a transparent opening — the reading hole — which you place over the message list of your chat program. The rectangle of the screen behind that opening is what the app captures. Its position and size are yours to set. Nothing outside it is captured, and the app never captures the whole screen.
Capture happens while translation is running, which begins when you press the start button and ends when you press it again. The interval between captures is 1.5 seconds by default and can be changed in settings. When the characters are read on your own computer — by the recognizer built into Windows, or by taking the text directly from the window — nothing leaves your device, so the app checks more often than that setting, as frequently as every 0.3 seconds. Images captured this way do not leave your computer.
There are a few further captures, and they are stated here so the description is complete. When you stop translating, the translations already on screen are deliberately left in place so you can finish reading them. While they remain, the app takes a 48×48 pixel thumbprint of the same rectangle once per second and compares it with the previous one, so that it can remove those translations when the conversation underneath them has moved on. No text recognition is performed on these, and nothing about them is transmitted. They are compared on your device and discarded.
Two further short captures happen while translation is running. While the conversation is scrolling, the app checks the same rectangle every 0.2 seconds for up to 3 seconds, so that the translations on screen follow the conversation underneath them. And after you send a message with Enter, it checks every 0.12 seconds for up to 2.5 seconds, until that message has been drawn on screen. Both are of the same rectangle, both are handled on your device, and neither is transmitted.
Captured images exist only in your computer's memory. There is no point in the app at which a captured image is written to a file, a log, a cache, or a temporary file.
3. The app captures an area, not a window
This is a limitation you should understand before you use the app, and we state it plainly rather than leaving it to be discovered.
The limitation described below applies to reading by screen capture. While the app is taking text directly from the window, it reads only the text published by the program you pointed it at, so the contents of another program sitting over that area are not read. But if that method stops working, the app falls back to screen capture on its own (section 4), and from that point the limitation below applies again.
Because the app captures a rectangle of the screen rather than one specific window, anything that comes to sit in front of that rectangle is captured as well. The app watches which window occupies the area and stops reading when a different program covers it, but that watching is not complete:
- There is a gap between another window appearing over the area and the app noticing it, no longer than one scan interval.
- Other windows of the same program are allowed through on purpose, because a messenger that opens each conversation in its own window is the user doing what they meant to do.
- For messengers used inside a web browser this watching is largely ineffective. The program occupying the area is the browser, so other tabs and other windows of that same browser pass the check. Tabs cannot be distinguished from outside the browser. When the app detects that the target is a browser, it tells you once per session.
What you can do: keep the reading hole tight around the message list, check what is behind it before you press start, and press stop when you have finished the conversation.
4. When a picture of your screen leaves your device
The app obtains conversation text in one of two ways, and which one is in use decides whether an image is transmitted.
First, taking the text directly from the window. Most chat programs publish the text on their screen to the operating system for the benefit of assistive technologies such as screen readers. The app reads that directly. In this mode no image is transmitted anywhere; only the sentences taken from the window go to your translation service.
That channel has a different name on each operating system. The Windows version uses UI Automation; the Android version uses the accessibility service (AccessibilityService). On Android this is off by default and works only once you turn the app's accessibility service on yourself in Android settings. With it on, the app receives the contents of whatever chat app is open on screen and uses them for translation only. They are not collected or stored for anything else, they never reach the maker of this app, and password fields are not read. This app is not an accessibility tool; it uses that channel to read the text it has to translate. You can turn it off again in Android settings at any time, and with it off the app works by the second method below.
On Android, no picture leaves the device even with the second method. The Android version always recognizes characters with an on-device recognizer (Google ML Kit); it has no path for sending a picture to your translation service or anywhere else. The table below and “How to keep images on your device” apply to the Windows version.
The app keeps capturing the screen while it reads this way. It does so to tell whether the screen has changed, to measure how far the conversation has scrolled, and to find the left and right edges of a message in programs that do not draw speech bubbles. It does not read characters out of those pictures, and it does not transmit them anywhere.
Second, screen capture followed by character recognition. Used when the chat program does not publish its text, or when reading the published text fails. Only in this case may an image be transmitted, under the conditions in the table below.
The app decides which to use. When translation starts, it compares the capture it already has against the text taken from the window, and settles on one method. The character recognition used for that comparison is always the recognizer built into Windows — this is a check you did not ask for, and it must never place a charge on your account. If nothing can be taken from the window, the app reads by picture and retries the comparison at intervals of up to 60 seconds, so the comparison may happen many times in a single run. The readings used for it are discarded immediately: neither stored nor transmitted, leaving only the decision and a few numbers.
If no sentence comes from the window for 30 seconds, the app reads the capture it already has once, with the Windows recognizer, to see whether there are characters on screen. If there are, the conversation is not quiet — the reading has failed — so the app returns to screen capture and marks the frame to say so. That switch is not reversed for the rest of the run.
You can pin the app to screen capture at any time under “Reading method” in settings.
The table below applies only when characters are being read from a screen capture.
| Situation | What reads the picture | Does the picture leave your device? |
|---|---|---|
| You have named the language to read, and Windows has a recognizer installed for it | The recognizer built into Windows, on your device | No. The picture is not transmitted anywhere. |
| The language is set to automatic detection, or Windows has no recognizer for the language you named | Google's model, which is shown the picture | Yes. The captured image is sent to Google as a PNG. |
Before an image is sent it is scaled so that its longest edge is at most 1024 pixels.
Google is the only service that can receive an image. No image is sent to Anthropic, OpenAI, DeepL, Groq, or to an endpoint whose address you supplied yourself; those receive text only. If the service you selected cannot be shown a picture and Windows cannot read the language you asked for, the app stops and tells you so, rather than sending the picture somewhere else.
How to keep images on your device
If the app is taking text directly from the window, no image is transmitted in the first place. What follows applies when it is reading by screen capture.
In the app, set the language to read to a specific language rather than “detect automatically”, and make sure Windows has the recognizer for that language installed. Reading then happens entirely on your computer and no image is transmitted.
If the source language is left on “detect automatically”, the app may select a specific language on its own based on the characters it reads on screen. From that point, captures are processed on your device and images are no longer sent externally. You are notified when this happens, and you can switch back to “detect automatically” at any time.
The recognized text is still sent to your chosen translation service, as described in the next section. Choosing a language changes whether the picture is sent; it does not make the app translate without a service.
5. Transmission to third parties
The app translates by calling one outside service. You choose which, and you supply your own account credentials for it. Only the selected service is contacted.
The services the app can be pointed at are: Anthropic, OpenAI, Google, DeepL, Groq, and one further option for an OpenAI-compatible service whose address you type in yourself — in that case the data is sent to whatever address you entered, which may be a server operated by you or by a third party of your choosing.
What is sent
- The recognized text of the messages inside the reading hole (on Android, the reading area). When the Android version reads through the accessibility service, a message that sticks out slightly past the top or bottom edge (by up to the smaller of one fifth of its height and about 12dp) is included too. Messages that stick out to the left or right are not.
- The text of your own message, when you use the feature that translates what you type.
- The app's translation instructions, which name the source and target languages and the tone you selected.
- Your API key, as the request's authentication header.
- To Google only, and only in the situation described in section 4: the captured image.
What is sent only when you ask for it
- A request for the list of models the service offers, when you refresh that list in settings. It carries your API key and nothing else.
- A short connection test, when you test the connection in settings.
BABA SOFTWARE is not a recipient of any of this. The app has no server of ours to send it to.
What each service does with what it receives is governed by that service's own privacy policy and terms, not by this one. For the services with a fixed address, the app links to their policies in its settings screen so you can read them before choosing. For the option where you supply the address, no policy can be linked, because the address is yours.
6. Clipboard
This app uses the clipboard for two purposes only.
- Retrieving what you typed — When you type a message in a chat input box and press the send key, the app issues a copy command to retrieve that text. This text is sent to the translation service you selected.
- Inserting the translation — The translated text is placed on the clipboard and pasted into the input box.
Any existing clipboard content is preserved before the operation and restored afterward. In two cases the translated text remains on the clipboard: when you use the app's own input box, and when no target window could be found and the app asks you to paste manually.
This app does not monitor the clipboard on a schedule. The clipboard is read only at the moment these operations run. Content you previously copied is read solely to restore it, and is never transmitted or written to disk.
7. Keyboard
Stated first, plainly: the app installs a global low-level keyboard hook. This is a Windows facility that lets a program see key presses before the program you are typing into receives them, and it is how the app is able to translate what you typed at the moment you press Enter, instead of making you copy it elsewhere.
What that hook does here is narrow, and all of it is limited to the following:
- The hook is installed when the app starts and stays installed while the app is running. It does nothing at all unless translation is running and you have chosen a typing mode that translates what you type; otherwise every key passes straight through it.
- It looks at one key: Enter. Every other key is passed on without being examined.
- Enter is acted upon only when the conversation window the app is reading is the window you are typing into. Enter pressed anywhere else is passed on untouched.
- Shift+Enter, which starts a new line in most chat programs, is never touched.
- The only decision the hook makes is whether to let that Enter through or hold it back so the text can be translated first.
Why this is not a keylogger
A keylogger records the characters you type and reports them somewhere. This app does neither. It does not read the characters of your typing at all: no key other than Enter is examined, no keystroke is stored, and no keystroke is transmitted.
The text that gets translated does not come from the hook. It is copied out of your chat program's input box after Enter is pressed, by the clipboard method described in section 6 — a message you had finished writing and were about to send, not a record of your typing.
8. Storage of your API key
The key you enter is stored in the app's settings file, a single file named settings.json kept in the per-user application data folder. Its exact location depends on how the app was installed — an ordinary installation and a Microsoft Store package do not put it in the same place — but in either case it is a location belonging to the Windows user account you are signed in as.
Inside that file the key is encrypted with the Windows Data Protection API (DPAPI) under the current user scope, with an additional application-specific entropy value.
The practical effect is that the stored key can be decrypted only by your Windows account on that computer. Copied to another account or another machine, it cannot be read; the app treats it as if no key were set.
On Android, the key is stored in settings.json in the app's private storage, encrypted (AES-GCM) with a key created inside the device's Android Keystore. That key never leaves the Keystore, so copying the file to another device does not open your API key. The app has Android backup turned off, so its settings are not uploaded to Google Drive or any other backup. Uninstalling the app or clearing its data removes the key as well.
Your key is sent only to the service it belongs to, as that request's authentication header. It is not sent to us, and it is not sent to any other service.
9. Translation memory
While the app runs it keeps the translations it has already obtained, so that scrolling a conversation back and forth does not pay for the same message twice.
- This memory exists only in the running program. It is never written to disk.
- It holds at most 1,500 messages; beyond that the oldest are dropped.
- It is emptied immediately whenever you change the service, the language pair, or the tone.
- It is gone when you close the app. Nothing is exported or saved on exit.
10. What is stored on your device
The Windows version writes one file: settings.json, in the per-user application data folder described in section 8. It contains your settings and nothing else. The Android version is described separately under “Android” below.
- The selected service, and for each service you have configured: the encrypted API key, the chosen model, and the address if that service uses one you supplied.
- The language to translate into and the tone. Also the language to read and the language your own messages are translated into, but only the starting values set in the settings window: what you pick in the frame, and any language the app works out for itself, are not saved and are gone when the app closes.
- The reading method — whether the app decides for itself, or is pinned to screen capture.
- The display mode and the typing mode.
- Colours of the frame, the bubbles, and the bubble text.
- Scan interval, overlay font size, overlay opacity, frame opacity.
- The frame's position, width and height, and the height of the input opening.
- Whether the app minimizes to the notification area, the app's display language, and whether the original text is shown beneath the translation.
- Whether you have agreed to the privacy notice (and which edition of it), and whether you completed the first-run guide.
What this file does not contain: no message text, no translations, no screen captures, and no history of any of them. The Windows version writes no other file — no log file, no cache, no temporary copy of anything it read.
Android
The Android version keeps two settings files in the app's private storage. Other apps cannot read that storage, and it is removed when you uninstall the app.
settings.json— the same file in the same format as on Windows, with the same items as the list above. The API key is encrypted the Android way (section 8). Items the Android version does not use, such as the frame's colour and position, stay at their defaults.phone.json— settings for this device's screen: the reading area you set for each screen shape (folded, unfolded, portrait, landscape), whether the translate button beside the input box is shown, whether to read through the accessibility service, whether that service has ever been on (so the app can tell you if a force-stop turned it off), whether bubble colours are taken from the screen, and whether this device honours the app's capture-blocking flag.
Neither file contains message text, translations or screen captures. There is no log file and no cache.
Diagnostics file (only when you ask for it). If you press “Save what the next pass sees” in settings while the app is reading by screen capture, a capture of the next screen the app reads (reading.png) and the text it read from that screen (reading.txt) are saved in the app's external files folder (Android/data/com.baba.chattranslator/files). It exists to look into problems and is never created unless you press it. Text read through the accessibility service is never written to a file, even if you press it. These files contain your conversation as it appeared. The app never sends them anywhere, and pressing the button again overwrites them. They are removed when you uninstall the app, and you can delete them yourself at any time with a file manager. The settings screen says the same thing.
11. Analytics, crash reporting, and other network activity
There is none. Specifically:
- No analytics or usage-measurement service of any kind is present in the app.
- No crash or error reports are transmitted. When an unexpected error occurs the app shows you a message and continues; nothing about it leaves your computer.
- The app performs no update check.
- Apart from the requests to your chosen translation service described in section 5, and the purchase and trial checks described below, the app makes no network requests at all.
Checking whether you have bought the app
This app is paid, so on startup it asks the store it was installed from whether you own the full version. The Windows version asks the Microsoft Store; the Android version asks Google Play.
The app neither receives nor asks for your account details. The store answers only "owned" or "not owned"; your name, email address and account identifier are never passed to the app. This is why the app has no sign-in of its own — the store app on your device is already signed in and does the identifying, and this app only receives the answer.
Your purchase is recorded by the store against your account, not by this app. That is why reinstalling the app, or moving to a new device, carries your purchase with it.
Checking the trial period (Android version)
The Android version offers a seven-day free trial. Recording when the trial began on the device itself would mean that reinstalling the app resets it, so the app keeps that timestamp on a server operated by this app's developer (Google Firebase Realtime Database, Singapore).
Two things are stored there, and nothing else:
- A hash of a device identifier. Android gives each app a distinct identifier (
ANDROID_ID); the app mixes in a value of its own and computes a SHA-256 hash of the result. The original identifier is never stored or transmitted, and neither it nor your identity can be recovered from the hash. - The time the trial started, recorded by the server from its own clock.
What the app does not do with that identifier:
- It is never combined with an advertising identifier.
- It is not linked to a Google account, email address, phone number, or any other personal information.
- It is not used to track you or to record how you use the app. The stored time is used only to work out whether the trial period still has time left.
- No conversation text, captured image or translation is ever sent to this server. The only case where such things leave your device is the translation service described in section 5.
Once the full version has been bought there is no reason to check a trial period, and the app stops contacting this server. The Windows version does not use this server at all, because the Microsoft Store manages its trial period directly.
Separately from network activity, the app can open your default web browser: at a service's key page when you press Get API key, and at the linked pages in the settings screen when you click them. Those are pages you asked to open, and the app sends nothing with them.
12. Children
The app is a general-purpose tool and is not directed at children. We collect no personal information from anyone, of any age, because the app transmits nothing to us. If you are a parent or guardian and have a question about this, please write to us at the address below.
13. Requesting deletion of your data
The only thing BABA Real-Time Chat Translator (developer: BABA SOFTWARE) keeps on a server is the single trial-ledger row described in section 11. Conversations, captured images, translations and API keys never reach a server of ours, so there is nothing of that kind to delete.
What is deleted
- A hash of the device identifier —
ANDROID_IDmixed with a value specific to this app - The time the trial started
That row is all of it. Delete it and nothing of yours remains.
How long it is kept
The row is kept until you ask for it to be deleted. It exists so the trial is offered once, so it carries no expiry of its own. Uninstalling the app does not remove it — to have it removed, use the steps below.
How to ask
- Email baba_software@hotmail.com with the subject "Data deletion request".
- Include the first eight characters of the device key. It is shown near the bottom of the app's settings screen as
This device's key: xxxxxxxx. - We delete the row and reply within 30 days.
Why we have to ask you for that key. The stored value is a hash computed only on your device, and we have no way to find it from an email address or a name. That is deliberate — it also means we cannot identify you. If you cannot produce the key, write to the same address and we will work it out with you.
14. Changes to this policy
If the app's behaviour changes in a way that affects anything stated here, this page is updated and the effective date at the top is changed with it. The version published here is always the one that describes the current release.
15. Contact
Questions about this policy, or about what the app does, can be sent to baba_software@hotmail.com.