user-img

Grovety

  • 14 Projects
  • 21 Followers
  • Nov 11,2025
+ Follow

TinyTTS — The Neural Module That Makes Photos Talk

Your pictures don’t just sit there anymore — they speak. Add short captions to your family album, and turn them into natural voice

TinyTTS — The Neural Module That Makes Photos Talk
 
  • thumbnail-img
 

Story

 

When we flip through old photos, our minds fill in the sounds — laughter in the kitchen, the hum of a train station, someone saying “remember?”
We built this project so those voices could return, not just live in memory. Now a picture can speak for itself — short, warm phrases, like someone you love is right there again.

It began with a Family Storyteller: a few childhood photos, a couple of sentences about funny moments — press Play, and the frame speaks, completely offline.
Then came the idea of Talking Places: open a travel snapshot and hear the whisper of a story — as if the city itself tells you where to go next.

All of it runs fully on-device — no cloud, no delay. The speech is generated right on the TinyTTS module inside the frame.
You are the director: control pacing, pauses, and sequence — or just let the story unfold.
The formula is simple: photo + text → voice. That’s it. The rest is emotion.

We don’t just share a tutorial — we hand you a template for your own stories: family, museum, travel, educational.
Add a few lines, press play, and watch faces light up when the frame starts to talk. The first time it speaks — it really does feel like magic.

Quick Start — Ready Demo

! Ready binaries for instant start.

You’ll Need

TinyTTS Module

 

 

1. Connect the CrowPanel to your computer via USB/Serial.

Set the panel’s function-select switch to “WM(0,1)” (UART1-OUT mode).

Do not connect the tinyTTS module yet.

2. Flash the firmware.

Option A — Use prebuilt images:
In firmware/, pick

    • binaries_album/ for the album scenario, or
    • binaries_travel/ for the traveling scenario.

Flash using the provided flasher (see firmware/flash_tool.md).

Option B — Build from source:
Install ESP-IDF v5.4, clone the repo, choose the scenario in
components/ui/scenario_build.h, then run:

idf.py fullclean
idf.py build
idf.py -p PORT flash

3. After flashing:

Connect the tinyTTS module to the CrowPanel (UART0 ↔ UART1-OUT) with the 4-pin cable.
Attach the audio output (3.5 mm jack) from tinyTTS to a speaker or headphones.

5. Run the demo:The screen shows a photo card.

    • Press Play - the card text is spoken by tinyTTS.
    • Press "→" - next card appears (looped list).

  • CrowPanel reads image and text files.
  • Text is sent over UART to TinyTTS.
  • TinyTTS generates speech.
  • Audio output from TinyTTS goes to the speaker.
  • Everything runs fully offline.

 

Make Your Own Album - Example: third

(Based on the Add Scenario Guide)

1. Create Scenario Folders

In the repository root, add:

components/ui/third/         ← new folder for visuals
spiffs_root/assets_third/ ← new folder for binary images

Each must follow the naming convention: lowercase scenario name = third.

2. Enable Scenario in Code

Edit
components/ui/include/scenario_build.h

#define UI_SCENARIO_ALBUM   0
#define UI_SCENARIO_TRAVEL 0
#define UI_SCENARIO_THIRD 1 // activate the new one

Only one scenario can be set to 1.

3. Add Assets

Place .bin images (RAW format) inside
spiffs_root/assets_third/.

You can generate them using SquareLine Studio or the LVGL Image Converter
(Color format: True color (RGB565), Output: Binary).

4. Add Texts and Visuals

Texts:
Create components/ui/builtin_texts_third.c —
defines kThirdTexts[] array with your text strings.

Visuals:
Create components/ui/third/visuals_third.c —
maps each text to an image (import from img_third_*.c).

Example:

const case_visual_t kVisuals[CASE_TXT_COUNT] = {
[CASE_TXT_01] = { &ui_img_third_01, ui_img_third_01_load },
[CASE_TXT_02] = { &ui_img_third_02, ui_img_third_02_load },
[CASE_TXT_03] = { &ui_img_third_03, ui_img_third_03_load },
};

5. Update CMakeLists.txt

Add the new block inside components/ui/CMakeLists.txt:

elseif(_SCEN_SELECTED_NAME_LOWER STREQUAL "third")
list(APPEND UI_SCENARIO_SRCS
${CMAKE_CURRENT_LIST_DIR}/builtin_texts_third.c
${CMAKE_CURRENT_LIST_DIR}/third/visuals_third.c
)

6. Build and Flash

Clean, build, and flash:

idf.py fullclean
idf.py build
idf.py -p PORT flash monitor

Expected log output:

-- UI scenario selected: THIRD (lower='third')

What’s Next

The same setup can evolve into museum guides, educational kits, talking toys, or home displays — all running fully offline.

No internet, no latency, no cloud dependencies — just local voice and logic you can adapt for any storytelling scenario.

Create the first chapter of your talking album today.
Flash the ready demo, load five photos and five short lines, press Play.

The rest of the story — you’ll discover along the way.

Resources

 

Code
  • https://github.com/Grovety/Crowpanel_ImgTTS_cards/
    View

TinyTTS — The Neural Module That Makes Photos Talk

Your pictures don’t just sit there anymore — they speak. Add short captions to your family album, and turn them into natural voice

32
 
2
0
0
These revenues will go back into supporting creators, contests, and the open source ecosystem, and more.

Share your project on social media to expand its influence! Get more people to support it.

  • Comments( 0 )
  • Like( 2 )
/1000
Upload a photo:
You can only upload 1 files in total. Each file cannot exceed 2MB. Supports JPG, JPEG, GIF, PNG, BMP

You May Also Like

View All
Add to cart
Board Type : GerberFile :
Layer : Dimensions :
PCB Qty :
Different PCB Design
PCB Thickness : PCB Color :
Surface Finish : Castellated Hole :
Copper Weight : 1 oz Production Time :
Total: US $
As a sharing platform, our community will not bear responsibility for any issues with this design and parameters.

PCB Assembly

PCBA Qty: BomFile:
NO. OF UNIQUE PARTS: NO. of Components:
Country: Shipping Way:
Assembly Cost: US $
As a sharing platform, our community will not bear responsibility for any issues with this design and parameters.
Add to cart
3dPrintingFile : Size :
Unit : Volumn :
3D Printing Qty : Material :
Total: US $12.99
As a sharing platform, our community will not bear responsibility for any issues with this design and parameters.
Add to cart
Acrylic Type : AcrylicFile :
Dimensions: Engrave:
Acrylic Qty :
Acrylic Thickness:
Acrylic Color:
Total: US $12.99
As a sharing platform, our community will not bear responsibility for any issues with this design and parameters.
Add to cart
CNC Milling File : Size:
Unit: Volumn:
CNC Milling Qty : Material:
Type of Aluminum: Surface Finish:
Tolerance:
Surface Roughness:
Total: US $12.99
As a sharing platform, our community will not bear responsibility for any issues with this design and parameters.
Add to cart
Item Price Qty Subtotal Delete
Total: US $0.00
Certified Product | Guaranteed Purchase: Full techsupport