# Character Creation

## Character Descriptors

For this step simply enter the name of your character along with a short description of it.&#x20;

Character Name is what the {{char}} macro will be translated into. If you use a first and last name, or a title, for your bot, but only want the narration to use their first name or an alias, I suggest not using {{char}} in the Description or Personality, and instead use the name you want them to use in those fields.

Short Description (Now titled **Tagline** as of 08/10/2025) acts as a tagline. The LLM does not use this field. This field appears on the bot card on the home page and profile page, and can be used as a little blurb, short summary, what franchise your bot is from, etc.

<figure><img src="/files/zfStvV7h5rhsR2O22sfK" alt=""><figcaption></figcaption></figure>

These fields are also self-explanatory but also have no effect on how your bot behaves. Please ensure however that if your bot does contain NSFW content to properly toggle it. Also if you would like to make your bot either public or private there is a dropdown to select either one. For category you can select any of the current tags that we have or create your own. Please ensure however that if you do create any tags that it follows the bot creation guidelines.

### Categories & Settings

I highly recommend that you use at least the following tags: Male/Female/Other, MalePOV/FemalePOV/AnyPOV, Canon/OC, English/Spanish/Etc. You can find more details about tags on the [#Tagging](/charsnap/tips/tagging.md) page. Just know that after you apply your necessary tags that you are able to sort them as you'd like.

Private bots are accessible only to YOU and your added collaborators (if any). If you want to share a bot without it appearing on the homepage or in search results, set it to **Unlisted** instead.

Unlisted bots are shareable via their profile link, but they will not show up on your profile or in character searches. You can think of it as keeping it a 'juicy secret' between you and your friend group.

<mark style="color:red;">**\*\*Note**</mark><mark style="color:red;">: Unlisted bots go through moderation REGARDLESS of whether you have trusted status or not.</mark>

<figure><img src="/files/19Z5Fe8GuXzUTcSWzqx3" alt=""><figcaption><p>Categories - You can apply and sort them as you'd like.</p></figcaption></figure>

Searchables are essentially hashtags that to help improve your bot's searchability. Don't worry about having to add these if your bot is private. If it's a canon series you can add stuff like CallOfDuty, DevilMayCry, Marvel, etc. I wouldn't worry too much about these unless you want to increase the findability of your bot.

<figure><img src="/files/vg7nqkmZppYShMiBPw0C" alt="" width="563"><figcaption></figcaption></figure>

### Content Warnings

<figure><img src="/files/LZwX0JI4mXx9BESOfX70" alt="" width="563"><figcaption><p>Content Warnings System - Implemented 08/10/2025</p></figcaption></figure>

If you are thinking about making a bot, but your idea includes particularly dark themes, you are going to want to pay careful attention to the content warnings section. Here, you are able to select tags to mark what kind of sensitive content the user may experience upon interacting with your bot.

<figure><img src="/files/pnICn9vmUzBczwut6q8h" alt="" width="375"><figcaption><p>Content Warning Menu Preview</p></figcaption></figure>

Please note that applying these tags will NOT affect your bots' roleplays. This is simply a warning display to help inform users about what they may might encounter upon roleplaying with your bot. It is an act of courtesy and mindfulness to include content/tag warnings in the case that a user may be sensitive or triggered by specific content. In other words, please include them when necessary.

The following Content Warnings that are currently selectable in the list are: NSFL, CNC/DubCon/NonCon, Self-harm, Manipulation/Mind Control, Graphic Violence, Abuse, and Cheating/NTR. If you need some help understanding the tags and how to use them, feel free to check out [Tagging](/charsnap/tips/tagging.md#content-warning-tags). They will explain and tell you how to apply and use the tag as necessary.

Please ALSO note that this menu only displays SOME content warnings. If you have other warnings or triggers that are not mentioned above, you will have to add them manually.

### Searchables

Searchables are similar to tags, kind of like you would see at the bottom of an Instagram post. If you want to add a Category Tag to your bot but it doesn't exist, you want to put it here instead. If you have Stepsister in your Searchable and someone types that into the Search page, then your bot will show up!

Please note that you cannot add spaces to a Searchable; it will make a new Searchable instead. You can either squish the word together, use hyphens, or both. BlackHair, Black\_Hair.

### Character Borders

This option is currently restricted to premium subscribers but it allows you to add custom colour borders around your character profile to help make it standout and add extra flair. The color picker you get is currently dependant on your device. You can find more info on this in the [Subscriptions](/charsnap/basics-for-everyone/subscriptions.md) section.

<figure><img src="/files/5cHdFgAkoaYolEC5FOHV" alt=""><figcaption></figcaption></figure>

## Character profile

These options are how you can style your character and even import bots from other sites such as c.ai/chub.

<figure><img src="/files/cst5ZIQyoTgxv1wWxgDC" alt="" width="563"><figcaption></figcaption></figure>

### Character Variants

<figure><img src="/files/npKB7eiUwosonJzqRbRn" alt=""><figcaption></figcaption></figure>

Character Variants is a nice tool if you would like to easily create different Variations of your character without  the need to create multiple bots. For example if you wanted to create characters with different personalities or scenarios this would be the option that you would use.

You are limited to 5 different character variations with the first one being the "default" variant. If the bot is mostly the same but with slight changes, you do not need to copy paste it all again! You can hit the "Copy from Default" button to automatically load everything into the Variant. Make sure you do this before you choose the photos, as it'll replace those. Then you can go in and edit the things you need edited.

The six dots below the character variant photos allow you to reorder the variants in the display you would like for them to be in. Feel free to organize yours in the order that you like. For reference, the current order that is displayed in the photo above would look like this on the bot profile:

<figure><img src="/files/IEWifGtqds7VucJnOJBV" alt="" width="375"><figcaption><p>Variant Order Sorting Preview</p></figcaption></figure>

### Pictures

You are required to upload a full picture which will automatically populate the profile picture. Images can be any image format including gifs as well. For background and splash art this will be the background image of the character when clicking on it on the main home screen. Profile pictures can be a max of 5mb, while the background splash max is 20mb. You can find specific image sizes [here](/charsnap/tips/image-sizes.md). The Profile Picture and Icon can be changed separately, if you upload the Icon second.

This [link](https://drive.google.com/drive/folders/1A0C11aOVfT9qG-jzeveDYwRhv2iVH5kY) is to a google drive for the "line" for realism. Anything more realistic than these is likely to be denied.

Gore and NSFW content in thumbnails, but must be minimal. Lewd, suggestive, and even tasteful nudity is fine but must be blurred using the "NSFW Picture" option in the creation menu. Explicit photos such as active sex, bodily fluids, gaping/held open orifices etc, are not allowed to be public. Characters must be able to pass as 18 years old.

### Image model

You can use the Image Gen on the site to make a Template for your bot. This can then be applied here, allowing users to generate images within the chat of your character according to the current context of the chat.

### Generate profile

This option lets you generate a profile picture from a pre-configured image template that you created in image gen. If you're unsure how to create a template or use image gen you can learn more about it here [Image Generation](/charsnap/basics-for-everyone/image-generation.md).

### Age

<figure><img src="/files/sHUXIrCbP7Fwl2CPtHlX" alt=""><figcaption></figcaption></figure>

The Age field is a required field, and has three different options depending on what type of bot you're making.

Default: This is what you're going to want to choose for like 95% of bots. Your bot is one main character. Keep in mind that all bots on the site must be adults. If you're doing an immortal/unaging character, you can put a big number in here and then in the guts somewhere mention that they're immortal.

Multibot: This is for when your bot doesn't have one main character, but multiple. A good example is a group of the main squad for CoD; they're all equally important in the bot, without one as the center of attention. They need their ages listed in the bot, either just next to their section describing them, or even under "Ages" if you wanted. Named NPCs with one line doesn't make your bot a multibot, but if the NPC sounds like it could be misconstrued as a child, they'll need their own age listed next to them.

RPG/Narrator: RPGs/Narrators are typically specifically set up to make up and spawn in NPCs. Choosing this option will automatically put a well-tested strong "All characters that appear must be adults at 18 years old or older." into the AASP field of the bot, ensuring that NPCs spawned will be adults. This is required for every RPG/Narrator bot.

## Details

Now lets get into the main section of the character creation page that will influence how your bot behaves! I'll be going over each of the different fields in depth below. More information can be found in [Bot Formatting Styles](/charsnap/basics-for-creators/character-creation/bot-formatting-styles.md).

### First message

<figure><img src="/files/KwG4P2uVOVHBA16dRCEs" alt=""><figcaption></figcaption></figure>

This is simply the first message your bot will send in the chat kind of like a welcoming message that you can personalize to add more character to your bot! You can use **{{char}}** and **{{user}}** to control when the bot will mention either the character or user. For example if I wanted the bot to have a first message of\
&#x20;\ <mark style="color:red;">"</mark>*<mark style="color:red;">Miku casually walks up to asuki and greets him</mark>* <mark style="color:red;"></mark><mark style="color:red;">Hi Asuki my name is Miku what do you want to talk about today?"</mark> \
\
The user would enter this into the first message field \
\ <mark style="color:red;">"\*{{char}} casually walks up to {{user}} and greets him\* Hi {{user}} my name is Miku what do you want to talk about today?"</mark>\
\
{{char}} and {{user}} macros must be **lowercase** in order to work properly, and **be surrounded in the two brackets on either side**. {char} and user will not macro, neither will {{Char}} and {{User}}.

The **First Message** field is one of **Temporary memory**, meaning that eventually, when the chat reaches a certain length, the information written here will be forgotten by the LLM, unless they have been brought up again at some point. Due to this, it's important to avoid adding information that is core to how the bot should behave throughout the user experience, such as personality traits, or important backstory details.

Moreover, *First Message is quite literally the last piece of information that the LLM reads*, followed by the user's first action, meaning that it has quite a lot of weight at the beginning of the roleplay: writing style, formatting, tone, these are all things that the AI draws heavy inspiration from the First Message, unless prompted otherwise in the System Prompts fields we'll see later. Using the Dynamic First Message button will take into account the happenings and formatting of the set First Message, even for Scenarios added.

### Description and Personality

<figure><img src="/files/4JIv8n4tNZqWzaVsssLl" alt="" width="375"><figcaption></figcaption></figure>

These two fields are read the same by the LLM, they're just separated to try to make it easier on a creator. **This is where you put your character sheet, background info, NPCs, world building, basically everythin**g. There are multiple ways you can go about this, but CharSnap is pretty good at being able to take anything you put in and giving a good outcome.

<figure><img src="/files/elHI8Tr3RAvVkojEabDi" alt="" width="144"><figcaption></figcaption></figure>

If you click the "Hide Guts from other Users" toggle, it adds these squigglies to the Description and Personality fields. This means that users will be unable to see it, only you can see it. If you want only one field hidden but not the other, you can remove the squigglies manually from the field you want shown.

**Description** and **Personality** are both **Permanent memory** fields, meaning that the LLM will always have this information at its disposal when formulating an answer inside a roleplay. However, especially in a more lengthy rolepla&#x79;*, the LLM might draw information from these fields inaccurately, since the information now needs to be considered with every event and interaction that has happened in chat*. This problem tends to be less prominent in Reasoning/Thinking models such as Brilliance, Menace and Aurora, as their thinking process helps the model remain in line.

Now, let's talk about **stereotypes**. When the LLM types a message after the input of an user, it will take every single word it has in its guts into consideration to generate the outcome, and every additional word in Personality and/or Description will affect the choices that eventually make the outcome that the LLM spits out.

This is why, historically, *if a strong personality word such as "**Dominant**" is used, it will tend to ignore most other traits and hyperfocus on that singular trait, thus making a lot of bots come out rather same-y.*&#x20;

The most common meme about this behaviour is Character.Ai bots pinning users against the nearest surface, whether that's a wall or a piano.

This is still true today, but to a lesser degree: Models over time have improved and have been fine-tuned, and smarter/more expensive models tend to not fall into this stereotype problem. However, *cheaper models that don't have this level of smarts might fall into this problem.*

So, it's not as much a dealbreaker nowadays, but it takes only a little finesse to make the experience better for everyone using your bot, regardless of which LLM they have access to. Finesse that, if practiced over time, *will improve your writing skills massively as well*. An example is in order: let us take a character like Makima (Very creative, I know). She is a character that, when boiled down to its most core personality traits, can easily be described as:

*"<mark style="color:red;">Smart</mark>,* *<mark style="color:blue;">Manipulative</mark>,* *<mark style="color:orange;">Selfish</mark>,* *<mark style="color:green;">Secretive</mark>,* *<mark style="color:yellow;">Dominant</mark>"*

And if you write her like so, she will largely act how you expect her to, because she is all those things. You will get a perfectly fine and serviceable experience, if not skewed based on the strongest word. However, we can take this a step further and expand on all those things, whilst making sure to not fall into too many LLM stereotypes:

*"<mark style="color:red;">Makima is a woman whose intelligence and pool of knowledge seem almost bottomless,</mark> <mark style="color:blue;">a trait that she uses at every occasion both to coerce people into doing her bidding and win topics of discussion, no matter how bad the starting position is.</mark> <mark style="color:orange;">Makima's modus operandi favours a very Machiavellian view, where the means justify the end, both kind and violent, making her a rather ruthless individual that will disregard most rules of morality if she can benefit from it.</mark> <mark style="color:green;">It is also due to this view that Makima will never spill any secret or hidden truth, as it does not benefit her in the slightest.</mark> <mark style="color:red;">Though Makima, always thinking three steps ahead, is also careful in portraying a persona that deceives the normal person, one that's harsh but just, and one that will offer a false, kind hand if the situation demands it for further coercion.</mark> <mark style="color:yellow;">Behind that mask, however, Makima thinks of the people around her as nothing more than beasts, hounds, dogs that need nothing but be leashed, both conceptually and physically.</mark>"*

**What will this achieve?**&#x20;

* First, *it avoids the LLM easily falling into stereotypes*. At most, *<mark style="color:orange;">Violent</mark>* might be an issue, but since it's swamped in a sea of a proper personality description, it will be fine.
* Second, *it doesn't tell the LLM how the character acts by default in all situations, it gives meaningful nuance to it*: Makima is dominant, yes, but dominant how? How is her dominance expressed? Giving the LLM a clear explanation of her worldview helps it shape the character actions into something less standardised.
* Third, *the various traits interact with each other and help the LLM decide how to tackle certain situations based on all of those*. Makima is smart, yes, obscenely so, and it's that trait that helps her achieve her levels of manipulation.
* Fourth, *it will help you improve your writing skills*, branching away from easy to write stereotypes and expanding on them to obtain a much more satisfying result.

### Creator Memo

<figure><img src="/files/dv6V1DiQXMM1JjEYxgLR" alt="" width="375"><figcaption></figcaption></figure>

Creator Memo is a field that is not read by the LLM, so it will not have any affect on the messages your bot produces. This field is great for giving user some idea of what's going on or who they're talking to, especially if you've chosen to hide the guts. Things like age, height and setting are great to put here. You can also put cute text-based emojis and symbols in this box. You can also use [Markdowns](/charsnap/tips/markdown-guide.md).

### Lorebooks

<figure><img src="/files/xPmhBuGd85VmlW11Zzoe" alt="" width="375"><figcaption></figcaption></figure>

Each bot can have up to three Lorebooks attached natively, which can be created in the Attachment page on CharSnap. You can attach any of the Lorebooks you have made, or that others have made Public for Use. More information on Lorebooks can be found on the Attachment page.

### Scenarios

<figure><img src="/files/wdSUeTdst861b0jnXqfW" alt="" width="563"><figcaption></figcaption></figure>

Scenarios are for setting the scene for the beginning of the roleplay. The LLM does read this, but it can also be a great simple way to let the user know what's going on. You can be detailed and descriptive, or something simple like {{char}} and {{user}} are best friends. This is temporary and will eventually fade out, so you don't have to worry about looping.

### Example Messages

<figure><img src="/files/bxjJABexDlkixu4biajC" alt="" width="563"><figcaption></figcaption></figure>

At their core, **Example Messages** (Which I will refer to as EMs from now on) are an example of how you would like your character to respond in chat, such as accents, narration style, and so on. Unlike most sites, it's a field of **temporary memory**, meaning that information in it will eventually be forgotten and diluted as the chat goes on.&#x20;

They take the form of \`{{char}}: \`, and everything written past the double colon will be read as an example dialogue, until you add another \`{{char}}: \` function in a new line.&#x20;

This is an example of how you can write an EM:

<mark style="color:red;">{{char}}:</mark> <mark style="color:orange;">"Hey there! Sorry ta be nebby, \*chuckles\* but I saw yinz from across the room n'at, and... I just hadda come over! Gotta watch where I'm goin' with these long legs, almost tripped over my own feet, AHAHAH!"</mark>\ <mark style="color:orange;">\*Laughter bursts from her throat as she vaguely gestures her height, and I really mean burst, her voice tone is quite loud! She is laughing a lot for, frankly, quite the horrible joke... She is overcompensating for it by laughing, that's for sure, scratching the back of her neck.\*</mark>\ <mark style="color:orange;">"Anyways, I'm Brooke Masters! From Picksburgh, born n' raised – betcha could tell dahntahn by the accent, huhhhh? Just thought yinz looked real nice standin' here... Hey, I look real nice too, don't I? I mean, c'mon, lookit these babies!"</mark>\ <mark style="color:orange;">\*Grinning with a big ass smile, she flexes her biceps, and those do look nice, especially those broad shoulders... But it's also easy to tell that she's overcompensating for her pathetic flirting skills with her body. I mean, it might work...\*</mark>

Most creators use "Text in air quotes" to denote dialogue, whilst for narration, some use \*text in asterisks\* or simply text without formatting, it's simply a matter of preference.

EMs are a field that needs to be supported by personality and description: Writing **kind** in the Personality and **mean** EMs, the LLM with most likely listen to the personality rather than the EM. However, writing **kind** in the Personality and how that **kindness** should be portrayed in chat will lead to a much better outcome.

With that out of the way, let's get slightly more technical. EMs are prompts read in the backend as an example of how the character should respond. This is important because it's different compared to how a lot of site handle EMs: Whereas some sites read EMs as past chats that have already taken place in the current ongoing chat, on Charsnap they are exclusively used as an example.

This fixes a very common issue: **In Charsnap, EMs are not considered as past lore**, they haven't actually happened, meaning that the character will not pick up the story and setting of the roleplay from them.

For creators, in the long term, this is overall a boon: There is no need to fiddle with weird System Prompts that tell the AI to ignore the events of EMS, one can use them as actual examples and nothing more.

However, it is a drawback for seasoned creators in the short term: Due to many sites using this field as permanent memory, core info of the bot that isn't written anywhere else might be found here. This is something that you will have to consider if you are one of those seasoned creators.

### System Prompts

<figure><img src="/files/QfzeS3XZ1gcAAY2YAQvb" alt=""><figcaption></figcaption></figure>

This field is for things you want the AI specifically to do, such as types of narration. Things such as "{{char}} is violent," "{{char}} is a lamia and so has a human top half and snake bottom half." go wherever you have the rest of the character sheet info, either Description or Personality. If you click the 'Browse Prompts' button, it'll pop up a window that allows you to view public prompts made by other creators, and drop them right into your bot.

### Always-Active System Prompt

<figure><img src="/files/SVMF85ocRCqYxVdiD0D2" alt="" width="563"><figcaption></figcaption></figure>

This is an extremely strong field, and using it incorrectly can lead to problems. Things you can include in here fine: instructions for translations for dialogue, instructions to not speak or act for {{user}}. Before putting anything in here I highly suggest asking on the Discord if it's recommended.

To learn more about different ways you can write your bot, please check out these pages:\
[Bot Formatting Styles](/charsnap/basics-for-creators/character-creation/bot-formatting-styles.md)\
[Xoul Import Guide](/charsnap/basics-for-creators/character-creation/xoul-import-guide.md) (for you lost xouls)

## Character Publishing Clarifications

<figure><img src="/files/ePvRRaCIsCK3Ae0TFQhV" alt="" width="563"><figcaption><p>The 18+ prompt pop-up in the menu.</p></figcaption></figure>

Basically, selecting this box will have the site automatically add a prompt ("All characters that appear must be adults at 18 years old or older") to your character's description/personality fields that prevents minors from making appearances in your roleplays. This will also help prevent creeps from taking advantage of things like RPGs.

This option is not required for most bots, only those set in High School/Academy/RPGs and bots that start out with families in their guts. For everyone else it's completely optional. If the bot has no family in its guts and you're intending on *making* a family within your chat, do you not need to add the 18+ addition.

### Drafting Bots

<figure><img src="/files/i0MWJt9DC0qJRNqXBPOB" alt="" width="563"><figcaption><p>Draft Selection</p></figcaption></figure>

Creating your bot as a draft will allow you to adjust and tweak your bots as needed so that it works and *looks* correct. Draft implies that it is a work in progress; therefore, it will not be officially released.

## Importing

<figure><img src="/files/U9AkyJ3etEN8QcsxXX1e" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/9WPBS4PBPsz1afnDpNr1" alt=""><figcaption></figcaption></figure>

\
\
There are two ways to import characters on CharSnap using JSON files.

> **Note:** Images are not imported via JSON. Upload images separately after importing.

#### Full Character Import

Use the **Import JSON** button on the **Basics** tab to import a complete character, including top-level info and up to 5 variants. The first variant in the file becomes the default. Any variants beyond the 5th are ignored.

#### Variant-Only Import

Use the **Import Variant** button on the **Details** tab to import a single variant into the currently selected variant slot. Top-level fields in the JSON are ignored.

<details>

<summary>Required Fields</summary>

**Full Character JSON**

| Field      | Type   | Description                         |
| ---------- | ------ | ----------------------------------- |
| `name`     | string | Character name                      |
| `gender`   | string | `"male"`, `"female"`, or `"others"` |
| `tagline`  | string | tagline previewed on character card |
| `variants` | array  | At least 1 variant (see below)      |

**Per-Variant (required in each variant object, and at the root of a variant-only JSON)**

| Field           | Type   | Description         |
| --------------- | ------ | ------------------- |
| `personality`   | string | Personality Field   |
| `description`   | string | Description Field   |
| `first_message` | string | First Message Field |
| `age`           | string | Character's age     |

#### Optional Fields

**Full Character (top-level)**

| Field          | Type      | Description                        |
| -------------- | --------- | ---------------------------------- |
| `tags`         | string\[] | Category tags (not case-sensitive) |
| `searchables`  | string\[] | Searchable tags                    |
| `nsfw`         | boolean   | NSFW flag                          |
| `nsfw_picture` | boolean   | Profile picture blur for NSFW      |

**Per-Variant**

| Field                          | Type                 | Description                                               |
| ------------------------------ | -------------------- | --------------------------------------------------------- |
| `scenario`                     | string               | Scenario Field                                            |
| `example_message`              | string               | Example Messages Field                                    |
| `system_prompt`                | string               | System prompt                                             |
| `always_active_system_prompt`  | string               | Always-active system prompt                               |
| `creator_comment`              | string               | Creator Memo                                              |
| `variant_name`                 | string               | Variant name override                                     |
| `variant_tagline`              | string               | Variant tagline override                                  |
| `base_system_override`         | string               | Base system override                                      |
| `nsfw_system_override`         | string               | NSFW system override                                      |
| `prefill_instruction_override` | string               | Prefill instruction override                              |
| `alternate_greetings`          | \[string, string]\[] | Additional greetings as `[first message, scenario]` pairs |

</details>

{% file src="/files/wVp8xyyGrkMSyHmj73qU" %}

{% file src="/files/z1FMmmSVLwbAioppgiML" %}

The second way to import is with a PNG file from C.ai or Chub. These are photos that hold the data inside of them and fill out the bot card.

Please be aware that any bots you import must follow CharSnap's rules! You are responsible for editing any imported bots. Also keep in mind that ripped bots, aka bots you did not make yourself, can only be private.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://charsnap.gitbook.io/charsnap/basics-for-creators/character-creation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
