Skip to content

Releases: brenpoly/polymo

Release list

PolyMO v1.0.0

Choose a tag to compare

@brenpoly brenpoly released this 08 Sep 00:48

PolyMO v1.0.0

A physical digital pet you keep alive. It gets hungry and bored, it grows up,
and it dies if you neglect it — and the thing that makes it sick is your screen
time. You talk to it and it answers out of its own speaker.

Day to day it sits on your desk and mostly minds its own business. It blinks,
it breathes, it dozes off when you leave it alone, and it sleeps through the
night. When it wants something it chirps and its face asks — and if you do not
work out what it wants, it shows you: two ripples for the double tap that feeds
it, a mark sliding side to side for the shake that plays with it. Ask it how it
is doing and it answers aloud, out of however it actually is. Spend too long in
an app it is watching and it gets ill, and stays ill until you put the phone
down.

Everything it says is generated on your phone, on-device. There is no account,
no server, and the app declares no INTERNET permission at all — a test fails
the build if one is ever added.

Download

polymo-v1.0.0.apk 75,102,444 bytes (71.6 MiB)
SHA-256 8d633ae07549d1b92646c0eb5935427ac96e206b6ec7a3a13b3f4faddb1b8146
Signing certificate SHA-256 4b5d395ff5e96b3fa0b9dac42dcee4a15c690e2cabc3a402ebc5c5283a951876

Verify what you downloaded before installing it:

shasum -a 256 polymo-v1.0.0.apk
apksigner verify --print-certs polymo-v1.0.0.apk

The certificate should read CN=PolyMO and match the fingerprint above. Every
future release will be signed with the same key; if that fingerprint ever
changes, something is wrong.

⚠️ This binary is GPL-3.0, and the source is Apache-2.0

Both statements are true and they are not in conflict.

PolyMO's own source is Apache-2.0 and reusable under those terms. The app's
native library links espeak-ng, which is GPL-3.0-or-later and which Piper
needs to turn text into phonemes — the pet cannot speak without it. Apache-2.0
combines into a GPL work legally, and the result is GPL-3.0. So this APK is
conveyed to you under GPL-3.0
, and you are entitled to its corresponding
source.

  • Corresponding source: this repository at tag v1.0.0
  • Linked espeak-ng: commit fbe4b3764285 (1.52.0-292-gfbe4b376)
  • Full licence text: licences/GPL-3.0.txt, included with this release
  • Every dependency and its terms:
    NOTICE

The APK was compiled in a private working tree that carries the native
dependency clones this repository deliberately does not. Every difference
between the two trees at this tag is a comment line, checked across every .kt,
.c, .h, .cpp and .kts file, so nothing differing reaches compiled output.

What you need

A Waveshare ESP32-S3 Touch-AMOLED-1.8 board, V1 or V2 — the panel driver is
detected at runtime. Without one the app installs and has nothing to talk to.
Firmware for it is in this repository.

Android 12 or later, on arm64. The APK ships arm64-v8a only; it will not
install on 32-bit devices or x86 emulators.

Three model files, which are not bundled. You supply each and import it
through the system file picker:

Role Format
Thinking a .gguf any small instruct model llama.cpp can load
Hearing a Whisper .bin
Voice a Piper .onnx and its .onnx.json

Nothing is bundled deliberately. An earlier build shipped a Whisper model and
cost ~75 MB in the APK and the same again unpacked, which made hearing the one
faculty nobody got to choose.

Known limitations

  • The pet only hears English. Transcription language is hardcoded, so a
    multilingual Whisper model is loaded and then used as an English one. It can
    already speak a non-English Piper voice, so the two halves disagree.
  • A mismatched board and app will pair and then misbehave. Both sides
    declare a protocol version and the pet reports its own, but nothing compares
    them. Flash the firmware from this same tag.
  • arm64 only, as above.
  • Not on Google Play, and not planned. With no models bundled, a reviewer
    installs it and sees a setup screen for hardware they do not have.

Building it yourself

README.md has the firmware and app builds. The native dependencies are not in
the repository — about 1.3 GB of unmodified third-party source — but the exact
commit each was built from is recorded in NOTICE, and tools/fetch-natives.sh
fetches the pinned ones. Read that script's header first: three dependencies
have no recorded version, and it has not yet been run end to end.