Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/workflows/security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ name: security
# arreglo disponible (trivy),
# - la imagen del contenedor arrastra una vulnerabilidad alta/critica con
# arreglo disponible (trivy),
# - los tests del servidor (`:server:test`) fallan, incluidos los de la
# migracion V4 y los entitlements.
# - the server tests (`:server:test`) fail.
# Las vulnerabilidades aceptadas temporalmente van por ID de CVE en
# .github/trivyignore (nunca comodines): una NUEVA sigue fallando el build.
# Las acciones van pinneadas por SHA (integridad de la cadena de CI, A08) y trivy
Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ Thanks for helping. Bug reports and pull requests are welcome.
## Before you open a pull request

- Run the tests for the modules you touched:
`./gradlew :engine:jvmTest`, `./gradlew :server:test`, `./gradlew :androidApp:testDebugUnitTest`
and `./gradlew :androidApp:lintDebug`.
`./gradlew :engine:jvmTest`, `./gradlew :server:test`, `./gradlew :androidApp:testFdroidDebugUnitTest :androidApp:testPlaystoreDebugUnitTest`
and `./gradlew :androidApp:lintFdroidDebug :androidApp:lintPlaystoreDebug`.
- Keep a pull request to one fix or feature.
- Commit messages follow `type(scope): description`, for example `fix(engine): keep schwa in unstressed syllables`.

Expand Down
24 changes: 10 additions & 14 deletions NOTICE
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@ details.

Additional permission under GNU AGPL version 3 section 7:
If you modify this program, or any covered work, by linking or combining it
with the Google Play Billing Library, Google Play services, the Google Play
In-App Review library, the Google Identity (googleid) library or JUnit (or
modified versions of those libraries), containing parts covered by the terms
with Google Play services, the Google Identity (googleid) library or JUnit
(or modified versions of those libraries), containing parts covered by the terms
of their respective licenses, the licensors of this program grant you
additional permission to convey the resulting work.

Expand Down Expand Up @@ -188,19 +187,16 @@ Coil (io.coil-kt:coil-compose)
Copyright: Coil Contributors
License: Apache-2.0 (see licenses/Apache-2.0.txt)

Google Play Billing Library (com.android.billingclient:billing)
Google Play services (com.google.android.gms:play-services-*) and Google
Identity (com.google.android.libraries.identity.googleid:googleid)
Copyright: Google LLC
License: Android Software Development Kit License
(https://developer.android.com/studio/terms.html)
Used as: in-app subscriptions. This SDK is NOT Apache-2.0; its use is
governed by the Android SDK License.

Google Play In-App Review (com.google.android.play:review-ktx)
Copyright: Google LLC
License: Play Core Software Development Kit Terms of Service
(https://developer.android.com/guide/playcore/in-app-review)
Used as: in-app review prompt. This SDK is NOT Apache-2.0; its use is
governed by the Play Core SDK Terms of Service.
Used as: optional Sign in with Google, to carry an account to a new
phone, in the Google Play build (`playstore` flavor) only. The
F-Droid build (`fdroid` flavor) contains none of them. These SDKs
are NOT Apache-2.0; their use is governed by the Android SDK
License.

Test-only libraries (not distributed in the app):
JUnit 4 (junit:junit)
Expand Down Expand Up @@ -237,7 +233,7 @@ CHANGES

The wav2vec2 model is used unmodified except for the standard fp16 ONNX
conversion performed by onnx-community. No third-party component is modified
by Glosso Pro.
by Glosso.

This NOTICE is a summary. The app itself ships the machine-readable catalogue at
assets/licenses.json, generated from the **resolved runtime classpath** (not only
Expand Down
25 changes: 19 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@ exactly which sound to fix. Android first, with an iOS app in progress. Language
The same phonetic engine runs on the phone (offline, ONNX Runtime) and on the server, so a
take gets the same score in both places.

Glosso is free for everyone, with no paid tier. Support is a voluntary donation.

## Repository layout

| Module | What it is |
|---|---|
| `:engine` | Kotlin Multiplatform phonetic engine: G2P, wav2vec2 phoneme recognition (ONNX), speech gate, phonetic comparison and feedback. The only place a score is computed. |
| `:server` | Ktor API (`/v1/score`, content, assets, product config, billing verification). Reuses `:engine`. |
| `:server` | Ktor API (`/v1/score`, content, assets, product config, accounts). Reuses `:engine`. |
| `:shared` | The app itself in Compose Multiplatform (screens, view models, stores, API client), shared by Android and iOS. |
| `:androidApp` | Android shell: activity, on-device scorer, download service, Play Billing. |
| `:androidApp` | Android shell: activity, on-device scorer, download service. Two flavors: `playstore` and `fdroid` (no Google libraries). |
| `iosApp/` | Xcode project that runs the shared app on iOS. |
| `deploy/` | Dockerfile, Compose stack, Caddy and monitoring config for self-hosting the server. |
| `tools/` | Asset download, scoring bench, score parity, content pipeline and license tooling. |
Expand Down Expand Up @@ -43,15 +45,24 @@ tools/fetch-assets.sh
# Tests
./gradlew :engine:jvmTest
./gradlew :server:test
./gradlew :androidApp:testDebugUnitTest
./gradlew :androidApp:testFdroidDebugUnitTest :androidApp:testPlaystoreDebugUnitTest

# Run the server locally on :8080 (serves data/assets)
./gradlew :server:run

# Build the Android app against the local server (from the emulator)
./gradlew :androidApp:assembleDebug -PglossoApiBase=http://10.0.2.2:8080
./gradlew :androidApp:assembleFdroidDebug -PglossoApiBase=http://10.0.2.2:8080

# Release builds of each flavor (unsigned without a keystore)
./gradlew :androidApp:assembleFdroidRelease # F-Droid: no Google libraries
./gradlew :androidApp:bundlePlaystoreRelease # Google Play
```

The app has two flavors. `fdroid` contains no non-free library: no Google Play
services and no Sign in with Google (so "Change phone" is hidden), and usage
statistics start off. `playstore` is the Google Play build with Sign in with
Google. See `docs/FDROID.md`.

Without `-PglossoApiBase` the app talks to the public Glosso API. Build inputs are Gradle
properties documented in `androidApp/build.gradle.kts`. The server runs with only the assets on
disk; PostgreSQL, Redis and the TTS providers are optional and each feature turns itself off
Expand All @@ -71,8 +82,10 @@ that are not part of the public repository.
- `docs/ENGINE-BENCHMARK.md`, `docs/SCORING-DECISION-LAYER.md`, `docs/PHONEME_PROFILE.md` - scoring
- `docs/MULTI-ACCENT.md` - scoring against whole accent systems
- `docs/CONTENT-ENGINE.md`, `docs/CONTENT_POOL.md`, `docs/TTS-LAYER.md`, `docs/TTS-CACHE.md` - content and audio generation
- `docs/PRODUCT-CONFIG-CONTRACT.md`, `docs/BILLING.md`, `docs/GOOGLE-SIGNIN.md` - plans, billing and accounts
- `docs/PRODUCT-CONFIG-CONTRACT.md`, `docs/GOOGLE-SIGNIN.md` - product config and accounts
- `docs/BILLING.md` - why there is no paid tier
- `docs/IOS-DEV.md`, `docs/IOS-ENGINE.md` - iOS
- `docs/FDROID.md` - the F-Droid flavor and the rules it follows
- `docs/PRIVACY.md`, `docs/LICENSING.md` - privacy and third-party licensing

## Contributing
Expand All @@ -84,6 +97,6 @@ See [CONTRIBUTING.md](CONTRIBUTING.md).
Glosso is free software under the **GNU Affero General Public License v3.0 or later**
([LICENSE](LICENSE)). If you run a modified version of the server for others, you must offer
them its source. [NOTICE](NOTICE) lists the third-party components and their licenses, and an
additional permission for linking with the Google Play libraries the Android app uses.
additional permission for linking with the Google Play libraries the `playstore` build uses.

The Glosso name and logo are not covered by the license: forks must use their own.
Loading
Loading