uGo eyes — web version of the face (standard 0.1)¶
Status as of 03.11.2026. In development — in the repository ume-eyes, folder
packages/ume_face/web/, not yet adopted, not yet built into any product and not installed on
any device. The German version follows below: Deutsch.
For IT, technicians and integration partners
Technical reference for developers who embed the face in a product without Flutter (operator interface of the transport robots, large screens). It is not written as operating instructions for end users.
What it is¶
The uGo eyes are the face of the URG products, always in the same variant. The web version draws the
face on a canvas, without libraries, and takes every measurement, colour, time, particle count and
moment text from one value list, gesicht_standard.json (standard „Gesicht und Momente“, version
0.1). The Flutter version in the same package uses the same list.
| File | Purpose |
|---|---|
ugo-augen.js |
ES module: mountUgoAugen(canvas, options), behaviour and drawing |
index.html |
full-screen page (content security policy default-src 'self') |
seite.js |
start of the full-screen page, publishes window.uGoAugen |
vorschau.js |
preview controls, loaded only with vorschau=1 |
ugo-augen.css |
style sheet, colours come from the value list |
gesicht_standard.json |
byte copy of the value list |
schrift/ |
font Nunito (SIL Open Font License 1.1) with licence text |
GESICHT-HERKUNFT.md |
SHA-256 of every file |
Products take the folder as a byte copy and record the source commit and the SHA-256 in their own
GESICHT-HERKUNFT.md; a test in the product compares them.
Full-screen page¶
Serve the folder over HTTP(S) from one origin and open index.html. The page loads nothing from other
addresses and works without internet.
| Parameter | Values | Default |
|---|---|---|
sprache |
de, en, fr, es, it, nl (moment texts) |
de |
ton |
an, aus (birthday melody and browser voice) |
aus |
schlaf |
milliseconds without input until the face falls asleep | 60000 |
vorschau |
1 = controls, push to talk, text input, shortcuts (team only) |
off |
Without vorschau=1 there is no microphone, no speech recognition and no button on the page.
In the preview the speech recognition of the browser may send the audio to a cloud service of the
browser maker (assumption, not measured); the preview is a tool for the team only.
Embedding¶
import { ladeStandard, mountUgoAugen, setzeFarben } from './ugo-augen.js';
const standard = await ladeStandard();
setzeFarben(document.documentElement, standard);
const face = mountUgoAugen(document.querySelector('canvas'), {
standard, untertitel: document.querySelector('#untertitel'), sprache: 'en',
});
face.moment('losfahren');
Options: standard (required), untertitel (element for subtitles), sprache, ton (default
false), schlafMs, reduziert (default from the system setting „reduce motion“, followed while
running when not set),
erlaubteHerkunft (list of additional origins for postMessage), kanalName. The returned object
has setEmotion, moment, state, say, look, emotions and destroy.
Messages¶
JSON objects; unknown fields are ignored.
| Message | Fields | Effect |
|---|---|---|
set_emotion |
emotion: neutral, friendly, happy, curious, thoughtful, surprised, empathetic, embarrassed, love, starstruck, sleepy, birthday |
expression for 8 s, then friendly; unknown, empty or null → neutral. love: 8 hearts, starstruck: 16 sparks (only if no moment runs), sleepy: sleeps, birthday: party without the own song (the voice assistant sings), at least 14 s, at most 40 s |
moment |
name: losfahren, danke, wow, geburtstag, hallo, sorge, schlafen, gluecklich; value only for geburtstag: first name, at most 24 characters |
moment as in the standard; geburtstag plays the own song with subtitles, minimum 14 s |
state |
state: idle, listening, thinking, speaking |
state of the face |
say |
text (at most 300 characters), optional emotion |
subtitle, state speaking |
look |
direction: left, right, up, center |
gaze for 1.2 s or until the next message (the eyes follow the direction of travel) |
The state error (expression „concern“, no particles, no moments) can be set only by the
embedding application through state('error') of the returned object, and it ends only with
state('idle') of the same object. Messages from outside can neither set nor end error, and cannot
set sleeping.
Moments behave as in the Flutter version:
- A new moment replaces the running one; the same moment started again runs its full time again.
set_emotionwith a different emotion ends the running moment, also the birthday. The emotion of the running moment (for exampleloveduringlosfahren,birthdayduring the birthday) keeps it.- The first name is trimmed; a blank value counts as no name („dear friend“).
Transport¶
| Way | Rule |
|---|---|
window.uGoAugen (full-screen page) |
setEmotion, moment, state, say, look, emotions, for the application that shows the page |
BroadcastChannel("ugo-augen") |
same origin only (browser rule) |
postMessage |
only from the same origin or from an origin in erlaubteHerkunft; everything else is ignored. The full-screen page accepts only its own origin |
Subtitles are always set as text, never as HTML.
Privacy and accessibility¶
- Subtitles leave the page after fading out (at once with „reduce motion“); a first name does not remain in the page or for screen readers after the moment.
- No camera, no microphone, no storage, no statistics. A first name for the birthday song lives only in memory for the duration of the moment.
- With „reduce motion“ there are no hearts, sparks, balloons or confetti (factor 0 in the value list); the expression stays; no idle glances; the face appears without the start-up drawing.
- The canvas is labelled for screen readers as an image („Face of the robot“, in the page language).
- Subtitles at least 18 px, contrast to the background above 4.5 : 1.
- The browser voice (
ton=an) may use a cloud service of the browser maker (assumption, not measured); default is off.
Data location¶
The face itself sends no data. Where products send data elsewhere: data in Europe, data centre Frankfurt.
uGo-Augen — Web-Fassung des Gesichts (Standard 0.1)¶
Stand 03.11.2026. In Entwicklung — im Repository ume-eyes, Ordner
packages/ume_face/web/, noch nicht übernommen, in kein Produkt eingebaut und auf keinem Gerät
installiert.
Für IT, Techniker und Integrationspartner
Technische Referenz für Entwickler, die das Gesicht in ein Produkt ohne Flutter einbinden (Bedienoberfläche der Transportroboter, große Bildschirme). Keine Bedienungsanleitung für Endnutzer.
Worum es geht¶
Die uGo-Augen sind das Gesicht der URG-Produkte, immer in derselben Variante. Die Web-Fassung zeichnet
das Gesicht auf einer Zeichenfläche (Canvas), ohne Bibliotheken, und nimmt alle Maße, Farben, Zeiten,
Teilchenzahlen und Momenttexte aus einer Werteliste, gesicht_standard.json (Standard „Gesicht und
Momente“, Fassung 0.1). Die Flutter-Fassung im selben Paket nutzt dieselbe Liste.
| Datei | Zweck |
|---|---|
ugo-augen.js |
ES-Modul: mountUgoAugen(canvas, optionen), Verhalten und Zeichnen |
index.html |
Vollbildseite (Inhaltsrichtlinie default-src 'self') |
seite.js |
Start der Vollbildseite, setzt window.uGoAugen |
vorschau.js |
Vorschau-Bedienung, nur mit vorschau=1 geladen |
ugo-augen.css |
Gestaltung, Farben kommen aus der Werteliste |
gesicht_standard.json |
bytegleiche Kopie der Werteliste |
schrift/ |
Schrift Nunito (SIL Open Font License 1.1) mit Lizenztext |
GESICHT-HERKUNFT.md |
SHA-256 jeder Datei |
Produkte übernehmen den Ordner als bytegleiche Kopie und tragen Quell-Commit und SHA-256 in ihre
eigene GESICHT-HERKUNFT.md ein; ein Test im Produkt vergleicht sie.
Vollbildseite¶
Den Ordner über HTTP(S) von einer Herkunft ausliefern und index.html öffnen. Die Seite lädt nichts
von fremden Adressen und läuft ohne Internet.
| Parameter | Werte | Vorgabe |
|---|---|---|
sprache |
de, en, fr, es, it, nl (Momenttexte) |
de |
ton |
an, aus (Geburtstagsmelodie und Browserstimme) |
aus |
schlaf |
Millisekunden ohne Eingabe bis zum Einschlafen | 60000 |
vorschau |
1 = Bedienleiste, Sprechtaste, Texteingabe, Tastenkürzel (nur fürs Team) |
aus |
Ohne vorschau=1 gibt es auf der Seite kein Mikrofon, keine Spracherkennung und keine Taste.
In der Vorschau kann die Spracherkennung des Browsers den Ton an einen Cloud-Dienst des
Browserherstellers senden (Annahme, nicht gemessen); die Vorschau ist nur ein Werkzeug fürs Team.
Einbinden¶
import { ladeStandard, mountUgoAugen, setzeFarben } from './ugo-augen.js';
const standard = await ladeStandard();
setzeFarben(document.documentElement, standard);
const gesicht = mountUgoAugen(document.querySelector('canvas'), {
standard, untertitel: document.querySelector('#untertitel'), sprache: 'de',
});
gesicht.moment('losfahren');
Optionen: standard (Pflicht), untertitel (Element für Untertitel), sprache, ton (Vorgabe
false), schlafMs, reduziert (Vorgabe aus der Systemeinstellung „Bewegung reduzieren“, ohne
Angabe wird eine Änderung im Betrieb übernommen),
erlaubteHerkunft (Liste weiterer Herkünfte für postMessage), kanalName. Das zurückgegebene
Objekt hat setEmotion, moment, state, say, look, emotions und destroy.
Nachrichten¶
JSON-Objekte; unbekannte Felder werden ignoriert.
| Nachricht | Felder | Wirkung |
|---|---|---|
set_emotion |
emotion: neutral, friendly, happy, curious, thoughtful, surprised, empathetic, embarrassed, love, starstruck, sleepy, birthday |
Ausdruck für 8 s, dann friendly; unbekannt, leer oder null → neutral. love: 8 Herzen, starstruck: 16 Funken (nur ohne laufenden Moment), sleepy: schläft ein, birthday: Feier ohne eigenes Lied (der Sprachassistent singt), mindestens 14 s, höchstens 40 s |
moment |
name: losfahren, danke, wow, geburtstag, hallo, sorge, schlafen, gluecklich; value nur bei geburtstag: Vorname, höchstens 24 Zeichen |
Moment nach Standard; geburtstag spielt das eigene Lied mit Untertiteln, mindestens 14 s |
state |
state: idle, listening, thinking, speaking |
Zustand des Gesichts |
say |
text (höchstens 300 Zeichen), optional emotion |
Untertitel, Zustand speaking |
look |
direction: left, right, up, center |
Blick für 1,2 s oder bis zur nächsten Nachricht (Augen folgen der Fahrtrichtung) |
Den Zustand error (Ausdruck „Sorge“, keine Teilchen, keine Momente) setzt nur die einbindende
Anwendung über state('error') des zurückgegebenen Objekts, und er endet nur mit state('idle')
desselben Objekts. Nachrichten von außen können error weder setzen noch beenden und sleeping nicht
setzen.
Momente verhalten sich wie in der Flutter-Fassung:
- Ein neuer Moment ersetzt den laufenden; derselbe Moment, erneut gestartet, läuft wieder seine volle Zeit.
set_emotionmit einer anderen Emotion beendet den laufenden Moment, auch den Geburtstag. Die Emotion des laufenden Moments (etwalovebeilosfahren,birthdaybeim Geburtstag) lässt ihn weiterlaufen.- Der Vorname wird um Leerzeichen gekürzt; ein leerer Wert gilt als kein Name („dear friend“).
Übermittlung¶
| Weg | Regel |
|---|---|
window.uGoAugen (Vollbildseite) |
setEmotion, moment, state, say, look, emotions, für die Anwendung, die die Seite zeigt |
BroadcastChannel("ugo-augen") |
nur gleiche Herkunft (Regel des Browsers) |
postMessage |
nur von gleicher Herkunft oder von einer Herkunft aus erlaubteHerkunft; alles andere wird ignoriert. Die Vollbildseite nimmt nur die eigene Herkunft an |
Untertitel werden immer als Text gesetzt, nie als HTML.
Datenschutz und Barrierefreiheit¶
- Untertitel verlassen die Seite nach dem Ausblenden (bei „Bewegung reduzieren“ sofort); ein Vorname bleibt nach dem Moment weder in der Seite noch für Bildschirmleser stehen.
- Keine Kamera, kein Mikrofon, kein Speichern, keine Statistik. Ein Vorname für das Geburtstagslied steht nur für die Dauer des Moments im Arbeitsspeicher.
- Mit „Bewegung reduzieren“ gibt es keine Herzen, Funken, Ballons oder Konfetti (Faktor 0 in der Werteliste); der Ausdruck bleibt; keine Blickwechsel in Ruhe; das Gesicht erscheint ohne Hochfahr-Zeichnung.
- Die Zeichenfläche ist für Bildschirmleser als Bild beschriftet („Gesicht des Roboters“, in der Sprache der Seite).
- Untertitel mindestens 18 px, Kontrast zum Hintergrund über 4,5 : 1.
- Die Browserstimme (
ton=an) kann einen Cloud-Dienst des Browserherstellers nutzen (Annahme, nicht gemessen); Vorgabe ist aus.
Datenort¶
Das Gesicht selbst sendet keine Daten. Wo Produkte Daten weitergeben: Daten in Europa, Rechenzentrum Frankfurt.