The Player and PartyLine
Play your characters solo or in a group, and share them with nothing but a link. PartyLine is currently in beta.
- Two Ways to Play
- The Shared Character Library
- Your Studio Projects Appear Automatically
- Sharing Characters by URL
- Playing Solo: The Player
- PartyLine: Your Party Library
- Building a Party
- Talking to the Party
- Eagerness and Sleep
- Whispers
- Editing the History
- Conversations and Agents in a Party
- Party Backup and Restore
- The Menu and Settings
Two Ways to Play
Studio is where characters are made; the players are where they're played. There are two, and they're siblings:
- The Character Player (characterbrowser.app/player) — one character, one conversation at a time. This is the app you hand to someone who just wants to talk to your character, no authoring tools in sight.
- PartyLine (characterbrowser.app/partyline) — several characters in one conversation, each speaking in its own voice. A group chat where you're the only human. Currently in beta.
They share everything that matters: one character library, one set of settings (API key, appearance, voice), and the same character format. A character loaded in either app is instantly available in both, and everything a character carries — instructions, context, agents, custom styling — works identically in each. The functionality genuinely folds together: learn one and you know most of the other.
The Shared Character Library
The Player's home page is the character library: a card per character with portrait, name, description, and where it came from. The library sorts alphabetically, and the search box filters as you type — useful sooner than you'd think. Characters arrive in the library three ways, and each card says which:
- zip — a character package loaded from a file. This is the export format Studio produces (Chapter 10) and the way characters travel between people.
- URL — a character loaded from a web address. Same package, fetched from wherever its author hosts it — see sharing below, because this is the interesting one.
- Studio project — your own in-progress characters, live from Studio's browser storage. These appear automatically; nothing to load.
Loading a zip is a drop or a click: drop the file anywhere on the library page, or use Load Character…. Deleting a card removes the character and its conversations from your device.
Your Studio Projects Appear Automatically
Every Studio project stored in the browser shows up in the library on its own, marked Studio project and with (Studio) in its name when open. These characters are live — no export step, and edits flow through: save a change in Studio, switch to the Player or PartyLine tab, and the character updates on the spot, mid-conversation. It makes the players a real part of the authoring loop; Studio's project menu even has Test in Player to jump straight in.
Because a project and a zip export of the same character are separate library entries with separate conversations, you can keep a stable exported copy for play while the project version churns — the source markers tell them apart everywhere. Deleting the card of a project-sourced character only clears its conversations; the card returns while the project exists, since the card mirrors the project. Deleting the project in Studio leaves the card with a clear "project no longer exists" message rather than anything breaking.
Sharing Characters by URL
Here's the part that turns a character from a file into something you can hand to anyone: the Player can load a character directly from a link. Host your exported character zip at any web address you control — your own site, any static hosting — and send people a Player link with the zip's address in it:
https://characterbrowser.app/player/?loadCharacter=https://your-site.example/characters/sasha.zip
Anyone who opens that link gets your character downloaded, added to their library, and opened, ready to talk. No files to email, no import instructions — a URL is the whole distribution story.
URL characters also stay fresh: the Player remembers where a URL character came from and quietly checks for a newer version, and when you update the zip at that address, everyone who loaded it is offered the update with a banner — accepting it updates the character while leaving their conversations untouched. That makes a hosted zip a living release channel: fix your character once, and your audience picks it up.
Two notes. We don't host characters — publishing files isn't our wheelhouse, so the address is yours to provide; anything that can serve a file over HTTPS works. And the host does need to permit cross-site downloads (CORS, in web terms) — most static hosting does out of the box, but if a character refuses to load from a URL that works in your browser directly, that's the first thing to check with your host.
Playing Solo: The Player
Playing a character in the Player feels like the Studio chat with the authoring tools removed. You get the same message actions on hover — edit, delete, truncate, ignore/restore, fork, resubmit, and reject-with-a-reason to steer a retry (Chapter 4 covers what each does) — plus the ✏ input corrector, push-to-talk when voice is configured, and Story… to convert a conversation into prose. Characters with agents bring them along and they simply run; greetings, custom text styling, and everything else the package defines behaves as authored.
Each character has its own set of conversations, managed from the Conversations panel: create, rename, fork, and delete, just like Studio (Chapter 5). The panel's Export… downloads a complete backup of the current character — the package plus all its conversations — and Restore… brings one back, conversations included. One practical note about all zips the Studio family writes: they're produced in a streaming format that keeps memory use low on phones, which means archive tools can extract them but not modify them in place. To edit one, unpack it, change what you need, and re-zip.
When a new version of the Player itself is deployed, an ⚡ Update button appears in the header; one click reloads you onto the fresh version. PartyLine does the same.
PartyLine: Your Party Library
PartyLine's home page lists your parties — named groups of characters with their own shared conversations. Create Party… asks for a name (party names are unique, and the dialog says so if one's taken) and drops you into the party's configuration view, since a new party's first stop is adding characters. Deleting a party happens from its card, behind a confirmation; it removes the party and its conversations, while the characters stay in the library untouched. Parties never copy characters — they reference the shared library, so updating a character updates it in every party that includes them.
Building a Party
The configuration view replaces the chat while you're editing — Done takes you back, and the name field renames the party as you type. The character search shows your whole library alphabetically with each character's source, and Studio-project characters carry (Studio) right in the name — so when the same character exists as both a zip and a live project, you know exactly which one you're adding. The filter row narrows the list by source (Studio or zip) and, if you want, to characters that use agents — or only ones that ship custom agents of their own.
Click a result to add the character at the end, or drag it into the member grid to pick a position. Order matters socially — it's the order characters are considered when several could speak — so arrange the room until it feels right. The grid is comfortable up to six members and scrolls beyond. Each member card carries the portrait, name, source, an eagerness slider and Sleep button, and a ✕ that removes the character — their lines stay in the history, and re-adding them later picks up where they left off.
Below the grid: Max character replies without you caps how long characters talk among themselves before the floor returns to you (0 means they only ever answer you), and the Model field sets this party's model, falling back to your global default when blank.
Talking to the Party
Type and send. Who answers depends on what you said: address a character by name — or by a nickname their package defines — and they answer. Address nobody in particular and the party sorts it out among themselves, with each character's eagerness shaping how readily they jump in unprompted.
Characters also react to each other — after someone speaks, another may pick up the thread without waiting for you. That bot-to-bot chatter is what makes a party feel alive, and the max-replies setting is its leash. The round timer at the bottom shows how long the current round has run and makes it obvious when everyone's done. Stop interrupts a round anywhere, Continue asks the party to carry on without you, and clicking a character's chip in the roster strip nudges that character to speak right now.
Every reply is its own bubble with the speaker's portrait, name, and color, so a busy round stays readable — and a character's custom text styling applies to their bubbles only.
Eagerness and Sleep
The Eagerness slider on each member card sets how readily that character speaks when nobody addressed them — low for the brooding type who only answers direct questions, high for the one with an opinion about everything. Direct address always works regardless.
Sleep is the mute button, and it's honest: a sleeping character doesn't speak and doesn't hear. Wake them and they genuinely don't know what they missed — which is a feature. Put one character to sleep, plan their surprise party with the others, wake them into it. Everyone always knows who's in the room, awake or asleep; sleepers miss the conversation, not the roster. Newcomers work the same way: a character added mid-conversation gets briefed on the recent history, not the whole backstory — they walk in the way a person walks into a room where the conversation is already going.
Whispers
Start a message with @ and a member picker appears (arrows plus Enter or Tab complete a name); everything after @Name is a whisper — a private aside only that character hears. Nobody replies immediately; a whisper is staging, not a turn. The next time that character speaks they act on it — and they'll be first to respond after your next open message, so the whisper lands.
Whispers show in your view with a 🤫 marker. Other characters never see them, story conversion excludes them, and you can't whisper to a sleeping character — they can't hear you, and PartyLine says so. An @ that doesn't match a member sends as a normal message, so typing @ for other reasons is safe.
Editing the History
All the Player's hover actions work in a party: edit, delete, truncate, ignore/restore, fork, resubmit, and Reject & Retry on a character's latest reply — which also regenerates any replies that came after it, since they were reacting to the rejected one. One party-specific rule: after any truncation, the room waits for you. Characters don't resume on their own from an edited past.
Conversations and Agents in a Party
Parties have multiple conversations exactly like Player characters do — same panel, same create/rename/fork/delete — and each conversation carries its own agent state, so a story clock in one scene doesn't bleed into another. The URL tracks where you are; a refresh drops you back into the same party and conversation.
Characters with agents (Chapter 7) bring them along and they just work, with party-appropriate manners: each member's agents are private to that member — two characters can both carry a memory store without colliding, and one character's memories never enter another's head — and party agent state is kept separate from the same character's solo conversations. For agents the whole party should experience together, the configuration view has a Shared Agents list: check one and the party shares a single instance — the event tracker is the natural case, since a scene wants one clock, not six, and PartyLine suggests it automatically when members carry it.
Party Backup and Restore
Backup… (beside Done in the configuration view, or Backup Party… in the ☰ menu) downloads the party as one self-contained zip: the party, its conversations, and a copy of each member's character package. Restore by dropping it on the home page or via Load… — the party returns complete, and any characters missing from the library are re-created from the copies inside.
Restores handle collisions sensibly: re-import a backup you already have and PartyLine tells you there's nothing to do; import an older or newer backup of an existing party and you choose Replace or Keep Both, with a note about which side has newer activity; a backup that merely shares a name with a different party imports under a numbered name automatically. One caution worth repeating: a party backup contains your conversations — it's a backup, not a cleaned-up shareable. Sending a party to someone? Consider deleting conversations you'd rather keep private first. (The streamed-zip editing note from the Player section applies to these zips too.)
The Menu and Settings
PartyLine's ☰ menu holds Change Party…, Party configuration…, Story… (whispers excluded — they were never part of the scene), Backup Party…, and Settings. Settings are shared with the Player — one API key, one appearance, one voice setup, one searchable model list — and the ✏ corrector and push-to-talk work in both apps, including inside the bubble editor.