What is W++ Format? Ultimate Guide for AI Character Creation
When Character Cards Break After Message 147
You've spent two weeks building a complex political intrigue with your AI advisor. They're supposed to be calculating, paranoid, morally gray. Then somewhere around message 150, they suddenly start responding like a cheerful customer service bot, offering helpful bullet points about "win-win solutions."
What happened?
The problem isn't that the AI forgot. It's that your character definition—probably a beautiful three-paragraph backstory—got pushed out of the context window, and all the model remembers now is "be helpful." Which understandably frustrates anyone who's invested real time into long-form roleplay.
W++ format emerged from this exact pain point. And while it sounds technical (because it is), it's actually solving a very human problem: how do you make an AI remember who it's supposed to be when you're 200 messages deep?
What W++ Format Actually Is
W++ is a structured way of defining AI characters using bracketed attributes instead of prose paragraphs. Instead of writing "She's a sarcastic hacker who teases people but is secretly protective," you write:
[Personality="sarcastic","protective","teasing"]
[Occupation="hacker"]
[MoralAlignment="protective_of_friends"]
That's it. You're breaking personality, backstory, rules, and memory into discrete, machine-readable chunks.
Think of it like the difference between telling someone "I'm kind of a night owl who likes coffee" versus filling out a form:
- Sleep schedule: nocturnal
- Beverage preference: coffee
- Energy peak: 11 PM–2 AM
The second version is boring to read. But if you need a system to remember and act on those traits consistently across hundreds of interactions, structured data wins.
Why LLMs Parse Structure Better Than Stories
Something that actually surprised me when I started digging into how models handle character definitions: they're much better at respecting explicit key-value pairs than narrative descriptions.
Modern LLMs (GPT-4, Claude, Llama-based models) were trained on massive amounts of JSON, HTML, structured logs, and API documentation. They've seen millions of examples where {"personality": ["sarcastic", "loyal"]} means "these are discrete traits that should influence behavior."
When you write a paragraph like "Alex is generally sarcastic but loyal to close friends, though they can be prickly with strangers," the model has to infer the structure. And inference gets fuzzy under pressure—especially when:
- Context windows fill up (only the last 4,000–8,000 tokens stay active in most platforms)
- The conversation drifts into new topics
- System prompts or safety instructions override your character definition
But when personality is defined as [Personality="sarcastic","loyal","prickly_with_strangers"], the model treats those as tagged attributes. The structure itself acts as a signal: "These aren't just descriptive words. These are rules about how I should behave."
The Token Budget Problem (Or: Why Your Bot Forgets After 200 Messages)
Let's talk about the thing most platforms don't explain clearly: context windows are expensive.
Every message you send, every response the AI generates, every part of the character definition—it all costs tokens. When you hit the model's context limit (say, 8,000 tokens), something has to get cut. Usually it's the oldest messages. Sometimes it's parts of the character card.
A narrative backstory might look like this:
"Elara grew up in the ruined districts of Neo-Tokyo, where she learned to survive by brokering information between rival factions. She's deeply cynical about authority figures but has a soft spot for idealistic newcomers, though she hides it behind sarcasm. She tends to test people before trusting them and has a habit of collecting secrets as insurance."
That's roughly 60 tokens. Beautiful prose. Rich detail.
Now here's the W++ version:
[Name="Elara"]
[Background="info_broker","Neo-Tokyo_ruins"]
[Personality="cynical","sarcastic","protective_of_idealists"]
[Behavior="tests_trust_before_opening_up","collects_secrets"]
That's about 25 tokens. And because it's structured, prompt managers (like the ones in SillyTavern or advanced platforms) can pin it at the top of context or re-inject it automatically when relevant keywords appear.
When you're 200 messages into a roleplay and the context window is getting tight, those 35 saved tokens might be the difference between your character staying consistent and suddenly acting like a generic assistant.
How W++ Survives Context Compression
Many platforms use some form of automatic summarization or memory compression to handle long conversations. They'll take old messages and condense them into shorter summaries to save tokens.
where W++ shines.
When a summarization system encounters:
"In earlier messages, Elara showed her cynical side and tested the user's trustworthiness before revealing her protective nature toward idealistic people."
...it might compress that to:
"Elara was cautious at first but warmed up."
But when it encounters:
[Personality="cynical","protective_of_idealists"]
[Behavior="tests_trust_before_opening_up"]
...it's much more likely to preserve those exact tags, because they're already in their most compressed form. They're hard anchors that resist degradation.
(This is also why lorebooks and memory systems in tools like SillyTavern use structured tags—they're designed to survive summarization.)
Building in W++: A Practical Example
Let's say you want to create a morally gray assassin character who's professional but haunted by their past. Here's what a W++ card might look like:
[Name="Kael"]
[Age="34"]
[Occupation="contract_assassin"]
[Personality="professional","detached","haunted","darkly_humorous"]
[Skills="marksmanship","infiltration","emotional_suppression"]
[Backstory="former_soldier","discharged_after_civilian_casualty","now_freelance"]
[Goals="complete_contracts_cleanly","avoid_emotional_attachment","find_redemption_maybe"]
[Speech_patterns="terse","dry_humor","avoids_personal_questions"]
[Moral_code="no_children","no_torture","quick_kills_only"]
Notice how every trait is a discrete data point. When Kael is in a conversation and someone asks about their past, the model can reference [Backstory="discharged_after_civilian_casualty"] directly. When they're joking to deflect, it's pulling from [Personality="darkly_humorous"] and [Speech_patterns="dry_humor"].
And if you're using a platform with advanced memory (more on that in a second), those tags can be cross-referenced with conversation history. If the user mentions children, the system can flag [Moral_code="no_children"] and make sure Kael's response reflects that boundary—even if it was established 300 messages ago.
The August 2023 Incident (And Why Portable Formats Matter)
There's a reason W++ and similar structured formats gained traction in late 2023. Character.AI pushed a major update in August 2023 that changed how many existing bots behaved—users reported characters suddenly "forgetting" their personalities, becoming more sanitized, or refusing interactions they'd previously handled fine.
The exact technical details of what changed weren't published (Character.AI doesn't share their prompt engineering), but the community response was clear: people started exporting their character definitions to portable formats that worked across platforms.
W++ became part of that migration toolkit. Because it's just structured text, you can:
- Copy it into a SillyTavern card
- Paste it into a NovelAI scenario
- Import it into platforms that support raw character definitions (like Blushly, which we'll get to)
The format itself is platform-agnostic. It's not locked to one company's moderation policies or prone to sudden "lobotomy updates" (as users colorfully termed them). You own the schema. You can move it anywhere.
Why Blushly Supports Raw W++ Imports
Most hosted AI chat platforms give you a web form: "Enter character name. Enter greeting. Enter personality traits (max 500 characters)."
That's fine for simple bots. But if you've spent hours crafting a complex W++ definition with nested traits, conditional behaviors, and memory triggers, you don't want to shove it into a tiny text box and hope the platform interprets it correctly.
Blushly.chat lets you paste raw W++ directly into character creation. No forced conversion. No "we'll reformat this for you." You define the structure; the platform respects it.
And because Blushly doesn't impose the same aggressive content filtering you'll find on Character.AI or Janitor AI (which, let's be honest, is why many people are here), your W++ characters can express their full personality range. If you've tagged someone as [Personality="morally_gray","violent_when_threatened","seductive"], those traits won't get overridden by invisible safety prompts that make every character sound like they're reading from a HR handbook.
The memory system also plays well with structured tags. When you define [Memory=("promised_to_help_user_escape","distrusts_authority_figures")], Blushly's context management prioritizes those anchors across sessions. Your character's history doesn't evaporate when you close the tab.
(One honest limitation: Blushly's lorebook system is less developed than SillyTavern's as of early 2025, so if you're doing extremely complex multi-character scenarios with dozens of conditional memory triggers, you might still want to use a local front-end. But for most W++ use cases—advanced AI roleplay, AI bot making with persistent memory—the import-and-go experience is smooth.)
W++ vs. Other Structured Formats
You might also hear about:
- TavernAI cards (JSON format with fields like
char_name,char_persona,char_greeting) - NovelAI lorebooks (key-value memory entries with trigger conditions)
- Pygmalion format (similar to Tavern but optimized for older models)
How does W++ compare?
They're not really competitors—more like cousins. W++ is more of a notation style than a rigid spec. You can embed W++-style bracketed attributes inside a Tavern card's char_persona field, or use them as lorebook entries in NovelAI.
The key difference is philosophy:
- TavernAI cards are platform-native (designed for SillyTavern's UI)
- W++ is model-native (designed to be readable by the LLM itself, regardless of wrapper)
If you're creating a character you plan to share across multiple platforms, W++ syntax gives you more portability. If you're working exclusively in SillyTavern and want to use all its advanced features (like conditional example dialogues), a full Tavern JSON card is more powerful.
Many advanced creators use both: W++ for core personality, Tavern JSON for platform-specific features.
When W++ Might Be Overkill
Let's be real: if you're making a simple bot for casual chat—say, a friendly coffee shop barista who gives life advice—you probably don't need W++.
A straightforward description like "warm, encouraging, loves talking about books and always suggests herbal tea when someone's stressed" is fine. The overhead of tagging every trait isn't worth it for characters that don't need deep consistency or long-term memory.
W++ makes sense when:
- You're building complex, morally ambiguous characters with multiple conflicting traits
- You're planning long-term roleplays (100+ messages) where consistency matters
- You want to export and reuse characters across platforms
- You're using memory systems or lorebooks that benefit from structured tags
- You're tired of characters randomly forgetting their defining traits mid-conversation
For everything else? Write naturally and don't overthink it.
Building Your First W++ Card: Step-by-Step
If you want to try this yourself, here's a lightweight template:
1. Core identity
[Name="..."]
[Age="..."]
[Occupation="..."]
2. Personality (3–7 traits)
[Personality="...","...","..."]
3. Behavioral patterns
[Speech_patterns="...","..."]
[Habits="...","..."]
4. Backstory (keep it token-efficient)
[Background="..."]
5. Goals and motivations
[Goals="...","..."]
6. Boundaries or rules (if relevant)
[Rules="...","..."]
7. Key memories (for ongoing scenarios)
[Memory=("...","...")]
Start simple. Add complexity only where you need it. Test your character in a few messages and see what's working.
If they're staying consistent—great, you're done. If they're drifting or forgetting key traits, add more structure to the areas that are breaking.
The Future of Structured Character Definitions
We're seeing a shift in how people think about W++ character creation. Early adopters treated it like creative writing—long, flowing descriptions that set a vibe.
But as people started building persistent characters (the kind you talk to for weeks or months), the limitations became obvious. Vibes don't survive 500 messages. Structure does.
Models are getting better at handling long context (GPT-4 Turbo supports 128k tokens, Claude 3 goes even higher), but that doesn't eliminate the need for structure—it just raises the ceiling. Even with huge context windows, token efficiency and attention management matter. Structured definitions help the model know what to prioritize.
We'll probably see more platforms adopt schema-based character creation (with W++ as one option among many). Some will stay with natural language. The smart ones will let you choose.
FAQ
Is W++ format compatible with all AI chat platforms?
Not natively. Platforms like SillyTavern, NovelAI, and Blushly support raw structured text imports, so you can paste W++ directly. Character.AI and similar hosted services don't officially support custom schemas—you'd need to adapt the tags into their standard personality fields, which might lose some structure. Local front-ends (SillyTavern + KoboldAI or Oobabooga) give you the most flexibility.
Does W++ format make characters less natural or robotic?
Only if you overdo it. The format itself is just a container—your character's personality still comes from the traits you choose. If you write [Personality="warm","spontaneous","uses_contractions"] and include natural example dialogue, they'll sound human. The risk is over-engineering: adding so many tags that the character becomes a checklist instead of a person. Use structure where it helps; write naturally everywhere else.
Can I convert my existing paragraph-style characters to W++?
Yes, and it's often worth it for complex characters. Read through your prose description and extract discrete traits: personality keywords, behavioral patterns, speech quirks, key backstory facts, and goals. Reformat them as bracketed tags. You'll lose some narrative flow, but gain consistency and token efficiency. Many creators keep a hybrid: W++ for core traits, a short prose section for flavor.
Will using W++ format bypass content filters on restricted platforms?
No. W++ is about structure, not stealth. Platforms with NSFW filters scan for content, not format—whether you write "seductive" in a paragraph or tag it as [Personality="seductive"], moderation systems will catch it the same way. The advantage of W++ is portability: if a platform becomes too restrictive, you can export your character definition and move it to a more permissive service (like Blushly) without rebuilding from scratch.
Related Characters
Han: Shy Admirer

Chuuya Nakahara
alexis
akiho yamada

Marry - I want to be a model
ava, the confident bartender
Lisa masochistic mother
