Labs · Chat export
Your best roleplay is trapped in a .jsonl.
Turn it into a document you can actually read.
Drop a tavern chat export and get the full transcript as clean Markdown or a standalone HTML page with proper reading typography — names and timestamps on a toggle, hidden floors filtered with an honest count, rerolled swipes reduced to the take you kept. Archive it, quote it, paste it into a blog.
An original demo — a 24-hour diner, ~90 days of log. Characters and plot are ours, convert away.
Parsing, conversion and preview all run in your browser — the chat is never uploaded or stored. Refresh and it's gone.
Feed it a chat first: the sample, or a tavern .jsonl.
Where this tool comes from
The parser is the same one behind our Chat Archaeology tool — lenient about the wild .jsonl variants real exports produce (missing metadata rows, broken trailing lines, three different send_date formats), strict about semantics: is_system rows are excluded and counted, swipe arrays resolve to the current pick only. The converters on top are locked by a 41-assertion golden self-test, including a 199-message real chat export round-trip where the HTML block count must equal the parsed message count.
Inline styling in the HTML output reuses the exact tokenizer that colors our chat-image tool: asterisk actions become muted italics, quoted speech (straight, curly or CJK corner quotes) gets the accent tint. One rulebook, two renderers — the picture and the document never disagree about what's an action.
What it can't do
This converts one chat file at a time and outputs text only — no images, no avatars, no branching-tree reconstruction. Hidden floors are omitted by design (they're notes to the model, not story); if you need them, they're still in your original .jsonl. Markdown body text is kept as written, so exotic markup inside messages renders however your target platform renders it.
The HTML page is an archive artifact, not a website: a single self-contained file with embedded styles and zero scripts. Fonts fall back to what the reading device has installed.
FAQ
What exactly does it do with hidden floors and swipes?
Hidden floors (is_system messages — notes and narrator asides that never went to the model) are filtered out of the transcript, and the document's header line honestly reports how many were omitted. Messages with swipe candidates output only the currently selected variant — the takes you rerolled away stay gone. Both rules come from the same parser that powers our Chat Archaeology tool, so the numbers always agree.
Markdown or HTML — which should I pick?
Markdown if the text is going somewhere else: blogs, forums, note apps, a fic draft. Your *action* asterisks stay as written (they're already valid Markdown), and the only thing we escape is a line-leading # so a message can't hijack your document structure. HTML if the file itself is the archive: it's a standalone page with book-like typography, actions in muted italics, dialogue tinted, dark mode following the system — and zero scripts, so it's safe to keep or share as-is.
How is this different from the Chat Shot tool?
Chat Shot renders a picture — bubbles, avatars, themes — for showing a scene on social media. This tool outputs text: the whole log (or a slice) as a document you can archive, quote, search or paste into a blog. Same parser underneath; different destination. If you want one image of the best ten messages, use Chat Shot; if you want the transcript itself, you're in the right place.
Does my chat get uploaded?
No. Parsing, conversion, preview and download all run in your browser — this page has no upload endpoint. The HTML preview renders in a fully sandboxed frame. Refresh and everything is gone.