Difficult Word Exporter for Anki
Version: 0.1.0
Difficult Word Exporter analyzes existing Anki review history and produces an editable list of Persian vocabulary items that need practice, recently received Again, were repeatedly difficult, recovered after struggle, stabilized, or were forgotten again after a successful streak.
The add-on is designed to be read-only against your Anki collection. It reads cards, notes, decks, note types, and review logs, and writes only its own local add-on configuration. It does not edit notes, cards, tags, decks, due dates, intervals, review history, scheduling, or the database schema. Keep normal Anki backups anyway.
Installation
- In Anki, open
Tools > Add-ons.
- Click
Install from file....
- Choose
dist/difficult_word_exporter.ankiaddon.
- Restart Anki.
You can also install from source by copying the difficult_word_exporter folder into Anki's add-ons folder and restarting Anki.
Opening
Open a profile and collection, then choose:
Tools > Difficult Word Exporter
The dialog opens with scope controls on the left and results on the right.
First-Time Field Mapping
Click Configure Fields... before the first analysis if your Persian note types do not use common field names.
The add-on tries to detect the Word field in this order:
Persian, Farsi, Persian-script Farsi, Word, Expression, Term, Vocabulary, Front
The Meaning field is optional and is detected from:
English, Meaning, Definition, Translation, Back
Unmapped note types are skipped and reported after analysis.
Presets
Needs Practice finds items with recent Again/Hard evidence whose current status is Still Difficult or Improving.
Recent Again finds anything with at least one Again inside the selected recent window.
Repeatedly Difficult finds items with multiple recent failures or a high count of Again plus Hard reviews.
Recovered finds items that were difficult in the window and now meet Recovered or Stable status.
Stable After Struggle finds all-time difficult items that now meet the Stable status.
Forgotten Again finds items whose latest review became Again or Hard after a prior Good/Easy streak.
Changing a preset-controlled setting switches the preset label to Custom.
Custom presets can be saved, updated, deleted, and managed from the Preset section. Built-in presets are protected.
Statuses
Still Difficult: the latest included review is Again or Hard.
Improving: the latest included review is Good or Easy, but recovery thresholds are not met.
Recovered: the current Good/Easy streak is at least 3, spans at least 2 review days, and is not yet Stable.
Stable: the current Good/Easy streak is at least 5, spans at least 3 review days, and at least 7 calendar days have passed since the last Again or Hard.
No Difficulty Evidence: no Again or Hard exists in the included history.
By Note vs By Card
By note combines review histories from all selected card templates generated by the same note. This is the recommended mode for vocabulary notes that have recognition, production, listening, and sentence cards.
By card analyzes each card separately and displays the card template in the optional Card Template column.
Use Configure Card Templates... to include or exclude specific templates.
Source Lookup and Explanations
Each result includes a Why Included explanation and optional Weakest Direction, Deck, and Source columns.
Use Source..., the result context menu, or Ctrl+Enter to open the source note in Anki's Browser. The source dialog shows note fields, note/card IDs, deck, note type, card state, template breakdown, and match reason. These source views are read-only and do not modify your collection.
Double-clicking a result still opens Review History. Review History now also shows the match reason and per-template breakdown.
Export Examples
Copy Words and TXT export one cleaned word per line, deduplicating exact word strings while preserving order:
word one
word two
word three
Copy Detailed, Copy for ChatGPT, and CSV preserve separate rows:
Word Meaning Why Included Weakest Direction Deck Note Type Status Again Hard Good Easy Window Reviews Lifetime Reviews Good/Easy Streak Recovery Days Last Rating Last Difficulty
Copy for ChatGPT adds a context header with deck scope, aggregation mode, preset, window, review types, selected count, and status definitions. The Export Detail dropdown supports Words Only, Standard, and Full Context. Source IDs are excluded by default and can be enabled with Include source IDs.
Troubleshooting
If no cards are found, check the selected deck, subdeck setting, and card-template filters.
If no usable Word field is configured, open Configure Fields... and choose a Word field for each included note type.
If results are empty, try Needs Practice, Recent Again, or reset filters.
If a word should never appear again, right-click it and choose Exclude from future results. Use Manage Exclusions... to restore exclusions.
Tested Compatibility
Tested locally against:
- Anki 25.09.4 / package version 25.9.4
- Python 3.13.5 in the Anki bundle
- PyQt6 6.9.1 / Qt6 6.9.1
Pure-Python tests were run with the bundled Codex Python runtime as well.
Known limitation: the automated suite validates pure logic and package syntax without launching a live Anki GUI session in this workspace. Final visual acceptance should be checked inside Anki after installation.
Uninstall
- In Anki, open
Tools > Add-ons.
- Select
Difficult Word Exporter.
- Click
Delete.
- Restart Anki.
Deleting the add-on removes the local add-on configuration, including exclusions, unless Anki preserves metadata during your removal workflow.
Running Tests
From the parent folder that contains difficult_word_exporter:
python -m unittest discover -s difficult_word_exporter\tests
The tests do not require Anki to launch.