TL;DR

  • Amuse와 Spark는 몇 달러짜리 ESP32-S3 보드에서 실행되는 오픈소스 대화형 앱으로, TypeScript, JSX, CSS로 작성해 GeaStack으로 네이티브 펌웨어에 컴파일함.
  • Spark는 보드에서 OpenAI Realtime API(gpt-realtime-2.1)에 직접 연결해 마이크 음성을 전송하고 응답 음성을 재생하는 전이중 음성 에이전트임.
  • Spark에는 고유한 음성·페르소나·애니메이션을 갖춘 KITT, Nova, Echo, Flora 네 캐릭터가 있음.
  • Amuse는 LemonSlice 영상 아바타와 ElevenLabs 음성을 결합한 다섯 캐릭터를 제공하며, 대화 세션을 호스팅함.
  • Amuse는 같은 네트워크의 컴퓨터에서 실행되는 브리지와 Python 3.11 이상, LemonSlice 인증 정보가 필요하며, 두 앱 모두 캐릭터를 추가하거나 보드를 변경하도록 포크할 수 있음.

Amuse와 Spark 소개

  • 두 앱은 Waveshare ESP32-S3 Touch AMOLED 2.06 보드에서 실행되며, Amuse는 1.8인치 모델에서도 실행됨. 캐릭터를 스와이프해 선택하고 Start를 눌러 대화를 시작하는 방식임.
  • 두 앱의 소스 코드는 다음 주소에서 확인 가능함.
  • Amuse
  • Spark
  • 두 앱은 TypeScript, JSX, CSS로 작성되며 GeaStack을 통해 네이티브 펌웨어로 컴파일됨.

Spark

  • Spark는 음성 에이전트로, 보드가 OpenAI Realtime API(gpt-realtime-2.1)에 직접 웹소켓(WebSocket) 연결을 열고 마이크 음성을 스트리밍하며, 도착하는 응답을 재생함. 중간에 서버나 휴대전화가 없음.
  • 오디오는 전이중으로 처리되므로 상대방이 말하는 도중에도 끼어들 수 있음.
  • 네 캐릭터는 각각 고유한 음성, 페르소나, 캔버스(Canvas) 애니메이션을 갖춤.
  • KITT: 보호 본능이 있고 건조한 유머를 구사하는 자동차로, 듣는 동안 빨간 스캐너가 표시되고 말하는 동안 음성 램프 세 열이 표시됨.
  • Nova: 궤도 관측소의 천문학자로, 반짝이는 별과 행성 궤도가 표시됨.
  • Echo: 심해 항해자로, 소나 스윕과 음성 파형이 표시됨.
  • Flora: 마음챙김 동반자로, 자라는 잎과 꽃이 표시됨.
  • 캐릭터 하나는 character.ts의 음성·지침, View.tsx 컴포넌트, 스타일시트, 선택형 캔버스 애니메이션으로 구성된 폴더 하나에 해당함. 폴더를 추가하면 빌드가 자동으로 포함하므로 별도의 등록 작업이 없음.
  • 대화는 Worker에서 실행되며, GeaStack이 UI와 함께 네이티브 코드로 컴파일함.

Amuse

  • Amuse는 화면에 말하는 얼굴을 표시하는 앱이며, Zuck(어색한 기술광), Alfred(사려 깊은 학자), Felipe(상상력 풍부한 예술가), Jojo(활기찬 낙관주의자), Todd(느긋한 개구리)로 구성됨.
  • 각 캐릭터는 LemonSlice 영상 아바타와 ElevenLabs 음성을 사용함. Start를 누르면 보드가 호스팅 세션을 생성하고, 음성에 맞춰 입 모양이 동기화된 캐릭터 영상이 AMOLED 화면에서 대화 중 재생됨.
  • Amuse는 같은 네트워크에 연결된 컴퓨터에서 실행되는 소형 브리지가 필요함. 브리지는 호스팅 세션의 통화에 참여해 보드와 세션 사이에서 마이크·오디오·비디오를 중계함.
  • 여러 보드가 하나의 브리지에 동시에 연결될 수 있으며, 각 보드는 별도의 세션을 사용함.
  • 보드에서는 에코 제거가 네이티브로 실행되므로 캐릭터가 말하는 동안에도 마이크를 열어 두면서 캐릭터 음성이 다시 입력되는 것을 방지함.
  • 다른 캐릭터로 스와이프하면 현재 대화가 종료됨. 각 캐릭터의 설정과 초상화는 별도 폴더에 보관되며, 지원되는 두 화면 크기에 맞춰 준비됨.

사용 방법

  • 각 저장소의 README에 설정 방법이 안내되어 있음. 기본 절차는 npm ci 실행, npx gea setup으로 보드 등록 및 ESP-IDF 설치, .env에 Wi-Fi 및 API 인증 정보 입력, npm으로 빌드 및 플래시하는 순서임.
  • API 키는 펌웨어에 포함되므로 .env 파일과 빌드한 바이너리를 비공개로 유지해야 함.
  • Amuse로 대화하려면 브리지와 LemonSlice 인증 정보가 필요하며, 브리지는 Python 3.11 이상에서 실행해야 함.
  • 두 앱은 포크해 페르소나를 변경하거나 캐릭터를 추가할 수 있으며, npx gea setup으로 다른 보드를 지정할 수도 있음.