项目介绍

akdeb/OpenToys 是一个托管在 GitHub 上的开源项目,主要使用 TypeScript 编写,目前获得 135 个 Star、9 次 Fork。

仓库全名
akdeb/OpenToys
Star 数
135
Fork 数
9

README 摘要

English | 中文 OpenToys Open-source local voice AI for toys, devices, and robots, powered by your Mac OpenToys is the local-first platform version of ElatoAI. No cloud required, no subscription lock-in, and your data stays private on-device with inference running locally with a websocket transport to connect to your ESP32-S3. Apple Silicon · Rust + React · ESP32-S3 · Whisper ASR · Qwen3-TTS · MLX LLMs News 2026-05…

完整内容见 GitHub 原始 README 或本页 。

常见问题

OpenToys 用什么语言开发?

主要使用 TypeScript 编写,目前有 135 个 Star。

如何获取 OpenToys 的源码?

可以直接克隆仓库:git clone https://github.com/akdeb/OpenToys.git;安装与运行步骤见仓库 README。

OpenToys 最近还在维护吗?

仓库最近一次更新为 6月20日,当前没有未关闭的 Issue;Star 数为 135,可作为社区活跃度的参考。

关于

Make Local AI Toys, Robots, Devices that work with a MacBook and an Arduino ESP32

描述取自 GitHub 官方 API,中文内容由 GitRead 中文社区 编辑团队整理。

语言占比

C
C++
CSS
HTML
JavaScript
Python
Rust
Shell
TypeScript

Release

贡献者

README

English | 中文


OpenToys

Open-source local voice AI for toys, devices, and robots, powered by your Mac

OpenToys is the local-first platform version of ElatoAI. No cloud required, no subscription lock-in, and your data stays private on-device with inference running locally with a websocket transport to connect to your ESP32-S3.

Apple Silicon · Rust + React · ESP32-S3 · Whisper ASR · Qwen3-TTS · MLX LLMs

App ESP32 License Releases

News

🎥 Demo Video

OpenToys Demo

Why OpenToys?

  • Fully Local: NO cloud, NO subscriptions, NO data leaving your home, FREE AI forever.
  • Multilingual: OpenToys supports multiple languages and accents: English 🇺🇸/🇬🇧, Chinese 🇨🇳, Spanish 🇪🇸, French 🇫🇷, Japanese 🇯🇵, Korean 🇰🇷, Portuguese 🇵🇹, German 🇩🇪, Italian 🇮🇹 and more!
  • Voice Cloning: Clone your own voice or your favorite characters with <10s of audio.
  • Customizable: Build your own toys, companions, robots and more with an ESP32.
  • Open-source: The community is open-source and free to use and contribute to.

App Design

OpenToys Demo

ESP32 DIY Hardware

ESP32 DIY Hardware Firmware Docs ⏭️

Download & Install

🚀 Quick Start (for development)

  1. Clone the repository with git clone https://github.com/akdeb/open-toys.git
  2. Install Rust and Tauri with curl https://sh.rustup.rs -sSf | sh
  3. Install Node from here
  4. Run cd app
  5. Run npm install
  6. Run npm run tauri dev

Cards & Stories

Create experiences with personalities that can play games, tell stories, engage in educational conversations. Here are some of the default characters with more prompt details in personalities.json.

Stack

⚡️ Flash to ESP32

  1. Connect your ESP32-S3 to your Apple Silicon Mac with a USB cable.
  2. In OpenToys, go to Settings → Connect your ESP32 Here, pick your serial port and click Flash.
  3. OpenToys flashes the bundled firmware images (bootloader, partitions, firmware) directly.
  4. Unplug the toy once flashing finishes. You only need to do this again to update the firmware.

🎮 Play

The toy hosts its own WiFi network and your Mac joins it, so there is no router setup, no captive portal, and no home network involved.

  1. Power on the toy. On boot it starts an open access point called ELATO (no password) at 192.168.4.1. Its LED glows pink while it waits.
  2. Join ELATO from your Mac. It appears in the macOS WiFi menu like any other network. macOS will warn that the network has no internet — that is expected, the toy is not a router.
  3. Wait a moment for the handshake. The toy detects your Mac, finds the OpenToys server on it, and opens a websocket. The LED turns white and the status row in the app switches to Ready on device.
  4. Press the green Play button. It is disabled until the toy is connected (it reads “Connect your Mac to ELATO first” on hover) and enables itself the moment the handshake lands. Press it and the toy is live — start talking.

Leave OpenToys running while you play; it is doing the speech-to-text, the LLM, and the text-to-speech on your Mac. To finish, press End in the app — it drops the session and takes you to the transcript — or just power off the toy.

[!TIP] While your Mac is joined to ELATO it has no internet access. Download your models and voices before joining, or hop back onto your normal WiFi to fetch them and then rejoin ELATO.

If the Play button stays greyed out

  • ELATO isn’t in the WiFi list — the toy isn’t powered, or the firmware didn’t flash. Reflash and watch for the pink LED on boot.
  • Joined ELATO but nothing happens — make sure OpenToys is actually running on the Mac. The toy probes ports 49320 and 8000 on whichever machine joins it, and waits for one of them to answer.
  • The button says Download voice — the selected character’s voice isn’t on disk yet. Click it to fetch the voice, then come back.

🛡️ Safety Considerations

AI systems (local or cloud) are not perfect. This project is built with data privacy and safety in mind, but there are still important limitations:

  • Hallucinations: LLM and TTS models can give incorrect or misleading answers. This should not be treated as a source of truth.
  • Inappropriate outputs: Adversarial or ambiguous prompts can sometimes produce unsafe responses.
  • Emotional impact: AI should not replace real human interaction, especially for children.

When using with children, use with parental awareness and treat this as a tool for exploration, not authority.

Tested on ✅

  1. M1 Pro 2021 Macbook Pro
  2. M3 2024 Macbook Air
  3. M4 Pro 2024 Macbook Pro

Project Structure

open-toys/
├── app/
├── arduino/
├── resources/
├────────── python-backend/
├────────── firmware/
└── README.md

Python 3.11 runtime binary, packages and HF models are downloaded on first app setup into the app data directory.

License

MIT


If you like this project, consider supporting us with a star ⭐️ on GitHub!

评论

暂无评论