Welcome to UnrealHQ
UnrealHQ lets you create AI character bots that live in Discord. Each character is its own Discord bot — with its own name, avatar, personality, memories, and codex entries. Your characters are live on Discord where your friends can talk to them too, or you can chat with them right here on the web.
Whether you want a roleplay companion, a group chat personality, a writing partner, or just a character you've designed to hang out in your server — this is the place to build it.
What is BYOA?
BYOA stands for Bring Your Own API. Instead of paying us for the AI, you get an API key from an AI provider (like ElectronHub, OpenAI, or Anthropic) and plug it in. The bot uses your key to generate responses.
Why this model?
- You pick your model. Want Claude for creative writing? GPT-4o for fast responses? A cheap model for casual chat? Your call.
- You control your costs. Pay only for what you use, directly to the AI provider. No middleman markup.
- No message limits from us on BYO keys. If you bring your own API key, your only limit is your provider's rate limits and your API budget. (UnrealHQ Managed API tokens are different: they have per-plan daily limits and prepaid credits.)
- Privacy. With your own key the bot talks directly to your provider; your key is stored encrypted and never shown in full again. (Managed
uhq-tokens are the exception — those requests pass through UnrealHQ's metering proxy.)
Quick start (5 minutes)
Here's the fastest path from zero to a working character bot in your Discord server:
Step 1: Create your account
Go to the Control Room and register with your email. You'll need an invite code during the closed beta — ask an existing user or the platform admin if you don't have one yet. A code works for 24 hours, so use it soon (an expired one can be swapped for a new one). You must be 18 or older and accept the Terms of Service. A verification link is emailed to you (valid for 24 hours) — you can set up characters and bots right away, but web chat in the Parlor is unlocked only after you verify.
Step 2: Get an API key
Sign up at ElectronHub (or any provider you prefer), create an API key, and save it in your Control Room settings.
Step 3: Create a character
Go to the The Atelier. At minimum, fill in a name, description, and first message. You can always add more depth later.
Step 4: Create a Discord bot
Head to the Discord Developer Portal, create a new application, grab the bot token, and enable the Message Content intent. (Full walkthrough in the Create a Discord Bot section below.)
Step 5: Register, link, launch
Paste your bot token in the Command Center. Pick which of your characters this bot is from the dropdown (one character per bot) — the bot comes online by itself the moment you do. Then use the invite link to add it to your server.
Step 6: Invite & chat
Click the Invite link in the Command Center to add your bot to a Discord server. @mention it in any channel (or reply to one of its messages) and start chatting! Bots also answer in DMs — open a direct message with the bot and every message you send is treated as addressed to it. A bot chats in DMs only with people whose Discord is linked to an UnrealHQ account (see Link your Discord), and an 18+ character also needs that account's NSFW opt-in in the Control Room settings.
API providers
UnrealHQ supports 16 providers: ElectronHub, OpenAI, Anthropic, OpenRouter, UnrealHQ Managed API, DeepSeek, Google AI Studio, Mistral AI, Groq, AI21, AI/ML API, Fireworks AI, Cohere, Moonshot AI, NanoGPT, Chutes, plus any OpenAI-compatible endpoint via the Custom provider. You can keep up to 5 keys per provider (a second ElectronHub key for when the first runs out, say), each with a nickname if you like, from the Control Room settings panel or with Discord commands. One key per provider is in use at a time. A new key never replaces the one you had: the old one stays saved, and use next to it in the Control Room switches back. A few examples:
| Provider | Command | Notes |
|---|---|---|
| ElectronHub | /setkey electronhub sk-... | Default provider (/setkey sk-... without a provider name saves an ElectronHub key). Many models, great pricing. |
| OpenAI | /setkey openai sk-... | The GPT models. |
| Anthropic | /setkey anthropic sk-ant-... | Claude models. Great for creative writing. |
| OpenRouter | /setkey openrouter sk-or-... | Access 100+ models from one key. |
| UnrealHQ Managed | /setkey unrealhq uhq-... | Managed token from the platform admin (see below). |
| Custom | /setkey custom your-key https://host/v1 | Any OpenAI-compatible endpoint. The base URL is required. |
/setkey in a server channel, every UnrealHQ bot that can see it saves the key and deletes your message right away (you get the confirmation by DM). The safest place is a DM with the bot — nothing to delete there. !provider lists all provider names.
Picking a model: After setting a key, use /setmodel model-name to choose your model. Examples: /setmodel claude-sonnet-4.5 or /setmodel gpt-4o-mini. If you have never picked a model, /setkey picks a starting model your key can actually use (checked against the provider's own model list; for managed tokens, one your plan allows) and tells you which. Not linked yet? On Discord the bot uses the key and model you set there, not your Control Room settings, so link your account first. In the Control Room, and in the setup steps, the model box drops down with a searchable list pulled live from your provider as soon as you paste a key (before you save), so nobody has to know a model ID by heart; the managed API and providers that publish their list show it even sooner. Different models have different strengths — Claude is usually preferred for RP/creative writing, GPT-4o for speed and general conversation.
A different model per bot, or per channel: your default model is one setting for every bot, but on your own key you can point one bot elsewhere. /setmodel claude-sonnet-4.5 bot makes that bot answer you on Sonnet everywhere (Discord and the Parlor), while another bot in the same channel stays on your default; /setmodel claude-sonnet-4.5 here does it for that bot in that channel only, say a softer model for a quieter scene. /setmodel clear here / /setmodel clear bot undo them, plain /setmodel tells you which model that bot is using for you there and why, and the Control Room's API box lists everything you have set. Two things to know: the model has to exist at the provider your key is with, and these only apply on your key — when a bot answers on its creator's or the server's key, the key's owner picks the model. In the Parlor, Change engine in a chat's settings does the same, with Applies to: This chat only, This character, every chat, or Every chat (my default). A chat's own pick wins over its character's, and a character's over your default, so a wider pick (the whole character or every chat in the Parlor, bot or your default with /setmodel) also takes the chat or channel you made it in off any model of its own, and the note after it says how many other chats or characters keep one. /setmodel clear bot clears that channel's own pick too. When the model your engine is set to isn't there at all, it says so, by name.
Which provider should I use?
If you're just starting out, ElectronHub is the easiest choice — it gives you access to models from multiple providers through a single key, and pricing is very competitive. If you already have an OpenAI or Anthropic key, those work too.
A backup engine
With keys for two providers, one can stand in for the other. Pick it as your Backup engine, with a model there, under API Configuration in the Control Room or under Change engine in a Parlor chat's settings. When your main engine can't answer (it's down, out of credit, rate limited, or turns your key down), the same reply is asked of your backup once, on Discord and in the Parlor alike, regenerates and Continue included; the Parlor says when it was the backup that answered (and why, when your main engine has no model by the name it's set to, as that one is yours to fix under Change engine), and its usage counts under its own key. A broken reply counts as your main engine failing too: one that comes back as nothing but brackets, like [::], or as one short line in brackets saying it failed, like [An error occurred]. Without a backup you see an error instead, and nothing of it is kept, so try again or pick another model. A line of nothing but marks in brackets at the top of a reply comes off before you see it, backup or not. A reply your provider blocked for what it says, one you stopped, or one that broke off partway isn't sent to the backup. It only ever uses your own keys: a reply on a bot's, a server's or a house key has no backup.
Free messages
Every account with a verified email gets free messages on the house each day: 20 replies or 300,000 tokens, whichever runs out first, on the lighter models (DeepSeek v3.2 and v4-flash, Kimi K2.6, Gemini 2.5 Flash, and Gemini 3.1 and 3.5 Flash-Lite). With no key at all, a Parlor chat runs on them, starting on DeepSeek v3.2, and Change engine in its settings picks another of the free models. With a key, they pay first for any reply on one of those models, on your key or a bot's, and the key takes over when they run out or can't answer. On Discord they need your account linked. A Regenerate or a Continue counts as a reply, and the memories and notes a reply sets off count their tokens. The Parlor shows how many are left under the typing box; they come back at midnight UTC, which the Parlor puts in your own time. On a very busy day they can run out early for everyone, and a key of your own works any time.
UnrealHQ managed API tokens
Don't want to sign up with an external AI provider yourself? UnrealHQ also offers managed proxy tokens as an alternative to BYOA. These tokens use the platform's own API keys under the hood, and let you pay per usage without ever touching an AI provider account.
How they work
- Each managed token starts with the
uhq-prefix and works as a drop-in API key. - Model names copied from OpenRouter work too:
google/gemini-4-argonisgemini-4-argonon a managed token. A name it has no model for at all is answered with a note saying so, rather than as an error from the provider. - Tokens are minted per-tier: each tier has its own daily token cap and allowed models list.
- You can top up an existing token with more credits at any time (like a prepaid card).
- Free / comp tokens are supported for testers and community contributors.
- Anthropic (Claude) models are not available on managed tokens — the upstream provider no longer permits them for roleplay. They don't appear in the model list and requests for them are refused. Bring your own key (Anthropic direct, ElectronHub, OpenRouter…) and every model your provider offers works as usual.
Getting one
Pick an API plan on the Plans page: donate on Ko-fi, then press Request under the plan you want, or file a !ticket with Alex Kade. Once it's approved the token is on your account and you're switched to it, with nothing to paste. A token you got another way goes in your Control Room API Configuration exactly like any other API key: pick "UnrealHQ Managed API" as the provider, or send /setkey unrealhq uhq-... to a bot. Your remaining credits, daily usage and what each of your replies cost are shown in the Control Room settings.
Create a Discord bot
Each character lives as its own Discord bot application. Here's the step-by-step:
Step 1: Create a Discord application
- Go to the Discord Developer Portal
- Click "New Application" in the top right
- Name it your character's name (this shows up in the bot's Discord profile)
- Upload an avatar for your character under "General Information"
Step 2: Create the bot user
- Go to the "Bot" tab in the left sidebar
- Click "Reset Token" and copy the token
- Under "Privileged Gateway Intents", enable:
- Message Content Intent (required — the bot must read messages)
- Server Members Intent (optional — UnrealHQ bots don't request it, so you can leave it off)
Step 3: Invite the bot
You don't need Discord's OAuth2 URL generator. Once you register the token on UnrealHQ (next section), the bot's card in the Command Center shows an Invite to Server button. That link already asks for exactly what the bot uses:
- View Channels, Send Messages, Send Messages in Threads, Read Message History — talking
- Embed Links, Attach Files, Add Reactions, Use External Emojis — richer replies
- Manage Messages — deleting
/setkeyand/linkmessages so keys and codes never stay visible, plus/delete - Create Invite — the "Server Invite Links" feature in the Command Center
- The applications.commands scope — without it Discord never shows the bot's slash commands
If you switch on Moderation Tools for a bot, the link also asks for Kick Members, Ban Members, Moderate Members and Manage Channels. Opening the invite link again for a server the bot is already in simply adds the missing permissions.
Register on UnrealHQ
Once you have a Discord bot token, head to the Command Center and paste it in the registration field. UnrealHQ will:
- Validate the token with Discord
- Pull your bot's name and avatar automatically
- Set up all backend configuration
- Generate an invite link for you
Give the bot its character & launch
Reset the token by accident? Discord kills the old one instantly and the bot drops offline. Don't delete the bot — click Replace token on its card in the Command Center and paste the new token from the same application. UnrealHQ checks it really is the same bot, swaps the token in, and restarts it; settings, servers and memories are untouched. (A token from a different application is a different bot — register that one instead.)
A bot token is a character. In the Command Center, use the dropdown to choose which of your characters this bot is. Your bot comes online in Discord immediately (no separate Start needed — Start/Stop/Restart are there for later), speaking as that character with its full personality, codex entries, and commands — and you can invite that one bot to as many servers as you like.
Each character can drive only one bot (the bot is the character card — invite it to as many servers as you like). Until you lock it you can still swap which character a bot uses: pick a different, unused character in the dropdown and, if the bot is running, it restarts automatically with the new one. Characters already used by another bot are grayed out. If you want the pairing to be permanent, click Lock next to the character: this cannot be undone.
/setkey (or in the Control Room once they've linked their Discord) — you as the creator only handle the bot token.
Limits: How many bots and characters you can keep depends on your plan (see Plans: characters go from 3 on Free up to 50 on Headliner, and every character can also live in the Parlor without a bot), with up to 500 codex entries per character (a full SillyTavern lorebook fits; the keyword budget, not the entry count, is what governs cost per message).
Link your Discord
Your UnrealHQ account and your Discord account start out as two separate identities. Linking them tells every UnrealHQ bot that you on Discord are you on the website, so one set of settings applies everywhere.
How to link (about 30 seconds)
- Open the Control Room → Settings → Account → Discord and click Generate link code. You get a code like
LINK-7K3PQ2that works once and expires after 10 minutes. - On Discord, open a DM with any UnrealHQ bot and send
/link LINK-7K3PQ2. In a server you can use the/linkslash command instead — its reply is only visible to you, and if you type it as a plain message the bot deletes it right away. - The bot replies "Linked to your UnrealHQ account". Done.
What linking unifies
- API keys & model — the keys and model you saved on the website are used for your Discord messages too (no more
/setkeyper bot). - Memory — your Discord conversations are stored under your website account and show up in Unforgettable, including anything the bots remembered before you linked.
- Personas — personas you created on the website can be picked from Discord with
/persona <name>(this channel) or/persona <name> everywhere(your default in every channel that has no persona of its own; the Use everywhere button in the Control Room does the same), and/persona offclears it. Bots call you by your persona's name. - Server tools — the Command Center's server and channel pages work because they know which Discord servers you manage.
/whoami tells you which account a bot thinks you are, /unlink disconnects. Bot DMs are the private place for /setkey and other settings — nothing to delete, nobody else can see it.
Building characters
The Atelier lets you build AI characters with serious depth. Every field maps to the TavernCardV2 spec, so you can import and export characters freely.
Its sections are listed down the left side of the page, in groups (the card, lore, commands and story, trying it out, readers and people, files), with Your Characters and the Library at the top. Click one and it opens on the right, one at a time, so a long codex never buries the rest; the list stays beside you as you scroll. On a phone the list is a row of tabs across the top to swipe through. When you open another character, it opens at the section you were in.
⚒ The Forge: start from an idea
Arriving with a vibe instead of a lorebook? The ⚒ The Forge button at the top of Your Characters takes a plain-language brief — "I wanna make a bot that does this, has this, feels like this" — and your model drafts the whole character. At the default Full character depth that means every card field — name, tagline, About, tags, description, personality, scenario, a system prompt, post-history rules, example dialogue, a first message and two alternate greetings — plus a real codex: the Forge first plans a world outline (history in chapters, the people around them, places, factions, rules, secrets, arcs and story hooks, 18 to 30 subjects) and then writes an entry for each, so the character can sustain months of play. Quick sketch is the older two-call version: card plus a five-to-ten-entry starter codex, for when you want a rough shape fast. It follows the house rules while it works: the description and tagline only tease, and the secrets you mention go into keyword-gated codex entries so users have to earn them in play.
Everything lands on a review screen first — read the card, untick codex entries you don't want, edit names, keywords and text — then Open in the Atelier drops it in as an unsaved draft you can rework top to bottom. Nothing exists until you click Save Character — that is true of every codex edit in the Atelier: adding, editing, deleting and importing entries all wait for Save, so the floating Save bar shows Unsaved changes the moment you touch anything, and the page asks before you close it or switch characters with edits still pending. Tidy a big codex with the row above the entries: tick entries and Delete selected, or Remove duplicates to drop entries that repeat another's keywords and text (one copy of each is kept). Importing a codex you have already imported skips the repeats instead of doubling them, and replacing the whole codex always asks for its own explicit OK. A good brief covers who they are, the world, the dynamic you want with users, tone and rating, and any secrets they guard; one vague sentence gets you a generic character, a meaty paragraph gets you something with teeth. Runs on your API key (a full forge is about six model calls, a quick sketch two) and needs a key on file in the Control Room. It works in the background: the box shows which stage it is on (card, world outline, codex entries so far) and you can close it, keep editing, and come back — a full forge on a slow model can take five or ten minutes, and the result waits for you for half an hour.
The fast path: idea (or old lorebook) to live bot
The Atelier's tools chain together, and this is the order that works: 1) Start with The Forge (from an idea) or Bulk Import (from existing cards and lorebooks — card+lorebook pairs merge themselves, and strays get the "Merge In a Draft" picker). 2) Adjust crop on the avatar so the face sits in the circle. 3) Run Codex Tidy so every keyword entry can actually fire. 4) Hit ✨ Suggest on Description, Tagline and Tags — they write shop-window copy that teases without spoiling. 5) Flip the In prompt pills off for any card field your codex already covers, and sanity-check the two token counts in the Preview (total, and starting constants). 6) Test a message in the Atelier, save, flip it Public, and link it to a bot in the Command Center. Ten minutes, idea to invite link.
Character fields explained
In the Atelier, each of these fields says what it's for right under its name: one tag says whether you need it (Required, Needed to publish or Optional), another what the AI does with it, and Show example opens a sample character's version. How the AI reads your card, at the top of Personality & Behavior, lists everything the AI is sent, in the order it reads it.
Name — Your character's display name. Max 50 characters. (The name shown in Discord is the bot's own Discord username; the character name is what {{char}} becomes and what appears in the Parlor and the Lobby.) You can also add a tagline, an About blurb, tags, an avatar (upload an image up to 10 MB, or paste a URL), and flag the character as NSFW and/or Public. About is the one field written for people rather than the model: it shows on the Lobby profile and behind the ⓘ About link in the Parlor, and it is never sent in a prompt — so put the hook, the vibe and any content notes there, and keep the Description (which IS the model's recipe and is never shown to anyone) for who the character actually is. When you upload an image, a Frame the face window opens: drag and zoom until the face sits inside the circle — that circle is exactly what cards, profiles and chat show, so full-body art stops losing its head. Hit Use full image to skip cropping, and use the Adjust crop button any time to reframe an avatar that's already uploaded (bulk-imported ones included). GIF avatars upload untouched, since cropping would lose the animation. Public is the single switch that lists the character in the Lobby — it's the same flag you see under "Lobby Listing" in the Command Center. A public character with no bot yet appears as a Web only card that people can talk to in the Parlor; once you register a bot for it and publish, the card gains its Add to Discord button.
Description — Who the character is. Background, appearance, history, relationships. This is the core identity block and the most important field. Be detailed here.
Personality — How they behave. Speech patterns, quirks, emotional tendencies, mannerisms. Bullet traits work well: "sarcastic, fiercely loyal, uses 90s slang."
Scenario — The current situation. Where are we? What's happening? This sets the stage. Example: "{{char}} and {{user}} are roommates in a cramped Tokyo apartment. It's raining outside."
First Message — The opening message when someone first talks to the bot. This sets the tone and should establish the scene. Write it in the character's voice.
Example Dialogue — Sample exchanges showing how the character should talk. The AI uses these as style references. Format them like this:
{{user}}: Hey, what's up?{{char}}: *leans against the doorframe* Oh, you know. Just contemplating the void. The usual Tuesday stuff.
Custom System Prompt — Advanced. If set, this text is placed at the very top of the assembled prompt, ahead of the description, personality and other sections (it does not replace them). Use it for extra instructions that should come first. Most people can leave this blank.
Post History Instructions — Optional instructions appended as the last section of the prompt ("Response Instructions"), handy for formatting or style rules you want the AI to see right before it answers.
{{char}} becomes the character's name, {{user}} becomes the person talking (their active persona name if they have one, otherwise their username). The SillyTavern forms <USER> and <BOT> work too. Use them in your description, scenario, and example dialogue so the character works regardless of actual names.
Codex entries
The codex is where character depth really comes alive. It's a collection of entries that get injected into the AI's context based on different rules. Think of it as your character's encyclopedia — but the AI only reads the relevant pages.
Constants (Always Active)
These entries are always injected into every message's context, no matter what. Use them for core world facts, fundamental character traits, and rules that should never be forgotten.
Keyword Triggered
These entries only inject when specific keywords from their trigger list appear in the conversation. This is classic codex behavior — precise and token-efficient. Turn on Fuzzy Matching on an entry and its keys also catch plurals, word stems and small spelling slips: sword then fires on "swords", "sworded" or "sowrd", and a multi-word key like dark tower still needs its words next to each other. Leave it off for keys where precision matters (names that are also common words).
Titles and finding things
Every entry can have a title at the top ("Mara's scar", "House rules"). It's for you, it never reaches the model, and it becomes the entry's heading in the list with the keywords in small type beside it. The search box above the list finds entries by title, keyword or text as you type, so a 300-entry codex stays navigable. Imported SillyTavern books keep their entry comments as titles.
Codex settings
Primary Keys — Comma-separated trigger words. At least one must match for the entry to fire.
Secondary Keys — If set, at least one secondary key must ALSO match (in addition to a primary). Great for precise two-condition triggers. Example: primary "sword" + secondary "broken" only fires when both concepts appear. Under More options you can ask for all of them instead, none of them ("sword" but never "broken"), or not all of them. Cards imported from SillyTavern keep the mode they came with.
Insertion Order and Priority — Two numbers with two different jobs: Insertion Order is where an entry sits, and Priority is which entries stay when there's more than fits. They have a part of their own, Insertion Order and Priority, just below.
Position — Applies to Constant entries. "Before Character" puts the entry in a World Info block between the personality and the scenario; "After Character" puts it after the scenario. Keyword-triggered entries are always injected in a separate "Triggered World Info" block after the character definition.
Case Sensitive — Whether triggers match exact case or ignore it. Usually leave this off unless you need to distinguish between "Rose" (a character) and "rose" (a flower). (Fuzzy Matching is always case-insensitive.)
Fuzzy Matching — Per entry. Matches plurals, stems and near-misses of each key instead of the exact text (a key with no letters or digits, an emoji say, matches as written). Off by default. To flip a whole codex at once, use Fuzzy matching, every keyword entry: All on / All off under the entry list, then Save.
Keys written as /word/ — SillyTavern lets a key be a regular expression between slashes, and World Info exports often carry keys like /Greyfen/. UnrealHQ matches those as regexes too, so they fire as written. Fuzzy matching only understands plain words, though, so Codex Tidy flags slashed keys and offers Unwrap /slashed/ keywords to turn every /word/ back into word in one click (real patterns like /sw(o|a)rd/ are left alone).
Enabled — Turn an entry off without deleting it.
More options — A fold at the bottom of a keyword entry with the rest of the SillyTavern settings. Imported entries bring theirs along, and editing an entry keeps them. Scan depth: how many messages before the newest one its keys are looked for in (1 to 50; 1 reads the newest message and the one before it). Sticky: once it fires, it stays in for this many more messages whatever they say, even when its keys don't come up again, or come up while its secondary keys, cooldown or chance would turn it away. Cooldown: after it fires, it sits out this many messages before it can fire again (1 sits out the next one). Chance: the percent of the time it goes in when its keys match, rolled once a message, so another entry mentioning its keys doesn't give it another try. Group: entries that share a group name take turns, so when several match at once only the highest priority goes in (four moods for one tavern, one mood at a time). Entries imported from SillyTavern keep its say on that too: of the ones tied at the top, one marked Prioritize goes in, or else one drawn by group weight. Other entries can trigger it: when an entry that went in mentions this one's keys, this one goes in too, up to two rounds deep. Each entry's card in the list shows whatever it sets.
Insertion Order and Priority
Every codex entry has two numbers, and they do two different jobs. Insertion Order decides where an entry sits in the prompt. Priority decides which entries stay when more of them fire than fit. Neither does the other's job: priority never moves an entry, and insertion order never decides what's kept.
Insertion Order: lower goes first, higher goes later. Entries go in from the lowest number to the highest, so an entry at 1 is read before one at 10, and one at 10 before one at 100. The higher the number, the later the entry sits and the closer it is to the chat. Every new entry starts at 100 (SillyTavern's starting number too, so imported entries keep their places), and 100 isn't a ceiling: any whole number from 0 up works, and 0 goes first, so an entry imported at 0 keeps its place. Give an entry 50 to move it ahead of the rest, or 150, 200 or 1,000 to move it after them. Numbers with gaps between them (10, 20, 30) leave room to slot a new entry in later. Two entries with the same number go in the order they were made.
The order works inside each entry's own block. Keyword entries sit together in the Triggered World Info block, right after the character's definition. Constant entries sit in their World Info block, before or after the scenario as their Position says. Memories, notes and the recent chat come after all of them, and Post-History Instructions come last of all, so even the highest-numbered entry is read before the chat, never inside it. For something the model has to see right before it writes, use Post-History Instructions.
Priority: higher is more important. It only matters when there's too much. Keyword entries can bring in up to about 32,000 tokens on one message (an entry may be up to 60,000 characters, roughly 15,000 tokens). If a message sets off more than that, the entries with the highest priority stay, the lowest are dropped, and the one at the edge is cut short where the room runs out. Priority also picks which entry of a group goes in when several match at once. Every entry starts at priority 10, imported ones too unless they bring their own. Any whole number from 0 up works, and there's no top here either: 20 beats 10, and 100 beats 20. Constant entries are never dropped, because they're part of the character prompt itself, which is why the Preview's starting-constant figure is the one to watch.
Importing codex entries
If your character has "too much stuff for the description box", the description was never meant to hold it. Card fields have no length limit, but the Codex (the section below the card in the Atelier) is the lorebook, and your existing lorebook imports into it in one click. You can import codex entries in several ways:
- Embedded in a character card — When you import a TavernCardV2 JSON, the codex entries come with it automatically.
- Standalone codex file — Click "Import Codex (.json)" in the Atelier. This handles standard World Info export formats, including older formats with different field names.
- Inside a SillyTavern PNG — Import the character .png itself (see Import/Export); the card and its codex are read out of the image.
A SillyTavern lorebook comes in with its settings, from a World Info file or from the lorebook inside a card: how secondary keys count, sticky, cooldown, chance, group (the first one, when an entry is in several) and whether other entries can set it off, all under More options, and a group's Prioritize and weight, which the entry keeps though the form doesn't show them. An entry's own scan depth carries over too, counted the way the Codex counts it; one that used SillyTavern's global setting reads the newest message and the one before it. SillyTavern's Depth is where an entry is inserted in the chat, which the Codex doesn't use, so it stays behind. Three more SillyTavern settings don't come along: Delay, Delay until recursion and Prevent further recursion, so an entry that used them can fire sooner, or set off other entries, here.
Codex Tidy
Overhauling an old lorebook is real work, so the Atelier has a 🧹 Tidy Codex button under the entries. It scans what's in the editor (nothing is saved until you click Save) and lists what's worth a look: keyword entries with no keywords (they can never fire), one- or two-letter keywords (they fire on everything), entries with identical content or names, empty entries, very long entries, and how many tokens your constant entries add to every single prompt. Each row has Edit and Delete, and the ✨ Suggest keywords button asks your own model to propose triggers for every entry that has none — the literal names, places and terms someone would type. Chips appear under each entry; take them one at a time with "Use keywords" or all at once with "Apply all", then Save.
The ✂ Trim wordy or repeated prose button does the same for the writing itself: your model reads the whole codex in batches and hands back a tighter version of any entry that repeats itself, restates another entry, or pads — every fact, name, number and rule kept, only the filler gone. Each proposal shows the saving (characters, and the tokens it costs every time that entry fires) with the full rewrite one click away, so read it, then take it with "Use trim" or take the lot with "Use all trims". Entries that are already tight come back untouched. As always, nothing is saved until you click Save, and it runs on your own key.
The weight badge
Lobby cards and bot profiles show a ⚖ weight badge — the bot's starting prompt in tokens: its identity fields, always-on codex entries and the shared books its creator left switched on. Heavy bots (15–20k) are the deep, slow-burn characters that don't reveal everything in a day; light bots are cheaper company per message. It's the honest number to budget your daily tokens against: your reply cost is roughly the badge plus the conversation.
🩺 The Checkup
The Mentor section of the Atelier (in beta) starts with a 🩺 Checkup: on a saved character, Run the checkup puts a report on it right there, free and instant, before you ask the Mentor anything. It reads the character the way a reply does, asks no model and changes nothing, and you and anyone co-creating it can run it. First comes what goes with every message, the same count as the weight badge: each card field, every always-on codex entry by name, biggest first, and what each Library book adds, so you can see where your budget goes. It also says what the post-history instructions add, since they go with every message too, after the chat.
Then it looks over your keyword entries. Won't fire lists the ones that never go in: no keywords, a /pattern/ the codex can't read or that's too big to run, a 0% chance, secondary keys set so the entry is turned away every time, or switched off. May misfire lists keywords that fire when they shouldn't: words that turn up in nearly every message, very short ones, ones hiding inside everyday words (a keyword matches inside a longer word, so Eve also fires on "never"), a name that's an everyday word too, and the same keyword on several entries. Gentle notes come last: no example dialogue, a very long greeting, an entry far longer than the rest. Each finding names the entry or field and how to fix it, with Edit or Show me to go straight there. It reads your last save, so Save first to see a change in it.
Codex Weaver
Got lore that isn't a lorebook yet — notes, a wiki page, a chapter of backstory? Click 🧵 Weave from text, paste it in, optionally tell the model what it's looking at ("the Ashen Reach setting; the character is Ryker"), and hit Weave. Your model splits the text by subject — one entry per person, place, faction, event or rule — and proposes a name, trigger keywords and compact present-tense content for each, without inventing facts that aren't in the text. Long pastes are sent in pieces of about 7,000 characters, so a whole document works, it just takes a few calls on your key. Nothing lands in the codex until you've reviewed the list: untick what you don't want, edit names, keywords and text inline, then "Add selected". Entries the model marks as a global rule come in as constant (always in the prompt, before the character) — check those carefully, since every constant costs tokens on every reply. Then Save.
Lines replies may quote word for word
Every reply is checked before anyone sees it. One that repeats 64 characters or more of your character's own text word for word (the card, its prompts, the codex, alternate personalities, its !commands and your Library books that reach it, or a long stretch of a storyline's chapter notes) is swapped for a line in character, so nobody can talk the character into reading its card out. Your own chats with the character aren't checked against its text.
Some of your text is meant to be repeated, though: a catchphrase, a song the character sings, the notes in a status box's template that every reply copies. Under the codex, Lines replies may quote word for word takes those. Press + Add a line, paste one passage into each box exactly as it's written on the card (markup and all), and Save. Replies may then repeat them, and the rest of the card stays protected as before. Up to 20 passages, 4,000 characters in all; one under 64 characters (not counting markup) never trips the check, so it doesn't need a box. The house books that reach every character are never let through this way.
Alternate greetings
Characters can have multiple first messages (greetings). Each greeting sets up a different scenario or starting point. When you start a new conversation in the Parlor, one greeting is picked at random from the first message plus all alternates and posted as the character's opening line. (Discord bots don't post a greeting on their own — they reply once someone talks to them.)
In The Parlor, users can also cycle through your greetings with arrows under the starter message (until they reply), so every alternate you write is discoverable. Add alternate greetings in the Atelier under the "Alternate Greetings" section. Each one is a complete opening message, just like your main first message.
HTML in replies
Characters built for SillyTavern often answer with a little HTML: a status box under every reply, a <details> dropdown that keeps a secret folded away until someone clicks it, a stat table, colored text, a slow glow. Switch on HTML in replies in the Atelier (just under Can see images) and the Parlor shows that markup the way it's written, in the greeting and in every reply. It's off for every character until its creator turns it on.
Getting the character to write it
Show it in the first message (a greeting that opens with a styled box teaches the model the format faster than any instruction), or ask for it in the card or the Post History Instructions: "End every reply with a <details> box titled Stats listing HP, mood and location." CSS can sit in a <style> block or in a style="…" on any tag, and a <style> block in the greeting styles the whole chat, so the model doesn't have to repeat it. Markdown keeps working around the tags: *actions*, **bold**, `code` and line breaks.
What's allowed
Dropdowns (details and summary), boxes and text (div, span, p, headings, b, i, u, s, mark, small, sup, sub, blockquote, pre, code, hr), lists, tables, and the old favorites font and center. Tags keep their class, id, style and title. The CSS gets the same properties a character's Parlor look does: colors, gradients, borders, shadows, fonts, spacing, flex and grid, transforms, transitions and @keyframes animations, with :hover and friends.
What doesn't make it: links, pictures, video and sound, forms and buttons, scripts, and anything that loads from somewhere else (url() in CSS included). A reply's CSS only reaches inside replies, and whatever a reply draws stays inside its own bubble, so it can't cover the page or restyle its buttons. A tag that isn't on the list (<sigh>, <3) shows as typed, the way it always has, and so does HTML between backticks.
The colors someone picks in the Parlor for the words, italics and "quoted speech" reach the story part of a reply: the words outside its boxes. Whatever sits in a box the creator built (a dropdown, a table, or anything given a style, class or id) keeps the creator's design, and any color the creator wrote in the reply's CSS wins over the ones picked.
On Discord
Discord can't show HTML, so on Discord a bot with the switch on is asked to answer in plain text. Whatever HTML it writes anyway is posted as words without the tags: bold, italics, underline and strikethrough turn into Discord's own, list items become dashes, and the CSS is left out. A dropdown is left out whole, title and all, so what it keeps folded away in the Parlor stays hidden on Discord too. One written <details open>, which the Parlor shows unfolded, is posted like the rest, and so is a reply that's nothing but dropdowns.
A status box for Discord
A status box can have a Discord version of its own, so it shows on Discord too, small and tucked behind spoilers: -# ||❤️ Affection: 45/100||. In the codex, press 📟 Convert statbox to Discord and pick the entry that holds your status box (the ones that look like one are listed first). It opens with a Discord version made from it, keeping the same lines, emojis, labels and spacing, each line in Discord's small text with what it shows behind a spoiler. Look it over, change what you like, then Save Entry and Save Character. From then on, replies on Discord read that version and the Parlor keeps yours, HTML and all. Any entry can have one by hand too: tick A different version on Discord in the entry and write it, or press Convert for Discord there. Making one is a single short call on your own key. Test messages in the Atelier show the Parlor version.
Custom commands
Creators can define custom commands unique to their character. These are special triggers that make the bot respond in a specific way. They work in the Parlor too: type the same !trigger at the start of a message and the character follows the instructions there as well.
Add them in the Atelier under "Custom Commands." Each command has a name, one or more comma-separated triggers (e.g. !recipe, !cook), an optional category, and an instruction that tells the AI how to respond when that command is used. In Discord, a bot answers its own commands whenever it sees them, @mentioned or not, even in a channel where it is on auto-respond; built-in system commands like !summarize still need an @mention or reply so several bots in one room do not all answer.
How many, and how long: a character can have up to 50 commands, and each command's instruction can be up to 20,000 characters, room enough for a whole scene's worth of rules, a status box layout or a mini-game.
!recipe command that tells the AI: "Generate a creative recipe in {{char}}'s dramatic Italian style, with commentary about the user's cooking skills."
A custom command with the same trigger as one every character has (!summarize, !regen, !help and the like) takes its place for your character, so you can make those your own. The commands that run a bot in a server (!auto, !strike, !access, !forgetme and the other settings commands) always come first, so give yours a different trigger.
The Library (shared books)
Anything you'd otherwise paste into every character — a house writing style, a shared world bible, your personal set of !commands — goes in a book. Books live in the Library panel of The Atelier and apply across bots without being copied into each one.
Two kinds of book
Codex book — the same entries as a character's codex, shared. Constant entries go into every prompt (set their position to "before character" for writing directives, so they lead the prompt), and keyword entries fire on their triggers exactly like a normal codex — fuzzy matching, sticky, cooldown and the rest all work. Import a SillyTavern World Info export with "Import Codex".
Command book — a set of !commands. Add them one by one, or use "Import from World Info": each entry becomes a command, its keys become the triggers (/!sumup/ is understood as !sumup) and its content becomes the instruction. Disabled entries are skipped.
Where a book applies
My bots reaches every character you own, now and in the future. Some of my bots reaches only the characters you tick in the book: two bots can share a world's codex while your third stands alone, and a new character stays out until you tick it (you can also tick a character in from its own Shared Books panel). Everyone (admins only) reaches every bot on UnrealHQ — that's how the platform's house writing style is delivered. A book can be switched off as a whole with its Enabled toggle.
Just me (command books only, Studio and up) turns the idea around: the book follows you rather than your bots. Any bot you talk to on Discord — yours, a friend's, one from the Lobby — answers your !commands from it, on any server, and nothing changes for anyone else in the channel. If the bot already has a command with the same trigger, the bot's own wins. !commands lists yours under Yours. If the plan lapses the book stays put and simply stops answering until you are back on Studio.
Per-character control
Open a character and scroll to Shared Books: every book that reaches it is listed with a toggle, and command books also list each command with its own toggle. A book that reaches every one of your characters (a house book, or your own My bots book) also shows how many of them have it on, with On for all of them and Off for all of them to switch it everywhere at once. Commands from a book start switched off for each character — turn on the ones that fit (or use "All on") so a 50-command book doesn't land on a character wholesale. The book's author can flip that with Commands on by default in the book's settings: every bot the book reaches then answers its commands straight away, and a per-character switch-off still wins. Changes save immediately and running bots pick them up within a minute. A character's own command wins over a book command that shares a trigger, and !commands in Discord always lists exactly what's switched on.
The Muse: let the site draft a field
Next to Tagline, Tags, Description, Personality, Scenario and First Message there's a small ✨ Suggest button. Click it and the Atelier sends whatever is already on the page — the other fields and, most usefully, the codex entries you've imported — to your own model and drops a draft of just that field into the box. It's a draft, not a save: edit it, click Suggest again for another take, or clear it. If the field already has text, you're asked before it's replaced, and the model reads the old text as a rough draft to improve. The Muse runs on your API key (a few hundred tokens a go, counted against the same daily limit as chat) and needs a key on file in the Control Room.
The usual order that works well: import your lorebook, hit Suggest on Description, then Tagline and Tags, then Personality, and last First Message (which reads all of the above, so it lands in the character's voice).
Suggestions tease, they don't spoil. Description, Tagline and Tags are shop-window fields — people read them before meeting the character — so the Muse is told to write only what a stranger would see: the surface, the vibe, a hook. The secrets in your codex (backstory, wounds, hidden lore) stay secret, for users to uncover through play. Personality and Scenario are model-facing, so suggestions there still use everything.
Models this character will not answer on
Under the Public and NSFW toggles there's a box for models this character will not answer on, one per line. Some models are far more willing than others to recite the instructions they were given; if you've put real work into a character's prompting, this is how you keep it away from the ones that leak. A family name on its own covers the whole family (qwen catches qwen3.6-27b and qwen/qwen3-235b alike), * and ? are wildcards (deepseek*), and a full id such as gpt-4o-mini blocks just that model. Anyone who chats with the character on a blocked model, on Discord or in the Parlor, gets a single line back: isn't available for this character, with a nudge to /setmodel something else. Why it's blocked is never shown. /setmodel warns people at the moment they pick a blocked model for that bot, the Lobby card lists what a character isn't available on, and the rule applies to bot-carried keys too, so don't block the model your own shared key runs on. Be honest with yourself about what this buys: it removes the model that spills most readily, it doesn't make a prompt unextractable.
Next to it, Can see images decides whether pictures people attach are shown to the model at all (see The Parlor). It's on by default.
Voice
Below that, Voice is how the character sounds when it sends voice messages on Discord (see Voice messages). Pick from the built-in voices, American or British, female or male, and press Hear it to play a sample line in that voice before you save (on Studio and Headliner, the plans with voice replies, type your own line in the box under it to hear the character's actual opening). The two smaller fields matter only for people chatting on their own key: an OpenAI voice for listeners on an OpenAI key, and an ElevenLabs voice id (any voice from your ElevenLabs library, cloned ones included) for listeners on an ElevenLabs key. Leave them alone if that's not you.
Which fields the model actually sees
Description, Personality, Scenario and Example Dialogue each carry a small In prompt pill next to their label. Click it to flip a field to Not sent to the model: the text stays on the card (the Description still shows in the Lobby, the Muse still reads it for drafts) but it's left out of every prompt. That's the move when your codex already carries the character's identity as constant entries — sending the description too just repeats it on every reply. The starting-constant token figure in the Preview drops the moment you switch a field off; Save to keep it. Custom System Prompt and Post-History Instructions are always sent (they exist only to be sent), and Tagline, Tags, About, First Message and greetings are never part of the prompt.
One more pill sits on the Custom System Prompt label: Platform opener. Every prompt on UnrealHQ begins with a short fixed block from the platform — "you are a collaborative fiction author… never break character… no disclaimers" — and your System Prompt comes right after it, so nothing you write there is ignored; it simply isn't first. If your own prompt already covers that ground and you want the model to hear your words before anything else, flip the pill to off — yours leads and the opener is dropped for that character. The house book is a separate thing: switch it off per character under the Library, and Show the prompt the model received in Test Message tells you exactly what's going in and in what order.
Test before you ship
The Test Message panel on a saved character sends one line with your own API key and shows the reply, the exact prompt the model received, and its size in characters and tokens. Nothing is stored in memory. Use it to check that codex triggers fire, that a book applies, and that replies land at the length you want.
Scene Tests, just below it, keep the checks worth running before you publish an edit: an introduction, a boundary being set, a lore trigger, a persona switch, a long scene. A scene is a name, the persona you speak as (or none), up to 12 lines of history and a test line. Run sends it the way the test message goes, on your own key and to the saved character, and Run all runs every scene one after another. Each reply shows beside the last run's, with the codex entries that fired. Nothing goes into a chat or a memory, and no codex entry's sticky or cooldown count moves. The same scene won't give the same words twice, so compare how the character answers rather than the exact wording. A character keeps 3 scenes on the Free plan and 20 on a paid one.
Where your prompt goes matters. Instruction-style prompts ("you are the narrator…", writing rules, formatting rules) belong in the System Prompt field, which leads the prompt. A constant codex entry is sent every time too, but it lands under a World Info heading after the description and personality — fine for lore, weak for directives. Every prompt also ends with a short platform line that keeps replies inside one Discord message (about 300 words unless the user raises /setlength); your own instructions win over it whenever they say anything about length or format.
Co-creating a character
Up to three people can build a character with you. Open it in The Atelier, go to its Co-creators section, type their UnrealHQ name (the one on their profile and beside their messages in the Parlor) and press Invite. The invite waits at the top of their Your Characters until they Accept or Decline it, and invites still waiting count toward the three. Inviting is in beta, open to a few creators for now; anyone can accept an invite.
A co-creator opens the character in their own Atelier and edits and tests everything that makes it: the card, the codex, its commands, greetings and storyline, scene tests, test messages and the Forge's tools, on their own API key, and they can chat with it in the Parlor while it's still private. A few things stay the creator's: the Public switch, Reader feedback and the Feedback Inbox (readers are told only the creator reads what they send), Blocked Users, the profile page, exporting the card, merging a draft in, deleting it, and its bot in the Command Center. It counts toward the creator's characters alone, and its codex keeps to the creator's limits whoever adds to it. Once it's public, its Lobby card, its bot's profile and its profile page say it's by all of you, each name linking to that person's creator page when they have one, a Lobby search for any of your names finds it, and it shows on each of your creator pages.
Saving at the same time. A Save writes only what that person changed since they opened the character, so two of you working at once add onto each other: you rewrite the description and save, they add a codex entry and save, and both are kept. When you both changed the same box, codex entry or command, the later save is the one kept, and a note says which one and whose change it replaced. An Atelier with nothing unsaved brings in someone else's save by itself within about 20 seconds (once you click out of the box you're in); with changes waiting, a note by Save says they saved too, and your Save adds onto theirs.
A co-creator can Leave from the Co-creators section, and the creator can Take off anyone or cancel an invite. Either way, what they saved stays on the character.
Memory system
UnrealHQ has a multi-layered memory system that goes far beyond "remember last 30 messages." Your characters actually remember what happened.
Three layers of memory
1. Recent messages — The recent chat, sent to the AI as-is with full detail. Count it in messages (default 30, from 5 to 200) or in tokens (1,000 to 1,000,000, as many recent messages as fit), from the Control Room or with /setcontext 40 / /setcontext 32k tokens.
2. Memory books — Everything the character remembers about you beyond the recent window: memories written as the story goes, memories you make yourself, arcs and chapters folded from old ones, and the living notes. A memory comes back when the conversation touches its keywords, so the character recalls the lighthouse when someone mentions the lighthouse, without carrying the whole history every reply. This is the character's long-term memory. See Memory Books below.
3. Personal notes — You can pin up to 20 of your own notes to each channel via Unforgettable. Pinned notes are injected as established facts — perfect for things like "we agreed the character's birthday is March 5th" or "my OC's name is Luna."
Where the old summaries went
Long-term memory used to be a separate pile of AI summaries injected whole into every prompt, next to the memory book. They were two things doing one job. They are now one: every summary you had was moved into your memory book for that character as a memory (nothing deleted, they still count as always-on), and new long-term memory is written straight into the book. !summarize still works and does the same thing as !creatememory.
Quick commands
!memories — where things stand with this character here: the book, the auto-memory rule, the style, the living notes, the budget.!memories help — every memory command.!creatememory 40 (or !summarize 40) — remember the last 40 messages the character heard here, right now.!creatememories auto 50 — a memory every 50 messages here, on its own.
Unforgettable
The Unforgettable page gives you full control:
- View and edit individual messages in any channel — both your messages and the character's replies to you (in a shared server channel, replies to other people stay out of your view)
- Add, edit, or pin personal memory notes
- Manage your Memory Books: read what a character remembers, every chat in a folder of its own, correct a memory, pause it or mark it outdated, copy memories to other chats, rewrite one from its messages, fold old ones into an arc, import and export
- Keep a scrapbook for each character (in beta): stickers, your photos, their portrait and your own writing, page after page
- Delete messages or entire conversations
- Look up any channel by Discord Channel ID
- Import and export conversation history
- Continue a Discord scene in the Parlor (below)
A Discord scene, continued in the Parlor
Playing a scene with a character on Discord and want to pick it up on your own? Open the channel in Unforgettable and press Continue in the Parlor. Pick the character, when the room has more than one, and how many lines come along: the last 50, 100, 200 (the default), 500, or all of them, up to what a Parlor chat on your plan keeps (the newest 200 on Free) and never more than 25,000, as with a chat file. The scene ends with the newest line; to end it sooner, press End here under the line it should end with. Before anything is made you see what comes over: how many lines, the first and last of them, the persona you play there, and the memories of that channel.
Only your own lines and the character's replies to you come along. Tick Bring other people's lines too to keep the rest of the room as Someone, with no names, from your first line in the scene to your last. Their lines stay theirs: one deleted on Discord, struck, or forgotten with /forgetme leaves your Parlor chat too. The memories pinned to that channel are copied into the new chat's own book, or on the Free plan, while your book for every chat with the character is on and has room for them, kept to the new chat in that book; you're told when some can't come. The character must be one you could open a Parlor chat with (public or yours, adult content turned on for an 18+ one, and not a bot that blocked you), the new chat counts as an open conversation like any other, and the scene on Discord carries on as it was.
Memory books
A codex tells the model who the character is. A memory book tells it what happened between the character and you — a book of entries for one chat, or for every chat you have with them. A memory stays in the chat it was made in unless you share it with every chat with the character.
Where a book applies
Every memory book has a scope, set when you create it and changeable any time in Unforgettable → Memory Books:
- Character — one character, or every character you talk to. "Memories with Dante" speaks wherever Dante is; a book set to every character is for things about you that any character should know.
- Chat — one specific chat (a Discord channel, a DM, a Parlor conversation), or every chat. Different chats can carry different memories: pin a book to the campfire thread and it stays out of your other timelines with the same character. An every chat book travels with you in the Parlor, in DMs and in servers you manage (Manage Server); in someone else's server the character keeps only the memories made in that chat, so your history with a character never sets the scene for the people already there.
Both filters apply together, so "Dante + this chat" is the narrowest a book gets and "every character + every chat" the widest. A book you switch off is silenced everywhere without losing anything.
Unforgettable shows them two ways, under a tab per character (with one more for books that reach every character), opening on the character you were with last: Memories, your memory home (below), and Books, the books themselves, where you make one, import, export, fold and change a book's settings. Among the books, the one for every chat comes first, then each chat's own book, named for its chat: its title if you gave it one, or the day it started. The page remembers which of the two you picked.
Your memory home
In Unforgettable → Memory Books → Memories nothing needs sorting: your memories with a character file themselves. The ones for every chat sit on a shelf at the top, then every chat is a folder of its own memories, the chat you were in last first. Inside a chat's folder, an arc or chapter holds the memories it was folded from (open Folded from… to see them), and its living notes sit together at the end. A Parlor chat's folder can open the chat, and Its book opens the book behind it for its tools.
Each memory is a card that says in plain words what it does: Always remembers or Remembers when it comes up (and on which words), This chat only or Every chat, and whether it's paused, outdated, in your own words, or copied from another chat. Under it: Edit, Pause (the character stops bringing it up until you Resume it), Copy to chats, and under More the rest: see its lines, remember it in every chat or keep it to its own, put it in a folder, mark it outdated, delete it.
Folders of your own are only if you want them: Put it in a folder files a memory under a name you choose inside its chat, and a folder goes away once it's empty. Where a memory sits never changes what it does. The search looks through every memory with the character (titles, words and keywords), and the filters show only the ones always remembered, the ones that come up on words, or the paused or outdated ones.
Copy to chats
A memory stays in the chat it was made in. To have it in another chat too, an AU, a branch you started over, a chat with another character, use Copy to chats on its card, or Copy them all to other chats on a chat's folder for every memory kept to it (an arc comes with what it was folded from). Tick the chats it should go to: your other chats with the character come first, then your Parlor chats with other characters. Each chat gets a copy of its own, so changing one never changes another, and no chat ever shares a book with a different one. A chat that already has the memory isn't given it twice. In the Parlor, the same button is on each memory kept to the chat in ✦ Memory → What it remembers here, with Copy them to other chats at the end. A copy keeps no lines of its own (they're in the chat it came from), so See the lines opens those, and auto memories in the new chat carry on from its own lines. On the Free plan a copy goes where any memory for that chat would, as far as the book has room, and you're told how many didn't fit.
What a reply remembered (🧠)
Under a reply in the Parlor, 🧠 with a number shows how many of your memories the character had in mind writing it. Press it to see them, as they are now: Fix it puts one in your own words right there (the character keeps them, as a correction in Unforgettable does), and Pause stops one coming up until you resume it. Each version of a reply keeps its own, so swiping back to an earlier one shows that one's; editing a reply's words leaves it without, since they're no longer the reply the memories were for.
How memories come back
Entries work exactly like codex entries, on the same engine. A keyword memory surfaces when one of its keywords appears in the conversation (fuzzy matching catches plurals and close spellings, and the last three lines are scanned, not just the newest); an always memory is in every reply. Memories are private to you — the character's creator never sees them, and other people talking to the same bot don't get yours. Memory books have their own token budget per reply, separate from the codex: 4,000 tokens on Free, 6,000 on Starter, 8,000 on Studio, 12,000 on Headliner. When more memories fire than fit, the living notes and the newest memories are kept and the oldest wait their turn (folding old memories into an arc keeps them in reach, see below).
How a memory is written
Every memory on the platform is written the same way, whether a rule wrote it or you asked for it: the character's memory writer reads the stretch of conversation, the last three memories already in the book (so it continues the record instead of repeating it), and a style, then hands back a title, the in-story time if the chat said it, 8 to 20 keywords (concrete things from the scene, never your name or the character's, so a memory does not fire on every line), and the memory itself. It also stores which messages the memory came from, so it can be rewritten later, and it refuses to save a near-copy of the previous memory.
The styles, chosen in the Control Room → Memory, per chat with !memories style journal here, or per memory with /creatememory style::
- Brief — a few sentences: what happened and what changed. The free plan's style.
- Story — beat by beat in prose, everything that would matter later. The default on paid plans.
- Journal — in the character's own voice: what they noticed, felt and learned about you.
- Ledger — a structured record: when, what happened, what changed, what is still open, what is worth quoting.
- Table — for group scenes: who did what and who knows what, kept clearly apart.
- Custom — your own instructions, written in the Control Room. You decide the voice, the length, what to keep and what to drop; the writer still handles the title and keywords.
A creator can suggest a style for their character in the Atelier; your own choice always wins. !memories styles lists them from any bot.
Three ways to fill one
Make a memory from a conversation. On Discord, /creatememory (or @Bot !creatememory 40) turns the last N messages the character heard here into a memory, or everything between two message links (right-click a message → Copy Message Link, for from and to). Add about: to say what to focus on, style: to pick how it is written, and scope: This character, everywhere (or everywhere after !creatememory) to share it with your other chats with that character. In the Parlor, the ✦ Memory button in the chat header does the same with checkboxes: tick the messages (or pick them by number, from #52 to #87 say, or the last 30), pick a style, get a draft, fix anything before saving (Applies starts on In this chat only; Everywhere I talk to this character shares it). The numbers are each line's place in the chat, the greeting being #0, and Chat Settings can show them over the messages. The memory lands in the book of the chat it was made in, or, shared, in your book for every chat with the character, either one named after the character and created for you if you don't have one. On the Free plan a chat with no book of its own yet doesn't get one while your book for every chat with the character is on and has room: its memories go into that book, kept to the chat, so your other chats still don't bring them up. When the book a memory needs would be a fourth, it isn't saved, and you're told so. !memories undo takes the last one back; !memories redo writes it again from the same messages (paid plans; Unforgettable has a Rewrite button for the same thing).
Import a lorebook. Open a book in Unforgettable and use Import lorebook (.json) — SillyTavern World Info exports, character_book files and our own exports all work, and the entries keep their keywords, constant flags and settings. Export gives you the book back as a World Info file.
Write it yourself. + Add memory in any book: a title, keywords, the memory, and whether it's always on.
Auto memories (paid plans)
On any paid plan the character writes memories on its own as the story goes: every 50 messages by default (Control Room → Memory, 10 to 200, or 0 to turn it off everywhere), in every chat, from your first reply there. Each rule keeps a checkpoint: a memory covers exactly the messages since the previous one, so nothing is remembered twice and nothing falls in a gap, and a memory you make by hand moves the same checkpoint. !creatememories auto 40 (or /creatememory auto:40) gives one channel its own cadence, its memories kept to that channel; auto 40 everywhere shares them with every chat with the character; auto 40 journal picks a style for it; auto off turns it off there and it stays off; !creatememories auto alone shows the status. It's per account, per bot, per channel, so a friend in the same channel gets their own memories. If your key stops working or the book fills up, the rule pauses and the bot tells you once in DMs; set it again once that's fixed. The Parlor has the same thing under ✦ Memory → Set and forget, where this chat only starts ticked (untick it to share the memories with every chat). In the same box, Remember up to now sits above the ways to pick messages, and Undo last memory at the end of What it remembers here; both work on every plan, Free included. Remember up to now writes one memory from the messages since your last memory, as many as fit in one memory (up to 200 messages and about 24,000 characters of chat, so fewer messages when replies are long); whatever doesn't fit waits for the next press, and it says how many are left.
Living notes (Studio and Headliner)
A memory is a record of what happened. A living note is a note the character keeps and rewrites as the story goes, always in mind in that chat: Plot threads (the open threads and where each stands), What the character knows about you (their private notes on you: facts, habits, wants, promises) and Cast (who else is in the story). Turn one on with !memories track plot on, track knows on, track cast on (or the checkboxes in the Parlor's memory box); every 40 messages it reads the new lines and its own previous text and writes the note again, so nothing piles up. !memories track plot now writes it right away, track plot off removes it, note and all. Headliner accounts can write their own: !memories track custom "Debts" keep a list of who owes whom what. On someone else's character, a note you write is kept in words: one that asks for a meter, a score out of a number or a progress bar is turned away, since a character chasing a number warms up too fast (a note on how the character feels about you is fine). On a character of your own, that's your call. Notes live in your memory book as living note entries, so you can read and edit them like any memory.
Folding into arcs and chapters (Studio and Headliner)
A long story fills a book with scene memories. !memories fold (or Fold in Unforgettable) takes the oldest five to twelve and writes one arc from them, with its own keywords; the originals are switched off, never deleted, so the arc speaks for them and the budget holds the shape of the whole story instead of its first twenty scenes. Five or more arcs fold into a chapter the same way (!memories fold arcs). !memories unfold puts the last fold back exactly as it was. !memories tells you when a book is ready to fold.
Setting a memory straight
When a character remembers something wrong, put it right where the memory lives: in Unforgettable → Memory Books, or in the Parlor under ✦ Memory → What it remembers here, which lists the memories that chat brings up.
- See the lines: opens the chat a memory was made from at the stretch it covers, with those lines marked: a Parlor chat in the Parlor, a Discord channel in Unforgettable. A memory written by hand or imported has no lines, and says so.
- Correct (Edit in Unforgettable): change what a memory says and it is marked corrected. Your words are what happened from then on: the memories written after it take them as the truth, a fold leaves it on its own as you wrote it, and no rewrite writes over it.
- Mark outdated: for something that was true and isn't anymore. The memory stays in your book, dimmed, with the day you marked it, but it no longer reaches the character, always-on or not, and no new memory is written from it. Bring it back undoes it.
- This chat only: a memory in your book for every chat with a character moves into the book of the chat you're in, so your other chats with them stop bringing it up (a branch that went another way, say). Every chat does the reverse. In Unforgettable the buttons read Only its own chat (the chat the memory was made in) and Every chat. On the Free plan a chat with no book of its own yet doesn't get one while your book for every chat is on: the memory stays there, kept to the chat you're in. A book that's switched off takes no memory until you switch it on, and an arc moves with the memories it was folded from.
Only you can do any of this, and only to your own memories.
A separate memory model (Studio and Headliner)
Memories are written on your own key. Studio and Headliner accounts can point the memory writer at a different provider and model than they chat with (Control Room → Memory), so a cheap fast model writes the record while the expensive one plays the scene.
/creatememory asks you to link your Discord first. Once linked, a memory made in a server goes into your memory books on the site, and one shared with every chat is the same memory the character has in the Parlor.
Scrapbooks
A scrapbook (in beta, for a few people for now) is a book you keep by hand for a character, one for each: a cover you pick and decorate, and pages you fill with stickers, your own photos, their portrait and your own writing. Nothing in it reaches the character or anyone else. It's yours alone, to read and to add to. Your books are in Unforgettable → Scrapbooks, each showing its cover as you decorated it. New scrapbook starts one: who it's for (your own characters and the ones you've talked with), a title for its cover, and one of ten cover designs. How many books you keep depends on your plan: 1 on Free, 3 on Starter, 6 on Studio and 12 on Headliner.
Reading it
A book opens where you left it, and turns like a real one: press the right side of the book or › to turn the page, the left side or ‹ to turn back, or swipe. The arrow keys turn it too, Home closes it on its cover and End on its back. On a wide screen it lies open two pages at a time; on a phone or a narrow window, one page at a time.
Decorating it
Press Decorate at the top. The tools along the bottom put things on the page you last touched, or on the cover:
- Stickers: our own sticker packs, made for UnrealHQ, with a search. Some packs come with a plan, or as a gift from us, and the drawer shows the ones you have.
- Photos: upload your own (PNG, JPG, WebP or GIF up to 10 MB, seen only by you), put a photo already in the book on another page, or add the character's portrait, their picture as it is now.
- Writing: a love letter, a journal note, calligraphy, a typewritten card or a caption, a prompt to start from, or a few lines about one of your memories with them: pick it, and a note about that moment is written in your own voice, on your own API key (without one, a sentence or two of it is quoted). You type straight onto the page. Or the character writes you a letter (below).
- Pages: the page's paper (plain, cream, lined, grid, kraft, blush, lavender, a night sky, or one of our designed pages with its borders already drawn), and adding or taking out pages. A book holds up to 30.
Press a thing to pick it, then drag it where it goes. The corner handle sizes it, the round handle above it turns it (it settles square when it's close), and writing has a handle on its right for how wide its lines run. On a phone, two fingers pinch and twist the thing picked. The bar along the bottom shows what it can do: flip a sticker; frame a photo (polaroid, taped, torn edges, round, postcard or plain); give writing another hand, bold letters (easier to read on a busy page), size, ink, alignment or something to be written on (a card, a ribbon or a tag); and for anything, bring it to the front, send it to the back, copy it, lock it so it can't be moved by accident, or delete it. Press writing that's picked, or double-click it, to type into it.
With a keyboard, Tab reaches each thing on the page, the arrow keys nudge it (further with Shift), Delete takes it off, Ctrl+D copies it and Escape puts it down; Ctrl+Z undoes and Ctrl+Shift+Z redoes (⌘ on a Mac).
A letter or a page from them
The character can add to the book too, written on your own API key (add one in the Control Room). In Writing, Have them write you a letter; in Pages, Let them make a page. Either asks which of your chats with them to remember, since two chats can be two different stories, and, if you like, what it should be about. A letter is in their own voice, from that chat's memories, its latest lines and who they are. A page is theirs to put together: the paper, stickers from our packs, a few notes in their own hand, and a photo of a moment, made on your image model (untick With a photo to leave it out). You see it first: Keep it puts it on the page you're on if that's empty, else on a new page after it, and Undo takes it back off; Write another or Make another tries again, and a photo you don't keep is thrown away.
Everything saves itself a moment after you change it, and Saved shows at the top. A book open in two tabs never has one tab's save quietly written over by the other's: a page saved from the other tab comes back as it is now, and you're told. Renaming the book, changing its cover design and deleting it are under ⋯ at the top. A book stays when its character is deleted, under the name they had.
Web chat (the Parlor)
The Parlor lets you chat with any character directly in your browser, no Discord required. Great for testing a character before you invite the bot to a server, or for private conversations that don't need a Discord channel. + New Chat lists your own characters, published or not (the Atelier's character cards have a Chat button too), and the Lobby has everyone else's public ones.
What you can do in the Parlor
- Walk away mid-reply. Once you hit send, the reply is written on the server, not in your tab. Minimize the browser, switch apps on your phone, lose signal for a moment: the character finishes anyway and the finished line is waiting when you come back, the way it works on Discord. That holds for a reply that hadn't started yet when you left, and for a chat you reload or open again: it shows the typing dots until the reply is in, and a reply that couldn't be written says why, right where it would have been. Only the Stop button (the ■ where Send was) cuts a reply short, and even then what was already said is kept. A chat writes one reply at a time: while one is on its way, sending again (from another tab, say) is turned away until it finishes or you press Stop, and so are edits, deletes and swipes in that chat (here or in Unforgettable), so nothing changes under a reply while it's being written.
- Drafts. What you type and haven't sent yet stays with its chat on this device: open another chat, reload or close the tab, and it's waiting in the box when you come back to that chat. Sending it or emptying the box lets it go, and signing out clears every draft.
- Pictures. The 📷 button (or pasting an image into the box) attaches up to two pictures to a message. The character sees them for that one reply if your model can take images (GPT-4o, Claude, Gemini and the vision variants of Llama and Qwen can; many cheaper models can't, and then the reply is to your words alone and you're told so). The picture itself is never stored: the character keeps a one-line memory of what it saw on your message instead, so it can refer back to it later without the image being sent again on every turn. On Discord, any image you attach to a message works the same way. A creator can switch this off per character in the Atelier.
- Talk to any of your own characters, or any character its creator marked Public in the Atelier, directly from the browser. NSFW characters require the explicit-content opt-in in your Control Room settings.
- Replies stream in as they're generated. Under the last reply, ◀ 1/1 ▶ are swipes: ▶ asks for another take on the same line and keeps the old one, so you can flick back and forth and settle on the one you like (the one showing is the one the character remembers). The header's Regen does the same thing.
- Continue under the last reply makes the character carry on from exactly where it stopped, without a new line from you. Good for replies that ran out of room, or when you just want more.
- Formatting works as it does on Discord:
*italics*,**bold**,__underline__and`code`, in your lines and the character's. - While a reply is streaming the send button turns into a red ■ Stop. Click it and the character stops mid-sentence; whatever had arrived stays in the chat (and in memory), so you can answer it or hit Regen.
- The 🗑 button in the header deletes the open conversation outright (the sidebar menu still has Rename, Archive and Delete).
- On Discord the same rewrite is
@Bot !regen, or react 🔁 to the bot's last reply: the bot edits that message in place with a fresh take. Only the person it was answering can ask for one, since the reply is written for them. - 🔇 Mute a message on Discord. React 🔇 (
:mute:, or 🙈) to one of the bot's replies and that bot stops reading it: the message stays in Discord but leaves the character's memory (the person it answered, or a channel admin; the bot adds its own 🔇 to confirm). React 🔇 to your own message and every bot in the channel stops reading it. Take the reaction off and it comes back. Handy for OOC asides, typos you'd rather the character never saw, or a reply that went somewhere you don't want remembered. - Every message has Edit and Delete, the character's replies included. Editing a reply rewrites it in place and that version is what the character remembers from then on. Editing your own line offers Save (nothing else moves) or Save & re-answer (everything after it is dropped and the character answers the new line). Delete removes one message from the chat and from memory, or this and everything after to cut a stretch that went sideways. Hide under any line keeps it on screen, grayed, but the character stops reading it (the same switch as the 🔇 reaction on Discord); Unhide puts it back. Select, beside it, lets you tick several messages, or everything above one with All above, and hide or unhide them together.
- Persona. The chip in the header shows who you are in this chat; tap it for your persona cards (picture, name, a line about them) and pick one, or None. Your own messages wear the persona's picture, and the greeting calls you by the persona's name; pick another before your first message and the greeting changes to the new name. Pictures are set in the Control Room under Personas: upload one or paste a link.
- ⚑ Checkpoints. Pin a message (from its menu) and give it a name, like "before the harbor wall". Checkpoints in the header lists them: tap one to jump there, or Branch from it.
- 🔍 Find. Find on the line under the character's name (on a phone, in the header's ⋯) looks for a word or a few in every message of the chat, the oldest too, and lists the ones that say it, newest first, each with its number and who said it. Tap one and the chat goes there, bringing in the earlier lines it needs, the message lit up for a moment. Open Find again and what you found is still there.
- ⋔ Branches. Branch from here on any message starts a new chat that is a copy of this one up to that message, with the memories the character had written by then. The original chat does not change at all; the branch is its own conversation in the sidebar (marked ⋔), and you can pick up either one. Delete the original and its branches stand on their own. Branches count as open conversations on the Free plan.
- On a phone every message has one ⋯ button that opens its options (versions, Continue, Edit, Copy, Hide, Select, Delete, Pin, Branch), and you can swipe the last reply left or right to change versions. The header's ⋯ unfolds the chat tools.
- Put it on your home screen and UnrealHQ opens like an app, straight to the Parlor: on an iPhone, tap Share, then Add to Home Screen; on Android, open the browser's menu, then Install app or Add to Home screen. On an iPhone the home-screen app keeps its own sign-in, so you sign in once inside it.
- ✦ Memory in the header turns part of the conversation into an entry in your memory book: tick the messages (or give their numbers, from one to another, or how many of the last ones), review the draft, save. Under What it remembers here it lists the memories the chat brings up, to set one straight or copy to other chats. Under a reply, 🧠 shows the memories it was written with.
- Until you send your first message, the starter greeting is yours to shape: use the ◀ ▶ arrows under it to cycle through the character's alternate greetings, or ✕ Start blank to remove it entirely and open the scene however you want (a chip brings it back if you change your mind).
- Sort. Above your chats, Sort puts them in order: Most recent (the newest line first, as they start), A to Z by character, or Most messages first. With chats from several characters, the characters come in that order too, each one's chats inside it in the same order. A pinned chat stays on top, and your choice is kept on this device.
- 📌 Pin to top. Right-click a chat in the list (or press and hold it on a phone), or tap its ⋮, and choose Pin to top: it stays above the rest, marked 📌, however long since its last line. Unpin in the same place puts it back in order. A pinned branch sits at the top on its own rather than under the chat it came from, and archiving a chat unpins it.
- Rename, archive/unarchive or delete conversations from the sidebar. On the Free plan the Parlor keeps 30 open conversations; archive or delete one to start another (any paid plan removes the limit).
- Import an existing chat history file (JSONL or JSON) and continue the conversation. A long chat opens on its newest 200 lines and brings in the ones before as you scroll up, so even one of thousands of lines opens quickly on a phone.
- Review, export, or delete the conversation later in Unforgettable.
🎭 The Balcony
Want an audience? 🎭 The Balcony, under the typing box (in the chat tools under ⋯ on a phone), opens a crowd beside the chat that watches your scene and reacts to it like fans in a live chat. Each chat has its own crowd: the first time they react, a handful of regulars take their seats with handles that fit your story, and the same faces keep coming back, so you get to know them. Say something in the box at the foot of the panel and they answer you. And they don't cheer every win: at least one regular is hard to impress, so a move that came too easily gets called out.
- Their style, under ⚙ in the panel's bar: Unreal (Discord chat energy: keyboard smashes, "HEATED", "wheezing", dark romance swooning), Fan forum (readers in the comments, chapter by chapter), Play-by-play (sports commentators calling every move) or Gossip column (society columnists and their readers, scandalized).
- How often they react, in the same place: after every reply, after every third reply, or only when you press 📣.
- Where it sits is up to you: on the right, on the left or under the chat, with the three small buttons in its bar. Tap its name in the bar to fold it away to just the bar; tap again and it opens right where you left off. On a phone, or in a window too narrow for it beside the chat, it sits under the chat, and while your keyboard is up for the chat it folds to its bar so the scene has the room.
- No spoilers. The crowd reads only the chat's newest lines, never the character's card, codex or story, and the character never reads the crowd. On this reply over a burst takes you to the reply they're reacting to.
- Each time the crowd reacts is one short call on your own engine, like a reply, so it runs on your key or credits.
- The crowd's comments stay with the chat (its newest 500) and go when the chat does. Turn it off for a chat with the ✕ in its bar.
- Creators can keep a character's chats off The Balcony with The Balcony can watch in the Atelier.
🧭 The Map
A map of your story beside the chat, in beta for a few people for now. Open it with 🧭 Map in the chat tools (under ⋯ on a phone), or with See them on the map under Checkpoints. Like The Balcony, it sits on the right, the left or under the chat and folds to its bar, and ⤢ lifts it over the page, bigger. Under the chat (where it always sits on a phone), pull its bar up for a bigger map and down for more of the chat, and it stays that tall. The two tabs at its top are its two views of the same story:
- World puts the story on the character's map: the places your chat has been, the route each chat took between them (every branch in a color of its own), and its moments where they happened, from the opening to your checkpoints and the spots where a branch began. Tap the little marks under a place, or open The story here under the map, to peek at a moment, go to it, or branch from it. It opens close on the places you've been: + and − zoom (so do two fingers on a phone, or Ctrl with the scroll wheel), drag a zoomed-in map to look around (on a phone, two fingers move it, and one finger scrolls the panel), and ◎ brings it back to where the story has been.
- Story, what the branch map was, draws the chat and every branch as a constellation, like the World Builder's map: the chat you began with in the middle, its branches in a ring around it, and branches of branches further out, each a circle with how many messages it has. Your checkpoints and the spots where a branch began are dots around each chat, and every branch's line grows out of the dot it began at. Tap a dot to peek at it, go to its line, open its chat there, or branch from it; tap a circle to open that chat's newest moment. What's open lights up its way back to the middle. It moves like World: + and − zoom (so do two fingers on a phone, or Ctrl with the scroll wheel), drag it to look around (two fingers on a phone), and ◎ brings back the whole story. List, above it, shows the same story as rows instead, and the map remembers which you picked.
- ✨ Plot suggestions, under You're here in the Story view, offers a few routes you could take next (on the map they hang off You're here on golden dashed lines, and tapping one opens it), each with a teaser of what you'd try and its mood (Romance, Mystery, Cozy and so on). A route is only what your character sets out to do, never how it turns out: that's still the story's to tell. They're ideas for you: open one to see the line you'd start it with, then Use it to put that line in your message box to change or send, or Try it in a branch to start a new chat from here with it. Generate new routes asks for others. Only you see them: the character reads nothing but what you send. Each ask is one small call on your own key.
- The fog. Every place on the map stays under fog until your chat has been there. Each chat keeps its own fog, and a branch starts with the fog and the route its chat had.
- Where is everyone? When the map opens, if anything was said since it last looked, and whenever you press it, a short check on your own key reads the chat's latest lines, puts you, the character and its side characters at their spots, and adds the places the story went to its route. The first time it looks at a chat that already has a story, it reads your memories of that chat too, so the places you went before the map came along come out of the fog in order. Someone at a place you haven't been shows as somewhere you haven't been yet. It's one small call on your key or credits, and nothing on the map ever reaches the character. A look takes as long as your model does, sometimes most of a minute: if your phone sleeps or the connection drops in the meantime, the map picks up what it found once you're back.
- Look further back, under where everyone is, reads an earlier stretch of the chat itself for places the map missed (a memory can pass a place over): as much as your model has room for each time you press it, so most chats are read to their start in a press or two. Beside it the map says how much of the chat it has read so far, until it has read the whole story. Each press is one call on your key, a bigger read than Where is everyone?.
- Auto, the small switch beside it, has the map look by itself every 10 replies, so the route keeps up while you play. It starts off, and each look is the same small call on your key.
- Make a map. A character whose creator didn't give it a map can have one made for you: your own key's image model draws its world, its places pinned for you, and the map is yours for every chat with that character. Drag a pin that landed off its place (once you've been there), and Make it again for a new one. It needs an image model on your provider (OpenRouter, Electron Hub, OpenAI and others have them; a managed key's plan may too), and it's charged as your provider charges for a picture.
- For creators: the Atelier's World map section gives your character a map of your own. Upload a picture or press Make a map to draw one from the card on your key, then tap the map to pin its places, name them, and drag them where they belong. Add its side characters, with pictures if you like, and Save: it's part of the card, so co-creators can work on it too.
Make it look like yours
The ⚙ panel opens with Engine: which provider and model this chat runs on. Pick a model from the ▾ list, searchable as you type (it comes from your provider; you can also type one) and choose whether it applies to this chat only, to this character in every chat, or to every chat as your default. Switching provider is always account-wide, since each provider has its own key. In the Parlor everyone chats on their own key: a key a creator attaches to a bot answers people without a key on Discord only. The character's creator (or the bot's owner) can run their own chats here on that key, and then the model is the one chosen for the key and cannot be changed here. The small ‹ tab on the edge of the chat list tucks it away so the conversation has the whole window; the › tab on the left edge brings it back.
Under it, Messages has switches for a small line over each message, all off to start: Message numbers (each line's place in the chat, the greeting being #0), Token counts (for a reply, the count your provider sent with it; otherwise about four characters a token, and marked "about"), How long each reply took to write (shown while the reply reads as it was written: not for one edited since, an earlier take, or a reply from before these switches), and ✦ on lines already in a memory, which marks every line your memories of this chat already cover (point at the ✦ to see which memory). They are saved with your look, so your phone shows the same, and Reset to Default turns them off with the rest.
The ⚙ panel is also where the Parlor's look lives. My looks sits at the top; Colors, Appearance, Share a theme code and Custom CSS fold away underneath (tap a heading to open it; the panel remembers which ones you leave open). Start with a color preset or your own four colors, then Appearance: a background picture (with dim and blur so the text stays readable), frame art for the top bar and the typing box, a font (built-in ones, or paste a Google Fonts link and the font's name), text size, separate bubble colors for you and the character, a color of its own for the words in the bubbles, for italics and for "quoted speech" (each one off until you pick it, and Clear gives it back to the theme), bubble roundness and see-through, avatar size, shape and a frame picture around them, the chat's width, a picture for the send button, and under More pictures art for the round buttons, for each side's speech bubbles, the sidebar, the settings panel and even the mouse cursor. Picture fields take a link to an image (right-click a picture online → Copy image address). The Custom CSS box under it takes anything the fields don't cover; quoted speech in a bubble is marked .msg-quote, so it can be styled there too.
Keep your looks. My looks in the same panel is a shelf: name what you are wearing and Save current, then switch between saved looks from the dropdown whenever you like. Export file downloads a look as a small .uhqtheme file you can send to anyone, and Import file takes one back and puts it on your shelf under the file's name. The shelf lives on your account (Free 5, Starter 10, Studio 15, Headliner 24).
Gifted looks. Now and then UnrealHQ places a look on an account's shelf as a gift, for an event or a promotion. It shows up marked ✦ gifted, does not count against your shelf, and you wear it like any other. It stays with the account it was given to: while it is on, the theme code, Export file and Save current politely refuse, and the picture links stay hidden. Switch to another look whenever you like; the gift waits on the shelf.
Share a look. Copy theme code turns the whole thing into one uhqtheme: string; anyone can Paste a theme code and have it. Creators can ship a look with a character: paste a theme code into the Atelier's Parlor look field and everyone who chats with that character gets it, unless they untick Use a character's own look in their own panel. A character's look keeps its @keyframes animations to itself: one named like an animation of the site's (fadeIn, say) plays where the look uses it and leaves the site's own alone. Your look is saved to your account, so your phone shows what you set on the computer once it loads the Parlor. The settings panel closes with its ✕, with Escape, or by tapping anywhere outside it.
Group chat & multi-user awareness
UnrealHQ bots are built for group dynamics. They don't just talk to one person — they're aware of everyone in the room.
How it works
The bot saves every message in a channel to its history, even messages not directed at it. This means:
- Cross-user context: If User1 tells the bot "I love pizza" and User2 later asks "what does User1 like?", the bot knows.
- Natural group dynamics: The bot can address multiple people by name, react to conversations between users, and make everyone feel included.
- Individual recognition: Each person's preferences, relationship history, and personality are tracked separately.
- One reply at a time: When several people ping the bot at once, it answers them in turn, in the order they asked, and each reply is written knowing the one before it, so answers never cross.
What a bot can see in a message
Words, and more: pictures (up to two a message, when the character's creator left Can see images on and the model can take images), stickers (by name, and as a picture too for a character that looks at pictures; animated Lottie stickers come through by name only), forwarded messages (their words and pictures, marked as forwarded), and voice messages wherever it hears them (see Voice messages). A message that is only a file it can't open, like a PDF or a text file, gets a short out-of-character note ("I can't open that kind of file. Could you paste the text, or tell me what's in it?"), and the file isn't kept; words sent along with a file are read as usual.
Several bots in one channel
Bots see each other too. Every message another bot posts is saved into the history as a named speaker, so your character knows what the other characters said and can react to it. Left alone they only observe; a bot answers another bot only when that bot @mentions it, and only for a couple of exchanges after a human last spoke in the channel, so two characters can never chat each other into an endless loop.
Texting instead of a scene. Not every channel wants prose. Anyone with Manage Channels can type @Noah !messaging on and from then on that bot answers in that channel like a person typing in Discord: first person, in the moment, no narration or asterisk actions, a line or three at a time, their own slang and punctuation. Memory, commands, keywords and keys all work exactly as before; only the way they talk changes. Other bots in the channel carry on as they were until you switch them too, so one room can hold a texter and a narrator side by side. @Noah !messaging off brings his scene writing back. Creators decide per character whether it joins in (the !messaging mode choice in the Atelier, asked once when a character is made); a character set to Off keeps roleplaying in that channel and says so once. How bots text you is yours to pick, in the Control Room under When a bot texts you: Texts only (the messages alone, as above) or Texts with a brief action, where the character adds a short action of their own now and then, like *leans forward and adjusts headset*. It goes by whoever the bot is answering, so everyone in the channel gets the style they picked.
Making them talk to each other (a scene hand-off). You start it: @Alex ask @Kaito what he makes of the plan. The first @ is who you are talking to; a bot @'d later in the sentence is being talked about, so Kaito listens rather than answering you himself (put both names up front, @Alex @Kaito, thoughts?, when you want both). Alex is told which other characters are in the room (the bots that have answered in that channel), and when his reply addresses Kaito as @Kaito Weiss that becomes a real mention, so Kaito answers; if Kaito hands it back the same way, Alex gets one more turn, then they wait for a human. The characters are told how this works: in a room with other characters, writing @Name in a reply is how they pass the scene on, and they are asked to do it only when they want that character to speak next. Those bot-to-bot replies run on the key of the person who last spoke in the channel, with that person's model, persona and memories, so a scene you start is yours: if you have no key on file the bots stay quiet rather than nag. Two bots, two mentions in one message, and you get both perspectives at once. The exchange budget is two replies per human message, and any human message resets it, so a steady hand keeps a whole cast going. Two guard rails keep it in your hands: a bot can only be pinged if it has already answered in that channel (a bot that merely lives in the server stays plain text until a person brings it in), and anyone with Manage Channels can set the budget per channel with @Bot !tagging off (bots never hand the scene to each other there, and aren't told to try), !tagging 1 through !tagging 10, or !tagging on for the default; !tagging alone shows the current setting. Only bots get pinged this way: an @Name in a reply that matches a person stays plain text.
How chatty should a bot be?
Three behaviors, chosen per channel by a server admin (Manage Channels, Manage Server or Administrator):
- Silent unless spoken to (default) — answers only when @mentioned, replied to, or in DMs. Nothing to set up.
- Always reply —
@Bot !auto on(or the/autoslash command). The bot answers every message in that channel like a member of the conversation. Add!auto cooldown 30so it never fires more than once every 30 seconds. - Chime in sometimes —
!auto onthen!auto chance 25(or/random 25): the bot joins in on roughly a quarter of messages, which reads far more like a person. Add!auto keywords add coffeeand its topics always get a reply on top of that, whatever the chance; set the chance to 0 and it speaks only when its keywords come up.
Back to quiet with !auto off (or /ping). !auto on its own shows the current settings, and the same controls live on the Servers page per channel. Details in Auto-Respond Mode.
Each bot has its own behavior per channel. @Si Woo !auto chance 30 makes Si Woo chime in while Dante, in the same channel, stays quiet — the bot you @mention (or whose slash command you use) is the one that changes. The Servers page shows a "Per-bot behavior" row for every bot in the server, with a channel-wide default underneath it for bots you haven't set individually. !auto default puts a bot back on the channel default. Settings are stored permanently; they never expire or need repeating.
Striking the set: resetting a channel
A public channel accumulates. After a few weeks of everyone playing, the bot is carrying every earlier scene at once and has agreed to marry half the server — and one determined god-modder can drag the whole room's story with them. Theater crews call clearing the stage after a show striking the set, so that's the command. In a server, anyone with Manage Channels, Manage Server or Administrator can use it; the server's admins decide for their server, whoever made the bot. In a DM with a bot, you can strike your own conversation any time.
@Bot !strike (or /strike now) makes that bot forget everything said in this channel or thread, right away, no confirmation — its stored lines and memory blocks are deleted outright, and the next message is a clean first meeting. Each bot keeps its own memory of a channel, so striking Dante leaves Si Woo's memory of the same room intact. !strike @user (or /strike user) forgets just one person: their lines and the bot's replies to them, everyone else's story untouched. !strike all, then !strike all confirm within a minute (or /strike all confirm:True), clears every bot in the channel at once.
Anyone on Discord can make a bot forget them, with no account needed. /forgetme bots:Just this bot confirm:True (or @Bot !forgetme this confirm) has that one bot delete their messages and the replies they got, in every server and DM (and any copies of them someone carried into a Parlor chat with it), right away, and clears their DMs with it; every other bot keeps its own memory. /forgetme bots:Every UnrealHQ bot confirm:True (or @Bot !forgetme all confirm) does it for every UnrealHQ bot at once. Memory books and notes on the site belong to their owner and stay; deleting the account removes those.
To take back just the last stretch of a scene, @Bot !strike 10 deletes the last 10 messages in the channel from Discord itself and every bot forgets them, so an argument, an out of character tangent or a scene that went somewhere it shouldn't is gone for good on both sides. Up to 100 at a time; more than 25 asks you to confirm. Anyone with Manage Messages can use it, and the bot needs Manage Messages in that channel too. In a DM the bot can only delete its own messages, so yours stay on screen but are forgotten.
For busy channels, set a standing rule so the harem never forms: !strike every 24h (or every 7d; /strike every) has the bot forget the channel on a timer, and !strike keep 300 (/strike keep) keeps only its newest 300 lines there. !strike rules shows what's set; !strike every off / !strike keep off clear it. Rules are per bot and per channel. Nothing anyone saved on purpose is touched by any of this: memory books and pinned notes on the site stay exactly as they were.
Striking clears memory, not Discord. The messages themselves stay in the channel. To make a bot take down its own messages — after a stolen token, say, when someone posted as the bot into your DM — use /cleanup: /cleanup count:100 tells you how many of its messages it found, and /cleanup count:100 confirm:True deletes them, newest first. Add within_hours: to stay inside a window. It only ever removes that bot's messages, never yours or anyone else's; in a DM you can always run it, in a server it takes Manage Messages or being the bot's creator. It does not touch memory — follow with /strike if you want the bot to forget too. (The moderation kit's /purge is the other one: any user's messages, server only, and the kit has to be switched on.)
Each user gets private memory notes
Even in a shared channel, each user's pinned memory notes are private. Your notes about the RP are injected only into YOUR interactions with the bot.
🌍 The World Builder
Some months the community builds a world together in one Discord channel, with a host bot asking the questions. Type !worldbuild there (or just @mention the host) for your next question, and answer it in your next message, as long as you like (a few messages in a row count as one answer). Your Discord has to be linked to your UnrealHQ account, and your plan sets how many questions you get a day; new ones open at midnight Eastern. There's no skipping: every question is a piece of the world, so yours waits for you until you answer it. !worldbuild world shows how the world is growing, and !worldbuild help shows the rules.
- Talking it through: when an answer is still thin (a name and little else), the host asks a follow-up or two about what you said, so you build it out together. Answer, or say "that's it" whenever you're happy, and it's written up. The follow-ups never use up your questions.
- Seeing it first: before your entry goes in the world, the host shows you how it wrote it up. Tell it anything you'd like changed, or say "that's it" and in it goes, with your name on it. (An 18+ entry in a channel that isn't age-restricted can't be shown there, so it goes straight in, and the host sends it to you in a DM: reply to it there to change anything.)
- Changing it later: once it's in, reply to its entry with what you'd like changed, and the host rewrites it and posts the new version. That works a few times for each entry; after that, staff can fix it for you.
- The picture book: made a picture of something you built? Reply to its entry with it, and it goes in the world's picture book. Only the one who made an entry can give it a picture, and a new one takes the old one's place. When the month is over, the whole world is put together as a picture book.
- The steamy details: romance and dark stories are welcome. With adult content on in your account, sexual details stay in your entry; 18+ entries are posted only in age-restricted channels and kept in the world all the same.
- The World page (in beta, for a few people for now): from the event's first day, everything built so far is on The World, as a map: the world's name in the middle, its topics around it, and everything made branching out from its topic, with a golden line between any two things that name each other. Tap something to read it and see what it connects to (and go to any of those); tap a topic to light up all of it. Drag to move around (two fingers on a phone), and pinch or use + and − to zoom. Prefer reading? Switch to Cards for everything as cards, pictures and all, newest first. Either way, pick a topic, search for a word, or tap Only mine to find your own. 18+ entries show there only if you turned on adult content, and only once you pick Show 18+.
!tagging changes that per channel, down to off) — so two characters can't chat each other into an endless loop, and a bot that has never spoken in a channel can't be dragged in by another bot. See Several Bots in One Channel for how to hand a scene from one character to another.
Auto-respond mode
By default, bots only respond when @mentioned or replied to (and in DMs, for people whose Discord is linked to an UnrealHQ account). Auto-respond mode lets the bot participate naturally, responding to any message in the channel as if they're part of the conversation. Settings are per channel and per bot: the bot you @mention is the one you're configuring, and a channel-wide default (on the Servers page) covers any bot without its own setting. Settings persist until changed. With no cooldown the bot answers every line; with a cooldown, lines that arrive inside it are kept and read with its next reply. Viewing the status is open to everyone; changing it requires Manage Channels, Manage Server or Administrator. @mention the bot when using these text commands (unless auto-respond is already on).
| Command | What It Does |
|---|---|
!auto on | Enable auto-respond in this channel |
@Bot !messaging [on|off] | Admins: texting mode for that bot in this channel. On, it answers like a person typing in Discord, no narration or actions, short messages, in character; off brings its scene writing back. Other bots in the channel are untouched; switch each one you want. A creator can keep a character out of it in the Atelier (that bot says so and keeps roleplaying). Alone, shows the setting. Discord only |
!tagging [off|on|0-10] | Admins: how freely bots may hand the scene to each other in this channel — off, back to the default, or a cap on bot-to-bot replies between your messages; alone, shows the setting. A bot can only be tagged once it has spoken in that channel |
!auto off | Disable auto-respond |
!auto cooldown 30 | Wait at least 30 seconds between auto-responses (0–300) |
!auto chance 50 | Join in unprompted on about half the messages (0–100; 0 = only on keywords) |
!auto keywords add <word> | Words that always get a reply, whatever the chance; other messages take the chance roll (remove, list, clear also available). Cooldown still applies. |
!auto default | Drop this bot's own setting; follow the channel default |
!auto | Show current auto-respond settings |
!strike / !strike @user / !strike all | Strike the set: this bot forgets this channel, one person here, or every bot starts over (admins; anyone in their own DM) |
!strike 10 | Delete the last 10 messages here from Discord and from every bot's memory (Manage Messages; up to 100, over 25 confirms) |
!strike every 24h / !strike keep 300 | Standing rules: forget on a timer, or keep only the newest N lines (off clears; !strike rules shows) |
/auto / /ping / /random [chance] | Slash-command shortcuts: reply to everything, only when mentioned (default), or unprompted at a set chance (default 25%) |
/setkey.
When a reply can't be written there, the bot says so out of character, as it does when you @mention it, so nobody is left watching it type. It says it once, then stays quiet about it until a reply gets through or 15 minutes go by, so a busy room doesn't fill up with notes: once for the whole room when it's the bot's key or the server's, and once for you when it's your own key.
Pings, roles and announcements
A bot takes a line as said to it when someone @mentions it, replies to one of its messages, or pings a role the bot has (handy for calling every bot that wears a @Cast role at once). Everything else said in the channel is heard and kept, and answered only where auto-respond says so.
@everyone and @here are for the whole room, so they never count as calling a bot. Even where a bot answers every line, an announcement is heard but not answered, unless the same message also @mentions the bot, pings a role it has, or replies to it.
People and roles pinged in a line reach the character by name (a person by the name they show in the server, a role as, say, @Moderators), so it knows who was called. A role the server has since deleted reads as @deleted-role, the way Discord shows it.
Voice messages
Bots can hear and speak. Send a Discord voice message in a DM (once your Discord is linked) or in a channel where the bot answers everything, and the bot listens to it, answers, and remembers what you said as [voice: …]. In a channel where it only joins in now and then, it listens to a voice message when it answers it (where it has keywords, it listens first to catch them); one it passes over is kept as [voice message], without its words, and doesn't count toward your day's voice messages. Turn on /voice match and it answers your voice messages with a voice message of its own, in the voice its creator chose; /voice always adds a spoken clip to every reply, and /voice random 30 makes it a surprise: roughly 30% of replies arrive as voice, the number is yours to pick (a voice message from you always gets one back). /voice off goes back to text, and /voice alone shows your setting and today's usage. The text reply always comes first, the clip follows a few seconds later.
Hearing runs on our own server and every plan gets some: bots hear 5 voice messages a day on Free, 15 on Starter, 30 on Studio, and unlimited on Headliner. Spoken replies are a Studio and Headliner perk with a daily allowance (Studio 20, Headliner 40). Speaking is for members: Starter and up can bring their own key, which also lifts the hearing allowance (a free account gets no spoken replies, even with a key, since the bots and our server do the work): /voicekey openai <key> covers both directions, /voicekey elevenlabs <key> gives you ElevenLabs voices (the character's creator sets which one), and /voicekey groq <key> is a nearly free way to be heard. The message is deleted right away, like /setkey; /voicekey <provider> off removes a key. Clips are capped at about two minutes, and long replies are trimmed to what fits.
| Command | What It Does |
|---|---|
/voice match | Answer my voice messages with voice |
/voice always | Every reply comes with a voice message |
/voice random 30 | A voice message now and then, about 30% of replies (1 to 100) |
/voice off / /voice | Text only / show your setting and today's usage |
/voicekey openai|elevenlabs|groq <key> | Your own key for voice, no daily allowance (off removes it) |
User personas
Personas let you define how YOU present yourself to the bot. It's your RP identity — a name and description injected into the bot's context so it knows who it's talking to.
Creating a persona
Go to the Control Room and open Settings. Under User Personas, create a persona with a name (max 30 characters) and a description of your character. You can create up to 10 personas for different scenarios.
From SillyTavern. In SillyTavern, Persona Management's Backup button saves your personas in one file. Under User Personas, Import from SillyTavern takes it (or a file with one persona in it, or a list of them) and lists them, each with the start of its description and its length; untick any to leave behind. Each comes in as a new persona, as many as your plan has room for, in the file's order. A description over 4,000 characters loses nothing: the first part is the description, up to a paragraph or a sentence, and the rest goes into the persona's book as always-on entries you can edit. A name you already have comes in as "Harper (2)", never merged. Pictures stay behind, as the backup only names their files, and so does a persona's lorebook: bring that into its book from the lorebook's own file.
How it works
- Personas are private — other users can't see yours
- Your lines carry the persona's name, so memories written from the chat say "Harper", not your username; the recap of where you left off follows the persona too. Memory books themselves are yours across personas
- The active persona goes right after the character in the prompt, under About the people here, with whatever of its persona book the scene calls for, and
{{user}}becomes the persona name - Personas are managed from the Control Room settings panel (create, edit, delete); in the Parlor pick one per chat from the header dropdown
- On Discord, link your account and use
/persona <name>in a channel,/persona <name> everywhere(or the Control Room's Use everywhere button) for your default,/personato list,/persona offto clear. A channel choice always wins over your default, includingoff. With a persona active your lines reach the model under the persona's name, so that is what the character calls you
Persona books
A description holds a few lines; a persona's book holds the rest. In the Control Room, open User Personas and press Book on a persona. Each entry is a title, a few keywords and what's true. It comes up when one of its keywords is in the scene (the newest message and the three before it), or every time if you make it always there, and it sits right under your persona's description for whichever chat is using that persona, in the Parlor and on Discord. A book holds 50 entries, and only your own book is read for your lines.
Persona books hold who you are, not a scoreboard. An entry can't ask for an affection meter, a progress bar, a score out of a number, a status box or an OOC note for the character to keep: a character chasing a number warms up too fast and stops acting like itself. An entry that reads like one is turned away with the words that did it, so you can take that part out. Your personal !commands (a just me command book) follow the same rule. Your own OOC instructions are fine, like [OOC: don't write for my character]; what's turned away is asking for an OOC note on every reply.
From a SillyTavern lorebook. A persona's lorebook from SillyTavern comes in from its World Info .json, the same file the Atelier's codex takes: open the book and press Import a SillyTavern lorebook. Each entry becomes a book entry: its comment (or first keyword) as the title, its keywords and its text. A constant entry is always there, and one switched off in SillyTavern comes in off (untick Off when you edit it, to switch it on). Secondary keys, sticky, cooldown, probability, groups, position and depth stay behind, as a persona book has none of them. An always-there entry longer than 4,000 characters comes in as several entries; one with keywords that long is left out and named, since cutting it in parts would change what brings each part up. The book still holds 50 entries, and the import says what didn't fit or was turned away.
Persona secrets
Tick Secret on a persona book entry and no character knows it until one learns it in a chat. From then on the character in that chat knows it, and only there: your other chats, and other characters, still don't (in a Discord channel with more than one character, each learns it for itself). You can write when it counts as learned ("he sees her back", "she tells him").
- By hand: in the Parlor, tap your persona in the chat's header. The chat's secrets are listed under the persona cards; tick one when it comes out in the story, or untick it
- From the story (paid plans): every few replies your memory model reads the new lines, and a secret the character plainly learned is ticked for that chat. In the Parlor you're told; on Discord the bot's reply gets a 🗝️. A line you hid from the character doesn't count, and in a channel you share with other people only your own lines and the replies to you are read
- In the Control Room: the book lists who knows each secret, and where. Untick one there, or tick it for a character in any chat of yours, a Discord channel included
A branch knows the secrets its chat had learned by the line it branches from. Taking back the lines a secret came out in takes the secret back with them: delete from a line down, edit one of your lines (which drops what came after it), or swipe, edit or delete the newest reply. A new take is written without it, and then your memory model reads what's left: if the secret is still there it stays, without telling you twice, and if not it's un-ticked. When no check can run (off a paid plan, say), it simply stays. One you ticked yourself stays ticked. Deleting a chat forgets what it learned.
Memories are memories, though. A memory made from that chat remembers what happened in it, secret and all. It stays in that chat unless it's shared with every chat with that character, which carries it to your other chats with them.
Publishing & bot profiles
Once your bot is working, you can publish it so other people can discover and invite it to their servers.
Publishing your bot
In the Command Center, each bot card has a publish section. Publishing needs the character locked to the bot first (the Lock button beside the character picker): a public bot's binding is permanent, which is what stops one bot slot being rotated through many characters. Then click Publish to the Lobby (or flip the character's Public toggle in the Atelier — it's the same switch). Your bot will appear in The Lobby for other UnrealHQ users to find, with a click-to-invite card. The card shows the character's tagline and the profile opens with their About, both from the Atelier; if you'd rather the bot had words of its own there, switch on Its own Lobby description in the same section, write it and Save. It then takes the tagline's place on the card and sits at the top of the profile as its About. Switching it off again keeps what you wrote, ready for next time. The card's Profile Settings let you pick a profile theme, write a longer bio (up to 12,000 characters, with light formatting: # headings, **bold**, *italic*, - bullet lists, --- dividers and [text](https://…) links), and add custom CSS for the bot's profile page. The profile card in the Lobby grows with what you put into it — a short bio gets a compact card, a long one gets a wide, full-height page — and custom CSS can size it further with .modal { max-width: … }.
What visitors see
Public bots appear in The Lobby with the bot's name, avatar, and the character's tagline (or the bot's own Lobby description, when you've switched one on), plus an Add to Discord button. A Chat on web button appears too, so visitors can try the character in the Parlor before inviting it.
Finding things again. The Lobby opens with its featured bots first and everyone else after them, A to Z, every time you come in; the sort dropdown has Name (A-Z), Most recent and Most popular for when you'd rather browse another way. On a phone the cards sit two to a row, so a screen shows several bots at once. The search box finds bots by name, tag or creator, and a few Creators whose creator pages match by name or address show in a small group above the cards, each leading to that page with how many characters it has for you. Every card carries a star in its top-left corner: tap it and the card joins your ★ Favorites tab, so the bots you actually play with are one click away instead of a search. Favorites are yours alone — nobody else sees what you starred, and creators are not told — and they work on Web only cards just the same. Tap the star again to drop one.
Tags. Every character carries at least one common tag from a shared list (who they are, genre, setting, personality, flags), picked in the Atelier under the Tags field; ✨ Suggest chooses them for you from the card, and your own free-text tags still sit beside them. In the Lobby, Browse by tag folds out above the cards and shows only the tags in use.
Surprise me. The button beside the Lobby search picks a public character at random (any of them, including ones you have met before), draws the curtain, and opens a fresh chat with them in the Parlor. While you're browsing a tag, it picks among that tag's characters and says so (Surprise me: Fantasy); with no tag chosen, it picks from everyone. Adult characters only come up if you have turned on NSFW access in your settings, and a creator who has blocked you never does, nor one you've hidden.
Hiding a creator. Not into someone's characters? Open any of their cards in the Lobby and press Hide name from my Lobby at the bottom of it. Their bots and characters, the ones they co-create included, leave your Lobby, its search, Surprise me and the featured picks, and their creator page drops out of the search too. It's only for you: they aren't told, nobody else's Lobby changes, and a link to one of their characters still opens it. Everyone you've hidden is listed under Hidden creators, just below Browse by tag, where Show again brings them back.
No bot yet? You can still be in the Lobby. Flip a character's Public switch in the Atelier and it shows up as a Web only card: name, avatar, tagline and tags, with Chat on web as its main button. That's a fine way to let people meet a character (and for you to get feedback) before you go through the Discord token setup. Your character allowance covers these the same as any other, and the description itself is never shown — the tagline is the card's blurb and About fills the profile, so write both.
Someone else can pay for your bot on their server. A paid member who runs a Discord server can attach their own API key to your published bot, for that server only (Servers → "Your key, for your server"). Their community then uses your bot without each person bringing a key — on their provider's bill, never yours, and they never see your prompt or your codex. People chatting on it without a key of their own get up to 32,000 tokens of history and 600-token replies, with their memories and pinned notes fit into that history too; the member who added it isn't held to that. You keep the switch: each bot card in the Command Center has a Server Keys section showing who has done it and letting you turn it off for that bot. Turning it off stops their key working immediately (the key is kept, so turning it back on revives it), and their key also stops if their plan lapses, or if it covers fewer bots than they've put keys on: the keys they added first keep working, and the rest come back on once their plan covers them again. Anyone who has set their own key always uses theirs regardless.
Profile pages
Every character can have a page of its own, the way profiles used to look: a header with the avatar and tagline, then blocks you arrange however you like — About, Details (Status, Here for, Likes… any label you want), a Quote, Pictures, a Wall of posts, Top friends, Now playing, Links. In The Atelier, open the character and click Profile page: the page is created for you, seeded from the card (the About blurb, the greetings as the first wall posts, the avatar as the first picture), and opens in the editor with a live preview beside it. Everything on it is yours to retype; nothing is tied to the card once it exists, so the page can say what the Lobby modal doesn't. Blocks can be reordered, hidden or removed, and you can add more (up to sixteen). Text blocks take the same light formatting as bios.
Pictures upload the same way avatars do (png, jpg, gif or webp, 10MB): three on the free plan, eight on paid plans, twelve on Headliner. Music is one link — YouTube, Spotify, SoundCloud or a direct audio file — shown as a player people start themselves. Top friends are other characters' published pages, found by name. The Look section picks a theme, color overrides, a background image (tiled if you like), a font and the column layout; paid plans can add custom CSS on top, scoped to the page. Colors, fonts, borders, backgrounds, shadows, spacing, positioning, transforms, transitions and @keyframes animations all work, as does ::before / ::after text through content (a blinking _ cursor, a > prompt, a glitching title), and @media rules for phones. What is dropped: @import, @font-face, position: fixed, content: url(…), and any picture that is not an https link. Selectors are nested under the page automatically, so body and :root mean the page itself. The editor preview runs the same filter, so if something moves in the preview it moves for visitors, and a typo shows up as a red note under the box.
What to aim the CSS at. The page is built from its blocks, not from HTML, so CSS written for another page (or an HTML page converted for this one) won't match anything here, and HTML pasted into a block shows up as plain text. Use the names the page itself uses. The header is .hero: the .avatar, the name in h1, the .tagline and the .btn buttons. Every block is a .block, with its title in h2, and each kind has a name of its own: .block-text (About and any other text block), .block-details, .block-quote, .block-gallery (Pictures), .block-wall (each post is a .post), .block-friends (Top friends), .block-music (Now playing) and .block-links. The columns are .col. So .block-wall .post { border-left: 2px solid hotpink; } restyles every wall post, and .hero h1 { letter-spacing: 4px; } only the name.
The page is private until you press Publish in the editor, and it only shows to other people once the character itself is public. Every page has a short address to share, unrealhq.online/profile/name (capitals don't matter), which you pick in the editor; if another page already has that name, the editor says so and asks for a different one, and Copy link puts the address on your clipboard. Then the Lobby modal gains a Profile page button beside Add to Discord and Chat on web, opening in a new tab, and the page carries the character's 18+ gate if it has one. Nothing prompt-side — description, personality, system prompt, codex — is ever on it.
Feedback from readers
Readers notice what you might miss: a greeting that breaks, lore that contradicts itself. Turn on Reader feedback in a character's Basic Info in The Atelier and save, and its profile page and Lobby card get a Send feedback button. A reader says what it's about (a broken greeting, a lore problem or something else), writes a few words, and can add up to ten lines from their own Parlor chats with the character. It's anonymous unless they tick Show my name. Notes land in the character's Feedback Inbox in the Atelier, with a count beside the character in your list. You can't reply: mark a note done once it's handled (done notes go after 30 days), delete it, or press Report to send it to the help desk if it crosses a line. A reader can send one character five notes a day and twenty a day in all, and nobody on the bot's block list can send any. Feedback is off for every character until you turn it on.
Your creator page
Characters get profile pages; you get one too. A creator page is a single page about the person behind the characters, at unrealhq.online/profile/@yourname. Open it from the Control Room → Account → Edit your creator page: the page is made for you the first time, with an address taken from your display name (in its own letters, so a name in Japanese or Cyrillic gets an address in Japanese or Cyrillic), and opens in an editor with a live preview beside it.
It holds an about (up to 6,000 characters, with the same light formatting as bios: # headings, **bold**, *italic*, - bullet lists and --- dividers; a link is shown as its words only), an optional now writing line under your name (up to 140 characters of plain text, to say what you're working on; a link in it shows as text), one picture (png, jpg, gif or webp, 10MB), and your characters. The characters fill themselves in: every character you've made public shows as a card with its picture, tagline and tags, leading to its profile page (or its Lobby card, or a Parlor chat, whichever it has). A character you keep private never shows, 18+ characters show only to people who turned on adult content, and someone on a bot's block list doesn't see that bot's character there. Under Pinned characters in the editor you can pin up to three of them to the top of the page, in the order you like (▲ and ▼ move them); the rest follow, newest first. A pinned character you make private, or delete, comes off the pins by itself.
The Look section works as it does on profile pages: a theme, color overrides, a font and sparkles, on every plan, with custom CSS on top for paid plans, through the same filter. The header is .hero (the .avatar, your name in h1 and the .now-writing line), the about is .block-about, the characters are .block-characters and each card is a .char (a pinned one is .char.pinned).
The page is yours alone until you press Publish; after that anyone can open it, signed in or not. Once it's published, your name links to it from the Lobby (the “by” line on a bot's card) and from your characters' profile pages, the Lobby's search finds it by your name or address, and a link to it pasted into Discord shows your name, the start of your about and your picture. You can change the address in the editor: letters of any one alphabet, numbers and dashes, up to 30 characters (Latin letters lose their accents, so Café becomes cafe). The alphabets are the ones names are written in: Latin, Cyrillic, Greek, Armenian, Georgian, Hebrew, Arabic, Thaana, Ethiopic, the Indian alphabets, Sinhala, Thai, Lao, Tibetan, Myanmar, Khmer, Chinese, Japanese and Korean. Letters from two of them can't be mixed, a few names are kept for UnrealHQ itself, one already taken is someone else's, and one that only looks like a kept or taken one is turned down the same way: letters that pass for Latin ones (a Cyrillic а for an a, an Armenian օ for an o, say) count as those, with or without accents. For 30 days after a change the old address stays yours: links to it still lead to your page, nobody else can take it, and you can move back to it. After that it's free for anyone. Delete this page takes the page and its picture away and leaves your characters exactly as they are.
Access control: who can use a bot, and where
Three independent gates, each owned by the person it protects. They stack: a user has to pass all of them.
Is my bot actually answering?
Each bot card in the Command Center shows Last reply in Discord. "Running" only means the process is up; this line tells you when the character last answered someone. A running bot that has been silent for a day gets an amber notice — usually nothing is wrong (quiet servers), but if people have been talking to it, press Ready to reply?.
Ready to reply? on a bot's card checks everything that could keep it quiet, in the order you'd fix it: its character, whether it's online (and if not, whether Discord still takes its token and its Message Content Intent is on), the servers it's in, and every channel where it has talked lately or is set to auto-respond, where it needs to see the channel, send messages and read the history (and, for an 18+ character, the channel has to be age-restricted). It also says whose key people without one reply on, and whether that key's model is one the character blocks, and whether you can talk to it yourself, and lists the replies that failed lately on a key that wasn't the person's own (yours, a server's or a house key) with the provider's reason, since the channel only read that the bot couldn't answer. Each problem comes with what fixes it. Server and channel names show only for servers you run yourself; elsewhere you see the server as Server …1234, as everywhere else.
The people who run a server can ask the same of a bot from Discord: /ready in a channel (it takes Manage Channels there, or Manage Server) says whether the bot can answer in that channel and what stops it, whether people without a key can talk to it there, and which roles may use it. Only they see the answer, and it never names whose key the bot uses or what it runs on.
Blocked users (creator)
Creators can block specific Discord users from interacting with their bots, everywhere the bot lives. If someone is being disrespectful or abusing your character, expand Blocked Users on the bot's card in the Command Center, type their Discord username and click Block: the bot looks them up and stores their user ID, so the block follows them even if they rename. You can block someone before they ever talk to the bot, even someone it shares no server with: if the bot hasn't met them yet, the block waits on their username and becomes theirs the moment they first message or DM the bot (the list says Waiting for their first message until then). Use their username, the name under their display name on their profile, since display names aren't unique. You can also paste their user ID: enable Developer Mode in Discord (User Settings → Advanced → Developer Mode), then right-click the person and choose "Copy User ID". A block is per bot and follows the person everywhere: in Discord servers the bot ignores them and keeps none of their messages, and on the site the character disappears from their Lobby and Parlor (a linked Discord account is how the site knows who they are). They are not told they were blocked.
Every character also has Blocked Users of its own in The Atelier, for people on the site, whether or not it has a bot: it's the character's last section, folded until you open it. Type their UnrealHQ username (the name on their profile and beside their messages in the Parlor) and press Block. The character is gone for them on the site: from their Lobby, featured list and search, and from your creator page; its profile page won't open for them, and the Parlor won't start or load a chat with it. If their account is linked to Discord, the character's bot ignores them there too. Changes save at once, they aren't told, and Unblock lets them back.
Allowed servers (creator)
Want your bot in your servers only? Expand Allowed Servers on the bot's card, tick Only allowed servers may host this bot, and list the servers that may have it (paste a Server ID — right-click a server icon with Developer Mode on → Copy Server ID — or just click Allow next to any server the bot is already in). Discord can't make an invite link itself selective, so the bot enforces the list on arrival: invited somewhere that isn't listed, it posts a short note in the server's system channel explaining that it's invite-restricted (with the Server ID to send you) and leaves immediately. Removing a server from the list evicts the bot from it too. Turning the whitelist on with an empty list auto-allows every server the bot is currently in, so you can never lock it out of its own home by accident.
Sharing a private bot with a friend: a bot with Publish off never shows in the Lobby, but you can still hand its invite link (on the bot's card) to anyone you trust, and Allowed Servers decides where it may live. Order matters: add your friend's Server ID to the list first, then let them invite the bot. Invited before the server is listed, the bot leaves on arrival and nothing re-invites it; once the server is on the list, they simply use the invite link again and it stays.
Blocked servers (creator)
Happy for your bot to be almost anywhere, just not in one particular server? Expand Blocked Servers on the bot's card in the Command Center and block that one: paste its Server ID (right-click the server icon with Developer Mode on and choose Copy Server ID) and press Block, or press Block beside any server the bot is in right now. The bot leaves a blocked server right away (or as soon as it's back online, if it's off), and leaves again whenever someone invites it back, with a short note that it isn't available there. It never says who blocked it or why. Every other server can still invite it, so this is the one to use when you only want to keep it out of a few places; Allowed Servers is for the other way round. Unblock lets that server have it again. A server is never on both lists: blocking one takes it off your allowed servers, and allowing one unblocks it.
Allowed roles (server admins)
Server owners get the mirror image: decide which members may use a bot in their server, without touching any user IDs. Anyone with Manage Server can run /access add role:@Regulars, or @Bot !access role add @Regulars, and from then on that bot only answers members holding an allowed role — everyone else is ignored in auto-respond channels, and a direct @mention just gets a quiet 🔒 reaction so they know it's deliberate. Adding someone to the whitelist is then simply giving them the role. /access remove takes a role off the list, /access everyone clears the restriction, /access show (or a bare !access) shows the current setup. Each bot keeps its own role list per server, and admins are never locked out of their own bots.
Moderation tools
Every UnrealHQ bot can double as a lightweight moderation bot for the servers it lives in. It is off by default — the bot's owner turns it on per bot in the Command Center (bot card → Moderation Tools → Turn on).
18+ characters and age-restricted channels
Discord's rules put adult content in age-restricted channels. UnrealHQ enforces that for you: a character marked NSFW in the Atelier only answers in channels flagged Age-Restricted (Edit Channel → Overview), in threads inside them, in servers marked age-restricted (Server Settings → Access), and in DMs with people whose linked UnrealHQ account has the NSFW opt-in on. Anywhere else it stays quiet; when someone @mentions it there it explains once an hour what a server admin needs to flip, and otherwise just reacts with 🔞. Commands and settings still work in DMs. Server owners: if most of your server is adult content, mark the whole server age-restricted rather than channel by channel — that is also what Discord expects.
Onboarding a member (server admins)
Running a community server around your bots? @Bot !agent @user gives that person your member role (by default a role named Field Agent) and, if a channel called #the-ledger exists, drops a one-line note there saying who was onboarded and by whom. !agent remove @user takes the role back. !patron @user and !staff @user do the same for roles named Patron and Staff (!staff needs Administrator, since it hands out moderation powers). All need Manage Roles and a role of your own above the one being given (a server's owner needs neither), and the bot's own role must sit above it too. The role and ledger names can be changed per bot with the ONBOARD_ROLE, ONBOARD_PATRON_ROLE, ONBOARD_STAFF_ROLE and ONBOARD_LEDGER settings.
How the safety gates work
- The bot only ever acts on behalf of someone who already holds the matching Discord permission (Manage Messages for
/purge, Moderate Members for/timeout, Kick Members for/kick, and so on). Discord hides each command from anyone who lacks it, and the bot checks again when the command runs. - Role hierarchy is respected: you can't act on the server owner, on yourself, or on anyone whose highest role is at or above yours (or the bot's).
- Every action is written to the server's audit log with the moderator's name and reason, and the affected user gets a DM when their DMs are open.
- Turning the kit on adds Kick Members, Ban Members, Moderate Members and Manage Channels to the invite link. If the bot is already in a server, open the invite link again so Discord grants them; otherwise the commands explain what's missing.
Commands
| Command | Needs | What it does |
|---|---|---|
/purge <count> [user] | Manage Messages | Bulk-delete the last 1–100 messages in the channel, optionally only one user's (Discord can't bulk-delete messages older than 14 days) |
/slowmode <seconds> | Manage Channels | Set the channel's slowmode (0 turns it off, max 6 hours) |
/timeout <user> <duration> [reason] | Moderate Members | Time a member out for 60 seconds up to 4 weeks |
/untimeout <user> | Moderate Members | Lift a timeout early |
/kick <user> [reason] | Kick Members | Remove a member (they can rejoin with an invite) |
/ban <user> [reason] [delete_days] | Ban Members | Ban a user, optionally deleting their messages from the last 0–7 days |
/unban <user_id> | Ban Members | Lift a ban by Discord user ID |
/warn <user> <reason> | Moderate Members | Record a warning (kept per server by UnrealHQ) and DM the member |
/warnings <user> | Moderate Members | List a member's warnings on this server |
/clearwarnings <user> | Moderate Members | Delete all of a member's warnings on this server |
Settings reference
The settings list their sections down the left side of the panel (a row of tabs across the top on a phone): click one and it opens beside the list, one at a time. Admin Tools' tools each have a place of their own in the list. The page remembers the section you opened last, on that browser.
The Control Room settings panel lets you configure everything in one place.
AI configuration
| Setting | Default | What It Does |
|---|---|---|
| Provider | Electron Hub | 16 providers: ElectronHub, OpenAI, Anthropic, OpenRouter, UnrealHQ Managed API, DeepSeek, Google AI Studio, Mistral, Groq, AI21, AI/ML API, Fireworks, Cohere, Moonshot, NanoGPT, Chutes, plus Custom for any OpenAI-compatible endpoint. Switching provider restores the model you last used with it (or the provider default). |
| API Key | — | Your provider API key (encrypted at rest, masked in UI), with an optional nickname beside it. A new key goes in use and the one before it stays saved. Up to 5 per provider, all listed below the field: use switches to one, and rename and remove work on one key at a time. |
| Model | — | The AI model name (e.g., gpt-4o-mini, claude-sonnet-4.5). The box offers a searchable list fetched from your provider as soon as you paste a key; Electron Hub, OpenRouter and the managed API show theirs even before that. |
| Temperature | 0.7 | Creativity, 0.1–2.0. Lower = focused/predictable. Higher = creative/varied. |
| Reply length | 600 | How long one reply may be, in tokens (~4 characters each, or about one character of Chinese, Japanese or Korean), 50 to 32000. 600 fits one Discord message. Other front ends call this "max response length"; it is not the context size. |
| Context | 30 messages | How much of the chat the bot remembers per reply, counted in messages (5 to 200) or in tokens (1,000 to 1,000,000; as many recent messages as fit). Raise it for longer memory, lower it to save tokens. |
| Thinking | Light | How hard a model that thinks before it writes (GPT-5, Gemini 2.5 and 3, DeepSeek's V4 and reasoners, GLM, Qwen3 and the like) may think on your keys, managed ones included. Off is quickest and cheapest; a model that can't stop thinking (Gemini 2.5 Pro and 3, some GPTs) does as little as it can instead. Light thinks a little, as every thinking model did before this setting existed. Full lets the model think as much as it likes, slower and pricier, and can help it keep a twisty plot straight. Models that don't think aren't affected. On a key a creator or a server put on a bot, the key's owner's setting applies. |
| Custom Base URL | — | For self-hosted or custom OpenAI-compatible endpoints (HTTPS). Use the full API root the provider documents, not just its domain, and the provider's own model name (for example, GLM through Z.AI is base URL https://api.z.ai/api/paas/v4, or https://api.z.ai/api/coding/paas/v4 for a GLM Coding Plan key, with model glm-5.3; the z-ai/glm-5.3 form is OpenRouter's name for it and only works with an OpenRouter key). |
The Save API Settings button sits at the bottom of that box, and it saves only that box. Pick the provider, paste the key, type the model, and press it: the provider you chose, the provider the key is saved under, and the model name's format all have to agree, or the bot goes looking for a key that isn't there.
All settings can also be changed via Discord commands (/setkey, /setmodel, /settemp, /setlength, /setcontext, /thinking); /settings shows them. Discord settings and website settings are the same thing once your Discord is linked.
Thinking
Some models think before they write: GPT-5 and OpenAI's o-series, Gemini 2.5 and later, DeepSeek's reasoners and V4 line, GLM, Qwen3, Kimi K2 thinking, MiniMax M2, and anything with thinking or reasoner in its name. The thinking happens before the reply's first word, so these models are slower to start, and the provider charges for it like any other words. You never see it: it isn't shown, saved, or sent back to the model later.
Thinking in Control Room → Settings (or /thinking off, /thinking light and /thinking full on Discord) sets how much they may think on your keys, managed ones included. Light is where everyone starts: a little thinking, with room for 4,000 tokens of it on top of your Reply length. Full lets the model think as much as it likes, with room for 8,000: slower and pricier, and it can help a model keep a twisty plot straight. Off is quickest and cheapest; a model that can't stop thinking does as little as it can instead. Models that don't think aren't touched by any of this.
A thinking model also gets more time before a reply is cut off, counting its thinking room: a 600-token reply has about four and a half minutes on Light or Off and about eight and a half on Full, where a model that doesn't think has about two. On a key a creator or a server put on a bot, the key's owner's setting applies.
Account
- Sign-in security (authenticator app): under Settings you can add a second step to signing in: after your password, a six-digit code from an authenticator app on your phone (Google Authenticator, Authy, Bitwarden, 1Password, Aegis, any of them). Click Set up authenticator, scan the square with the app (or type the key by hand), enter the six digits it shows, and you get eight recovery codes. Save those somewhere safe: each one signs you in once if you ever lose the phone, and they are shown only at that moment. A leaked password alone then opens nothing. Turning it off needs your password and a current code. Admin accounts can't turn it off; the admin panel stays closed until it's on.
- Display name: the name shown on your characters in the Lobby, on bot profiles and as your name in chats — change it any time under Account settings (Save name). It doesn't need to be your real name; 2–32 characters, letters, numbers, spaces and
. _ -, and it can't match someone else's or read as UnrealHQ's own (the names kept for the site's page addresses are kept here too, in any alphabet: letters that look like Latin ones count as those) - Your plan: every account starts on Free (2 bots, 3 characters). Starter is 5 bots and 15 characters, Studio 8 bots and 30 characters, Headliner 10 bots and 50 characters plus an included managed API key and early access to upcoming betas. Free also keeps things smaller elsewhere: 2 personas (paid 10), 3 memory books (paid unlimited), 30 open Parlor conversations (paid unlimited), and memory by hand only — a free account's bots remember the last 1,000 lines per channel, kept for 60 days (an imported chat is kept whole), and memories are made with
!creatememoryin the Brief style. Paid plans get auto memories as the story goes, every style or their own, and Studio and Headliner add living notes, folding old memories into arcs and a separate memory model; Headliner adds notes you write yourself. Paid plans also unlock putting your own key on someone else's bot for your server: 1 bot on Starter, 2 on Studio, 3 on Headliner. Bots hear your voice messages on Discord on every plan (5 a day on Free, 15 on Starter, 30 on Studio, unlimited on Headliner); Studio and Headliner also get spoken replies with a daily allowance, and any paid plan can use its own OpenAI, ElevenLabs or Groq key for voice instead. Free accounts get no spoken replies. Every bot gets a profile page on every plan: 3 pictures and the built-in looks on Free, 8 pictures plus custom CSS on Starter and Studio, 12 pictures plus custom CSS on Headliner. The full side-by-side is on the Plans page. To move up: support UnrealHQ on Ko-fi, then click Upgrade or gift a plan under Your plan and send a request (pick the plan, how many months, and optionally who it's a gift for, by display name). The admin checks it against the donation and approves it, usually within a day; you get an email when it lands. More of the plan you're on adds its months to the end; a pricier plan starts the day it's approved, with the time left on yours turned into extra days of it, worth the same, and a cheaper one starts when yours ends. Three days before a plan ends you get a reminder; if it lapses, nothing is deleted — bots beyond the free allowance are parked until you renew, and characters, codices and memories stay exactly where they were - A server's house key: one key that covers every bot in a Discord server for people who have no key of their own, whether they never made an account or just haven't set one. It is the last resort, never the first: a chatter's own key always runs first, then a key the bot itself carries (an included key, a server key bought for that bot), and only then the house key. So members who pay their own way keep paying their own way, and strangers still get answered, with up to 32,000 tokens of history and 600-token replies each. Platform admins set it from the Control Room's House keys block (pick the server by name) or from inside the server with
/housekey <provider> <key>(deleted at once, like/setkey);/housekey model <id>picks its model,/housekey offpauses it,/housekeyshows it. A Headliner can put their included key in this same spot for a server they run (see the next item). - Headliner's included key: a managed API key that comes with Headliner and lives on your account, ready to chat on with nothing to paste: pick Included key (Headliner) as your Provider under API Configuration in the Control Room, or under Change engine in a Parlor chat's settings. The key itself is never shown. It has a daily token budget, and a pricier model simply spends that budget faster. Like any key of your own, once picked it answers you everywhere, Discord included. You can also put it on one of your bots, so anyone who talks to that bot on Discord without a key of their own is answered on it too, from the same budget, and a public bot works for strangers. On that bot it answers you first as well, before your own key, unless you picked a model for the bot or the chat (
/setmodel, or Change engine in the Parlor), which runs on your own key: press Assign the included key to this bot on that bot's card in the Command Center and pick its model there. To move it, pick another bot in the Move to list on its row and press Save, or press Move the included key here on the card of the bot you want it on; Remove takes it off the bot and leaves it on your account. Used in on the same row says where it answers: every server the bot is in; only one server, so a stranger's server that invites the bot doesn't spend your budget (there the bot falls back to that server's key, or the chatter's own); or Every bot in a server you run, where every bot in that server, yours and other creators' alike, answers people who have no key of their own on it, the way a house key does. That one needs your Discord linked and Manage Server there, covers one server at a time, and can't go on a server that already has a house key. - Managed key for one bot (any plan): you don't need Headliner to have a bot answer strangers. Under Your plan, choose A managed key for one bot, pick the bot and where it should be used (every server, or only one), say how many months, and send the request after donating. Once the admin grants it, the key shows on that bot's card exactly like the included one: choose any model on offer, pin or unpin the server, move it to another of your bots, or remove it. Renewing the same bot extends the key rather than making a second one
- Use my Settings key: the quickest way to put your own key on a bot. Open Attach a key you already have on the bot's card, pick the key from the Use my Settings key list, and click Attach; tick on every bot I own to do all of them at once. Nothing is pasted or copied: the bot reads the key you keep in Settings, so if you ever change it there, every bot follows. Chatters with their own key still use theirs; this only answers people on Discord who have none, and it never shows to them
- Attach a key you already have: your own key in Settings is yours alone unless you attach it as above. If you hold a second key — another
uhq-token, or any provider's key — open Attach a key you already have on the bot's card, paste it, pick where it's used (every server, or only one), and it becomes the bot's fallback for everyone who talks to it there. It never shows to them and can be pinned, moved, or removed like any other key - A backup model for a bot's key: every key on a bot's card has a Backup list beside its model. Pick one (or type it, where the provider shows its models only to a key) and press Save: when the key's model fails (down, overloaded, too slow), the same key answers on the backup model instead, for a reply on the bot's key, the help desk and the World Builder. It spends the same key's budget, and in the Parlor its owner sees a note that the backup answered. Leave it on No backup model for none.
- Your Discord link status is shown under Account settings, where you can generate a Discord link code (see Link your Discord), change your email (with your password, and your authenticator code if that's on; it switches over once you open the link we send to the new address and press the button there; a verified old address gets a note that it changed, with a button that puts it back within 7 days if it wasn't you), change your password (8+ characters) and manage the explicit-content opt-in (controls whether NSFW characters show up in the Lobby and can be chatted with; an account that never confirmed it's 18 or older confirms it once with its date of birth, and only that it did, and when, is kept)
- If you use a managed
uhq-token, your remaining credits and today's usage are shown here too - Your token usage shows every model call made on your account across all providers, BYO keys included: today and the last 7 days, split by provider and by character, with a day-by-day bar. Exact counts when the provider reports them, otherwise an estimate (about 4 characters per token, or a token a character for Chinese, Japanese and Korean). Prompt tokens dominate because every reply re-sends the character, its codex hits, memories and recent history — a heavy character costs more per message, and this panel is where you see it
- Sessions last 20 days, then you sign in again
- After 5 failed sign-in attempts from the same IP address, sign-ins from that address are blocked for 30 minutes
- Forgot your password? Click Forgot your password? under the sign-in form, enter your account email, and follow the link in the email (it works once and expires after an hour). Setting a new password signs out every other session on the account. If you never had a password (an old Discord-only account), the same link sets your first one.
Your data rights
You own your data. UnrealHQ gives you two big buttons in your Control Room settings for exercising your rights under GDPR (and just as a matter of basic respect):
Export My Data
Download a JSON file containing everything associated with your account: characters (with their prompts decrypted), conversations and memory summaries, bots, personas, and settings. For safety the export lists which providers you have keys for, but never the API key values themselves. Perfect for backups or if you want to migrate your work somewhere else.
Permanently Delete My Account
Wipes your account and all associated data from UnrealHQ. This is irreversible — there's no soft-delete or grace period. Requires typing "DELETE" and your password to confirm. All of your running bots stop and are unregistered (their tokens are removed from our store), characters and avatars are deleted, all conversations are removed, and you're signed out everywhere at once.
All commands
Not sure what a particular bot answers to? @Bot !commands replies with its live list — built-in commands, the character's own, and whatever its creator switched on from a command book — grouped by category.
Commands starting with / below are typed as plain text (or sent in a DM) — @mention the bot unless the channel has auto-respond on. /setkey and /link are picked up by every bot in the channel with or without a mention, and never stored in history. Commands starting with ! also need a mention or reply. To give several bots the same command at once, mention them all first (@Dante @Mara !auto off), or a role they share: each bot does it for itself, and a command that acts on the channel, like !strike 10, is done once. Anyone else you mention is who the command is about (@Dante @Mara !strike @someone).
Setup commands
| Command | Description |
|---|---|
/setkey [provider] <key> [base-url] [nickname] | Set your API key (provider defaults to electronhub; custom needs an HTTPS base URL). Words after the key are its nickname. A key you set before stays saved, so you can switch back in the Control Room. The message is deleted in servers. |
!provider | List all provider names |
/prompt [message] | The bot's creator and UnrealHQ admins: a private file showing exactly what this bot would send to the model from this channel — persona, lore, memories, notes, the history it would include — with a token estimate. Server admins see only the size of the request. Nothing is sent to the model. |
/setmodel <model> [here|bot] | Change your model: default, or for this bot in this channel (here), or for this bot everywhere (bot). /setmodel clear here|bot removes an override; bare /setmodel shows what applies. |
/settemp <0.1-2.0> | Set creativity/temperature |
/setlength <50-32000> | Set maximum reply length in tokens |
/thinking off|light|full | How hard a model that thinks before it writes may think on your keys (alone, shows the setting) |
/setcontext <5-200> or /setcontext 32k tokens | Set how much of the chat the bot remembers, in messages or tokens |
/tokens | What the bot's last reply to you cost (prompt and reply tokens) and how full your context is |
/settings | View all your current settings (also !settings) |
/reload | Refresh character data from database (requires Manage Server or Administrator) |
Account commands
| Command | Description |
|---|---|
/link <code> | Link this Discord account to your UnrealHQ account (code from the Control Room) |
/unlink | Disconnect your Discord account |
/whoami | Show which UnrealHQ account you are linked to |
/persona [name|off] [everywhere] | List personas, pick one for this channel (a DM counts as its own channel, so a persona set there stays in that DM), or turn it off; add everywhere to set your default for every channel |
Moderation commands
Available when the bot owner turns on Moderation Tools; each requires the matching Discord permission. See Moderation Tools for the full table: /purge, /slowmode, /timeout, /untimeout, /kick, /ban, /unban, /warn, /warnings, /clearwarnings.
Memory commands
| Command | Description |
|---|---|
!memories (!memory, !mem) | Where memory stands with this character here; !memories help lists everything (styles, undo, redo, fold, track, every) |
!summarize [count] (!sum) | Same as !creatememory: a memory from the last N messages (default 50) |
!creatememory 40 | Turn the last 40 messages into a memory in your memory book (needs a linked account and your own key) |
!creatememory <link> <link> [everywhere] | Same, from one message link to another. The memory stays in this channel; add everywhere to either one to share it with every chat with the character |
!creatememories auto 40 [everywhere] | A memory every 40 messages here, on its own, into your book for this channel, or with everywhere for every chat with the character (per account, per bot, per channel). auto off stops it, auto shows the status |
Reminders
Any bot can remind you of something: tell it when and what, and at that time it messages you. With your own API key it writes the reminder in its character's own voice, to the persona you go by there (a short message on your key), with what you asked for written under it word for word; without one, or when your key doesn't answer, it sends the reminder plainly. It DMs you, or when your DMs are closed to it, tags you where you asked; start with here and it tags you in that channel instead. The first time, it asks for your time zone so the time is on your clock, and every bot knows it after that. A reminder becomes part of your chat with that bot, so the character knows it reminded you.
| Command | Description |
|---|---|
!remindme friday 9pm call mom | Remind you then. When can be tomorrow at 8am, tonight at 9, in 2 hours, nov 12 3pm, the 20th at 10am, or a time alone (9pm: the next one to come) |
!remindme every monday at 9am trash day | Again and again: every day, every weekday (Monday to Friday) or one day of the week, at a time |
!remindme here in 2 hours stretch | Said in this channel, tagging you, instead of in a DM |
!remindme list (or !reminders) | Your reminders waiting, numbered, the soonest first |
!remindme cancel 2 | Cancel one by its number in your list (or a few, cancel 2 3), or all of them with cancel all |
!remindme zone London | Your time zone, by a city near you or its name (Eastern, PST, CET, UTC+2); alone, it says which one you have |
Up to 25 reminders at a time, up to a year ahead. The bot you asked is the one that says it: if it's offline then, it says it once it's back, with when it was for, for up to a week. /remindme sets one from the slash menu and /reminders shows yours, with cancel: or zone: for the rest; only you see what they say back. /forgetme takes your reminders with it.
Auto-respond commands
Changing these requires Manage Channels, Manage Server or Administrator.
| Command | Description |
|---|---|
!auto | Show the channel's auto-respond status (anyone) |
!auto on/off | Toggle auto-respond mode |
!auto cooldown <0-300> | Minimum seconds between auto-responses |
!auto chance <1-100> | Response probability percentage |
!auto keywords add|remove|list|clear [word] | Words that always get a reply; the rest take the chance roll |
Character commands
Beyond the system commands above, what a bot answers to is up to its creator. Commands like !relationship or !msg come from the creator's command book in the Library and are switched on per character — so two bots can have completely different command sets, and a bot with no command book has only the system commands. To see exactly what a bot can do, @mention it with !commands (or !help) and it lists everything it currently answers to, grouped by category.
Slash commands (Discord UI)
These are real Discord slash commands (they show up in the / picker). Account commands reply privately (only you see the response).
| Command | Description |
|---|---|
/delete [count] | Delete the bot's last N messages (1–50, default 1) from Discord and from history (requires Manage Messages permission) |
/hide [count] | Hide (exclude) the bot's last N messages from context without deleting (requires Manage Messages permission) |
/auto | Reply to every message in this channel (requires Manage Channels) |
/ping | Only reply when mentioned or replied to (the default) (requires Manage Channels) |
/random [chance] | Reply unprompted at the given percent chance, default 25 (requires Manage Channels) |
/ready | Whether this bot can answer in this channel, and what stops it: a permission it's missing there (named as Discord names it), the channel not being age-restricted for an 18+ character, a timeout, whether people without a key can talk to it here, and which roles may use it. Only you see the answer (requires Manage Channels or Manage Server) |
/link code:, /persona [name:], /whoami | Slash versions of the account commands above; work in servers and in bot DMs |
/creatememory [last:] [from:] [to:] [about:] [scope:] [auto:] [style:] | Make a memory from the last N messages or a from–to range of message links; private reply with the draft |
/remindme when: what: [zone:] [here:], /reminders [cancel:] [zone:] | Reminders from the slash menu; only you see the answers |
Export & import
Export conversations
Back up your chat history from the Unforgettable. Each channel can be exported individually in two formats:
- JSONL (SillyTavern) — Standard chat format. Each line is a message object, compatible with SillyTavern and other platforms.
- JSON — Full structured export with metadata. Useful for archiving or analysis.
Import chat history
Bring your existing conversations to UnrealHQ! Unforgettable (into one of your own Parlor chats) and the Parlor (into a new web chat) both accept SillyTavern JSONL and JSON (array or wrapped chat/messages format). The importer auto-detects the format. A file can be up to 50 MB and 25,000 lines, plenty for a chat of ten thousand lines and their swipes. On Free, where a chat keeps its last 1,000 lines for 60 days, the lines an import brings are kept whole: only the ones written after it count toward that. Discord channels never take an import: every bot there would read the file's lines as things really said in the room.
Pick up a SillyTavern chat in the Parlor
In the Parlor, Import from SillyTavern (under + New Chat) turns a chat file into a new chat with every line in its place, so you carry on where you left off. Choose the file (SillyTavern's chat menu exports one as .jsonl): the character and the persona it names are picked for you when you have them. The character list has your own characters, private ones too, and the ones you already chat with; any public character is a Lobby search away. If the character isn't here yet, bring its card over in the Atelier first (Import Card takes the SillyTavern .png or .json).
- Lines you hid in SillyTavern come in hidden from the character, and every swipe comes along (swipe the last reply to see them)
- SillyTavern's own notes (help text, comments) stay behind; narrator lines come in
- The lines keep their order and their dates
- Pick the persona you played in SillyTavern, by the same name, and the character keeps calling you that
- An imported chat is a new chat like any other, so Free's 30 open conversations count it
Import/export characters
The Atelier supports TavernCardV2 (and V3-style) JSON import and export of saved characters. Import a character card and all fields come across — description, personality, scenario, example dialogue, system prompt, post-history instructions, tags, codex entries (character_book), and alternate greetings.
PNG cards work too. Choose the character's .png straight from your SillyTavern characters folder: the card embedded in the image (the chara or ccv3 chunk) is read in, and the picture itself is uploaded as the avatar with the hidden card text stripped out, so nobody can pull your description or codex back out of the avatar file.
Bulk Import & drafts
Migrating a whole roster? The Bulk Import card in the Atelier's Import/Export panel takes a pile of files at once — TavernCard .json, SillyTavern .png cards, and bare World Info lorebooks — and turns each into a private draft. A lorebook with no card becomes a draft named after the file, carrying just its codex. Only a name is required to save a character now, so you can work in passes: dump everything in, then come back to each draft for its description, personality and polish. A description (or personality) is only demanded at the moment you flip a character public, because a public character needs an identity to play; the tagline is what the Lobby card shows.
Two-file characters merge themselves. SillyTavern often ships a character as a pair: the card in one file, the lorebook in another. When both are in the same batch and the names line up (or the batch is exactly one card plus one lorebook), the lorebook's entries land inside the card's draft instead of becoming their own character. An unmatched lorebook still becomes a draft, but its result line asks "is this lore for…?" with a merge button. And if a shell already slipped through, open the real character and use Merge In a Draft in the Import/Export panel: the shell's codex moves over, its text fills any empty fields (never overwriting yours), and the shell is deleted.
Coming from Character.AI
Bring your characters, your chats with them and your personas over in one go. Start with Character.AI's data export (it comes as a .zip), or the .json a Character.AI exporter saves. In the Atelier, open the Import/Export panel and choose Import from Character.AI; with no characters yet, the link under Your Characters takes you straight there. Pick the .zip, the .json files from inside it, or an exporter's .json, several at once if you like. The files are read on your own device, and nothing is sent until you say so: you see what they hold first, each character with who made it and the start of its greeting, the chats that came with it and your personas, along with the room your plan has. Untick anything you'd rather leave behind, then press Bring them over.
- Each character becomes a private draft, for your own chats. One someone else made says who in its About ("Made by … on Character.AI.") when the export names them
- Its definition is split for you: the example dialogues become Example Messages, and the rest joins the Description.
{{char}}and{{user}}keep working, and Character.AI's other stand-ins for you (a random user, a hidden name) become{{user}} - Its picture comes from Character.AI when Character.AI sends it; when it doesn't, the character's line says so and you can add one from the card
- Each chat with it opens in the Parlor as a chat of its own, every line in order with its date, and every version of a reply as swipes. The lines it brings are kept whole, on Free too
- A chat with someone the export doesn't describe brings them as a draft with their name and first line, ready for you to fill in
- Your personas come in as personas
- Your plan's room counts: a character past it isn't made, each chat counts as an open Parlor chat (30 on Free) and each persona as a persona. Every line says what came over and what didn't
Import standalone codex entries
Got an existing codex file? Click "Import Codex (.json)" in the Atelier. It handles all common World Info formats, including older ones with different field names. Choose to merge with existing entries or replace them entirely.
FAQ & troubleshooting
Something broken? File a ticket. Type !ticket followed by what is going wrong anywhere Alex Kade can read: any channel he can see, in any server he is in (not only the UnrealHQ Discord), or his DMs. For example, !ticket Kaito stopped answering in #general last night. Say which bot, where, and what you expected. You get a ticket number straight back, and the desk sees your setup with it (which account, provider, model, which bots and whether they are running), so you are not asked the same three questions first. Urgent-sounding things ("won't respond", "error", "stuck") go to the top of the pile; ideas and wishes go to the bottom. When it is looked at you hear back in the same place (staff can also send you a word with !ticket #12 reply … while it stays open); !ticket #12 shows yours any time (ask in an open channel and Alex sends it to your DMs instead). Linking your Discord first (/link CODE from the Control Room) helps, because then the desk can see your settings. Tickets go straight to the UnrealHQ staff and only they can read them, wherever you file from.
Ask The Archivist. In the UnrealHQ Discord, @mention The Archivist (or DM him, or start a message with !atlas) with your question and he answers from this very page, with a link to the section. He is a little tired of everyone, but he is accurate, and he will say so when the Atlas doesn't cover something. Then it's #help-desk. He keeps your last few questions in mind for about an hour so a follow-up ("and how do I turn it off?") lands on the right page; nothing is stored, and he forgets the moment you go quiet.
Or ask Pip from HR. His younger sister works the same Atlas and is the best desk for two things: your account (signing up, linking Discord, keys and providers, Settings, plans, your data) and the Atelier (building characters, the Forge, the Codex, greetings, custom commands, the Library, publishing and profile pages). @mention Pip the same way. She is shy and stutters a little, and she is exactly right about her chapters; anything outside them she hands to her brother, and anything the Atlas doesn't cover goes to Whispered Insanity. One more thing about Pip: she keeps an eye on how the room treats her brother. Pile onto The Archivist all at once, or keep needling him on your own, and she will ask, politely, for a little space; keep piling and she puts the channel on slowmode for a few minutes and lifts it herself. She never stops the fun, she paces it.
The bot isn't responding to my messages
If it's your bot, press Ready to reply? on its card in the Command Center first: it checks all of the below for you. If you run the server, /ready in that channel checks that bot there, and only you see the answer. Otherwise:
- Make sure you're @mentioning the bot or replying to one of its messages (unless auto-respond is on). In a DM no mention is needed, but the bot chats there only once your Discord is linked to your UnrealHQ account, and an 18+ character also needs your NSFW opt-in; until then it sends a short note saying so.
- Check that you've set an API key with
/setkey(or in the Control Room, if your Discord is linked). Without a key the bot replies with setup instructions when addressed, and silently skips you in auto-respond channels. - Verify the bot is actually running (check the Command Center — it should show a green "Running" badge) and has a character linked
- Make sure the bot has permission to read and send messages in that channel. A bot you speak to where it can't post says so: it puts 🤐 on your message, or, where it can't react either, sends you a DM (once a day) naming the permission it's missing there
- If the bot says it can't read your message, the Message Content Intent is off in the Discord Developer Portal
- Check you haven't been blocked by the bot's creator
I'm getting API errors
On Discord a reply that fails says so out of character. On your own key, and in a DM, you get the provider's reason: [OOC: I couldn't answer just now: …]. On a key that isn't yours (the bot's, a server's or a house key) the channel reads only [OOC: I couldn't answer just now. My owner can see why in the Command Center.], and the bot's owner finds the reason under Ready to reply? on its card. In a channel where the bot answers every line, a reply that fails says nothing. No bot keeps these notes as part of the story.
- Double-check your API key is correct and hasn't expired
- Make sure you've selected a valid model for your provider (
/setmodel) - Check that you have credits/balance with your API provider
- If using a custom endpoint, verify the base URL is correct
The bot's responses feel too short/generic
- Raise Reply length (
/settempdoesn't control length; set Reply length in the Control Room or with/setlength). 600 fits one Discord message; the ceiling is 32,000. - Add more detail to your character's description and personality fields
- Add example dialogue showing the style and length you want
- Try a more capable model (Claude and GPT-4o tend to give richer responses than smaller models)
The bot forgot something important
- Use codex constant entries for facts that should never be forgotten
- Pin important details as memory notes in the Unforgettable
- Increase the context window (
/setcontext) so the bot sees more history - Check what the character actually remembers in Unforgettable → Memory Books; fix a memory, or rewrite it from its messages
Can I use the same character on multiple bots?
No — think of the bot as the character card itself. One character powers exactly one bot, and its codex, memory and commands travel with it. What you can do is invite that one bot to as many servers as you like (the way Clyde or any other public bot lives in thousands of servers). If a character is already driving another bot it shows as "used by" in the dropdown; unlink it there first if you really want to move it. You can still swap which of your characters a bot uses until you Lock the binding.
How do I invite my bot to a server?
Use the Invite button in the Command Center. If you created your own invite link in the Discord Developer Portal, that works too.
Is there a message limit?
With your own API key, not from us — your only limits are your provider's rate limits and your API budget (web chat in the Parlor is rate-limited to 15 messages a minute). UnrealHQ Managed API tokens do have limits: each plan has a daily token cap and a prepaid credit balance, and the bot tells you verbatim when you've hit either.
Can other people use my bot without paying?
Only on Discord, and only when there is a key to answer them on. The bot uses each message sender's own API key first (on your own bot, a managed key it carries, your included key or a key add-on, comes before yours). Someone without one is answered on a key the bot carries (Headliner's included key, a managed key for one bot, a key you attach, or a server member's key for their own server, see Settings), or else on the server's house key. With none of those, the bot replies with quick setup instructions when they address it (and silently skips them in auto-respond channels). In the Parlor everyone chats on their own key (a Headliner can pick their included key as theirs, under Change engine); a key attached to your bot runs only your own chats with that character there. Anyone else needs to set their own key with /setkey, or ask the admin for a managed token.
Where can I see which servers my bot is in?
On the bot's card in the Command Center. Ready to reply? says how many servers it's in, and expanding Server Invite Links lists them, biggest first: by name, with a button to make a server-specific invite, where you run the server yourself (Manage Channels, Manage Server or Administrator), and as Server …1234 everywhere else, since a server's name belongs to the people who run it. The bot has to be running for the list to load. The same servers appear in the Allowed Servers block with an Allow button beside each, which is the quick way to build a whitelist from where the bot already lives.
What do My Bot Stats count? Do Parlor chats count?
On the Servers page, My Bot Stats shows three numbers for each of your bots. Servers and Users come from Discord alone: the servers the bot is in, and their members added up (everyone in those servers, whether or not they've talked to it, so someone in two of them counts twice). Messages counts every line from chats with the bot's character, Discord and the Parlor both, the bot's replies and the lines it answered alike. Each line counts once, as it's written, so the number only ever goes up: deleting lines or a whole chat later takes nothing off. Copies don't count again (a branch of a chat, or a scene brought over with Continue in the Parlor), an imported chat doesn't count since the bot never heard it, and a chat's greeting counts once however many you flip through. A character playing on more than one bot shows the same count on each. A character's own tracking is something else, and belongs to the chat it's in: a status box lives in that chat's replies, and the living notes are kept per chat, so a Discord chat and a Parlor chat each keep their own. Bringing a Discord scene over with Continue in the Parlor brings its lines, status boxes and all, and its memories; the living notes stay with the chat they were written in.
Do I have to publish my bot to use it in my own server?
No. Publish only controls whether the bot shows in the Lobby. A bot you never publish still runs, still answers, and can be invited to any server with its invite link. Publishing is for strangers; the invite link is for you and your friends.
My bot joined a server and left again straight away
That is the creator's Allowed Servers list doing its job: the server was not on it. The bot posts a short note in the server's system channel with the Server ID before it goes, and nothing invites it back by itself. Add the server to the list (or ask the creator to), then use the invite link again.
If I leave a scene and other people keep playing, does the bot lose track of me?
No. The scene keeps going without you, and each person's memory book is their own, so what you and the bot had going is not overwritten by what everyone else did while you were away. When you come back and your own lines have scrolled out of the context window, the bot gets a short where we left off recap of your last exchanges with it, on top of the live conversation. If you play more than one persona, each persona has its own recap and your memories are written with the persona's name: switching from one to another is like a different person walking in.
Can a bot answer sometimes, but always when I say its name?
Yes, and that is the intended combination. In an auto-respond channel, keywords are a guarantee and chance covers everything else. !auto chance 30 with !auto keywords ryker means every message containing "ryker" gets a reply and about a third of the rest do. !auto chance 0 with keywords set means keywords only. Cooldown still applies either way: with one set, a word said twenty times is not twenty replies, and lines inside the cooldown are read with the next reply. With no cooldown, every line gets its own reply. All of this is per channel and per bot.
What do the plans cost, and what does each one include?
Four plans, all month by month, all supported through Ko-fi donations. Free ($0): 2 bots, 3 characters, 2 personas, 3 memory books, 30 open Parlor conversations, short memory (the last 1,000 lines per chat, kept 60 days; an imported chat is kept whole), memories you make yourself in the Brief style, bots hear 5 voice messages a day, a profile page for every bot with 3 pictures and the built-in looks. Starter ($5): 5 bots, 15 characters, 10 personas, unlimited memory books, unlimited Parlor conversations, long-term memory (auto memories as the story goes, every memory style or your own), your own key on 1 other creator's bot for your server, 15 voice messages heard a day (spoken replies with your own voice key), profile pages with 8 pictures and custom CSS. Studio ($12): 8 bots, 30 characters, everything Starter has, living notes (plot threads, what the character knows about you, cast), folding old memories into arcs and chapters, a separate memory model, a personal command book (your !commands on any bot), your key on 2 other creators' bots, 30 voice messages heard and 20 spoken replies a day. Headliner ($25): 10 bots, 50 characters, living notes you write yourself, your key on 3 other creators' bots, unlimited voice messages heard and 40 spoken replies a day, profile pages with 12 pictures and custom CSS, an included managed API key for one bot so strangers can talk to it without a key of their own, and early access to betas. On any plan you can add a managed key for one bot as a separate add-on, and if you have no API key at all, an API plan puts one on your account (the next answer). The Plans page has the side-by-side table; to move up, donate on Ko-fi and send a request under Your plan in the Control Room.
I don't have an API key of my own. Can I get one here?
Yes: an API plan puts an UnrealHQ Managed API key on your account, and bots answer you on it, on Discord and in the Parlor. Each plan has a daily allowance that starts over at midnight UTC: Lite $5 a month (300k tokens a day), Basic $10 (500k), Plus $20 (1M), Pro $35 (2M) and Ultimate $50 (3M). A month is 31 days of the allowance. It works alongside any plan, Free included. These are beta prices, and the Plans page always has the current ones, with every model on offer and an estimate of how many replies a day each plan gives. To get one, donate on Ko-fi and press Request under the plan you want, or file a !ticket with Alex Kade. Once it's approved the key is on your account and you're switched to it, and the Control Room shows what each of your replies cost, under UnrealHQ Managed API.
Can I share my bot's profile page? What if my name is taken?
Every bot's profile page has a short address, unrealhq.online/profile/Name, chosen in the profile editor and copied with the Copy link button. Names are first come first served across the whole site, and the editor tells you as you type if yours is taken, so pick another. The address is not case-sensitive. Only you see the Edit button on your own page; visitors get the page and nothing else.
Can other people see my character's prompts or codex?
No. The description, personality, system prompt, codex and everything else that shapes the character never leave the server; the Lobby, the Parlor and the profile page only receive the public fields (name, tagline, about, avatar, greeting, what the creator chose to show). Someone who talks to your bot for a year gets replies, not the recipe. Exports of a character go to its creator only.
I typed /voice match and nothing changed
Discord's slash-command picker may have swallowed it: if any app in that server registers its own /voice command, typing /voice match runs that and the text never reaches the bot. The fix is the ! form with the bot addressed: @Luna !voice match. A bare /voice shows what your mode is now, so you can confirm it took.
A reply was cut off: "ran past the time limit" or "stopped sending the reply"
A reply runs on two clocks. "The reply ran past the time limit and was cut off" means the whole reply took longer than it's allowed: about two minutes for a 600-token reply from a model that doesn't think, longer for a bigger Reply length, and longer again for a model that thinks before it writes (about four and a half minutes on Light or Off, and about eight and a half on Full, for the same 600 tokens). "Your provider stopped sending the reply (nothing arrived for 90 seconds)" means the provider went quiet partway: the connection stalled, or the model stopped answering. Whatever had arrived by then is kept. In the Parlor, if you'd stepped away, the note is waiting where the reply would have been; on Discord, a reply that runs out says so out of character, like any reply that fails.
What helps: try again first, since providers have slow moments (preview models most of all). If it keeps happening on a thinking model, set Thinking to Light or Off (Control Room → Settings, or /thinking light), lower Reply length, or switch to a faster model. A backup engine helps too: when your main engine runs out of time before writing a word, the backup is asked instead.
A reasoning model answered with nothing, or said it used its whole reply budget
Models that think before they write (GPT-5, Gemini 2.5 and 3, DeepSeek's reasoners and V4 line, GLM, Qwen3, Kimi K2 thinking and anything tagged thinking) spend that thinking out of the same budget as the reply. The bot recognizes those families and gives them extra room automatically, and a model it doesn't know yet that thinks its whole budget away is asked once more with that room, so this is rare now; if it still happens, set Thinking to Off (Control Room, or /thinking off), raise Reply length, or pick a non-reasoning model for that bot with /setmodel.
Can The Archivist explain something again, or in more detail?
Yes. Ask a follow-up the way you would with a person ("can you explain that more", "what do you mean by cooldown?") within an hour and he treats it as the same question, digging further into the same section rather than starting over. He can only go as deep as this page goes; if the Atlas is thin on something, tell #help-desk and the page gets better.
Why is one channel answering differently from another?
Most behavior is set per channel: auto-respond mode, chance, keywords and cooldown (!auto), which persona you are using (/persona), which model a bot uses (/setmodel … here), allowed roles (/access) and 18+ gating. A bot that chats freely in one room and stays quiet in another is usually just carrying different channel settings. A bare !auto or /settings shows what is set where you are standing.
Two of my friends' bots keep talking to each other. Is that on purpose?
Yes, up to a point. Bots in the same channel can see each other, and a bot that @mentions another in its reply hands it the scene, for at most two hops, on the last human speaker's key. Server admins can cap or stop it with !tagging 0 (or !tagging off), and a bot may only tag a bot that has already spoken in that channel.
I edited my character. Why hasn't the bot changed?
Character edits apply to the next reply as soon as you save; there is no restart. If nothing changes, check that the bot is actually linked to the character you edited (the card in the Command Center names it), that you saved (the Atelier shows an Unsaved changes badge until you do), and that the channel is not running a different model whose style you are noticing instead.
How do I get help or report a problem?
There is no support email. Type !ticket and what is wrong anywhere Alex Kade can read, in any server he is in or in his DMs (see the top of this section), or ask The Archivist for anything this page covers. Invite codes, managed tokens, password resets and quota changes are handled by the platform admin on Discord.