base on Amica is an open source interface for interactive communication with 3D characters with voice synthesis and speech recognition. <p align="center">
<img src="https://amica.arbius.ai/ogp.png" width="600" style="margin-bottom: 0.2;"/>
</p>
<h2 align="center"><a href="https://amica.arbius.ai">Amica: Your friendly personal AI</a></h2>
<h5 align="center"> If you like our project, please give us a star ā on GitHub.</h2>
<h5 align="center">
[![twitter](https://img.shields.io/badge/Twitter%20-black)](https://twitter.com/arbius_ai)
[![License](https://img.shields.io/github/license/semperai/amica)](https://github.com/semperai/amica/blob/main/LICENSE)
[![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Fsemperai%2Famica&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false)](https://hits.seeyoufarm.com)
[![GitHub issues](https://img.shields.io/github/issues/semperai/amica?color=critical&label=Issues)](https://github.com/semperai/amica/issues?q=is%3Aopen+is%3Aissue)
[![GitHub closed issues](https://img.shields.io/github/issues-closed/semperai/amica?color=success&label=Issues)](https://github.com/semperai/amica/issues?q=is%3Aissue+is%3Aclosed)
</h5>
Amica allows you to converse with highly customizable 3D characters that can communicate via natural voice chat and vision, with an emotion engine that allows Amica to express feelings and more. Customize her any way you want with any AI technology.
[Try Amica here on mobile, tablet or desktop](https://amica.arbius.ai)
> **For Windows Users**: Please create a new folder for Amica during installation to prevent the unintentional deletion of other files during uninstallation.
<p align="center"><a href="https://github.com/flukexp/llama-piper-go/releases/download/v1.0.0/llama-piper-window.exe"><img src="https://img.shields.io/badge/Download%20for%20Windows%20-green?style=for-the-badge&logo=windows" /></a>
We just released Amica 1.2 with lots of new features. [Docs](https://docs.heyamica.com/) will be further updated soon, **watch the video to learn about what Amica 1.2 offers:**
[![Video Title](https://img.youtube.com/vi/3zCN2IlxHrU/0.jpg)](https://www.youtube.com/watch?v=3zCN2IlxHrU)
You can import VRM files, adjust the voice to fit the character, and generate response text that includes emotional expressions.
</p>
The various features of Amica mainly use and support the following technologies:
> To see tutorials on configuring any of these with Amica please visit the [official Amica documentation](https://docs.heyamica.com/).
- 3D Rendering
- [three.js](https://threejs.org/)
- Displaying 3D characters
- [@pixiv/three-vrm](https://github.com/pixiv/three-vrm)
- Running Transformers in the browser
- [Transformers.js](https://huggingface.co/docs/transformers.js/index)
- Speech recognition
- [Whisper](https://openai.com/research/whisper)
- Voice Activity Detection
- [Silero VAD](https://github.com/ricky0123/vad/)
- ChatBot
- [Llama.cpp server](https://github.com/ggerganov/llama.cpp)
- [ChatGPT API](https://platform.openai.com/docs/api-reference/chat) (compatible with projects such as [LM Studio](https://lmstudio.ai/))
- [Window.ai](https://windowai.io/)
- [Ollama](https://ollama.ai)
- [KoboldCpp](https://github.com/LostRuins/koboldcpp)
- [Oobabooga](https://github.com/oobabooga/text-generation-webui/wiki)
- [OpenRouter](https://openrouter.ai/) (access to multiple AI models)
- Text-to-Speech
- [Eleven Labs API](https://elevenlabs.io/)
- [Speech T5](https://huggingface.co/microsoft/speecht5_tts)
- [OpenAI](https://platform.openai.com/docs/guides/text-to-speech)
- [Coqui (Local)](https://github.com/coqui-ai)
- [RVC](https://github.com/SocAIty/Retrieval-based-Voice-Conversion-FastAPI)
- [AllTalkTTS](https://github.com/erew123/alltalk_tts)
- Vision
- [Bakllava](https://github.com/SkunkworksAI/BakLLaVA)
## š ļø Installation and running
To run this project locally, clone or download the repository.
```bash
git clone
[email protected]:semperai/amica.git
```
Install the required packages.
```bash
npm install
```
After installing the packages, start the development web server using the following command:
```bash
npm run dev
```
Once started, please visit the following URL to confirm that it is working properly.
[http://localhost:3000](http://localhost:3000)
### š Configuration
Most of the configuration is done in the `.env.local` file. Reference the `config.ts` file for the available options.
#### OpenRouter Configuration
To use OpenRouter as a chat backend, set the following environment variables in your `.env.local` file:
- `NEXT_PUBLIC_OPENROUTER_APIKEY`: Your OpenRouter API key (required)
- `NEXT_PUBLIC_OPENROUTER_URL`: Custom OpenRouter API URL (optional, defaults to https://openrouter.ai/api/v1)
- `NEXT_PUBLIC_OPENROUTER_MODEL`: Default OpenRouter model (optional, defaults to openai/gpt-3.5-turbo)
```bash
amica
āāā .env.local
āāā src
ā āāā utils
ā ā āāā config.ts
```
### š¦ Desktop Application
Amica uses [Tauri](https://tauri.app/) to build the desktop application.
To develop the desktop application, use the following command:
```bash
npm run tauri dev
```
## š Documentation
View the [documentation](https://docs.heyamica.com) for more information on how to configure and use Amica.
## š History
This project originated as a fork of ChatVRM by Pixiv:
[https://pixiv.github.io/ChatVRM](https://pixiv.github.io/ChatVRM)
## š License
* The majority of this project is released under the MIT license as found in the [LICENSE](https://github.com/semperai/amica/blob/master/LICENSE) file.
* Assets such as 3D models and images are released under their authors respective licenses.
## āØ Star History
[![Star History](https://api.star-history.com/svg?repos=semperai/amica&type=Date)](https://star-history.com/#semperai/amica&Date)
## š¤ Contributors
<a href="https://github.com/semperai/amica/graphs/contributors">
<img src="https://contrib.rocks/image?repo=semperai/amica" />
</a>
", Assign "at most 3 tags" to the expected json: {"id":"8245","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"