Error Cooldown
An Anki addon that temporarily freezes the rating buttons when you type a wrong answer on a {{type:FieldName}} card. After the freeze expires you pick the rating yourself β so you can't accidentally click through without thinking.
How it works
- You see the answer on a typing card.
- If your typed answer is wrong (and the rating is not Again), rating clicks are ignored until
freeze_ms milliseconds (default 1000) have passed since the answer was shown.
- After that the buttons work normally and you choose the rating manually.
- On the next card the state resets.
While auto-advance (Shift+A) is on, the addon does nothing, so automatic answers are never blocked.
The answer is checked the same way Anki checks it (HTML, sound tags, line breaks and leading/trailing spaces in the field are ignored; spaces inside the text matter), so the freeze only triggers when Anki itself shows the answer as wrong β plus the optional ignore_case / ignore_accents relaxations. HTML entities in the field (café) are decoded before comparing. An empty typed answer counts as wrong; a field with nothing to type (only an image or a sound) never freezes.
Addons that change how typed answers are compared (e.g. ignore punctuation or extra spaces) are not supported: Error Cooldown checks the answer without their changes, so it may freeze on an answer that Anki shows as correct.
Compatibility
Anki 24.11 through 26.09.3. The hooks and reviewer fields the addon relies on are identical across every release in this range.
Configuration
Edit the addon config via Tools β Add-ons β Error Cooldown β Config. A short description of each option (config.md) is shown next to the editor.
| Key |
Type |
Default |
Description |
decks |
list[str] |
[] |
Deck names the freeze applies to, case-insensitive. Empty list means all decks. |
include_subdecks |
bool |
false |
When true, a listed deck also covers its sub-decks (Parent β Parent::Child). When false, only exact deck names match. |
include_filtered_decks |
bool |
true |
When true, the freeze also works while studying from a filtered deck; such a card matches decks by its home deck or by the filtered deck's own name. When false, cards studied from filtered decks are never frozen. |
freeze_ms |
int |
1000 |
How long after the answer is shown the rating buttons stay frozen on a wrong answer, in milliseconds. Capped at 60000. |
ignore_case |
bool |
true |
When true, letter case is ignored when checking the answer (Paris = paris; also Γ = ss). When false, case matters, like Anki's default. |
ignore_accents |
bool |
true |
When true, accents/diacritics are ignored (cafΓ© = cafe; also ΠΉ = ΠΈ, Ρ = Π΅, and compatibility forms like ο¬ = fi, xΒ² = x2). When false, accents matter unless the template uses {{type:nc:Field}}. |
Invalid config values
The addon never raises into Anki because of the config β bad values fall back to safe defaults:
decks given as a single string is treated as a one-item list. Non-string and empty entries are skipped; if nothing valid remains, the freeze applies to all decks.
- A deck name that doesn't exist simply never matches β no error.
include_subdecks / include_filtered_decks / ignore_case / ignore_accents that are not true/false fall back to their defaults.
freeze_ms that is not a non-negative number (e.g. "1s", -5, null) falls back to 1000.
- Any unexpected error inside the addon is logged and the rating goes through unchanged.
Logs
Config problems and errors go to Anki's add-on log: logs/addons/<addon folder>/<addon folder>.log in the Anki data folder (Tools β Add-ons β Error Cooldown β View Files opens the addon folder; the data folder is two levels up). The log rotates daily and keeps 10 days. Each distinct config problem is logged once per session.
Example config.json
{
"decks": [
"English::Typing",
"Math::Multiplication"
],
"include_subdecks": true,
"include_filtered_decks": false,
"freeze_ms": 1500,
"ignore_case": true,
"ignore_accents": true
}
License
This project is dual-licensed:
| Use case |
License |
Cost |
| Open-source project |
GPL v3 |
Free |
| Personal / educational use |
GPL v3 |
Free |
| Closed-source / commercial product |
Commercial |
Contact author |
Open Source
Free to use under the GNU GPL v3 β but you must
open-source your own code too.
Commercial
If you use this in a proprietary or closed-source product,
you need a commercial license.
Contact: prodius.mark@gmail.com
GitHub: @HoldMark
By contributing to this project, you agree to the CLA.
Copyright (C) 2026 HoldMark (MarkelloFx2) prodius.mark@gmail.com