Repository navigation
Releases
Life Tracker build 591
Life Tracker build 591
🔧 Shows and manga: MyAnimeList fix, full episode length
- MyAnimeList connects again. It no longer goes through Jikan (which could not be reached). Kairos now reads MyAnimeList's own public feeds for your list, with exact times. The list must be public. The error now also says what went wrong ("UnknownHostException", "SocketTimeoutException"...).
- An episode or movie takes its whole length (a 30 minute episode is a 30 minute entry), ending when the service noted it or when the app was closed. A chapter still takes the time you spent in the app. A new "How long an episode takes" setting covers the services that do not say (MyAnimeList never does).
- Bulk updates are left out. Three or more things noted within a few minutes of each other with no app time (a list import, "mark all as read") have no real time, so they are not put on the Timeline. The check page says how many were left out.
⬇️ Download
Get life-tracker.apk from the files below (under Assets) and open it on your phone. It installs over your old version and keeps all your data.
Android may ask once to allow installs from your browser or Files app. Google Play Protect may warn that the app is from outside the Play Store. Both are expected for your own app.
Commit 665d81c · Everything that changed since the last release
Life Tracker build 589
Life Tracker build 589
📚 Shows and manga on the Timeline
- Connect your lists. Settings → Shows and manga. AniList and MyAnimeList need only your name or profile link (the list must be public; MyAnimeList is read through Jikan, a free service for public lists). Simkl needs a Client ID from a small app of your own (one minute at Simkl's developer page) and a code you type at simkl.com.
- What you read and watched appears by itself. Kairos checks every 15 minutes or so, and when the app opens. Each new chapter or episode becomes an entry under Reading or Movies and shows, with the title and chapter.
- App time is used when there is some. Tie an app to an account (Mihon to AniList, Kotatsu to MyAnimeList, CloudStream to Simkl are suggested) and the time you spent in that app is the time of the entry. With no app time, the entry ends when the service noted it and takes as long as the chapters or episodes take (your chapter length, or the length Simkl or AniList knows).
- Past entries count. Something you add in Simkl for an earlier day is placed on that day, within the look-back you choose (2 weeks to 1 year).
- Nothing you wrote is covered, and an entry you delete stays deleted. A switch for the whole feature is on the Features page.
- The sign-ins and what was seen at the last check are not part of backups.
⬇️ Download
Get life-tracker.apk from the files below (under Assets) and open it on your phone. It installs over your old version and keeps all your data.
Android may ask once to allow installs from your browser or Files app. Google Play Protect may warn that the app is from outside the Play Store. Both are expected for your own app.
Commit 8b7f58d · Everything that changed since the last release
Life Tracker build 588
Life Tracker build 588
🔒 Lock screens
- Lock each screen on its own. Settings → Lock lists Timeline, Food, Habits, Money, Stats and Settings. Each can be Off, Phone lock or Face scan, so someone you hand the Food screen to cannot open the Timeline. Pages opened from a screen lock with that screen.
- Phone lock uses Android's own prompt: your fingerprint, face, pattern or PIN, whatever the phone is set up with. Needs Android 11 or newer.
- Face scan opens the front camera and lets you in only if the face matches the one you saved. It must be a single, close, live face (a photo held to the camera is turned away, a video or mask may still get through). After 3 scans that do not match, it asks for the phone PIN. If the camera or the face model cannot run, it goes straight to the PIN.
- Stay unlocked is yours to choose: every time, 1, 5, 15 or 30 minutes, or 1 hour. A screen stays open while you use it and locks that long after you leave it or the app. Closing the app locks everything.
- My face is saved from a few pictures taken on the spot, as numbers only (no photo), encrypted with a key held by the phone, and left out of backups. You can test the scan (it shows your match score and whether it would open), remove the face, and choose Relaxed, Normal or Strict matching.
- Everything happens on the phone. The face models (FaceNet and two MiniFASNet liveness models, all Apache-2.0, see app/src/main/assets/MODELS-NOTICE.md) add about 36 MB to the app. Lock settings are not part of backups.
⬇️ Download
Get life-tracker.apk from the files below (under Assets) and open it on your phone. It installs over your old version and keeps all your data.
Android may ask once to allow installs from your browser or Files app. Google Play Protect may warn that the app is from outside the Play Store. Both are expected for your own app.
Commit 44aea76 · Everything that changed since the last release
Test build 590 (claude/media-mal-runtime)
Test build 590
🧪 A test build of the branch
claude/media-mal-runtime. It is not merged yet, so it is not the latest version.
🔧 Shows and manga: MyAnimeList fix, full episode length
- MyAnimeList connects again. It no longer goes through Jikan (which could not be reached). Kairos now reads MyAnimeList's own public feeds for your list, with exact times. The list must be public. The error now also says what went wrong ("UnknownHostException", "SocketTimeoutException"...).
- An episode or movie takes its whole length (a 30 minute episode is a 30 minute entry), ending when the service noted it or when the app was closed. A chapter still takes the time you spent in the app. A new "How long an episode takes" setting covers the services that do not say (MyAnimeList never does).
- Bulk updates are left out. Three or more things noted within a few minutes of each other with no app time (a list import, "mark all as read") have no real time, so they are not put on the Timeline. The check page says how many were left out.
⬇️ Download
Get life-tracker.apk from the files below (under Assets) and open it on your phone. It installs over your old version and keeps all your data.
Android may ask once to allow installs from your browser or Files app. Google Play Protect may warn that the app is from outside the Play Store. Both are expected for your own app.
Commit 896fde0 · Everything that changed since the last release
Life Tracker build 583
Life Tracker build 583
🔀 Compare AI models
- Compare models. Settings → AI has a "Compare models" switch, off by default, and a list of 2 to 4 models to ask. Models from different providers can be mixed (two OpenRouter models and your Gemini one, say), and each is picked from the OpenRouter list or typed.
- One card per model. With the switch on, every photo, label photo or typed meal is sent to all the chosen models at once. The check page shows what each one said (name, weight, calories, protein, carbs, fat, what it saw, the oil it counted, and how long it took), and how far apart the calories are. A model that fails or is out of free allowance gets a card saying why, without spoiling the others. Tap "Use this one" and carry on as usual; "See what the other models said" brings the cards back.
- The meal remembers the model. A meal saved from a comparison shows its model in "Where the numbers came from".
- Nothing changes when it is off (or when fewer than 2 models are on the list). The "your photo goes to ..." notice names every provider on the list, and each call is one request per model, so paid models cost per call.
⬇️ Download
Get life-tracker.apk from the files below (under Assets) and open it on your phone. It installs over your old version and keeps all your data.
Android may ask once to allow installs from your browser or Files app. Google Play Protect may warn that the app is from outside the Play Store. Both are expected for your own app.
Commit dd81fb1 · Everything that changed since the last release
Test build 587 (claude/media-accounts)
Test build 587
🧪 A test build of the branch
claude/media-accounts. It is not merged yet, so it is not the latest version.
📚 Shows and manga on the Timeline
- Connect your lists. Settings → Shows and manga. AniList and MyAnimeList need only your name or profile link (the list must be public; MyAnimeList is read through Jikan, a free service for public lists). Simkl needs a Client ID from a small app of your own (one minute at Simkl's developer page) and a code you type at simkl.com.
- What you read and watched appears by itself. Kairos checks every 15 minutes or so, and when the app opens. Each new chapter or episode becomes an entry under Reading or Movies and shows, with the title and chapter.
- App time is used when there is some. Tie an app to an account (Mihon to AniList, Kotatsu to MyAnimeList, CloudStream to Simkl are suggested) and the time you spent in that app is the time of the entry. With no app time, the entry ends when the service noted it and takes as long as the chapters or episodes take (your chapter length, or the length Simkl or AniList knows).
- Past entries count. Something you add in Simkl for an earlier day is placed on that day, within the look-back you choose (2 weeks to 1 year).
- Nothing you wrote is covered, and an entry you delete stays deleted. A switch for the whole feature is on the Features page.
- The sign-ins and what was seen at the last check are not part of backups.
⬇️ Download
Get life-tracker.apk from the files below (under Assets) and open it on your phone. It installs over your old version and keeps all your data.
Android may ask once to allow installs from your browser or Files app. Google Play Protect may warn that the app is from outside the Play Store. Both are expected for your own app.
Commit dbea962 · Everything that changed since the last release
Test build 586 (claude/screen-lock)
Test build 586
🧪 A test build of the branch
claude/screen-lock. It is not merged yet, so it is not the latest version.
🔒 Lock screens
- Lock each screen on its own. Settings → Lock lists Timeline, Food, Habits, Money, Stats and Settings. Each can be Off, Phone lock or Face scan, so someone you hand the Food screen to cannot open the Timeline. Pages opened from a screen lock with that screen.
- Phone lock uses Android's own prompt: your fingerprint, face, pattern or PIN, whatever the phone is set up with. Needs Android 11 or newer.
- Face scan opens the front camera and lets you in only if the face matches the one you saved. It must be a single, close, live face (a photo held to the camera is turned away, a video or mask may still get through). After 3 scans that do not match, it asks for the phone PIN. If the camera or the face model cannot run, it goes straight to the PIN.
- Stay unlocked is yours to choose: every time, 1, 5, 15 or 30 minutes, or 1 hour. A screen stays open while you use it and locks that long after you leave it or the app. Closing the app locks everything.
- My face is saved from a few pictures taken on the spot, as numbers only (no photo), encrypted with a key held by the phone, and left out of backups. You can test the scan (it shows your match score and whether it would open), remove the face, and choose Relaxed, Normal or Strict matching.
- Everything happens on the phone. The face models (FaceNet and two MiniFASNet liveness models, all Apache-2.0, see app/src/main/assets/MODELS-NOTICE.md) add about 36 MB to the app. Lock settings are not part of backups.
⬇️ Download
Get life-tracker.apk from the files below (under Assets) and open it on your phone. It installs over your old version and keeps all your data.
Android may ask once to allow installs from your browser or Files app. Google Play Protect may warn that the app is from outside the Play Store. Both are expected for your own app.
Commit 1a199f0 · Everything that changed since the last release
Test build 582 (claude/compare-models)
Test build 582
🧪 A test build of the branch
claude/compare-models. It is not merged yet, so it is not the latest version.
🔀 Compare AI models
- Compare models. Settings → AI has a "Compare models" switch, off by default, and a list of 2 to 4 models to ask. Models from different providers can be mixed (two OpenRouter models and your Gemini one, say), and each is picked from the OpenRouter list or typed.
- One card per model. With the switch on, every photo, label photo or typed meal is sent to all the chosen models at once. The check page shows what each one said (name, weight, calories, protein, carbs, fat, what it saw, the oil it counted, and how long it took), and how far apart the calories are. A model that fails or is out of free allowance gets a card saying why, without spoiling the others. Tap "Use this one" and carry on as usual; "See what the other models said" brings the cards back.
- The meal remembers the model. A meal saved from a comparison shows its model in "Where the numbers came from".
- Nothing changes when it is off (or when fewer than 2 models are on the list). The "your photo goes to ..." notice names every provider on the list, and each call is one request per model, so paid models cost per call.
⬇️ Download
Get life-tracker.apk from the files below (under Assets) and open it on your phone. It installs over your old version and keeps all your data.
Android may ask once to allow installs from your browser or Files app. Google Play Protect may warn that the app is from outside the Play Store. Both are expected for your own app.
Commit c6f33a3 · Everything that changed since the last release
Life Tracker build 581
Life Tracker build 581
🛠️ Food fixes after the first run
✨ New
-
Gallery on the Add food page. Camera, Gallery, Barcode and Label now sit together under the search box. Gallery reads a photo you already have.
-
Add any number on the check page. Under Fix the numbers you can now change fibre, sugar, sodium, saturated, mono and poly fat, and every vitamin, mineral or nutrient of your own, not only calories, protein, carbs and fat. The ones with a value show as tiles like the main four, and tapping any tile opens the editing fields.
-
Your daily goal updates by itself. Save your Body setup and the daily calorie goal (and its protein, carbs and fat) is set from it, then follows your weight when you weigh in. Switch Keep my daily goal up to date off, or type a goal by hand, and it stays as you set it.
-
Stats understand a line with several foods. "Chicken curry and roti" or "2 rotis, 1 katori dal" counts as a chicken curry, a roti and a dal. Eaten most and the page of a food (last eaten, 7/30/90 days, all time) look at each food on its own, and "roti" and "rotis" are the same food. Nothing you logged is changed.
-
An AI page in Settings, and OpenRouter. Settings has a new AI section. Choose Google Gemini or OpenRouter, paste the key, and set the quick and think-harder models. With OpenRouter you can browse its whole model list (search, only models that read photos, only free ones, with prices) and tap one to use it. Each provider keeps its own key and models, "Test the key" checks both models, and the keys stay on the phone and out of backups. The pop-up that asks for a key the first time uses the same form.
-
Your own portion weights. Settings → My portions: weigh your roti, katori or spoon once and write it down. Photo and typed-meal reading is told your sizes and uses them instead of the usual ones.
-
Warnings for numbers that look wrong. Calories that do not match protein, carbs and fat (more than a fifth apart), more than 900 kcal in 100 g, macros adding up to more than 100 g in 100 g, and very large amounts (3 kg or more, or 3500 kcal in one entry, like "20 kg steak") now show a "Look again" line on the check page, the add sheet and the new-food form. Nothing is blocked.
-
Where each number came from. A meal now remembers whether it was a photo guess, a guess from your words, read from a pack label, from Open Food Facts, or typed by you, and whether you changed the numbers after. The page of a food shows the mix and tags each entry.
-
More on the page of a food. Total eaten (all time and in the last 7, 30 and 90 days, with the calories, protein, carbs and fat in all of it), smallest and largest helping, calories per 100 g across the times (so you can see a dish was not the same every time), what meals it was, and the time you usually eat it. The title no longer carries the amount ("500g masala biryani" is "Masala biryani").
-
Similar names stay apart. Masala biryani, Moradabadi biryani, Chicken biryani and plain Biryani are four foods with four pages. Each food's page lists the others with the same last word ("Looks similar, kept apart"), with how often you ate them. Tap one to open its page.
🔧 Fixed
- Wrong pictures in the food list. Chicken breast showed a banana and chicken thighs an apple, because a picture stayed on a cell when the list changed. Each food shows its own picture now.
- What to show is tidier: one short line per part, and a single Reorder mode instead of Up and Down on every row.
⬇️ Download
Get life-tracker.apk from the files below (under Assets) and open it on your phone. It installs over your old version and keeps all your data.
Android may ask once to allow installs from your browser or Files app. Google Play Protect may warn that the app is from outside the Play Store. Both are expected for your own app.
Commit 64d16fb · Everything that changed since the last release
Life Tracker build 575
Life Tracker build 575
🛠️ Food fixes after the first run
✨ New
- Gallery on the Add food page. Camera, Gallery, Barcode and Label now sit together under the search box. Gallery reads a photo you already have.
- Add any number on the check page. Under Fix the numbers you can now change fibre, sugar, sodium, saturated, mono and poly fat, and every vitamin, mineral or nutrient of your own, not only calories, protein, carbs and fat. The ones with a value show in a line under the numbers.
- Your daily goal updates by itself. Save your Body setup and the daily calorie goal (and its protein, carbs and fat) is set from it, then follows your weight when you weigh in. Switch Keep my daily goal up to date off, or type a goal by hand, and it stays as you set it.
- Stats understand a line with several foods. "Chicken curry and roti" or "2 rotis, 1 katori dal" counts as a chicken curry, a roti and a dal. Eaten most and the page of a food (last eaten, 7/30/90 days, all time) look at each food on its own, and "roti" and "rotis" are the same food. Nothing you logged is changed.
🔧 Fixed
- Wrong pictures in the food list. Chicken breast showed a banana and chicken thighs an apple, because a picture stayed on a cell when the list changed. Each food shows its own picture now.
- What to show is tidier: one short line per part, and a single Reorder mode instead of Up and Down on every row.
🔍 What came before
✨ New
- "What came before" for the habits you watch. Pick a habit (a headache, reflux, a bad stomach), how many hours to look back (3, 6, 12, 24 or 48) and how far back (30 days, 90 days, all time), and see the foods that came before it. Each food shows how many of the times it was eaten in that window, next to how often it is eaten in a window at other times, so something you eat all day does not look suspicious just for being common. It also says about how many hours earlier it usually was.
- Open it from the Stats window (tap a habit), the What came before button under the Month view, or Patterns at the top of the Timeline.
- Checks that are close together count as one time (a headache ticked three times in an afternoon is one). Checks with no time are left out. It needs at least three times with food logged before them before it says anything, and a food has to be in at least two of them.
- It always says that a pattern is not a cause, and suggests trying leaving one food out for two weeks.
⚖️ Body and goals
✨ New
- Body and goals (from the gear on the Food tab, "Work it out from my body", or the new button under Body weight). Like OpenNutriTracker: your sex, age, height and weight, how active you are (sedentary, low active, active, very active), and what you want (lose weight, maintain, gain weight, at 0.25 to 1 kg a week) with a target weight.
- BMI with a plain label (underweight, healthy range, overweight, obese), a strip showing where you are, and the weights that are healthy for your height.
- Calories that fit your goal. Resting energy (Mifflin-St Jeor), the calories to keep your weight for your activity, and a daily target for your goal and pace. It never goes below the safe minimum (1,200 for women, 1,500 for men) and says so. Use as my daily goal sets your calorie goal from today, and scales your protein, carbs and fat to match (or, with no macros yet, sets protein at 1.6 g a kilo and fat at a quarter of the calories).
- Progress to your target: start, now and target on one bar, how many kilos to go, and about how many weeks and which month at your pace.
- Weight history: a chart of your recent weigh-ins with the target as a dashed line, and your last eight with a Remove button. Typing a new weight and saving counts as today's weigh-in.
- These are estimates for adults, not medical advice, and the page says so.
🔎 A page for each food
✨ New
- Tap a food in Stats ("Eaten most") or open a logged food and tap "When did I last eat this?" to see its page: when you last ate it, how long ago, and how many times in the last 7, 30 and 90 days and in all (with the number of days, for when you had it twice in a day). If you eat it every day it says how many days in a row.
- The page also shows a usual helping (grams, calories, protein), the meal you usually have it as, when you first logged it, and your last ten times with their weights.
- The same food is found whether it came from the food list or was typed by name, ignoring capitals and extra spaces.
⬇️ Download
Get life-tracker.apk from the files below (under Assets) and open it on your phone. It installs over your old version and keeps all your data.
Android may ask once to allow installs from your browser or Files app. Google Play Protect may warn that the app is from outside the Play Store. Both are expected for your own app.
Commit 76a5396 · Everything that changed since the last release