diff --git a/examples/realtime-audio/README.md b/examples/realtime-audio/README.md index 1978300ffa..16ea5f5a9a 100644 --- a/examples/realtime-audio/README.md +++ b/examples/realtime-audio/README.md @@ -9,6 +9,8 @@ No Python inference service or hosted model API is needed. The page includes live transcripts, interruption, thinking controls, tool approval, and latency measured from the end of speech to actual playback. +![Frankie voice demo](preview.png) + ## Get the model Download the [shared Frankie GGUF](https://drive.google.com/file/d/1oMUgJteaoBvgQicYvz6pWRpcSxun4KA-/view?usp=sharing) diff --git a/examples/realtime-audio/index.html b/examples/realtime-audio/index.html index f9b912ebff..e0273d03b0 100644 --- a/examples/realtime-audio/index.html +++ b/examples/realtime-audio/index.html @@ -1,22 +1,174 @@ - - -Frankie — voice interface - - - -
-
Frankie
VOICE LINK / 01OFFLINE
-
An open channel. A little personality.

Frankie.

Less interface. More conversation.

-
-
NEURAL AUDIO / LIVEAWAITING CONNECTION
FRANKIE IS
Ready.
YOUR VOICE STARTS HERE
YOU / MICSTANDBY
FRANKIE / VOICESTANDBY
-

TRANSCRIPT

00 TURNS

Channel is quiet.

Open the mic.
Frankie will meet you here.

FIRST AUDIO —LIVE TRANSCRIPT
-
-

Make yourself heard.

Start the connection and allow your microphone. Headphones recommended.

- - -
-
- - + + + + + Frankie — voice interface + + + +
+
+
+ + Frankie +
+
+ VOICE LINK / 01OFFLINE +
+
+
+
+
An open channel. A little personality.
+

Frankie.

+

Less interface. More conversation.

+
+ +
+
+
+
+ NEURAL AUDIO / LIVEAWAITING CONNECTION +
+
+ +
+
FRANKIE IS
+ Ready. +
YOUR VOICE STARTS HERE
+
+ + +
+ +
+
+
+ YOU / MICSTANDBY +
+ +
+
+
+ FRANKIE / VOICESTANDBY +
+ +
+
+
+
+
+

TRANSCRIPT

+ 00 TURNS +
+
+
+ +

Channel is quiet.

+

Open the mic.
Frankie will meet you here.

+
+
+
+ FIRST AUDIO —LIVE TRANSCRIPT +
+
+
+
+
+ +
+

Make yourself heard.

+

+ Start the connection and allow your microphone. Headphones + recommended. +

+
+
+
+ +
+
+ + +
+
+ + + diff --git a/examples/realtime-audio/preview.png b/examples/realtime-audio/preview.png new file mode 100644 index 0000000000..6232773669 Binary files /dev/null and b/examples/realtime-audio/preview.png differ diff --git a/examples/realtime-audio/ui.mjs b/examples/realtime-audio/ui.mjs index 13f20ef669..71c2bedab4 100644 --- a/examples/realtime-audio/ui.mjs +++ b/examples/realtime-audio/ui.mjs @@ -13,6 +13,8 @@ const phases = { OFF: ["Ready.", "YOUR VOICE STARTS HERE", ""], }; function setState(state) { + // Audio arrives in many chunks; announce only state transitions. + if (document.body.dataset.state === state) return; const v = phases[state] || phases.OFF; document.body.dataset.state = state; st.textContent = v[0];