Learn to Write β€” Interactive Canvas Tracing for Symbols & Kanji

AnkiWeb addon 941300810

Enables tracing symbols, Kanji, Kana, and letters on Anki cards with stroke-accuracy scoring, visual feedback, batch image importing, and mastery-based guide fading.
AI-generated summary; may contain mistakes.

card-creationimportcard-templatesmobile-compatible

Open on AnkiWeb GitHub Ask about alternatives

AnkiWeb

Rating
0 (πŸ‘ 0 Β· πŸ‘Ž 0)
Updated
2026-09-21
Anki versions
unknown
Description language
en

Maintenance

active

  • Last update or commit was 10 days before the snapshot (2026-09-21).
  • The repository has 9 test files.
  • The repository has 1 GitHub Actions workflows.

Will it work on my Anki?

Version branches
Min AnkiMax AnkiUpdated
2.1.0–2026-09-21
History across monthly snapshots

Loading…

Similar addons

japanese-input

Lets users practice Japanese handwriting by drawing hiragana, katakana, or kanji in Anki, recognizing input and checking kanji against references with feedback.

card-creationquizbeta

Rating 0 πŸ‘ 0 Β· πŸ‘Ž 0 ⭐ 1 Anki 26.05~ Updated 2026-07-12
Photo-episodic 2.0

Creates an ordered photo deck pairing consecutive images as flashcards to build an autobiographical memory chain and improve episodic memory, with PyQt5, Python3.7, and file-management improvements.

card-creationimport

Rating 0 πŸ‘ 0 Β· πŸ‘Ž 0 ⭐ 0 Anki 2.1.30~ Updated 2020-08-27

README

Learn to Write β€” Anki Addon

Addon for Anki Desktop that teaches the writing of symbols (alphabets, kana, devanagari, etc.) through tactile tracing on a template derived from a real image. The guide fades progressively as your spaced repetition score for each symbol improves.


Requirements

  • Anki Desktop 24.04 or higher (add-ons do not run on AnkiDroid or AnkiMobile)
  • Python is bundled with Anki β€” no separate installation needed

Installation

  1. Open Anki Desktop.
  2. Go to Tools β†’ Add-ons β†’ Get Add-ons…
  3. Enter the AnkiWeb code for this addon.
  4. Restart Anki.

Importing symbols

  1. Go to Tools β†’ Import symbols…
  2. Enter a deck name (e.g. "Katakana", "Hiragana").
  3. Click Select images… and choose one or more symbol image files (PNG, JPG, JPEG, GIF, WebP, SVG).
  4. Fill in Nombre (display name) and Fonetica (phonetic transcription) for each symbol.
    • Nombre is required. Fonetica is optional.
    • The addon never tries to infer names from filenames β€” you decide what each symbol is called.
  5. Click OK. The deck and notes are created automatically.

Reviewing a card

  • The symbol guide appears in grey at a level of opacity driven by your current mastery.
  • Trace the symbol with your mouse or finger (on a touch screen).
  • Press Show Answer. Zones you missed are highlighted in red; your stroke appears in blue.
  • Rate the card normally (Again / Hard / Good / Easy). Anki's scheduler (SM-2 or FSRS) handles the review interval β€” the addon does not add its own scheduler.

How the guide opacity works

The addon computes a mastery level (0–100%) for each symbol based on your review history:

mastery = max(0, min(100, round(100 Γ— min(reps βˆ’ lapses, 5) / 5)))
guide_alpha = 15 + (mastery / 100) Γ— 90
  • 0 mastery β†’ guide is nearly transparent (maximum visual support).
  • 100 mastery β†’ guide is nearly opaque (minimum visual support β†’ forces muscle memory).
  • A lapse reduces reps βˆ’ lapses, lowering mastery and lightening the guide β€” inspired by programmed instruction (Skinner): the prompt is withdrawn as the response consolidates, and restored when a failure is recorded.

Configuration

Edit addon/config.json to adjust defaults:

{
  "tolerance": 10,
  "binarization_threshold": 128
}
Key Default Description
tolerance 10 px Radius around your stroke considered a "hit" (compensates for touch tremor)
binarization_threshold 128 Luminance threshold for separating guide pixels from background (0–255)

Note: After changing config.json, you must also update the matching values in addon/card_template/front.html (the CONFIG variable in the inline script), because the card template JavaScript cannot read the Python config file at runtime.


Cross-platform limitation

Important β€” read before installing

Add-ons only run on Anki Desktop. If you review exclusively on AnkiDroid or AnkiMobile, the guide opacity is not updated in real time. It is recalculated the next time you open or sync Anki Desktop.

The tracing canvas and miss detection do work natively on AnkiDroid and AnkiMobile, because they are standard HTML/JS in the card template, not add-on code.


Development

Run tests

cd ~/Projects/learn-to-write
python -m pytest tests/ -v

Tests for mastery.py have no Anki dependency. Tests for deck_builder.py use a mocked col object.

Repository structure

learn-to-write/
β”œβ”€β”€ addon/
β”‚   β”œβ”€β”€ __init__.py              # Menu setup and hook registration
β”‚   β”œβ”€β”€ import_dialog.py         # Symbol import dialog (QDialog)
β”‚   β”œβ”€β”€ deck_builder.py          # Note type and deck creation (idempotent)
β”‚   β”œβ”€β”€ mastery.py               # Mastery formula and batch recompute
β”‚   β”œβ”€β”€ hooks.py                 # Anki GUI hook registration
β”‚   β”œβ”€β”€ card_template/
β”‚   β”‚   β”œβ”€β”€ front.html           # Card front: guide + tracing canvas
β”‚   β”‚   β”œβ”€β”€ back.html            # Card back: score overlay
β”‚   β”‚   └── trace_widget.js      # Tracing, binarization, dilation, scoring
β”‚   β”œβ”€β”€ manifest.json            # Addon metadata
β”‚   └── config.json              # Default configuration
β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ test_mastery.py
β”‚   └── test_deck_builder.py
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ README.md                # This file
β”‚   └── ankiweb_listing.md       # AnkiWeb public listing text
β”œβ”€β”€ LICENSE                      # AGPL-3.0
└── .github/workflows/ci.yml     # Lint + tests on push

License

AGPL-3.0 β€” see LICENSE.