Labs · Preset viewer

A preset JSON is unreadable.
This turns it into a config sheet.

A community preset ships as one wall of JSON: 68 prompt blocks, two order groups, sampling knobs scattered at the top level. Drop it here and read what it actually does — block order as injected, disabled slots dimmed, markers explained, temperature checked against defaults.

Freeruns in your browsernothing uploaded
Drop a preset JSON hereTap to pick a preset JSON fileor click to pick a file · parsed locally, nothing uploadedparsed locally, nothing uploaded

Drop or paste a SillyTavern preset (OpenAI-compatible format) and it turns into a readable config sheet.

Where this tool comes from

The parsing rules are ported from the preset importer inside the Foreverse app, which follows SillyTavern's openai.js semantics: prompts[] defines the pool, prompt_order[] decides what runs (the character_id 100001 group wins, then 100000, then the longest), enabled flags on order entries override block definitions, and legacy flat presets (main_prompt / nsfw_prompt / jailbreak_prompt) get interpreted as their modern equivalents. Checked against real community presets — including a 68-block one with two order groups and a 2M-token context setting. Ported 2026-07.

Token counts use the same character-ratio estimate as the other tools on this site (CJK ≈ 1.6 chars/token, Latin ≈ 4). It's an estimate for budgeting, not a billing number.

What it can't do

This reads the OpenAI-compatible preset family. Other API families (Claude-native presets, text-completion presets) map fields differently and aren't interpreted here.

The "what this preset is going for" line is rule-based counting, not understanding — it can tell you a preset is heavy and divergent, not whether it's good. Judging the writing means reading the blocks.

The viewer shows the preset as a file. What the model finally receives also depends on your card, worldbook and history — the app's prompt inspector shows that assembled view per turn.

FAQ

Why do some blocks say "dynamic" with no text?

Those are marker blocks — placeholders like chatHistory, charDescription or worldInfoBefore. At runtime the frontend replaces them with your card's fields, triggered worldbook entries, or the conversation itself. A preset file never contains that text, so this viewer explains what fills each slot instead of pretending the block is empty or broken.

The preset has more prompts than the viewer lists. Where did they go?

Only blocks referenced in prompt_order take effect — that's tavern semantics, not a viewer limitation. Prompts defined in the pool but never ordered are inert; the viewer counts them in a footnote instead of mixing them into the injection list.

What does @depth mean on a block?

Blocks with absolute injection don't sit at their list position — they get inserted N messages from the end of chat history. Authors use it for reminders that must stay close to the latest turns. @depth 2 means two messages from the bottom.

Does seed: -1 do anything?

No — -1 means random, and tavern-family frontends only send the seed when it's zero or positive. A non-negative seed pins the sampling: same input, near-identical replies, and re-rolls stop changing much. The viewer flags a pinned seed because it's a common "why are my swipes all the same" cause.

Related tools & reading

← All free tools

Tavern Preset Viewer — Turn a Preset JSON into a Readable Config Sheet · Foreverse · Xinmeng