Spaces:
Paused
A newer version of the Gradio SDK is available: 6.20.0
Mission
Product Vision
ReadBookMom β a parent records a short voice sample, then a bedtime story is narrated in that parent's cloned voice. Story Q&A uses a local audio model for fast spoken answers. The demo runs on local models inside a Gradio app on Hugging Face Spaces.
Problem
Parents can't always be there at bedtime. Children want to hear their parent's voice reading to them. Existing TTS is generic and impersonal, while voice cloning APIs are expensive and require sending private family audio to third parties.
Demo Loop
Parent records 15s of voice β Pick a story β Story starts in parent's voice
β
Child taps Ask mid-story β Narration pauses
β
Child asks a question β Hears a fast spoken answer
β
Resume story from the same position (or ask another question)
β
Story finishes β Show "Pick another story" prompt
Latency and natural interruption are part of the demo promise: the story should start quickly, pause cleanly when the child wants to ask something, answer with low delay, then resume without losing the story position. The Q&A answer voice is intentionally generated by the local audio Q&A model rather than the cloned narrator voice. The child may ask multiple questions in a row before resuming. When the last chunk finishes playing, the app returns to the story selection screen.
Demo time budget: A 3-minute live walkthrough allows ~2 Q&A rounds (each round β 15s of dead air: pause + ask + wait + answer + resume). Plan the demo script around 1β2 questions placed at natural story moments.
Hackathon Goal (2 days)
Ship a working Hugging Face Space that demonstrates:
- Voice cloning β parent uploads/records a short audio clip, Qwen3-TTS extracts speaker embedding
- Interruptible story narration β Qwen3-TTS streams sentence-sized chunks in the cloned voice (Supertonic fallback for stock voice)
- Voice Q&A during narration β child taps Ask, narration pauses, LFM2.5-Audio answers from the story context, then speaks the answer directly for lower latency
Target Demo User
A parent at a laptop who records their voice, picks a short story, and shows their child the result.
Success Criteria (Hackathon)
| Criteria | Target |
|---|---|
| Voice clone from β€ 30s audio | 2 of 3 listeners identify the voice in a blind A/B test |
| Story start latency | First streamed audio chunk in β€ 5s |
| Narration interruption | Ask tap pauses playback in β€ 500ms and preserves story position |
| Cached story replay | Starts immediately after first generation |
| Q&A answer (spoken, live) | Spoken answer starts in β€ 8s from question submit (known compromise β a young child may lose attention) |
| Q&A answer (spoken, pre-generated) | Sub-1s for anticipated questions matched from background Q&A cache |
| Story resume latency | Resume from paused position in β€ 1s when next chunk is cached |
| Works on HF Spaces | Public link, no local setup needed |
| Demo length | 3-minute live walkthrough |
| Privacy posture | Voice and Q&A stay on the Space runtime |
Scope
In scope:
- Upload/record parent voice sample (15β30s)
- Select from 10 pre-loaded short stories (public domain, sourced from Project Gutenberg)
- Play story narrated in cloned voice with interruptible chunked streaming
- Pause narration through an Ask button, preserve the current story chunk, answer, then resume
- Cache generated narration per voice session and story
- Ask a question about the story, receive a grounded 1β2 sentence LFM2.5-Audio answer, and hear it as low-latency generated speech
- Clean, child-friendly UI (Google Stitch-inspired via gr.Server)
Out of scope:
- User accounts, auth, database
- Offline mode, progress tracking
- Multiple languages
- Always-listening voice barge-in, echo cancellation, and open-mic interruption
- COPPA compliance (demo only)
Guardrails (Lite)
| Constraint | Implementation |
|---|---|
| Content grounding | LFM2.5-Audio receives the selected story text plus a strict answer-from-story instruction |
| Voice privacy | All inference local on HF Space GPU β no audio leaves the server |
| Child safety | Pre-curated stories only; no user-uploaded content |
Latency Strategy
| Bottleneck | Strategy |
|---|---|
| Voice setup | Compute and cache the voice representation immediately after recording. |
| Story narration | Use interruptible chunked streaming: generate the first paragraph chunk, play it immediately, then continue generating queued chunks. |
| Interruption | Add an Ask state that pauses playback, cancels or deprioritizes queued narration generation, and stores the current chunk index. |
| Story replay | Cache full generated narration by voice session and story ID. |
| Q&A context | Send the current story position plus the most relevant story passages to LFM2.5-Audio instead of the full story when possible. |
| Q&A length | Cap answers to 1β2 short child-friendly sentences to reduce spoken-answer latency. |
| Pre-generated Q&A | While each chunk plays, generate 2β3 anticipated Q&A pairs with audio in the background. Match incoming questions against the cache for sub-1s responses; fall back to live generation on miss. |
| Story resume | Resume from the paused chunk after the spoken answer; use cached next chunks when available. |
| Voice question input | Use LFM2.5-Audio directly for audio questions; text questions bypass audio input. |
Design Review Notes
| Topic | Critique | Upgrade |
|---|---|---|
| Privacy | An external LLM API would weaken the privacy story even if audio stayed local. | Use local LFM2.5-Audio for story Q&A so the demo has one clear privacy narrative. |
| Latency | The cloned narrator voice is valuable for story playback, but forcing every Q&A answer through cloned TTS adds delay to the live interaction loop. | Use LFM2.5-Audio for direct audio-in/audio-out answers, cache voice setup, stream chunked narration, make playback cancellable, and cap Q&A output. |
| Demo clarity | Voice cloning, narration, ASR, and Q&A can feel like too many moving parts. | Present the loop as three simple actions: record, listen, ask. |