ZcChat: a desktop pet that talks to an LLM and acts like a visual novel character
一个模仿Galgame效果的AI桌宠 | An AI desktop pet that mimics the effects of a Galgame
At a glance
- What is it?
- ZcChat is a C++ and Qt desktop pet that renders its character as Galgame style artwork with expressions and motions, keeps long-term memory through Letta, and speaks with optional text to speech and speech recognition services. Its own README says the project has been remade and points to a successor repository.
- Who is it for?
- Adopt ZcChat if you want a local desktop companion that renders a character with real expressions rather than a Live2D rig, and you are prepared to run a local Letta instance plus optional speech services on your own machine. Do not adopt it expecting a supported project, because the repository states it has been remade and directs users to a new one, and the newest release is titled as the final version.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Activity is slowing. The repository last received commits 6 months ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What it is, and the notice that this repository is finished
ZcChat is described as an AI desktop pet that mimics the effects of a Galgame, and the project summary calls it a desktop pet with long-term memory, expression and motion artwork display, the ability to control the computer, and voice, better suited to Galgame characters.
The first thing in the README is an important notice, and it comes in both Chinese and English. The project has been remade, and readers are asked to go to the new repository at github.com/Zao-chen/ZcChat2. The releases agree with that notice. The newest tag is v6.0.0 with the title saying it is the final version, dated 2026-02-09, and the previous ones are v5.3.0 for format enhancement and particle effects and v5.2.0-beta for a mood particle feature.
So the practical reading is that this repository is the previous generation of the project and ZcChat2 is where development continues. The last push here was on 2026-04-03, and the project is GPL-3.0 licensed, written in C++, with a Chinese and an English README side by side.
The design choice that defines the whole thing is stated in the frequently asked questions. When asked why Live2D is not used, the answer is that the distinctive feature of the project is the Galgame style artwork approach, which gives characters more expression and motion variation and lowers the cost of making a character. If you are looking for a Live2D desktop pet, the answer points to LogChat instead.
That is a considered trade rather than a limitation. Live2D is a rigging format with a specific art pipeline, and the alternative here is a set of static images swapped according to the character's state, which is cheaper to author and easier to distribute.
The four features, and the memory system underneath
The feature list is short and each entry names a specific external dependency or technique.
Long-term memory is implemented with Letta, and the project extends it to develop personality and individual traits. The README calls Letta an AI agent that can provide long-term memory and learning, and it is treated as a first-class part of the setup rather than an optional extra. Letta is described elsewhere in the links as a framework for creating LLM services with memory, formerly MemGPT.
Expressions and motions use the Galgame artwork approach rather than Live2D, which is what allows more actions and expressions for a character, and the artwork animation is a Galgame style performance that raises the visual quality of the result.
Voice interaction covers voice input, direct conversation, wake-up and reply interruption, so the pet can be spoken to and can be cut off mid-sentence. Speech synthesis supports several tools including Vits, and the point made is that the voice sounds more realistic.
The technical overview in the README is a single diagram showing how the pieces fit together, hosted as an image in the repository assets, with a Chinese caption saying you can understand the working principle at a glance.
The codebase layout matches a Qt desktop application. At the top level there is main.cpp and mainwindow.cpp with its .ui file and a mianwindow_uichild/ directory, galgamedialog.cpp and its .ui file, tachie.cpp and its .ui file, which is the artwork renderer, a CMakeLists.txt, res.qrc for resources, a translations/ directory for the localisation, a third_party/ directory, lib/ and include/ for shared code, img/ for the images, and utils/.
The two dialog classes, galgamedialog and the main window, plus tachie, are the visible shape of the application. Tachie is the term for the character art itself, and having it as a first class class with its own UI file and its own directory is a good indicator that the artwork is the core of the experience rather than an afterthought.
The setup: characters, model endpoint, and the format prompt
The quick start is a three step path, and the order matters because each step depends on the one before.
First, download and install from the releases page, with a warning to avoid paths containing Chinese characters because that can cause problems. There is also a note that if you see a file creation error, check whether antivirus software blocked it and try running the installer with administrator rights.
Second, configure the character. You unzip the character data into a characters folder under the ZcChat directory in your documents, with the expected final structure being a folder per character containing a normal image and the rest of the states. Characters can be found ready made in the discussions area, or you can make your own. You then select the character in the general settings, under character selection. A tip in the README says you can right click the artwork to open and close the dialogue box, and scroll in the dialogue box to open and close the history.
Third, configure the language model, and there are two routes.
The OpenAI-compatible route asks you to fill in a BaseUrl and a key in the AI model configuration. The BaseUrl should look like https://api.openai.com/v1/completions. Then in the character settings you pick OpenAI and fill in the character prompt, and the README notes that some prompts may already be built into the character data so no extra configuration is needed.
Then there is the format prompt, which is the part worth understanding. The default format prompt makes the character fluent in Chinese and Japanese and require a bilingual reply regardless of the language used, and it requires the character to prefix each sentence with its mood and action, where the mood must be chosen from a fixed list, and to answer in the form mood, Chinese, Japanese. The output format enhancement option in the wiki is linked from this step, and the frequently asked questions explain that a format error after a short conversation usually means the model forgot the format or was misled, and that you should improve the prompt or use a commanding tone, and that the result depends on the model you are using.
That design explains the rest of the system. Because the mood and action are parsed out of the reply as structured tokens, the artwork and the speech can be driven by the same response.
Letta, voice synthesis and speech recognition as local services
The optional pieces are all local services with fixed default addresses, and the setup steps are short because they are the same for every configuration.
The Letta route is the second way to configure the model. You install and start Letta, create an agent and fill in the character prompt plus the format prompt under the agent persona in the Letta agent development environment, then put the Letta address into the AI model configuration, where the default address is http://localhost:8283. You then select Letta in the interface settings and fill in the agent ID.
Voice synthesis has two options as well. The first is vits-simple-api, which you install and start, with its URL going into the speech synthesis settings, and the default address being http://localhost:23456. The second is a custom mode where you supply an API address, make sure the output is an mp3 file, and use {msg} as the text placeholder, for example:
http://127.0.0.1:23456/voice/vits?id=0&text={msg}&format=mp3Speech input works the same way. The first option is whisper-asr-webservice, installed and started, with the URL going into the speech input settings, defaulting to http://localhost:9000. The second is Baidu speech recognition, where you create a short speech recognition application in the Baidu intelligent cloud console and put the API key and secret key into the speech input settings.
Voice wake-up and interruption come last and depend on the speech input being configured. You look at the speech energy value setting and compare the energy when you are not speaking with the energy when you are, then pick a threshold that suits you. The README is honest about the limits here, noting that the voice activity detection algorithm is fairly simple, so wake-up and interruption are sensitive to the environment and need careful configuration.
The pure local option is answered in the frequently asked questions: Letta supports fully local deployment, and you can also use tools such as Ollama through the OpenAI compatible interface.
The computer control option, the project layout and how to contribute
The desktop control feature is deliberately minimal in terms of implementation. You append the prompt from the computer control wiki page to your character prompt, and that is the whole integration. The character then has a documented way to act on the machine.
Making your own character is documented separately, with a character creation wiki page, and characters can also be shared in the discussions area.
The top level listing shows a project with a Qt C++ core and a fair amount of supporting structure: the .github directory, CMakeLists.txt, LICENSE, both READMEs, the dialog directory, the galgamedialog and mainwindow and tachie source and UI files, img/, include/, lib/, a logo icon and resource script, res.qrc, third_party/, translations/, and utils/.
The translations directory matters more than it sounds for a project with a Chinese and an English README and a Chinese-speaking user base, since the application itself is localised, and Qt translation files are the mechanism for that.
The contribution section is friendly and specific. Pull requests are welcome, with the author adding a self-deprecating note in parentheses about whether you can read the code. Bugs and feature requests go through issues, character templates are shared in discussions, and there is a light ask at the end for a star.
The related links section names the pieces the project builds on, and it is a useful summary of the dependency graph: LogChat as another open source AI chat client, Letta for memory, vits-simple-api as a simple VITS HTTP API, whisper-asr-webservice for OpenAI Whisper speech recognition, ElaWidgetTools for Qt widgets, and nlohmann/json for JSON in modern C++.
Editorial conclusion
Adopt ZcChat if you want a local desktop companion that renders a character with real expressions rather than a Live2D rig, and you are prepared to run a local Letta instance plus optional speech services on your own machine. Do not adopt it expecting a supported project, because the repository states it has been remade and directs users to a new one, and the newest release is titled as the final version. Before you start, decide whether you want the OpenAI-compatible interface or Letta, and if you want speech, install the TTS and ASR services first, since the pet expects them running on fixed local ports.
Frequently asked questions
Is ZcChat still maintained?
Not in this repository. The README states that the project has been remade and directs users to the new repository at github.com/Zao-chen/ZcChat2, and the newest release v6.0.0 is titled as the final version, dated 2026-02-09.
How does ZcChat render the character?
With Galgame style artwork rather than Live2D, which the project presents as its distinctive feature. The stated benefit is more expression and motion variation for a character, and a lower cost of making one, and the code has a dedicated tachie module for it.
What does ZcChat use for long-term memory?
Letta, which the README describes as an AI agent that can provide long-term memory and learning, and the project extends it to develop personality and traits. You install and start Letta locally, create an agent with the character and format prompts in its persona, and point ZcChat at its address, which defaults to http://localhost:8283.
Which speech services does ZcChat support?
For synthesis, vits-simple-api on its default address of http://localhost:23456, or a custom HTTP address returning an mp3 with a {msg} placeholder. For recognition, whisper-asr-webservice on its default address of http://localhost:9000, or Baidu speech recognition with an API key and secret key.
How do I give the ZcChat desktop pet the ability to control the computer?
Append the prompt from the computer control wiki page to your character prompt, and the character gains a documented way to act on the machine. Wake-up and interruption depend on speech input being configured first, and the README notes the voice activity detection is simple and sensitive to the environment.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/zao-chen-zcchat)Was this useful?