Skip to content

PawMethod/kanji-draw-anki

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kanji Draw – Anki Note Template

Interaktives Anki-Template zum Erlernen der japanischen Kanji-Schriftzeichen — mit echter Strich-Erkennung, deutschen Eselsbrücken und vollständiger Plattform-Kompatibilität.

Anki Plattformen Sprache Lizenz


Vorschau

Geführter Modus – Strich für Strich
✍️ Geführter Modus
Freihand-Modus mit Bewertung
🖊️ Freihand-Modus
Erscheinungsbild-Optionen
🎨 Erscheinungsbild
Info & Merkhilfe Modal
📖 Info-Modal
Einstellungen
⚙️ Einstellungen
Screenshot-Galerie
🖼️ Galerie

Inhaltsverzeichnis


Überblick

Kanji Draw ist ein vollständig selbst enthaltenes Anki-Template — kein Build-Schritt, keine externen Dienste, vollständig offline-fähig. Es erzeugt zwei Kartentypen aus einem einzigen Notiztyp und bietet:

  • Echte Strich-Erkennung auf Basis mathematischer Kurvenähnlichkeit (diskrete Fréchet-Distanz)
  • Zwei Lernmodi: Strich für Strich geführt oder freies Zeichnen des gesamten Kanji
  • Anpassbares Erscheinungsbild: 4 Stift-Stile, 6 Akzentfarben, 6 Primärfarbthemen, Dark/Light Mode
  • Umfassendes Info-Modal: Radikalbaum, Eselsbrücke, Wortbeispiele, Lesungen, externe Links
  • Vollständige Plattformunterstützung: Desktop, Android (inkl. S-Pen), iOS (inkl. Apple Pencil), Web

Kartentypen

Card 1 – Aktiv (Schreiben) Card 2 – Passiv (Erkennen)
Vorderseite Deutsche Bedeutung · Zeichenfläche Kanji sichtbar · Zeichenfläche
Rückseite Ergebnis · Vergleichsansicht · Info-Modal Schlüsselwort · Farbige Strichreihenfolge · Ergebnis · Info-Modal
Lernziel Kanji aus der Bedeutung abrufen und schreiben Kanji sehen und die Bedeutung abrufen

Die Kartentypen können unabhängig voneinander konfiguriert werden. Card 1 bietet den vollen Einstellungsumfang (Zeichenmodus, Genauigkeit usw.); Card 2 beschränkt sich auf Darstellungsoptionen für das angezeigte Kanji (Strich-Nummern, Strich-Darstellung) sowie die gemeinsamen Erscheinungsbild-Einstellungen.


Zeichenmodi

✍️ Geführter Modus

Der nächste Strich wird hervorgehoben — sobald er korrekt gezeichnet wurde, erscheint automatisch der folgende. Fehlerhafte Striche werden sofort farblich markiert.

  • Nach 3 Fehlversuchen erscheint automatisch ein Zeichenhinweis (abschaltbar)
  • Überspringen-Funktion für den aktuellen Strich
  • Optionale Abschluss-Animation (Glow + Sparkle)

🖊️ Freihand-Modus

Das gesamte Kanji wird in einem Zug frei gezeichnet — ohne Reihenfolgevorgabe. Nach dem Aufdecken der Rückseite wird jeder Strich automatisch dem passenden Referenzstrich zugeordnet und bewertet.

  • Ungarischer Algorithmus (O(n³)) für optimale Strich-Zuordnung
  • Jeder zugeordnete Strich wird einzeln bewertet
  • Fehlende, überzählige und falsch gezogene Striche werden gesondert gekennzeichnet
  • Rückgängig-Funktion für den letzten Strich

Bewertungsalgorithmus

Jeder Strich wird auf Basis von vier Komponenten bewertet:

Komponente Gewichtung Beschreibung
Form (Fréchet-Distanz) 40 % Globale Kurvenähnlichkeit zwischen Nutzerstrich und Referenzpfad
Durchschnittlicher Punktabstand 25 % Mittlere euklidische Abweichung der Abtastpunkte
Startpunkt-Toleranz 17,5 % Abweichung des Strichanfangs vom Referenzstartpunkt
Endpunkt-Toleranz 17,5 % Abweichung des Strichendes vom Referenzendpunkt

Vor der Bewertung durchläuft jeder Strich drei Hard Gates:

  • Längenverhältnis: 40–250 % der Referenzlänge (verhindert zu kurze oder zu lange Striche)
  • Richtungsprüfung: 4-Sektor-Winkelvergleich (erkennt gespiegelte oder umgekehrte Striche)
  • Deckel-Multiplikator: 1,4–1,6× (verhindert Dominanz einzelner Komponenten)

Alle Striche werden auf 64 Abtastpunkte normalisiert (Catmull-Rom-Resampling). Die Fréchet-Distanz wird per iterativem Dynamic Programming (O(n²)) berechnet.

Strich-Genauigkeit

Die drei Stufen skalieren alle Schwellenwerte gleichmäßig:

Stufe Multiplikator Effekt
Locker × 1,35 Großzügigere Toleranzen — gut für Anfänger
Normal × 1,0 Ausgewogene Standardeinstellung
Streng × 0,7 Engere Toleranzen — für geübte Lernende

Fehler-Farbcodierung (Rückseite)

Fehler Farbe Bedeutung
0 🟢 Grün Strich korrekt gezeichnet
1 🟠 Orange Leichte Abweichung
2 🟧 Dunkelorange Merkliche Abweichung
3+ 🔴 Rot Strich falsch oder nicht erkannt

Einstellungen

Alle Optionen sind über das ⚙️ Zahnrad-Menü erreichbar. Einstellungen werden pro Kartentyp (Card 1 / Card 2) unabhängig gespeichert.

Zeichnen & Bewertung

Einstellung Card 1 Card 2 Optionen
Zeichenmodus Geführt · Frei
Strich-Genauigkeit Locker · Normal · Streng
Echtzeit-Prüfung An · Aus
Zeichen-Hilfe An · Aus
Abschluss-Animation An · Aus

Rückseiten-Darstellung

Einstellung Card 1 Card 2 Optionen
Farb-Bewertung An · Aus
Strich-Nummern An · Aus
Vergleichsansicht An · Aus
Strichansicht Handschrift beibehalten · SVG-Pfade einblenden
Strich-Darstellung Standard · Farbig (Regenbogen-Strichreihenfolge)

Hilfslinien-Raster

Einstellung Optionen
Muster Kein · Kreuz (Mittellinien) · Voll (+ Diagonalen)
Linienstil Gepunktet · Gestrichelt · Durchgehend
Dicke Dünn · Mittel · Dick
Sichtbarkeit Hell (30 %) · Mittel (60 %) · Dunkel (100 %)

Erscheinungsbild

Einstellung Optionen
Modus System (automatisch) · Hell · Dunkel
Akzentfarbe 🟢 Grün · 🔵 Blau · 🟣 Lila · 🟠 Orange · 🔴 Rot · 🩵 Türkis
Primärfarbe Neutral · Warm · Kühl · Sepia · Rosé · Salbei
Strich-Stil Standard · Gelstift · Tusche · Neon
Strichfarbe Schwarz · Tintenblau · Violett · Braun · Türkis · Schiefer
Schriftgröße Klein · Normal · Groß

Stift-Stile im Detail

Stil Aussehen
Standard Klarer, gleichmäßiger Strich
Gelstift Weicher Wet-Ink-Look mit leuchtendem Halo-Effekt
Tusche Variierender Pinselstrich mit dynamischer Breite
Neon Leuchtender Glow-Effekt (SVG-Doppelfilter, GPU-optimiert)

Info-Modal

Das Info-Modal (📖-Schaltfläche auf der Rückseite) zeigt alle verfügbaren Informationen zu einem Kanji auf einen Blick:

Bereich Inhalt
Kopfzeile Kanji · Deutsche Bedeutung · JLPT-Stufe · Häufigkeitsrang
Radikalbaum Visuelle Zerlegung in Radikale/Primitive mit antippbaren Tooltips
Eselsbrücke Deutsche Merkhilfe mit optionalem visuellem Hinweis
Wortbeispiele Anklickbare Beispielwörter mit ein-/ausblendbarer Furigana
Lesungen ON-Lesung (blau) · KUN-Lesung (grün) mit farbigen Labels
Externe Links Jisho · Tatoeba · WaniKani · Koohii

Plattform-Kompatibilität

Plattform Status Besonderheiten
Anki Desktop (2.1+) Maus + Pointer-Events; Add-on für Einstellungspersistenz empfohlen
AnkiDroid Touch + S-Pen; CookieManager-Flush; Gesten-Hooks userJs1/2/3
AnkiMobile (iOS) Touch + Apple Pencil; position:fixed Scroll-Lock; Safe-Area-Insets
AnkiWeb Vollständig browserbasiert; dynamische Viewport-Anpassung

Gesten-Hooks (AnkiDroid & AnkiMobile)

Folgende JavaScript-Funktionen können Geräte-Gesten zugewiesen werden:

Funktion Card 1 Card 2 Beschreibung
userJs1 Referenzstrich einblenden/ausblenden (C1) · Einstellungen (C2)
userJs2 Zeichenfläche zurücksetzen
userJs3 Einstellungen öffnen

AnkiDroid: Einstellungen → Gesten → JavaScript-Funktion 1/2/3
AnkiMobile: Einstellungen → Gesten → Eigene Aktion → JavaScript ausführen

Hinweise zu AnkiDroid

  • localStorage kann ab AnkiDroid 2.21+ explizit aktiviert werden:
    Einstellungen → Erweitert → localStorage aktivieren
  • Im Legacy-Lernmodus kann es zu Konflikten mit Wisch-Gesten kommen. Das Template zeigt in diesem Fall einen Hinweis an. Der neue Lernmodus ist empfohlen.

Notiztyp-Felder

Feld Pflicht Beschreibung
Kanji Das Schriftzeichen (z. B. )
Bedeutung Deutsche Übersetzung (z. B. Berg)
SVGPfade SVG-<path>-Elemente — ein Element pro Strich
JLPT JLPT-Stufe (N5–N1)
Häufigkeit Häufigkeitsrang unter den gebräuchlichsten Kanji
Radikale Strukturierte Kanji-Zerlegung (JSON) für den Radikalbaum
Eselsbrücke Deutsche Merkhilfe / Eselsbrücke
Merkhilfe Visueller Hinweis zur Eselsbrücke (Bild oder HTML)
Wortbeispiel Wortbeispiele mit Furigana-Markup
Onyomi ON-Lesung (Katakana)
Kunyomi KUN-Lesung (Hiragana)

Die Felder Kanji, Bedeutung und SVGPfade sind für die Grundfunktion zwingend erforderlich. Alle anderen Felder sind optional und werden im Info-Modal nur angezeigt, wenn sie befüllt sind.


Installation

1. Notiztyp anlegen

  1. In Anki: Werkzeuge → Notiztypen verwalten → Hinzufügen
  2. Notiztyp mit den oben genannten Feldern erstellen
  3. Kartenvorlagen bearbeiten — zwei Kartentypen anlegen:
Vorlage Datei
Card 1 – Vorderseite Templates/Card-1/FrontTemplate.html
Card 1 – Rückseite Templates/Card-1/BackTemplate.html
Card 2 – Vorderseite Templates/Card-2/FrontTemplate.html
Card 2 – Rückseite Templates/Card-2/BackTemplate.html
Styling (CSS) Templates/Styling.css

2. Inhalt übernehmen

Den Inhalt der jeweiligen Datei vollständig in das entsprechende Eingabefeld des Template-Editors kopieren.


Add-on: Kanji Draw Persistence

Auf Anki Desktop verwendet Qt WebEngine ein Off-The-Record-Profil — Cookies und localStorage werden bei jedem Neustart gelöscht. Das mitgelieferte Add-on löst dieses Problem.

Funktion

  • Fängt Einstellungs-Updates aus dem Template ab (pycmd('kdp:{...}'))
  • Speichert alle Einstellungen in user_files/settings.json (atomarer Schreibvorgang)
  • Stellt die Einstellungen beim nächsten Kartenaufruf automatisch wieder her
  • Arbeitet transparent im Hintergrund — keine Benutzeroberfläche notwendig

Installation

Option A – AnkiWeb (empfohlen):
In Anki: Werkzeuge → Erweiterungen → Erweiterungen herunterladen → Code eingeben:

905251277

Option B – Manuell:
Den Ordner Addon/ in das Anki-Add-on-Verzeichnis kopieren und Anki neu starten:

Betriebssystem Pfad
Linux ~/.local/share/Anki2/addons21/kanji_draw_persistence/
Windows %APPDATA%\Anki2\addons21\kanji_draw_persistence\
macOS ~/Library/Application Support/Anki2/addons21/kanji_draw_persistence/

Das Add-on ist optional. Ohne Add-on werden Einstellungen nur für die aktuelle Sitzung gespeichert und nach einem Neustart auf die Standardwerte zurückgesetzt. Auf AnkiDroid und AnkiMobile ist kein Add-on erforderlich.


Dateistruktur

kanji-draw-anki/
├── Templates/
│   ├── Card-1/
│   │   ├── FrontTemplate.html    ← Zeichenfläche + Strich-Erkennung + Einstellungs-UI
│   │   └── BackTemplate.html     ← Ergebnis + Vergleichsansicht + Info-Modal
│   ├── Card-2/
│   │   ├── FrontTemplate.html    ← Zeichenfläche + Strich-Erkennung + Einstellungs-UI
│   │   └── BackTemplate.html     ← Strichreihenfolge + Ergebnis + Info-Modal
│   └── Styling.css               ← Gemeinsames Stylesheet (Themes, Responsive, Animationen)
│
├── Addon/
│   ├── __init__.py               ← Einstellungspersistenz für Anki Desktop
│   └── manifest.json             ← Add-on-Metadaten
│
├── Tests/
│   ├── js/                       ← JavaScript-Unit-Tests (Node.js, 11 Dateien, 848 Tests)
│   └── anki_addon_stress_helper/ ← Live-Stresstests über AnkiConnect
│
├── Media/
│   └── demos/                    ← Demo-GIFs für README
│
└── README.md

Technische Details

Kein Build-Schritt, keine Abhängigkeiten

Reines HTML/CSS/JavaScript — direkt in Anki einsetzbar, keine CDN-Abhängigkeiten, vollständig offline-fähig.

Algorithmen

Algorithmus Komplexität Einsatz
Diskrete Fréchet-Distanz (iteratives DP, Float64Array) O(n²) Formähnlichkeit zwischen Nutzerstrich und Referenzpfad
Ungarischer Algorithmus O(n³) Optimale Strich-Zuordnung im Freihand-Modus
Catmull-Rom-Resampling O(n) Normalisierung aller Striche auf 64 Abtastpunkte

Rendering & Animationen

  • SVG-basierte Zeichenfläche (109 × 109 Einheiten) mit präzisen <path>-Elementen
  • Web Animations API für Abschluss-Animationen (kein permanenter requestAnimationFrame-Loop)
  • Anti-Flicker-System: Strichfarben werden per Inline-<style> gerendert, bevor Ankis FrontSide-Injection ausgeführt wird — verhindert das kurze Aufblitzen falscher Farben
  • GPU-Beförderung: will-change: transform auf animierten Elementen; separate Lite-SVG-Filter für WebKit/iOS

Einstellungspersistenz (Fallback-Kette)

window._ks (Arbeitsspeicher)
    → Cookie (_k=…, max-age 1 Jahr)
        → localStorage
            → Add-on JSON (Anki Desktop)

Sicherheit

  • Kein eval(), keine dynamische Skripterstellung
  • JSON-Escaping (</<\/) verhindert <script>-Injection über das Add-on
  • Keine externen Requests — CSP-freundlich

Datenquellen & Attribution

  • Strichpfade (SVG): KanjiVG von Ulrich Apel — lizenziert unter CC BY-SA 3.0
  • Kanji-Reihenfolge, Schlüsselwörter & Primitivnamen: Entnommen aus James W. Heisig / Robert Rauther, „Die Kanji lernen und behalten" (Klostermann-Verlag). Lernreihenfolge, deutsche Schlüsselwörter und Primitivbezeichnungen sind geistiges Eigentum der Autoren bzw. des Verlags.
  • SVG-Zerlegung nach Primitiven: Extrahiert aus Migaku Kanji God — lizenziert unter GPL v3
  • Farbige Strichreihenfolge: Inspiriert von Kanji Colorizer (Code: AGPL v3, SVGs: CC BY-SA 3.0)
  • Eselsbrücken & Merkhilfen: Erstellt von PawMethod mit KI-Unterstützung. Konzept, Prompt-Design, Kuration und Redaktion: PawMethod.

Lizenz

Der Quellcode dieses Projekts (Templates, Add-on, Algorithmen) steht unter der MIT-Lizenz.

Drittinhalte und eingebettete Daten behalten ihre jeweilige Lizenz:

Bestandteil Lizenz Rechteinhaber
KanjiVG SVG-Strichpfade CC BY-SA 3.0 Ulrich Apel
Migaku SVG-Zerlegung GPL v3 Migaku
Kanji-Reihenfolge, Schlüsselwörter & Primitivnamen Alle Rechte vorbehalten Heisig / Rauther / Klostermann-Verlag
Merkhilfen & Eselsbrücken MIT PawMethod

Vollständiger Lizenztext: LICENSE

About

Interaktives Anki-Template zum Kanji-Lernen mit Strich-für-Strich-Erkennung, Fréchet-basiertem Scoring und deutschen Eselsbrücken.

Topics

Resources

License

Stars

3 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors