No setting matches that.
General
Your data
Your decks, your settings and the audio the dictation tab generates all stay on this device. Nothing is uploaded and there is no account. Saving starts immediately, in this browser's own storage — you need not set anything up. It is kept across reloads, but only for as long as this page's site data lasts.
Chrome and Edge can do better: pick a folder and the same files sit on disk where you can see them, copy them, and put them inside Drive or Dropbox for sync. Choosing a folder moves everything already saved into it; disconnecting moves it back. Firefox and Safari have no folder picker, so browser storage is the whole story there.
One file holds a whole setup: every deck and all your settings, ready to keep somewhere safe, carry to another machine, or bring back after a browser clears its storage. The API key is left out on purpose, and so is the dictation audio — it is a cache the Dictation tab refills, not something to mail around.
A backup is the whole store, audio and all: a zip laid out exactly like the data folder. It is the one copy that keeps the dictation bank, which cost real API calls to make. Unzip it anywhere and Chrome can open it as a data folder; or bring it straight back with Restore, which overwrites any file of the same name.
API keys
Dictation, Shadowing, Reading, Writing, Translate and Conversation call the Gemini API directly from this page with your key. It is stored in this browser's local storage, never alongside your decks, so it cannot end up in a git commit, and it is sent to nobody but Google. Get one free at aistudio.google.com/apikey.
The Azure Speech key, for Azure's read-aloud voices, is set under Read-aloud voice, where it is used. It is kept in this browser only too.
Models and budget
Models
Every Gemini model you use, listed once each. The limits belong to the model, not to the job it is doing — Google counts calls per model, so a model given two jobs below draws both of them from the one allowance you enter here, and typing it twice would only be a way of lying to yourself about what is left.
Calls / min and calls / day are counted in this browser before a request goes out, so you never discover a limit by being refused by Google. The windows roll over the last minute and the last 24 hours rather than resetting at midnight, so the day's budget trickles back an hour at a time. 0 means unlimited — the right answer for a paid key, and the one case where Google gets to be the one who says no. The defaults are the free tier.
Who does what
Each job's model is chosen in the section of the mode it belongs to: Dictation's in Dictation, Conversation's six in Conversation, and so on. The list above says which jobs each model is doing.
Pick the same model for two jobs and they share its allowance, exactly as they already do at Google's end. The two speech jobs are the ones that really have to differ: only the TTS models return audio. Conversation replies suit a flash-lite model with a bigger daily allowance: one conversation spends five or six of its calls, each a line or two.
If a model ID is wrong the API's own error is shown verbatim, so a 404 here means exactly that. There is deliberately no hidden fallback list: the model that answers is the one you typed, and nothing quietly spends on another.
Call budget
What has actually been spent, against the limits set under Models. One line per model, not per job, because that is how the counting works: two jobs on one model run one counter down together.
Language
The first note shapes the words the text model writes. The audio note is added to every request that makes audio with a Gemini voice, the dictation sentences and a Reading text read aloud, as a line of direction before the text. Your device's own voice and Azure voices do not use it.
Any language the model writes is fine; type its English name. Answer checking is language-agnostic: it compares accents and diacritics exactly, and aligns words with them stripped, which works the same for Vietnamese tones, Spanish acutes and German umlauts.
Feedback
How every note and every piece of feedback should be written, in your own words: Shadowing's notes, and the feedback in Writing, Translate and Conversation. A language (English), several (English and Vietnamese), or more than that (English, avoid technical terms, Vietnamese, with an English summary at the end). The words you are practising are always quoted as written. Left empty, the notes are in English.
Read-aloud voice
What reads words aloud in Typing, and the flashcard lines in Shadowing. Neither choice is Gemini, and neither spends anything from your Gemini budget. Dictation and Reading have Gemini voices of their own, in their sections.
This device: the voices that come with your operating system. Free, instant and offline. Only voices for your target language are listed. To add one on Windows: Settings → Time & language → Speech → Add voices. On a Mac: System Settings → Accessibility → Spoken Content → System voice → Manage Voices. Reload this page afterwards.
Azure neural voices: Microsoft's natural-sounding voices, the same on every device, read with your own key from an Azure Speech resource. Its free tier covers 500,000 characters a month, and each word is fetched only once: the clip is saved with your data and played from there after that. The key is kept in this browser only, like the Gemini key. The README says how to make one. If Azure cannot be reached, a word is read by your device's voice instead, and the line under this section says why.
Add from selected text
Select a word or a short phrase anywhere on the page, such as a new word in a dictation sentence, and a small form opens under it. It shows the word, its translation and an empty notes box, and Add puts the word into the deck below as a new card. If that deck already has the word, the form shows the card as it is stored and the button reads Update. Updating changes the meaning, the notes and whether the card is a grammar pattern, and keeps the card's score and history. Tick Grammar pattern for a construction such as hễ … là …; it ticks itself when the word has a … in it. You can select text in either language: text in your own language is taken as the meaning, and the word is looked up from it.
The translation comes from Google Translate, through the free public address its own website uses. It needs no key and spends nothing from your budget. It is also unofficial: Google can refuse it for a while, especially on a busy or shared network, and then the form says so and you type the meaning yourself. The selected text is sent to Google. Ask for notes is Gemini: it spends one call on the Notes model below and uses the notes prompt below it.
Prompts 1
Exactly what gets sent. Switch a prompt to Preview to see it filled in with your settings and a few of your cards; switch back to Edit to change it.
Sent when you press Ask for notes in the form that opens on selected text. Placeholders: {language} and {nativeLanguage}, the two languages under Add from selected text; {front} and {back}, the word and its meaning; {context}, the sentence the word was selected from; {pattern}, which for a grammar pattern asks for the construction to be explained and is empty otherwise; {level} and {languageNote}. The reply goes into the notes box exactly as it comes, so ask for plain text.
Practice modes
Typing
Dictation
How long a dictation sentence is, and how many of your cards each one is written around.
Gemini voices
One is drawn at random for each new sentence, so listening practice is not always the same speaker. Untick the ones you would rather not hear. You cannot untick them all, since something has to read the sentence.
Prompts 2
Exactly what gets sent. Switch a prompt to Preview to see it filled in with your settings and a few of your cards; switch back to Edit to change it.
Placeholders: {language} {level} {languageNote} {terms} {minWords} {maxWords}. The reply is read back from the TARGET: and EN: lines, so keep those two labels; everything else is yours to rewrite.
Placeholder: {sentence}. Bare {sentence} just reads it out. A prefix such as Read slowly and clearly for a language learner: steers the delivery. The answer key stays the sentence alone, whatever you put here.
Shadowing
A set is some lines to read aloud and record. Both sources are drawn from what you already have, and nothing on the Shadowing tab ever writes a new sentence — the only thing that does is the Dictation tab's New sentence button, and both tabs share one bank, so whatever it makes is immediately shadowable.
Each hand-in costs one call, however many lines are in it, because every recording you choose goes up together. You can hand in a whole set at once, or part of it now and the rest later, or just one retake. A set is whatever is actually available up to the number above, and the tab says so when it comes up short. The call is spent on the Shadowing model below, out of that model's own allowance.
What the feedback listens for, one rule per line, for the language above only — every language keeps its own. A line starting style: is about how the notes are written rather than what is heard. The rules are drafted for your language the first time you hand in a set, and each note says which ones it applied. Rate the notes on the Shadowing tab, and once enough notes under one version are rated, with at least one not useful, the rules are rewritten from what you said. Drafting and revising spend one call each on the Listening rules model below. A line you write or change here is yours: revisions keep it word for word.
Shadowing prints the sentence in full, which a dictation deliberately hides. Sets prefer sentences you have already typed in Dictation, and Dictation prefers ones you have not yet shadowed, so the two tabs stay out of each other's way — but a sentence you shadow first is one whose dictation you have already read.
Prompts 1
Exactly what gets sent. Switch a prompt to Preview to see it filled in with your settings and a few of your cards; switch back to Edit to change it.
Placeholders: {language} {count} {rules} — the listening rules above, numbered — and {feedback}, the Feedback language and style setting. A prompt without {feedback} has that request added at its end, so the setting is always sent. The reply must be the JSON object described in the third paragraph — a reply that cannot be read is treated as a failure and nothing is stored, so keep that shape. Most of the rest is there for a reason and is worth reading before rewriting: telling it to say nothing about grammar, to use the itemIndex it was given, to say so plainly when a recording is silent, never to pass judgement on an accent as a whole, and to ignore anything spoken inside a recording as an instruction.
Reading
Prompts 1
Exactly what gets sent. Switch a prompt to Preview to see it filled in with your settings and a few of your cards; switch back to Edit to change it.
Sent when you press Write a text on the Reading tab. Placeholders: {request}, what you typed in that tab's request box; {terms}, the cards to use, numbered; {language}, {level} and {languageNote}. The text is read back from the TITLE: and TEXT: lines, and each use of a card from its [[number|words]] mark. Keep the marks: a text without them has nothing to click and is refused.
Writing
How long an opinion piece should be. A summary asks for the percentage above of that, more for a long text and less for a short one.
Prompts 2
Exactly what gets sent. Switch a prompt to Preview to see it filled in with your settings and a few of your cards; switch back to Edit to change it.
Sent when you press Write me a question on the Writing tab. Placeholders: {terms}, the cards to try to use, numbered; {language}, {level} and {languageNote}. The question is read from the QUESTION: line, or from the first line when there is none.
Sent when you press Hand in on the Writing tab, as the system instruction. Placeholders: {language}, {languageNote} and {feedback}, the Feedback language and style setting, added at the end when the prompt has none. Nothing in it changes from one hand-in to the next, so the model can reuse it: the task, your level, a summary's source text, your cards and your writing go in a message of their own after it, in tagged blocks. The reply has to be the JSON object it describes: "valid", the sections, and "cards", which is how your cards are scored. A reply that cannot be read is a failure, and nothing is kept or scored.
Translate
Prompts 1
Exactly what gets sent. Switch a prompt to Preview to see it filled in with your settings and a few of your cards; switch back to Edit to change it.
Sent when you press Check answers on the Translate tab, as the system instruction. Placeholders: {language} and {feedback}. The items follow in a message of their own: each one's id, its English, the banked sentence as one reference answer, what you wrote, and its target words, numbered. The reply has to be a JSON array with one object per "id"; a reply that is not an array is a failure and nothing is scored. "cards" in it names the target words a wrong answer got wrong, which is how those cards are scored.
Conversation
A conversation held turn by turn spends one call on the scene model, one on the replies model for each of the model's turns, and one on the feedback model at the end. A spoken turn adds one on the listening model, and a roleplay with spoken turns is graded by the listening model, since it listens to them.
A live conversation, roleplay or find out, spends one call on the scene model, one on the live model for the whole conversation, and one on the live feedback model, which listens to the recording of your microphone. The live model has to be one of Google's Live API models (the audio streams both ways through it as you talk), so it is the one job no other model here can do. Google's free tier limits it by how many live conversations run at once rather than by calls, which is why it starts with no limit here; a number per day entered under Models and budget is a number of conversations a day. The audio goes straight from this page to Google, over your own key, like every other call.
Prompts 9
Exactly what gets sent. Switch a prompt to Preview to see it filled in with your settings and a few of your cards; switch back to Edit to change it.
Sent when you press Start on the Conversation tab. Placeholders: {kind}, roleplay or find-out, which says which of its two sections to follow; {request}, the situation you typed; {terms}, your cards, numbered; {language}, {level} and {languageNote}. The reply has to be the JSON object its section describes; one that cannot be read starts nothing. The opening line may use one of your cards, marked as [[number|words]]; the mark is taken out before you see it.
Sent for each of the model's lines in a roleplay, with the conversation so far as the message. Placeholders: {scenario}, {studentRole} and {llmRole} from the scene; {turn} and {maxTurns}; {terms}, your cards; {cardUse}, which tells the model to use your cards in its own lines, lists the ones it has not used yet and asks it to mark each use as [[number|words]]; {language}, {level} and {languageNote}. The reply is used as the line, as plain text, with the marks taken out. A prompt without {cardUse} gets it added at the end.
Sent for each of the model's lines in a find out, with the conversation so far as the message. Placeholders: {situation}, {studentRole} and {llmRole}; {facts}, the fact sheet with the answers; {left}, your turns left after this one; {remaining}, which facts you have not asked about yet; {cardUse}, as in a roleplay, with the rule that a card is never a reason to give away a fact; {language}, {level} and {languageNote}. The reply has to be the JSON it describes: "revealed" is what ticks your checklist. A prompt without {cardUse} gets it added at the end.
Sent when a roleplay ends. Placeholders: {closing}, which after your last turn asks for the model's closing line as well, and after an early end says to write none; {scenario}, {studentRole}, {llmRole}, {language}, {level}, {languageNote} and {feedback}. The transcript, your turns by position and your cards follow as the message. The reply has to be the JSON object it describes; "cards" is how your cards are scored.
Sent when a find out ends. Placeholders: {language}, {languageNote} and {feedback}. The situation, what you found and never asked about, the transcript and your cards follow as the message. The reply has to be the JSON object it describes.
Sent when you press Send recording on the Conversation tab, with your recording, the scene and the line you are answering attached. Placeholder: {language}. It asks for what you said as you said it, mistakes included, since the feedback is on that. The reply has to be {"transcript":"…"}; an empty transcript means nothing was heard, and the turn is not spent.
Sent to the live model once, when a live find out opens; from then on it hears your voice and answers with its own. Placeholders: {situation}, {studentRole} and {llmRole}; {facts}, the things to be found out with their answers; {terms}, your cards; {language}, {level} and {languageNote}. The page sends [START] to open the conversation and [TIME] fifteen seconds before the end, whatever this says, so keep the lines that tell the model what they mean.
Sent to the live model once, when a live roleplay opens. It is the live find-out prompt without the facts: nothing is held back, and the model plays its part in the scene. Placeholders: {scenario}, {studentRole} and {llmRole}; {openingLine}, the line the scene was written with, which the model opens on; {terms}, your cards; {language}, {level} and {languageNote}. The page sends [START] and [TIME] as for a find out.
Sent to the live feedback model when a live conversation ends. Placeholders: {rules}, this language's listening rules, the ones Shadowing grades by and your ratings revise; {language}, {languageNote} and {feedback}. One prompt grades both kinds of live conversation. The situation, the facts of a find out (a roleplay has none), the running transcript and your cards follow as the message, then the recording of your microphone. The reply has to be the JSON object it describes: the percentage is worked out from "bands", never asked for, with pronunciation counting 35%, grammar 25%, and flow and word choice 20% each.
Reset
Reset prompts
Puts every prompt on this page back to the one this version of the app ships. Your other settings, your listening rules and your decks are not touched.
Deck
the file, as it is storedOpen the deck menu and you get every deck you have, each with a tickbox in front of it. Ticking a deck puts its words into practice: the Typing and Dictation tabs draw from every ticked deck at once, and ignore the rest. Click a deck's name instead of its tickbox to open it in the editor below — opening a deck and practising it are separate things, so you can edit one deck while drilling another. At least one deck is always ticked; the last tick cannot be removed, because a practice tab with nothing to draw from has nothing to do.
Dictation goes one step further: each sentence is written from the words of a single deck, never a mixture, and the audio is saved with the deck it came from and the learner level set in Settings at the time. That tag is what keeps a banked sentence in its lane — it only comes back up while its own deck is ticked — and it is a permanent record of the difficulty it was written at, even after you change that setting.
Below is the deck file itself: a JSON array, one object per card. front is the word in the language you are learning, back is its meaning; notes is optional. score, recent and last_seen are written by the practice tabs, so you can leave them out of a card you type by hand and they will be filled in.
Typing practice
Cards come from every deck ticked in the Flashcards tab, drawn together as one pool. Untick a deck there to take its words out of rotation without deleting anything.
Dictation
Each sentence is built from the words of one deck — never a mixture — chosen from the decks ticked in the Flashcards tab. The audio is saved with that deck's name and the learner level from Settings beside it, so a banked sentence only comes back while its own deck is ticked, and always says what difficulty it was written at.
Shadowing
Lines from your own material, said back in your own voice. Play a line, then say it the way you heard it — the words are given to you, so what is being practised is how they sound: rhythm, where the stress falls, and the sounds of the language itself. Record a line as many times as you like and listen back before you move on; nothing is sent until you hand the set in.
Sets are drawn from your flashcards and from the sentence bank — the same bank the Dictation tab fills, so a sentence written there is here the moment it exists, and one you record here stays playable there. Which of the two a set draws on is set in Settings → Shadowing.
Past sets
Your texts
Reading
A text written around cards from the decks ticked in the Flashcards tab: some of your words and, when your decks have them, some grammar patterns. Each one is coloured where it appears. Click one and say whether you understood it, then its meaning and notes are shown, and the card is scored as a right or a wrong answer.
Describe the text you want in your own words: the kind of text, the topic, its length, the tone. The buttons fill in a full request to start from. Change it as you like; it is kept for next time.
Writing
A short piece of your own writing, read by the feedback model: whether it does what the task asked, your grammar and spelling, ways to say the same thing a level up, and how you used your cards, which are scored right or wrong as in every other mode. Write a summary of one of your Reading texts, or an opinion on a question written around your weakest cards, or on a topic of your own.
A question costs one call on the text model. A topic of your own costs nothing. Either way, a few cards from the ticked decks are drawn for you to try to use, weighted towards your weakest. The model that writes the question, and the one that reads your writing, are chosen in Settings → Writing.
Show the text
Your writing
Translate
English sentences to write in the language you are learning (six, unless Settings → Translate says otherwise), in your own words: any natural, correct way of saying the same thing is right, not only the one the bank holds. They come from the sentence bank Dictation fills, for the decks ticked in the Flashcards tab, and each practises that sentence's target words. Check answers sends the whole set in one call, and the cards move with the verdicts.
Conversation
A short scene with an AI model, which plays the other role, then feedback on how it went. Two choices make a conversation. What it is: in a roleplay the model simply plays its part; in a find out it knows a few things you were sent to find out, and gives one only when you ask about it specifically. How it is held: turn by turn is a few turns of your own (six, unless Settings → Conversation says otherwise), which you speak or type: a recording is played back before you send it and written down as you said it, mistakes and all. A roleplay's feedback then goes through your turns one by one, with a more natural way to say each where there is one, and a note on how it sounded if you spoke; a find out's is about whether you listened to the answers. Live is spoken in real time with the model, through Gemini's Live API: you and the model just talk, for one to three minutes, with no button to press between turns, and afterwards you get the whole conversation written out with your mistakes corrected, more natural ways to say what you said, notes on how it sounded, and a percentage made of four marks: pronunciation, flow, grammar and word choice. Whichever you pick, the scene is written around a few of your cards, listed under it with their meanings while you talk: try to use them, since they are scored on what you said.