A free tool for everyone — by choice, not by accident.
This app was created as a voluntary passion project with one goal: to give everyone access to a private, uncensored, and independent AI companion experience — completely free of charge, forever. No subscriptions, no accounts, no data collection. Everything runs locally in your browser, so your conversations truly belong to you.
It is offered in this spirit and must stay that way. You're welcome to use it, adapt it for your own private needs, and share the original with others. All that's asked is that you don't redistribute modified versions publicly or use it commercially — so that everyone can always benefit from it equally.
0 / 0
Send Feedback
Found a bug or have an idea? Let me know!
This form is anonymous by default — no personal data is collected unless you choose to provide it.
Want a reply? Leave your email address below. This is the only way I can get back to you — there is no other contact channel.
Thanks! Your feedback has been sent successfully.
1. Introduction & Core Concept
What is this App?
Welcome! This is a fully functional application designed for creating, managing, and interacting with your own detailed AI characters. The core feature is the ability to engage in dynamic, text-based role-playing chats with any characters you want. The app has been developed from scratch with the aim of being easier, more intuitive, and faster to use than other platforms.
Who am I?
Hi, my name is Michael and I'm just an Austrian guy in his 30s who enjoys these AI character roleplays himself a lot. Although there are many good character chat platforms, there were always things that bothered me. Either they lacked certain features, weren't user-friendly enough, didn't have the best AI models, or required payment. So I decided to simply program my own platform with all the features I wanted. Then I thought, why not just make it freely accessible to everyone? And so, a new AI character chat application was born, freely accessible to everyone while keeping your data 100% private. Have fun with it! :)
I'm still developing and improving this app and try to implement even more and better features, while keeping it super simple to use for anyone. So, stay tuned for more cool Updates!
How Does It Work?
The app is a local-first web application that runs directly in your browser — no installation, account, or cloud storage required. You simply open the index.html file in your browser (or use a Live Server for the best experience). Requests to the standard OpenRouter API are sent directly from your browser to OpenRouter with the API key saved in App Settings. Requests to other remote providers may be relayed through the app's backend proxy to avoid browser CORS restrictions; local-provider requests remain direct.
A Note on Your Data & Privacy
Your privacy is paramount. All of your data—including every character you create, all your chat histories, images, and your personal settings—is stored directly on your computer inside your browser's secure IndexedDB database.
This technology allows for large amounts of data to be stored privately and offline.
This means your data remains entirely on your device and is preserved even after you close the browser tab.
Your persistent browser database is not uploaded to the developer. Only the context needed for an AI request leaves your device, using the direct or proxied route described above.
2. The Main Screen: Character Selection
This is the first screen you see when you open the app. From here, you can access all of your characters and core features.
The Top Bar (Header)
The header provides access to the app's main functions:
🤖 + Create Character: Click this to open the Character Editor and start building a new AI character from scratch.
🎭 Manage Personas: This opens a panel where you can create and manage your different user profiles, or "Personas". A Persona defines who you are in a chat.
⚙️ Global App Settings: Here you have to enter your personal (global) API key at the top of the section. It is recommended to use an OpenRouter API as your provider, but you can also enter API keys from other providers for specific models and manage the list of available AI models here. As long as you enter the correct provider URL and provider-specific model-ID, any provider will work.
⬆️ Import / ⬇️ Export: These buttons allow you to save your entire collection of characters and personas into a single .json file for backup. All AI models and global model prompts are included in the backup. You can use the Import button to load all your data back into the app on any computer. ALSO: You can import any Character Cards from other online platforms, both PNG and JSON - try it!
❓Help & FAQ: This button brings you to the help and FAQ page you are currently reading.
🔒 Privacy & Terms: Opens the Privacy Policy and Terms of Use for the app.
⭐ The Favorites Bar
This bar gives you quick access to your most-used and favourite characters. To add a character to this bar, simply hover over their card in the main list below and click the star icon (★) in the top-right corner.
🔎 The Search Bars
To help you find specific characters quickly, the app features two separate search bars:
Search Name: Filters the character list in real-time as you type a character's name.
Search Tag: Filters the list based on the tags you've assigned to your characters in the editor.
The Character List & Character Cards
This is the main area where all of your non-archived characters are displayed as individual cards, automatically sorted in alphabetical order. Clicking a card takes you to that character's chat dashboard. When you hover over a card, two buttons appear:
Favorite Button (★): Located in the top-right. Click it to add or remove the character from your Favorites Bar. A yellow star indicates the character is a favorite.
Archive Button (↓/↑): Located in the bottom-left. Click the down-arrow (↓) to move the character to the archive. On an archived character, this button will be an up-arrow (↑) to move them back to the main list.
🗂️ Categories
Categories sort your characters into separate grids on the main menu. Click the 🗂️ Categories button to the left of 🎲 Random Chat to manage them:
+ New Category: Creates a category and takes you straight to choosing its characters.
Characters: Opens the list of your characters. Tick a character to add it to the category, untick it to remove it, then click Confirm to save (Cancel discards your changes). A character can only be in one category at a time, so ticking a character that is already in another category moves it.
Rename / Delete: Renames or removes the category. Deleting a category never deletes its characters.
Each category that contains characters gets its own headed grid, in alphabetical order, and characters without a category follow under "Uncategorized". Categories are included in your exported backup.
🗑️ The Bulk Delete Button
Here you can select and delete multiple characters or even all characters with a single click if you want.
🗃️ The Archive
If your character list gets too crowded or you simply want to hide a character, you can move characters to the archive to keep your main screen clean. This section appears at the bottom of the screen once you have at least one archived character. Click the "Show" / "Hide" button to expand or collapse the list of archived characters.
3. The Chat Dashboard: Your Conversation Hub
After clicking on a character card from the main screen, you'll land on their personal dashboard. This is the central hub for all your conversations with that specific character.
The Top Bar
← Back to Main Menu: This will take you back to the main character selection screen.
Delete Character: This button will permanently delete the current character and all of their saved chats. A confirmation window will appear to prevent accidental deletion.
The Character Header
This central element displays the character's avatar and name, along with two important management functions:
Edit Character: A convenient shortcut that opens the Character Editor for the character you are currently viewing.
Copy Character: Creates an exact duplicate of the current character, including all their settings, descriptions, and scenarios. The chat history will not be copied. This is useful for creating variations of a character or for starting a new story branch with the same base character.
The Chat List (Saved Chats)
This section shows all the separate chat sessions you have saved with this character. Each character can have dozens of independent conversations.
+ Start new Chat: Click this to begin a brand-new conversation. A window pops up with two tabs: 📜 Scenarios lists the scenarios of this character, and 🎲 Games lists ready-made games to play with the character (see Games below). You can also simply start an empty chat.
Chat Entries: Each chat you've had is listed here. Next to each entry, you have two options:
Copy: Copies the whole chat to your clipboard. See Copying and Pasting a Whole Chat below.
Rename: Allows you to change the name of that specific chat session to keep things organized.
Delete: Deletes only that single chat session.
Copying and Pasting a Whole Chat:Copy next to a chat (or 📋 Copy Chat in a chat's ⋯ menu) puts the entire chat on your clipboard as readable text — a short header, then one Name: message block per message — which you can paste into a messenger, an e-mail or a document. To bring a chat back into the app:
📋 Paste Chat (below + Start new Chat), or Ctrl+V anywhere on the chat list, adds it as a new chat with "(pasted)" in its name and opens it. Inside a chat group, it lands in that group.
Pasting it into the message box of an empty chat (one you have not written in yet) asks whether to load it as this chat's history or to paste it as plain text.
When you paste straight from the app, everything comes along: all response variations, Chat Memories, bookmarks, hidden messages, mood and pictures (very large chats leave the pictures out). If the text went through another app first, only the text is read back: each message keeps the speaker named in front of it, so don't change the header or the names at the start of the messages. Names are matched to your characters and personas; anyone the app does not know becomes the chat's own character. If the app is not allowed to read your clipboard, a box opens for you to paste into.
4. The Character Editor
This is where you bring your characters to life. You can access the editor by clicking the 🤖 + Create Character button on the main screen or the Edit Character button on a character's chat dashboard. Any changes you make in this character editor will take effect immediately for the character, without having to refresh the site (even during chats).
The Editor Header
Estimated Tokens Counter: In the top-right corner, a counter gives you a live estimate of the "tokens" your character definition uses. Tokens are pieces of words that the AI processes. A higher token count means a more detailed character but also a larger context for the AI to handle in every message, which can affect API costs and response times.
✨ AI Generate Character / AI Generate World: A button at the top of the editor that lets you generate a complete card using AI. Click it and a large text box opens where you can describe the concept in as much detail as you like (e.g., "a stern samurai from feudal Japan" or "Rem from Re:Zero — include personality, appearance, speech style…"). Then choose which of your saved AI models should do the generation. The AI will research known characters from series, games, or manga if applicable, and fill in all fields — name, description, lore, tags, and instructions — for you automatically. If the AI provider is unavailable or returns an error, a clear message will tell you what went wrong. Note: If you are editing an existing character or world, the generator will overwrite their current data. A warning is shown before the AI runs. When the card type is set to World, this button becomes ✨ AI Generate World — describe the world concept and the AI will fill in its name, description, and lore.
Card Type: Character vs. World
At the top of the editor you can choose between two card types using the Character and World toggle buttons.
A Character card is the default — a single AI persona with a profile picture, personality description, and all the standard fields.
A World card is a special card type that acts as a shared stage for multiple characters. It uses a background image instead of a profile picture, and shows a character picker below where you can assign any of your existing characters to the world. When you start a chat from a World card, all assigned characters join automatically as participants, and the World itself acts as the narrator and story manager. This is perfect for rich, pre-assembled ensemble scenarios with a persistent cast.
World cards display a "World" badge on their card on the main screen, as well as a count of how many characters are assigned to them. The background image you set on a World card is used as the card image and the chat background.
The Input Fields in Detail
Card Name: The full, official name displayed on the character's card on the main screen (e.g., "Natsuki Subaru - Re:Zero"). Use this to include the series title or any other identifier to help you tell characters apart at a glance.
In-Chat Name: The shorter name used as the character's actual name in dialogue and in the AI's context (e.g., "Subaru"). This is what the AI treats as {{char}} and what appears in the chat interface. This field only appears for Character cards. World cards don't have an in-chat name — the World itself narrates anonymously as an omniscient narrator, so it's never given a character-like name the AI could mistake for its own identity.
Character Avatar URL: A direct link to an image for your character's profile picture (e.g., a .png, .jpg). You can also upload a local image from your computer by clicking the folder icon (📁) next to the input field.
Background Image URL: A direct link to an image that will be used as the background for the character's dashboard and chat screen. You can also upload a local file by clicking the folder icon (📁). This allows you to set a specific mood or environment for ideal immersion.
Character Description: The most crucial field. Describe your character's identity, personality, physical appearance, abilities, speech style, and even provide dialogue examples. The more detail you provide here, the better the AI will portray your character.
Note: An ideal amount of words here is often between 500 and 1000 words. This way, your character will be very detailed without causing memory/context problems for the AI. But it's also still alright if you have a little more, e.g., 1200 words. For anything beyond that, you can simply use the lorebook below.
Lorebook: Use this field for deeper background information, world-building details, important relationships, trivia, or any facts the AI should know but that aren't part of the core personality. This helps the AI maintain consistency without cluttering the main description. Above the field you choose how that lore reaches the AI. (On a World card the same field is labelled World Lore and works identically.)
Always-on: The default. Everything you write in the box is sent to the AI with every single message. Simple and predictable - the right choice while your lore is still short. You can keep several lorebooks side by side: click + Add Lorebook, give each one a name if you like, and untick Active on any you want to keep without sending it. Only the active ones reach the AI, in the order shown - drag a lorebook by its handle to move it.
Keyword-triggered: Splits your lore into separate entries, each with its own trigger keywords. An entry is only sent to the AI when one of its keywords appears in the recent conversation. This lets you keep a large amount of lore that costs almost no context until it actually becomes relevant. Click + Add Lore Entry, write comma-separated keywords in the upper field (e.g. sword, blade, weapon), and the facts themselves in the box below. To change the order, drag an entry by the handle on its left and drop it where you want it.
How a trigger fires: the app scans the last few messages plus the one you are about to send. If a keyword appears anywhere in that text, its entry is added to that one request only. Keywords ignore upper- and lowercase, and an entry can carry as many as you like - so list every word that should pull it in. An entry with no keywords at all can never fire.
The two modes keep their content separately, so switching the toggle never deletes anything - but only the lore belonging to the selected mode is sent to the AI.
Imported character cards: if a card brings its own lorebook, its entries and their trigger keywords are imported along with it. When most of those entries came with keywords, the card is set to Keyword-triggered automatically - this is what stops cards carrying 150+ entries from flooding the AI's context. In that case the Always-on box is deliberately left empty, because the entire lorebook now lives in the entries. A card that stays Always-on and brings several lorebooks keeps them as separate lorebooks, each with its own Active switch.
Tags: Add keywords here to help you organize and find your characters later (e.g., "anime", "fantasy", "villain"). Type a tag and press Enter to add it as a bubble, or click into the field to open a searchable list of all tags you have used before and pick from it. Click the × on a bubble to remove a tag. You can search for these tags on the main screen.
AI Instructions: Give the AI general commands or system-level prompts that apply to the character (e.g. "Write short and creative sentences," or "Always respond in a formal tone").
Character Reminder & Narrator Reminder: These are powerful fields for short, critical instructions that get attached to every single message you send to the AI, ensuring it doesn't forget key details.
Use the Character Reminder for prompts related to direct dialogue. (e.g. "Reply only as {{char}} now," or "Refer to {{user}} as Mike-sama")
Use the Narrator Reminder for prompts when you use the 📖 Narrator button. (e.g. "Reply only as an omniscient narrator now," or "Describe what happens in the current scene")
You can use the dynamic placeholder {{char}} in these fields, and it will be automatically replaced with the character's name in the prompt. This allows you for example to copy your instructions to multiple characters without having to enter the individual character names each time.
Music / Ambience Playlist: One or more links, one per line — YouTube videos or direct links to audio files (e.g., an .mp3). They play automatically as background music whenever you open a chat with this character or world, one after another, and the playlist starts over when it ends. A single link simply loops. The playlist is saved with the character; you can change it for yourself at any time from the 🎵 Background Music player in the chat. Leave this field empty for no background music.
What are "Global Model Prompts"?
Global Model Prompts are standard instructions and reminders that you can set directly for a specific AI model.
Why is this useful?
Imagine you're using an AI model that always requires a specific base instruction for the right role-playing style or a special format. Instead of entering this instruction for every single character, you simply define it once globally for the model.
Saves Time: You don't have to duplicate recurring instructions for every character.
Consistency: Ensures that a model always operates with the same important ground rules.
Flexibility: Ideal for models that require special system prompts for optimal results.
Where can I find this setting?
You can find this setting in the "App Settings" window (the gear icon ⚙️ in the main menu). For each of your listed AI models, there is a collapsible section called "Global Prompts". Simply click on it to open the three text fields for AI Instructions, Character Reminder, and Narrator Reminder and enter your global instructions. Don't forget to click "Save Settings" at the end.
How do they work with character prompts?
Important to know: If you have entered both a global prompt for the model and a specific prompt for the character, both will be used. The app combines them intelligently:
The global prompt from the model is always placed before the character-specific prompt. This means the AI first receives the general instruction and then the specific one, which usually leads to the best results.
Model Parameters: Context Length & Top-P
Each model entry in the "App Settings" window also has two optional numeric fields for advanced parameters. These are found directly in the model's input row (outside the "Global Prompts" collapsible section).
Context Length (Ollama num_ctx): This field sets the maximum number of tokens (words / word-fragments) that the AI is allowed to hold in its "memory window" for a single conversation. It only affects local models running via Ollama — cloud providers manage context size on their end and ignore this value.
If left blank, the app defaults to 131072 tokens (~100 000 words), which is large enough for most long chats.
Lower values (e.g., 8192) use significantly less RAM. Raise the value only if your machine has enough VRAM/RAM and your model supports it.
Setting this higher than the model's maximum has no effect — the model silently clamps it.
Top-P (nucleus sampling): This is a secondary randomness control that works alongside Temperature. It limits token selection to the smallest group of likely words that together cover P% of the probability mass. A value of 0.9 means only the top 90% most-probable words are candidates for the next token.
Recommended: leave this field empty. When blank, the field is not sent to the API at all, so the model uses its own built-in default — which is already tuned by the model maker.
Only fill it in if a specific model produces incoherent or overly repetitive text despite a good Temperature setting. A value of 0.9 is a safe starting point.
Avoid setting both Temperature and Top-P to non-default values at the same time — combining them can produce unpredictable results and make it hard to tell which parameter is responsible for a change in quality.
Dynamic Scenario Management
Scenarios are pre-written starting points for a chat. This is perfect for setting up a specific scene or situation. Each scenario is a Title (for your own reference) and two text fields.
Greeting: the opening message of the chat - the first scene, and your character's first words. It is sent once, and then scrolls out of the AI's attention as the chat grows. That is why anything written here as "and later they discover the betrayal" gets played in the very next reply, however firmly you asked the AI to wait.
Chat Memories: what this story has to keep in mind, including what is still to come. This one is sent with every message, so it keeps working long after the greeting has scrolled away. It is also the right home for standing context - the situation, who wants what, what is at stake - and for what people used to put in an OOC note at the top of a scenario.
Both are optional. If there is nothing the AI needs reminding of, write everything into the Greeting and leave the Chat Memories empty - nothing changes from how scenarios have always worked.
🧠 Chat Memories
There is nothing to tick, time or manage. Everything in this box is handed to the AI as high-priority notes with every message: key facts it keeps forgetting, standing constraints, who wants what from whom, and events you already know are coming.
It works best as short, separate lines rather than prose, and it helps to say plainly which lines have not happened yet. For example:
A coastal town in late autumn. You have come looking for work and know nobody.
Mira still believes the letter was burned.
Not yet: they share a meal and one of them lets something slip.
Not yet: a letter arrives that names the keeper.
Not yet: the lighthouse burns down.
These are notes, not a schedule - the AI sees the whole box at once, so it may steer toward something you marked as coming sooner than you expected. Removing a line once it has happened, or adding "not yet" to one it is rushing, is the quickest way to correct it.
A scenario's memories are a template. Starting a chat from it gives that chat its own copy in the chat's 🧠 Chat Memories panel, so you can rewrite one chat's memories mid-story without touching the scenario or any other chat started from it.
More on Scenarios
Optional (and largely replaced by the Chat Memories field above, which does this properly): At the beginning of the greeting, you can add an "Out-of-character note" for the AI with important meta information about the scenario. It has usually even higher priority for the AI than the character description. For example: If your character description says that the character is good, then you can simply write in an OOC-note that the chracter is evil in this scenario. You can add other OOC-notes also in your messages during the chat anytime, whenever you need to clarify things for the AI. A note could look like this for example:
### OOC: {{user}} is the equivalent of Natsuki Subaru and replaces him in this scenario. Emilia plays a cold and detached opponent of {{user}}. Elsa Granhiert plays a trustful and loyal ally of {{user}}.
---
Scenario: [Here comes your actual scenario description with a starting scene, including first message of your character if you want.]
Click the + Add Scenario button to add a new, empty scenario block.
Scenarios you already had are untouched by the split - their existing text is simply shown in the Greeting box, with an empty Chat Memories box underneath. The same is true for characters imported from a card or brought in through the Character Card Browser. A Story Line written in an earlier version is not lost either: it is simply shown as that scenario's memories now.
Click the ✨ Generate Scenario button to have an AI write an opening scene for you, straight into the Greeting box. You can optionally enter hints (genre, setting, relationship, etc.) or leave the field empty for a random scenario. The AI will always address you as "you" in second person for an immersive experience. If the AI provider fails, an informative error message is displayed.
Click the 🗑️ button next to a scenario to delete that scenario.
🎲 Games
The 🎲 Games tab in Scenario Selection holds ready-made game scenarios that work with every character: 20 Questions (both ways), Hangman, Higher or Lower, Rock Paper Scissors, Truth or Dare, Would You Rather, Two Truths and a Lie, Never Have I Ever, a Trivia Quiz, a Riddle Challenge, Emoji Charades, Word Chain and Story Builder.
Pick a game and the character opens it straight away in their own voice - explaining the rules and making the first move. You play by simply chatting; the character keeps track of turns and score.
The rules are placed in the chat's 🧠 Chat Memories, so the AI keeps following them for the whole game. You can change them there, for example to play best of seven or to change the quiz topic.
Where a game needs a secret or fair luck - the word in Hangman, the thing in 20 Questions, the number in Higher or Lower, the character's throws in Rock Paper Scissors - the app decides it in advance and writes it into the Chat Memories. That way the AI cannot quietly change it mid-game. Opening the Chat Memories shows the answer, so don't peek!
Want to stop? Just say so, and the character wraps up the game and goes back to normal roleplay. Other characters you add to the chat can join the game too.
5. The Chat: Interacting with the AI
This is where the magic happens. The chat screen is designed to be immersive and give you a high degree of control over the conversation and its appearance.
The Chat Header
The bar at the top of the chat screen provides context and quick access to important features.
Back Arrow (←): Takes you back to the character's chat dashboard.
Character & Name: Shows the character and the name of the current chat session.
Participant Icons: In a group chat, small, overlapping icons of all participating characters will appear next to the icon of the base chat character. To change who takes part, use the 👥 button.
Token Info (ℹ️): Hovering over this icon displays a tooltip with an estimate of the total tokens currently being used in the chat's context. This includes the character definitions, persona data, and the recent chat history. With OpenRouter models it also shows what this chat has cost so far, and what everything since you opened the app has cost (the "session").
Chat Memories (🧠): Opens a text field where you can write persistent, high-priority notes for this specific chat session. These notes are sent along with every AI request, making them ideal for key facts, ongoing story constraints, events still to come, or reminders the AI tends to forget over long conversations. A chat started from a scenario begins with that scenario's Chat Memories already in the box - its own copy, so rewriting it here changes nothing anywhere else. Inside this panel, there is also a ✨ Auto-summarize Chat button: click it to have an AI model read the current conversation and generate a concise summary, which is then automatically appended to your memory notes. A dialog lets you choose which of your saved models performs the summarization, pre-selected to the model currently in use for the chat.
Group Chat (👥): Opens a selection modal listing your characters with a tick box each. Tick the ones that should take part in the current conversation, untick the ones that should leave, and press Confirm - adding a second character turns the chat into a group chat.
Select Persona (🎭): This button allows you to select one of your saved personas to represent you in the chat. You can unselect your persona anytime by simply clicking the button again.
Settings (⚙️): Toggles the visibility of the settings panel, where you can customize the chat's appearance and AI behavior.
Mood (😊): Click this button to set a mood for the character in the current chat session. A picker opens with preset options — Happy, Sad, Angry, Excited, Nervous, Flirty, Tired, Curious, Scared, Bored — plus a "None / Clear" option to remove the mood. The chosen mood is injected into the AI's system context with every message, subtly shaping how the character speaks and reacts throughout the conversation. The button icon updates to the emoji of the currently active mood so you can see it at a glance.
Ambient Effects (✨): Opens the particle effects picker, where you can apply animated visual effects to the chat background. Available effects include: Snow, Rain, Sparks, Fireflies, Sakura, Fog, Steam, Aurora, Leaves, and Darkness. Three sliders tune it to your taste: Volume sets how many particles appear, Opacity how strongly they show, and Speed how fast they move (50 is each effect's normal look). The selected effect is saved directly on the character card and activates automatically every time you open a chat with that character. Choose "None" to turn effects off.
🪄 Automatic Atmosphere (in the same window, off by default): when switched on, the AI looks at the scene after each reply and picks a fitting effect and mood by itself — rain in a storm, fireflies on a summer night, darkness when things get tense. It uses one small extra request per reply with your Suggestions Model. Picking an effect by hand still works and applies at once; the next reply may change it again.
Background Music (🎵): Opens the music player for this chat. It shows the track that is playing with a timeline you can click or drag to jump anywhere in it, buttons for the previous and next track, play/pause and stop, a volume slider (click the speaker to mute), 🔀 Shuffle, and 🔁 Repeat, which switches between repeating the whole playlist, repeating the current track (🔂), and playing the playlist once. The button glows while music is playing.
Below the controls is the playlist: click a track to play it, use ↑ and ↓ to reorder it, and ✕ to remove it. To add tracks, paste a YouTube link or a direct audio link into the box at the bottom and press + Add or Enter; pasting several lines at once adds each as its own track. YouTube titles are looked up automatically. The playlist starts out as the one from the character editor; your changes are kept for that character in your browser's local storage and do not change the character's saved data. ↺ Use character's playlist appears once you have changed it and brings the character's own list back. Shuffle, repeat and volume are remembered for all chats.
More Tools (⋯): The first button in the row opens a small menu:
🔍 Search Chats: Opens the search bar. See Searching Your Chats below.
★ Bookmarks: Opens the search bar showing only your bookmarked messages. The number next to it is how many this chat has.
📊 Chat Stats: Messages and words (yours and the AI's), when the chat started, bookmarks, generated images, the cost so far, and your milestones.
📋 Copy Chat: Copies the whole chat to your clipboard. See Copying and Pasting a Whole Chat in the Chat List section.
▶️ Let Them Talk: Only appears in chats with at least two characters. See Letting the Characters Talk in the Group Chats section.
🎲 Roll Dice: Rolls a 20-sided dice right away. See Rolling Dice below.
🔃 Quick-Swap Character: Opens a searchable list of all your other characters and worlds. Clicking one instantly moves the entire current chat session — including its full message history — to that character or world, then opens the chat there immediately. This is useful when you want to re-assign an ongoing story to a different character without going back to the main screen and recreating the chat manually. It also works across card types: move a character chat into a World (the character stays in the scene as one of its cast, joined by the World's own characters), or move a World chat to a single character (the World's lines stay as narration).
⌨️ Keyboard Shortcuts: Lists every shortcut (computer only).
The Settings Panel
This panel gives you deep control over the look and feel of the chat and the AI's responses. All settings are saved locally and automatically applied to all chats.
Font Size: Adjusts the size of the text within the chat bubbles.
Message Spacing: Controls the vertical gap between messages.
Colour Pickers: You can set custom colors for the Main Text, spoken Dialog (text in quotes), and the chat bubbles for both the User and the AI.
Opacity Sliders: Controls the transparency of the User and AI chat bubbles independently.
Blur Filter: Applies a "frosted glass" blur effect to the chat bubbles, making them more or less translucent.
Character Avatar Size: Changes the size of the Character's avatar displayed next to their messages.
AI Model: A dropdown menu to select the specific AI model you want to use for the chat responses. The models under On this device are free and private: they run inside your browser, with no API key, and nothing you write leaves your device. The first reply downloads the model once (0.8–2.5 GB; 📱 suits phones too, 🖥️ needs a computer) and a ✓ marks the ones you have; App Settings lists them for deleting. They are far smaller than online models, so expect simpler replies. Chrome runs them fastest. They need the online app; a copy opened from a file cannot run them.
Temperature (AI Creativity): This slider controls the randomness of the AI. Unlike other settings, Temperature is respected by almost all models (including free ones) and is the most important tool for changing the AI's "feel."
0.1 - 0.6: Focused, predictable, and coherent. Good for sticking strictly to facts or character traits.
0.7 (Default): A balanced default. Creative enough for natural conversation while staying coherent.
0.8 - 1.0: More creative and varied. The AI will take more risks and follow instructions more loosely. Values above 1.0 often result in only gibberish being received and even get rejected by a lot of models.
Sound Effects: Soft sounds for moments in the chat: a reply arriving, sending a message, a natural 20, milestones, bookmarks, saved memories, new branches, character swaps, errors and deleted messages. The switch turns them all off. Under Choose sounds you can turn single ones off, and ▶ plays each one.
Image Generation: A toggle that shows or hides the 🎨 button on AI messages. Turning it off hides the button everywhere immediately, including on messages already on screen; it never deletes pictures you have already generated.
Image Source: Chooses who draws the picture.
Free (no API key): The default. A public service that costs nothing, has no limit, and needs no account whatsoever. In exchange it queues requests when it is busy, so a picture can take anywhere from about a second to a minute, and the quality is basic. Only a short link is saved with your chat, so these pictures take up almost no storage — but they are re-fetched from that service each time, and will stop appearing if it ever goes offline. If the service fails to deliver a picture, the app automatically tries a free backup, AI Horde, a community service where volunteers generate images on their own computers. The placeholder then says so and shows your place in its queue. The backup is slower (often one to a few minutes) and draws smaller pictures (512×512), and because it leaves no link behind, its pictures are saved in your browser like OpenRouter ones and count toward the 6-per-chat limit.
Free anime models (AI Horde): Illustrious XL, NoobAI XL, Pony XL and Anima Turbo, drawn at 1024×1024 by AI Horde volunteers. Free and without a key, but you wait in a queue, often a few minutes (Anima Turbo has the fewest volunteers). To wait less, register for free at aihorde.net/register and paste the key into App Settings → AI Horde Key: requests with a key are served before everyone waiting without one. The queue position counts every request on AI Horde, also those for other models, so it can jump forward quickly when a volunteer for your model frees up. The app waits up to 20 minutes, the longest AI Horde keeps a request. These pictures are saved in your browser and count toward the 6-per-chat limit.
OpenRouter (uses your key): Uses the API key you already entered in App Settings. Much faster and far better looking, from about $0.01 to $0.13 per image depending on the model. It also keeps your character's look: in the prompt box, pick the character's avatar (the default) or background picture under Keep look from, and the model redraws that character in the new scene instead of guessing from text. Pick None for a picture from the prompt alone. These pictures are stored inside your browser, so they keep working offline, and are limited to 6 per chat to protect your browser's storage.
Image Model: Only shown when Image Source is set to OpenRouter. Pick a model from the list, which shows its rough price per picture, or choose Other model… to type any OpenRouter image model ID. Be aware that the paid image models apply strict content filters and will refuse sensitive or adult prompts; when that happens the app tells you it was the filter, and quotes the provider's own reason instead of showing a raw error. The free source applies different content rules.
Reasoning Effort: Controls how much supported OpenRouter models reason before replying. Use Minimal or Low for faster roleplay responses. Off disables reasoning only on models that support it, while Auto keeps the model/provider default. OpenRouter may map a selected level to the nearest level supported by the chosen model. Reasoning traces returned by a model are shown automatically in a collapsible thoughts box.
Reply Length: Sets an approximate target for each chat reply: Short 40-80 words, Medium 90-160, Long 170-280, and Very Long 300-500. With OpenRouter, the app also sends the closest supported native verbosity level; all providers receive the explicit target in the system prompt. The exact result can still vary by model, and Default leaves length entirely to the model and your character prompts.
Reply Suggestions: A toggle that enables or disables AI-generated reply suggestions. When active, two short dialogue options appear above the input field after each AI response, giving you quick ideas for what your character could say next. While the suggestions are being generated, animated loading indicators appear in the suggestion fields — and if something goes wrong (e.g. the AI provider is unreachable), a short error message is shown there instead. If neither suggestion appeals to you, click the ⟳ button next to the "Reply Suggestions" label to generate a fresh pair — the discarded ones are named in the request, so the new pair takes different directions. The same button also retries a round that failed. Suggestions are also refreshed after you delete messages or switch a message to another variant, whenever the chat then ends on an AI message.
Suggestions Model: A dropdown that appears below the Reply Suggestions toggle. It lets you choose a dedicated AI model just for generating reply suggestions — independently from the model you use for chatting. Tip: Set a free or low-cost model here so that suggestions don't consume API quota from your main (paid) chat model. Leave it on "(same as chat model)" if you don't need to separate them.
Text-to-Speech (TTS): A toggle that enables your browser's built-in text-to-speech for AI responses. When active, each new AI message is automatically read aloud once it finishes generating. A Voice dropdown appears directly below the toggle, listing the English and Japanese voices installed on your operating system, plus those for the language spoken where you are — choose whichever sounds best to you. TTS runs entirely through the Web Speech API built into your browser; no external service or API key is required. Note: voice availability varies by browser and operating system.
Auto-summarize Long Chats: Off by default. When on, the app keeps an eye on how long each chat gets. Once about 40 new messages have piled up, the older ones are summarized into a few bullet points and added to that chat's 🧠 Chat Memories under an "Auto-summary" heading, so the AI keeps the important facts in view even when they happened long ago. The newest messages are always left out until the next round, and nothing is ever deleted from the chat itself. It uses your Suggestions Model. If you run ✨ Auto-summarize Chat by hand and save the result, the automatic summary carries on after that point instead of covering it again.
Reset to Default Values: This button resets all settings on this panel to their original values.
The Chat Window & Message Interaction
This is the main area where your conversation is displayed.
Editing Messages: You can edit any message in the chat history by simply double-clicking on it. This will open an editor window. You can edit your message as you wish. When you're done, simply click the save button with the checkmark. Optionally, you can simply press ENTER or double-click outside the editor window. All your changes are saved automatically.
Deleting Messages: When you hover over a message, a small trashcan icon (🗑️) appears. Clicking it will delete that message and all messages that came after it. This is useful for pruning the chat history to go back to an earlier point in the conversation and to try a new plot line from that point onward. After a deletion, an ↩ Undo Delete button appears directly in the chat window — right where the deleted content was — so you can instantly restore all deleted messages with one click. If Reply Suggestions are enabled and the chat now ends on an AI message, new suggestions are generated for it.
Generating Images (🎨): Hovering over an AI message reveals a palette icon (🎨) that turns the scene into a picture. The app first asks a text model to condense the message into a short visual prompt, then shows you that prompt in an editable box, so you can adjust it before anything is generated — handy when the detail you actually want is near the end of a long reply. If the text model sends back a refusal or a stray word such as "safe" instead of a prompt, press ↻ in the box for a new one. While the picture is being made, a placeholder appears inside the message with a spinner, the name of the image source, a running seconds counter and a Cancel button. Finished images are attached to the specific response variation they illustrate, so cycling through variations with < and > swaps the pictures along with the text. Hovering over an image shows a small × to remove it again, and the name of the model that made it in the corner. The button only appears when Image Generation is enabled in the Settings Panel.
Response Variations: For every AI response, you can generate multiple versions.
Browse: If multiple versions exist, < and > buttons appear below the message. Use these buttons, or the Left and Right Arrow Keys on your keyboard, to cycle through the different responses.
Regenerating: To generate a new response variation, click the refresh icon (⟳) below the message. Alternatively, if you are on the last available variant, pressing the Right Arrow Key will also trigger a regeneration of the AI's last response.
Continuing a Response: Next to the regenerate icon, you'll find a continue button (»). Clicking it continues the previous AI message in its original context. The app asks the model to repair a cut-off word, sentence, dialogue line, quotation, or formatting marker before adding new content, and merges the result without inserting an unwanted space inside a repaired word.
More Actions (⋯): The last button that appears when you hover over a message opens a small menu:
📋 Copy Text: Copies the message to your clipboard.
★ Bookmark: Marks the message with a small gold star, so you can find key moments again later through ★ Bookmarks in the ⋯ menu. Choose it again to remove the bookmark.
🙈 Hide from AI: The message stays in the chat for you, faded and labelled "Hidden from the AI", but it is no longer sent to the AI — not in replies, summaries, suggestions or image prompts. Handy for out-of-character remarks, or a scene you want the story to forget. Choose Show to AI Again to undo it.
🌿 Branch from Here: Starts a new chat that holds everything up to and including this message — with the same participants, persona, mood and Chat Memories — and opens it. The original chat stays exactly as it was, so you can try a different path without losing the first one. The copy is named after the original with "(branch)" added.
AI Thoughts: Some AI models (Reasoning models) can provide their "thoughts" in a special <think> block. It will be automatically displayed in a collapsible box ("think block") above the main response. You can click "Show Thoughts" to see the AI's reasoning or internal monologue for its response.
The Input Area
This is where you write your messages.
💬 Character vs. 📖 Narrator:Character requests dialogue from the current or tagged character. In a World chat, this button appears only while a character tag is selected. Narrator always ignores character-tag targeting and requests omniscient, third-person narration instead. The narrator does not speak as the user or an established card character, but may create and voice incidental NPCs such as witnesses, guards, bystanders, or strangers when they enrich the scene.
Context Continuation: If you leave the input field empty and click either send button, the app will use the last message in the chat as the new prompt to generate a continuation. This is great for letting the AI move the story forward on its own.
Note: Sometimes, the AI might get repetitive and it can look like as if the AI ignores the last message and doesn't drive the plot forward. In that case, simply make use of your Reminder instructions (e.g., "Drive the plot actively forward and let something new happen.") and also adjust the Temperature slider.
Tag Suggestions: When you click the input field in a group chat, suggestions for selecting a participant appear above it. Select a tag to direct Character requests to that character; the selection remains active until you dismiss it. Narrator requests always ignore the selected tag.
Stopping a Response: While the AI is generating a new message, a red stop button (🟥) will appear in the text input area. Clicking this immediately cancels the request, which is useful if the AI seems to be taking too long or you change your mind. On a computer, Esc does the same.
🎤 Voice Input: The microphone in the corner of the message box lets you speak instead of type. Click it, allow microphone access the first time, and talk — your words appear in the box as you speak, after anything you had already typed. Click it again to stop, then check the text and send it as usual. It uses your browser's own speech recognition in your browser's language, so it only appears in browsers that have one (such as Chrome, Edge and Safari; Firefox has none).
Unsent Messages Are Kept: Whatever you type but don't send stays in that chat's message box — even when you switch to another chat, close the tab or reload. Each chat keeps its own.
🎲 Rolling Dice: Choose 🎲 Roll Dice in the ⋯ menu, or type /roll and send it. A 20-sided dice is rolled and the result is sent to the chat, e.g. 🎲 Rolled 14 out of 20 — a good roll. What happens next goes well. The higher the number, the better things go. The character then decides what happens: it may carry on with the moment at hand or bring in something new.
🔍 Searching Your Chats
Open the search bar with 🔍 Search Chats in the ⋯ menu (or press / on a computer). Every match in the chat is highlighted, and the current one is outlined in gold.
Moving between matches: The ⌃ and ⌄ buttons (or Enter and Shift+Enter) step to older and newer matches. The counter shows which one you are on.
All Chats: Searches every chat with this character at once and lists the matches, newest first. Click one to open that chat right at the message.
★: Shows only bookmarked messages. Leave the search box empty to see all of them.
Close the bar with × or Esc.
📊 Chat Stats & Milestones
📊 Chat Stats in the ⋯ menu shows how far a story has come: messages and words from you and the AI, the day it started, bookmarks, generated pictures and what it has cost. Along the way, the chat celebrates milestones — 25, 50, 100, 250 messages and more, and word counts from 10,000 up — with a short note at the bottom of the screen. The stats window shows the milestones you have reached and how close the next one is. Chats that existed before this feature count what they had already reached quietly, without a flood of notes.
Other Chat Functions
Scroll to Top Button (↑): This floating button appears in the bottom-right corner after you've scrolled down a bit. Click it to jump instantly to the beginning of the chat.
Fullscreen Mode: When using the app on your computer, simply press the F key on your keyboard to toggle a distraction-free, immersive fullscreen mode. Press F again (or ESC) to exit fullscreen mode.
⌨️ Keyboard Shortcuts: Press ? in a chat (or choose it in the ⋯ menu) for the full list:
Enter sends as Character, Ctrl+Enter sends as Narrator, Shift+Enter starts a new line.
Esc stops the reply being written and closes the search bar.
/ opens the search, ←→ browse reply variants, F toggles fullscreen.
6. Who Are You? Persona Management
While most of the app is about the AI characters you chat with, the Persona system is all about defining who you are in the conversation.
The Difference: Character vs. Persona
A Character is the AI entity you create and interact with. It has its own detailed personality, backstory, and instructions.
A Persona is a reusable profile for you, the user. It defines your name, your appearance, and your role in the story. This information is given to the AI so it knows who it is talking to, leading to much more personalized and context-aware responses.
The Persona Management Window
You can access this feature by clicking the 🎭 Manage Personas button on the main screen. This will open a dedicated modal window where you can:
See a list of all your created Personas.
Use the search bar to find a specific Persona.
Click + Create new Persona to open the Persona Editor.
Edit (⚙️ icon) or Delete (🗑️ icon) any existing Persona directly from the list.
The Persona Editor
The Persona Editor is a streamlined version of the Character Editor, designed for quickly defining your user profile.
Persona Name: The name you want to be called in the chat.
Persona Avatar URL: A direct image link for your avatar. This optional picture will appear next to all of your messages in a chat where the Persona is active.
Persona Description: Describe your identity, appearance, and role in the world. This description is passed to the AI as part of the system prompt. If possible, keep it rather concise, as this saves a lot of tokens and makes it easier for most AI models to think.
Estimated Tokens Counter: Just like in the Character Editor, this shows a live estimate of the token count for your Persona's definition.
Using a Persona in a Chat
Inside a chat, if you have not yet assigned a Persona, a 🎭 Select Persona button will be visible in the header. Clicking it opens a selection screen where you can choose one of your saved Personas for that specific chat session. You can unselect the persona by clicking the button again.
7. All Together: Group Chats
You aren't limited to one-on-one conversations. Any chat can be turned into a group chat with multiple AI characters interacting with you and each other.
Starting a Group Chat
To add more characters to an existing conversation, simply click the Group Chat (👥) button in the chat header. This will open a selection modal where you can tick any of your other characters to join the chat.
Managing Participants
Adding: In the participant selection window, tick every character you want to add and press Confirm. You can add as many as you like in one go. Use the search bar in the modal to find characters quickly - your ticks are kept while you search. Select all ticks or unticks every character currently listed.
Removing: Open the same window again: the characters already in the chat are listed first, with their boxes ticked. Untick the ones that should leave and press Confirm. Nothing changes until you confirm, so Cancel leaves the chat as it was. All current participants (besides the main character) are also shown as small, overlapping icons in the chat header.
Addressing Specific Characters in a Group Chat
To direct your message to a specific character in the group, you must use a simple command: Start your message with a forward slash / followed immediately by the character's name (e.g., /Akame "How are you?").
Tag Suggestions: To make this quick and easy, whenever the input box is empty, clickable suggestions for all participants (e.g., </Akame>) will appear just above it. Clicking one will add the command to the input box for you.
The AI is instructed to respond only as the character you addressed. If you don't specify a character, the response will come from the chat's primary character.
However, to be certain, always put the instruction “Reply only as {{char}} now” in the Character Reminder. It will ensure that only your targeted character will speak.
▶️ Letting the Characters Talk
In any chat with at least two characters (including a World with two or more characters), ▶️ Let Them Talk in the ⋯ menu lets the characters carry the scene among themselves while you watch. Choose 4, 8 or 12 turns. Each turn goes to a different character than the one who just spoke, and each reply answers the one before it.
A small bar above the message box shows the turn and who is replying. Its Stop button — or the red stop button, or Esc — ends the talk after the reply being written.
It also stops by itself if a reply fails or you leave the chat. Your own character tag is back as it was afterwards, and reply suggestions appear once it is over.
Anything you had typed in the message box is left alone while they talk.
8. Import, Export & Backups
Your data is stored locally in your browser (IndexedDB), which means it's private but also vulnerable if your browser data is cleared. The Import and Export feature is the best way to safeguard your creations.
Why should I use this feature?
Backups: Create a safe copy of all your hard work. If you ever accidentally clear your browser's cache or cookies, you could lose everything – all Characters and all Personas. An exported file is your insurance policy and it doesn't cost you anything - except 5 seconds of your time.
Migration: Move your entire collection of characters and personas to a different computer or another web browser.
How to Export Your Data
Exporting creates a single .json file containing all your characters and personas.
Click the ⬇️ Export button in the header of the main screen.
Your browser will open a "Save File" dialog.
The file will be named casualcharacterchat_export_[date].json. Choose a safe location on your computer and click "Save". That's it!
How to Import Your Data
Importing allows you to load a previously exported backup file as well as any other .json file with characters in the same format.
Click the ⬆️ Import button in the header.
Select the .json backup file from your computer - or upload any character card (png/V2 or .json) from any other character chat platform.
A confirmation window will apear. Once you confirm, the app will load the data. A success message will appear, telling you exactly how many characters and personas were successfully imported. Your existing data will NOT get overwritten and is save! Only the new data will be added to your existing characters and Personas.
9. Frequently Asked Questions (FAQ)
Here are answers to some common questions and issues.
Q: My AI's responses are weird/short/repetitive. What can I do?
A: The quality of AI responses depends heavily on your settings and prompts. If you're not getting the results you want, try the following:
Check Your Prompts: The most important factor is a well-written Character Description. Be detailed. Give the AI clear instructions on personality, speech style, and motivations. The same goes for your AI Instructions and Reminder fields.
Adjust Temperature: In the ⚙️ Settings panel, try adjusting the Temperature slider. A lower value makes the AI more predictable and focused. A higher value makes it more creative but can lead to randomness.
Regenerate the Response: Don't be afraid to use the ⟳ button (or the right arrow key). Sometimes the AI's first attempt isn't its best, and the next variation might be perfect.
Change topic: Often it helps to change the topic yourself by making a time jump for example and start a totally new situation or scene, so that the AI has to come up with other ideas for the new circumstances.
Q: The app is slow, or the AI isn't responding. What's wrong?
A: AI responses depend on your chosen provider (e.g., OpenRouter), so slowdowns commonly happen when its servers are under high load or a free model is temporarily unavailable. The app will automatically retry the request. If you keep getting errors, try switching to a different AI model in the settings, or wait a few minutes and try again.
Q: The chat was working, but now I always get an error like "AI Model did not respond...". What's wrong?
A: Most of the time this means that either the AI model itself has problems, or your API key isn't valid, or you have reached a rate limit with your provider for requests per minute/per day. Try to use another AI model, another provider/different API key, check any limits of your provider, or simply try again later. In some cases it can also happen while improvements are being made to the website (a few minutes/hours, maximum one day). Please also note that free AI models are often shut down by the providers after a certain period of time - you'll keep getting error messages in such cases.
Q: What's the difference between Character Description and Lorebook?
A: Think of it this way: The Character Description defines who the character is - their active personality, their appearance, how they behave right now. The Lorebook contains background knowledge from the character and the world - memories, historical facts, details about the world, etc. This separation helps the AI focus on the active personality while still being able to pull from deeper knowledge when needed. You can also integrate all kinds of additional facts about the character in the lorebook that are not necessary or have less relevance for the character description. And if your lorebook grows long, switch it from Always-on to Keyword-triggered in the Character Editor: each fact is then only sent to the AI when the conversation actually mentions one of its keywords, which keeps a big lorebook from eating the AI's memory. See the Lorebook field in section 4, The Character Editor, for how to set this up.
Q: Can I use my characters on another computer or in a different browser?
A: Yes. This is precisely what the Export and Import functions are for. Use Export on your old device/browser to save your data to a file, then use Import on the new one to load it all back in.
IMPORTANT: If you want to run your app on another computer, you must copy your entire app folder to that device - not just index.html, because it loads the other files sitting next to it. The folder has to keep index.html, style.css, script.js, starter_pack_data.js, api-transport.js, help.html and privacy & terms.html together in one place. Only then can you start the app on that device by opening the index.html file in the browser as usual. On smartphones it will only work properly by opening the standalone file that is downloadable on the Github page of this project.
Q: Can I install the app on my phone or computer?
A: Yes. In browsers that support it (such as Chrome and Edge on computers and Android), an 📲 Install App button appears at the bottom of the main screen, next to Help & FAQ — or use the install icon in the address bar. On an iPhone or iPad, open the app in Safari, tap the Share button and choose Add to Home Screen. The installed app opens in its own window with its own icon, and your data still stays only on your device. On computers and Android it uses the same storage as the website, so all your characters and chats are already there. On an iPhone or iPad the Home Screen app keeps its own separate storage — use ⬇️ Export Data in Safari and ⬆️ Import Data in the installed app to bring your characters along.
Q: Why are my Characters and Personas suddenly gone?
A: This means that your browser's site data (including the IndexedDB database) has been deleted.
This can happen when you clear your browser's cache or have settings that automatically delete site data upon closing the browser. That's why the quick and easy "Export" feature is always your perfect insurance.
Simply export your data after making major changes or creating new characters, and you're 100% safe. Please note that you won't see your newly created characters and chats in an Incognito-Tab of your browser since cookies are disabled in incognito mode and it doesn't check your local storage.
10. Getting Started (Required Setup)
The Only Step: Connect Your API Key
To use any AI models, the app needs your personal API key of course. This is the only setup step required.
The web app itself is free, but AI model usage is billed through your own key, if you use paid models. While you can add different providers/API keys for different models, it is recommended to use OpenRouter.ai as your main API provider, because the web app is is optimized for OpenRouter and this provider gives you access to most existing AI models in one place. They give you 50 free messages a day - 1000 free massages a day, when you have $10 in your account balance (one-time payment).