# Third-party licences — Movement site

Every third-party asset is **vendored into `vendor/`**, so the site makes no external
requests: no CDN, no Google Fonts, nothing phoning home. Licence texts sit in
`vendor/LICENSES/`, per-file attribution in `vendor/NOTICE.txt`.

**All of it is permissive and safe to sell.** Nothing copyleft, nothing non-commercial.
Verified 2 August 2026, the date the voice engine was removed — engineering record, not
legal advice.

This claim was false for a while and is worth knowing why, because it is the kind of thing
that comes back. The Emma voice used to ship as a live Kokoro engine, and kokoro-js compiles
**eSpeak NG** into its bundle to turn text into pronunciation. eSpeak NG is GPL-3.0-or-later,
so the product was redistributing copyleft code, with its licence banner stripped by the
minifier, while stating in writing that it contained none. See
[How the voice stopped being a licence problem](#how-the-voice-stopped-being-a-licence-problem).

| Component | Version | Licence | Copyright | Licence text |
|---|---|---|---|---|
| three.js | 0.160.0 | MIT | © 2010-2026 three.js authors | `vendor/LICENSES/three.js-MIT.txt` |
| @mediapipe/tasks-vision (SIMD + no-SIMD wasm) | 0.10.35 | Apache 2.0 | The MediaPipe Authors | `vendor/LICENSES/mediapipe-Apache-2.0.txt` |
| BlazePose GHUM 3D pose models (lite + full) | float16 | Apache 2.0 | Google | same file; grant is in the [model card PDF](https://storage.googleapis.com/mediapipe-assets/Model%20Card%20BlazePose%20GHUM%203D.pdf) |
| Hand landmarker model (21 landmarks/hand) | float16 | Apache 2.0 | Google | same file; card linked from the [hand landmarker guide](https://developers.google.com/edge/mediapipe/solutions/vision/hand_landmarker) |
| Bricolage Grotesque | Google Fonts | SIL OFL 1.1 | © 2022 The Bricolage Grotesque Project Authors | `vendor/LICENSES/bricolage-grotesque-OFL.txt` |
| Hanken Grotesk | Google Fonts | SIL OFL 1.1 | © 2021 The Hanken Grotesk Project Authors | `vendor/LICENSES/hanken-grotesk-OFL.txt` |
| JetBrains Mono | Google Fonts | SIL OFL 1.1 | © 2020 The JetBrains Mono Project Authors | `vendor/LICENSES/jetbrains-mono-OFL.txt` |
| Fuse.js (fuzzy pose search) | 7.5.0 | Apache 2.0 | © Kirollos Risk | `vendor/LICENSES/fuse.js-Apache-2.0.txt` |
| uPlot (practice history chart) | 1.6.32 | MIT | © 2022 Leon Sorokin | `vendor/LICENSES/uPlot-MIT.txt` |
| Kokoro-82M (the model Emma's lines were **recorded from**; not shipped) | v1.0 | Apache 2.0 | © hexgrad | fine-tuned from StyleTTS2-LJSpeech (also Apache 2.0) |
| *Meditations* (Stillness passages) | George Long translation, 1862 | **Public domain** | none — Marcus Aurelius d. 180; translator George Long d. 1879 | no licence needed; see below |

## How the voice stopped being a licence problem

**Emma is pre-recorded. The speech engine is not in this product.**

She only ever reads a fixed script: nine breath cues, seven round-completion lines, one per
routine step, one closing line. **157 lines**, none of them composed at runtime. So the audio
was rendered once with Kokoro-82M (Apache-2.0, voice `bf_emma`) and only the recordings ship,
in `vendor/voice/clips/` at about 5 MB.

**What that fixed.** The live engine was kokoro-js, which compiles **eSpeak NG** into its
bundle to turn text into pronunciation. eSpeak NG is GPL-3.0-or-later. It was easy to miss:
the bundle is one 2 MB minified line, the minifier had stripped every licence banner in it,
and it is not dormant, it runs on every spoken cue. So the product was redistributing GPL
code with its notices removed while telling buyers in writing that it contained no copyleft.

Recording the lines removes the engine, and with it the only copyleft component. **Audio
produced by a tool is not a derivative work of that tool**, so the recordings carry no GPL
conditions. Kokoro-82M itself is Apache-2.0, which places no condition on its output either.
The "nothing copyleft" claim is now true rather than something needing a caveat.

It also took 111 MB off the download and means Emma speaks without first waiting for a model.

**The cost, stated plainly.** She can only say those 157 lines. Edit a routine cue or add a
posture to a routine and that line has no recording, so it falls through to the speech voice
built into the visitor's browser. Nothing breaks, but it stops being Emma until the lines are
re-rendered. See `tools/render-voice.md`.

## The *Meditations* text, and why this particular translation

The Stillness passages are Marcus Aurelius' *Meditations* in the English of **George
Long (1800-1879)**, published 1862.

**A translation carries its own copyright, separate from the ancient original.** The
Greek is public domain by age, but that does not make any given English text free. The
translations most readers know — Gregory Hays (2002), Martin Hammond, Robin Hard — are
all still protected, and putting them in a product for sale would be infringement.

George Long died in **1879**, 147 years ago. Copyright in a translation runs from the
translator's life, and every term in use worldwide (life + 70 being the longest common
term) expired long ago. So this translation is public domain **worldwide**, not merely
in the United States, and may be copied, modified, distributed and **sold** with no
permission, royalty, attribution requirement or restriction of any kind.

Attribution is given anyway, in the app and here, because passing off a named
translator's work as anonymous would be shabby even where it is lawful.

**On Project Gutenberg.** The source text was obtained from Project Gutenberg eBook
#15877. Project Gutenberg's licence attaches to *their* packaged edition and trademark,
not to the underlying public-domain work, and it explicitly permits stripping their
header to use the work unencumbered. **No Project Gutenberg text, header, footer,
trademark or licence is included in this product** — only the underlying public-domain
translation, quoted verbatim and cited by book and section so it can be checked against
any edition.

## Notes that matter for resale

- **Ship `vendor/` intact**, licences included. Apache 2.0 §4, MIT and OFL all require
  the licence text and copyright notice to accompany redistributed copies — and
  redistribution is exactly what vendoring means.
- The pose-landmarker **guide page states a licence only for the code samples**, not
  for the `.task` model bundles. The Apache 2.0 grant for the model is in the model
  card PDF linked above — keep a copy with your delivery records.
- **OFL fonts:** embedding and redistribution are fine. You may not sell the font files
  themselves, and a modified font may not keep its reserved name.
- **There are now no external URLs in `index.html` at all.** Two fallbacks to Google's
  copies of the pose models used to sit in `MODEL_URLS`. They contradicted the page's
  own privacy claim that it "makes no third-party requests at runtime", so they were
  removed and `connect-src` in the CSP was tightened to `'self'` with no external origin.
  If you ever re-add a remote fallback you must re-add its origin to the CSP in **both**
  `netlify.toml` and `_headers`, and correct the privacy wording on the page.
- **Do not re-add a live text-to-speech engine without checking what it links.** The
  browser TTS libraries in this space almost all reach for eSpeak NG as their phonemizer,
  and eSpeak NG is GPL-3.0. That is exactly how this product came to carry copyleft while
  claiming it did not. Pre-rendered audio has no such problem: Emma reads a fixed script,
  so there is nothing a runtime engine could do here that a recording cannot.
- **`vendor/voice/clips/` is a product asset, not a third-party redistribution.** The
  recordings are Omerica Studios' own output from an Apache-2.0 model. No attribution is
  required for them; the Kokoro-82M credit above is given because it is fair, not because
  the licence compels it.

## Provenance hashes

SHA-256 of every redistributed binary is recorded in `vendor/NOTICE.txt`. All are
unmodified upstream copies; a mismatch means the file is not the audited copy.

## Non-affiliation

This product is not affiliated with, sponsored by, or endorsed by Google, MediaPipe,
the three.js authors, jsDelivr, Google Fonts, or any font project named above.

## Original work

Except for the third-party components above, everything in this site — the alignment
engine, the 59-pose target library, the coaching language, the interface and all other
code and assets — is Copyright (c) 2026 Omer Orman / Omerica Studios.

## Not a licence issue, but ship it anyway

This tool gives posture feedback. The page says "not medical or physiotherapy advice"
— keep that visible in anything client-facing, and make sure your client disclaimer
covers it.
