Skip to content

arcopante/desktop-avatar

Repository files navigation

🌸 Desktop Avatar

Un avatar virtual de escritorio con IA conversacional — compatible con macOS, Windows y Linux.

Construido con Tauri v2 (Rust + React + TypeScript).


✨ Características

Avatar

  • Personaje SVG animado con cabeza, torso, brazos y pies independientes
  • 9 estados de ánimo con animaciones propias: happy, idle, excited, sleepy, thinking, talking, surprised, typing_watch, wave
  • Gestos de brazos aleatorios cada 8-15s (levantar, aplaudir, saludar)
  • Parpadeo autónomo y seguimiento ocular del ratón
  • Pies flotantes con animación independiente

Personalización

  • Nombre y personalidad del avatar (5 opciones)
  • Color de cabello, ojos y tono de piel (con selector libre de color)
  • Configuración persistente entre sesiones

Chat con IA

  • Bocadillo de nube de pensamiento — diseño cómic con bolitas hacia el avatar
  • Historial de conversación (últimos 50 mensajes)
  • Indicador de escritura animado

Proveedores de IA soportados

Proveedor Configuración
OpenRouter API key + 4 modelos gratuitos preconfigurados + modelos custom
LM Studio Endpoint local (por defecto http://localhost:1234)
Ollama Endpoint local (por defecto http://localhost:11434)

Voz (macOS)

  • Síntesis de voz con say → archivo AIFF → afplay
  • 4 voces en español: Mónica, Paulina, Jorge, Juan
  • Botón de silenciar / activar
  • Cola de mensajes — habla completo sin cortar

Ventana

  • Transparente, sin bordes, siempre encima
  • Draggable — click largo para arrastrar al escritorio
  • Se expande al abrir chat o configuración (sin saltar de posición)
  • System tray con menú mostrar/ocultar/salir

🚀 Instalación

Prerrequisitos

# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Node.js 18+

# Linux — dependencias del sistema:
sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf

# macOS — Xcode command line tools:
xcode-select --install

Arrancar en desarrollo

npm install
npm run tauri dev

Compilar para producción

npm run tauri build
# Instaladores en: src-tauri/target/release/bundle/

⚙️ Configuración

OpenRouter

  1. Crea una cuenta en openrouter.ai
  2. Genera una API key en openrouter.ai/keys
  3. En el avatar: botón ✨ → pestaña 🤖 IA → campo API Key

LM Studio

  1. Descarga LM Studio y carga un modelo
  2. Activa el servidor local en LM Studio (puerto 1234 por defecto)
  3. En el avatar: botón ✨ → pestaña 🤖 IA → sección Local → activar toggle → http://localhost:1234

Ollama

  1. Instala Ollama y descarga un modelo: ollama pull llama3
  2. En el avatar: botón ✨ → pestaña 🤖 IA → sección Local → activar toggle → http://localhost:11434 → nombre del modelo: llama3

🗂 Estructura del proyecto

desktop-avatar/
├── src/                          # Frontend React + TypeScript
│   ├── avatar/
│   │   ├── AvatarSprite.tsx      # SVG animado — 9 moods, gestos de brazos
│   │   ├── AvatarSprite.css      # Animaciones CSS por parte del cuerpo
│   │   ├── SettingsPanel.tsx     # Panel personalización + IA + voz
│   │   └── SettingsPanel.css
│   ├── chat/
│   │   ├── ChatBubble.tsx        # Bocadillo nube de pensamiento
│   │   └── ChatBubble.css
│   ├── hooks/
│   │   ├── useChat.ts            # Lógica de chat + llamada a IA
│   │   ├── useInputEvents.ts     # Detección mouse/teclado → moods
│   │   └── useTts.ts             # Text-to-speech (macOS say + afplay)
│   ├── store/
│   │   └── avatarStore.ts        # Estado global (Zustand)
│   ├── types/index.ts
│   ├── App.tsx                   # Orquestador principal + expand/collapse
│   └── App.css
│
└── src-tauri/                    # Backend Rust
    ├── src/
    │   ├── main.rs               # Entry point, tray, expand/collapse window
    │   ├── ai.rs                 # OpenRouter + LM Studio + Ollama
    │   ├── tts.rs                # TTS con cola de mensajes
    │   ├── os_context.rs         # Hora, día, saludo contextual
    │   └── input_listener.rs     # (stub — permisos macOS)
    └── tauri.conf.json           # Ventana transparente, macOSPrivateApi

🎭 Estados de ánimo

Mood Trigger
happy Estado por defecto
idle 30s sin actividad
sleepy 2 min sin actividad
excited Mañana (8-10h)
thinking Esperando respuesta IA
talking Avatar respondiendo
surprised Click cuando estaba idle
typing_watch Usuario escribiendo activamente
wave Al iniciar la app

🔮 Roadmap

  • Sistema de outfits — capas SVG intercambiables
  • Tienda de outfits descargables
  • Memoria persistente — recuerda conversaciones pasadas
  • Reacciones proactivas — el avatar habla espontáneamente
  • STT — hablarle directamente por voz
  • Notificaciones del sistema integradas

🛡 Privacidad

  • El listener de teclado global está desactivado por defecto en macOS (requiere permisos de Accesibilidad del binario compilado)
  • La API key se guarda en el store local de Tauri (cifrado por el SO)
  • Los datos de conversación solo van a OpenRouter / servidor local — nunca a servidores propios
  • El TTS usa say y afplay nativos de macOS — sin red

📄 Licencia

GPL 3.0

About

Desktop Avatar — Tu compañera virtual de escritorio con IA 🌸

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors