Read Frog

Custom Prompts

The two pieces of text Read Frog sends to the model, where to edit them, and what breaks if you remove a placeholder.

When page translation runs on an LLM provider, every paragraph is sent as a pair of texts: a system prompt that says what kind of translator the model should be, and a prompt that carries the paragraph itself. Read Frog ships both, and you can replace both.

This only applies to LLM providers. Google Translate, Microsoft Translator and DeepL take no prompt at all, so nothing on this page reaches them.

The two fields

FieldWhat it is for
System promptThe standing instructions: the role, the output rules, the page metadata offered as context.
PromptThe per-request message. In every built-in prompt it is three lines long and its job is to carry the text.

The default prompt field is exactly this, and nothing more:

Translate to {{targetLanguage}}:


{{input}}

The {{...}} pieces are variables. Read Frog substitutes them just before sending, so {{targetLanguage}} becomes Simplified Mandarin Chinese and {{input}} becomes the paragraph. Every variable, with a real sample value for each, is on the Prompt Variables page.

The built-in prompts

Page translation ships two. Video subtitles ships one.

PromptWhereWhat it does
DefaultPage, subtitlesBalanced and predictable. Four short rules, the page title and summary as context.
Polished rewritePage onlyTranslation as rewriting: reconstructs sentences into idiomatic target-language prose. Longer, so it costs more tokens per paragraph.

Both are read-only. You cannot edit a built-in prompt in place — you copy it, and the copy is yours.

Where the editor is

Open Read Frog's settings.

For pages: Translation → Customize page prompts → Manage prompts. For video: Video Subtitles → Custom subtitle prompts → Manage prompts.

Each row is one prompt. A built-in row opens with an eye; your own rows open with a pencil.

The prompt list, with the two built-in prompts and the Import, Export and Add prompt controls

Opening one shows both fields, the variables it accepts as chips beneath the system prompt, and — for a built-in — Copy and customize instead of a save button.

The Default prompt open, showing the system prompt, the six variable chips, and the prompt field

The two lists are separate, and they take different variables — a page prompt has {{webContent}} and {{webSummary}}, a subtitle prompt has {{videoSummary}} instead. Copying text from one list into the other leaves variables that will never be filled in.

Copy and customize

Open a built-in prompt with the eye icon. Both fields are shown, greyed out.

Click Copy and customize. You get an editable copy named Default copy, and it becomes the prompt page translation uses right away.

Edit either field. Under each one is a row of variable buttons — clicking one inserts that variable at the cursor, so you never have to type the braces yourself.

Save changes. The prompt is saved locally and syncs with the rest of your settings.

To go back, select a built-in prompt again from the list. Your copy is not deleted by switching away from it.

If you delete a placeholder

Nothing warns you, and nothing refuses to save. The fields are sent exactly as you left them, so a missing variable is a missing value.

The important one is {{input}}. Delete it from the prompt field and the model is asked to translate nothing:

Translate to Simplified Mandarin Chinese:

What comes back is whatever an LLM says to that — an apology, a question, a stray sentence — and Read Frog renders it as the translation of your paragraph. Every paragraph on the page, since the same prompt is used for all of them.

Keep the input variable in the prompt field, and keep targetLanguage somewhere in one of the two fields. The metadata variables are optional; those two are not.

Two related mistakes, both silent:

  • Putting {{input}} in the system prompt instead of the prompt. It will be substituted — Read Frog fills variables in both fields — but in batch mode the system prompt is identical for every request, so the model sees the paragraph in a place the instructions treat as standing context.
  • Writing a variable that does not exist, such as {{sourceLanguage}} or {{url}}. Unknown names are left alone, so the model receives the literal characters {{sourceLanguage}}.

Editing a prompt clears cached translations

The finished prompt — after substitution, after the extra rule blocks, after your glossary terms — is part of the key Read Frog stores translations under. Change one character in either field and every cached paragraph translated with the old wording becomes unreachable, and the next visit to those pages pays for them again.

That is usually what you want: a prompt change that did not re-translate anything would look like it had no effect. Just expect the first page after an edit to be slower, and prefer to get a prompt roughly right in one sitting rather than in ten small edits. How a request is assembled sets out exactly what goes into that key.

Choosing a prompt per page

The extension popup has a prompt selector next to the provider, listing the built-ins and every prompt you have written. Switching there changes which prompt page translation uses from then on; it is the same setting as the one in Options, in a place you can reach mid-article.

Sharing prompts

Export writes the prompts you tick to a .json file — a plain list of name, systemPrompt and prompt, with internal ids stripped so an imported prompt never collides with one you already have. Import reads such a file back. Built-in prompts are not exportable; copy one first.

The Get or share prompts from community link above the list goes to the GitHub discussion where people post theirs.

On this page