AnkiWeb
- Rating
- 2 (๐ 2 ยท ๐ 0)
- Updated
- 2026-09-28
- Anki versions
- 25.07.5~
- Description language
- en
AnkiWeb addon 857040600
Reorders new Anki cards into priority and normal queues via configurable searches, occurrence dictionaries, frequency fields, and sorting, then syncs the new order.
Open on AnkiWeb GitHub Ask about alternatives
active
| Min Anki | Max Anki | Updated |
|---|---|---|
| 25.07.5 | + | 2026-09-28 |
Loadingโฆ
Records words from Japanese text streamed over a websocket, using the Jiten API to build daily occurrence dictionaries for Anki that can feed Priority Reorder's seen search.
Tracks known words to optimally reorder language flashcards, presenting sentences with one unknown word, with Japanese, Chinese, and scheduler support.
Sorts new cards using Yomitan frequency dictionaries with toggleable averaging, startup sorting, review display, backfilling, occurrence filtering, and only word plus optional reading fields.
Reorders the traditional scheduler's queues to show due review cards first until none remain, then learning and new cards as normal.
Imports Yomichan frequency dictionaries and sorts selected card types by frequency or rank, offering preferences, reset options, and database/tag maintenance.
Automates reordering cards by field, converting fields to tags, and backfilling word frequencies, with reordering run at startup or through a menu and configured in options.
Reorder your new Anki cards so the ones you care about come first.
See CHANGELOG.md.
Instead of learning new cards in plain frequency order, you build a priority queue from searches like these:
<details> <summary>View Example</summary> <br> <img src="example.png" alt="Example of priority reorder">
<details> <summary>View Example Config</summary> <br>
```
{
"normal_search": "deck:ๆฅๆฌ่ช::Mining",
"priority_search": [
"deck:ๆฅๆฌ่ช::Mining occurrences:[9-nine-ใใใฎใคใใใฎใใใใฎใใ,9-nine-ใใใใใใใใใใใฎใใจ,9-nine-ใฏใใใใฏใใใใฏใใฎใใ,9-nine-ใใใใใใใฏใชใใใฎใใจ]>=10",
"deck:ๆฅๆฌ่ช::Mining occurrences:[9-nine-ใใใฎใคใใใฎใใใใฎใใ,9-nine-ใใใใใใใใใใใฎใใจ,9-nine-ใฏใใใใฏใใใใฏใใฎใใ,9-nine-ใใใใใใใฏใชใใใฎใใจ]>=3",
"deck:ๆฅๆฌ่ช::Mining occurrences:็ฉข็ฟผใฎใฆใผในใใฃใข>=3 added:14",
"deck:ๆฅๆฌ่ช::Mining occurrences:็ฉข็ฟผใฎใฆใผในใใฃใข>=10 added:14",
"deck:ๆฅๆฌ่ช::Mining occurrences:้ญๆณๅฐๅฅณใ้ญๅฅณ่ฃๅค>=10 added:14",
"deck:ๆฅๆฌ่ช::Mining occurrences:[ใใใใใใใฎ,ใใใใใใใฎ2,ใใใใใใใฎ3]>=20 added:14",
"deck:ๆฅๆฌ่ช::Mining occurrences:็ฉข็ฟผใฎใฆใผในใใฃใข>=7",
"deck:ๆฅๆฌ่ช::Mining occurrences:็ฉข็ฟผใฎใฆใผในใใฃใข>=5"
],
"priority_search_mode": "sequential",
"sort_field": "FreqSort",
"sort_reverse": false,
"tuning": {
"priority_cutoff": null,
"normal_prioritization": null,
"priority_limit": null,
"shift_existing": true
},
"sync_behavior": {
"reorder_on_sync": true,
"auto_update_dicts": false
},
"word_fields": {
"expression_field": "Expression",
"expression_reading_field": "ExpressionReading"
}
}
```
</details>
My first searches pick the most frequent words in the VN I'm reading now. Later searches pick frequent words from VNs I plan to read next. </details>
You need a note type with frequency data. I recommend Lapis. To add frequency data to existing cards, see backfill-anki-yomitan.
The default config prioritizes cards added in the last 3 days. To change it:
{
"priority_search": [
"deck:ๆฅๆฌ่ช::Mining added:5"
],
"normal_search": "deck:ๆฅๆฌ่ช::Mining",
"sort_field": "FreqSort"
}
A deck name with spaces needs escaped quotes:
"\"deck:ๆฅๆฌ่ช::Mining Deck\" added:5". Occurrence dictionary folder names can't contain spaces at all, so rename the folder.
sort_field to the frequency field of your note type (e.g. "FreqSort" or "Frequency").The addon reorders your new cards after every sync, then syncs once more so your other devices get the new order. Press Ctrl+Alt+` to reorder by hand.
The searches and sorting sit at the top level of the config. Everything else is grouped into the matching, tuning, sync_behavior and word_fields sections.
The addon splits your new cards into two queues:
priority_search, shown first.normal_search, shown after.Each queue is sorted by sort_field. A card matching both goes in the priority queue, so in the example above, recent cards are placed first even though they also match the normal search.
Everything lives under Tools โ Priority Reorder: Reorder Cards (Ctrl+Alt+` ), Show Summary, and Update Jiten Occurrence Dictionaries.
Tools โ Priority Reorder โ Show Summary shows what each priority search did in the latest reorder this session. If nothing has run yet, press Run reorder or sync.
The top shows how many cards were prioritized, when, and a bar splitting the priority queue by search. Below, each search gets a row with its kept and matched counts, its place in the queue, and a thin bar showing where its matches went: kept, taken by an earlier search, over its limit=, or cut by priority_cutoff. Click a row for the numbers and for buttons that open those notes in the Browser. Edit config and Run reorder are at the top, so you can change a setting and check the result straight away.
In "mix" mode the searches are pooled before sorting, so each row shows only its matched count.
In "cycle" mode, a search that takes several turns shows two ranges, such as 1โ5, 2981โ3400 โป: its first turn, then the stretch where its later turns alternate with the other searches. Hover the range for the number of turns. The bar shows each first turn in place, then a striped stretch for the later turns; hover it to see which searches placed how many cards there.
Mix these into any Anki search:
| Term | Short | Matches by |
|---|---|---|
f<10000 |
value of your sort field | |
length>=3 |
l>=3 |
characters in the expression field |
occurrences:Name>5 |
o:Name>5 |
times the word appears in an occurrence dictionary |
seen:7 |
s:7 |
whether the word appeared in the last 7 days |
kanji:new=1 |
k:new=1 |
number of kanji you haven't learned |
kanji:new_reading>=1 |
k:new_reading>=1 |
number of kanji in a reading you haven't learned |
kanji:num=2 |
k:num=2 |
number of kanji |
limit=20 |
keeps only the top 20 of this search (config only) |
All of them except limit= also work in the Browse search bar and through the collection API (and so AnkiConnect), which makes the Browser a good place to try a search before you put it in your config. They use the same matching settings, word_fields and sort_field as the reorder. Comparisons can be =, !=, <, <=, > or >=, and a leading - negates a term (-seen:30).
The short forms are the same terms, and you can mix the two. limit= has no short form, because l belongs to length. If one of your note types has a field named o, k, s or l, the short form hides searches on that field, so use the long form there. Short forms also work only while this addon is enabled, so write the long form in a search you plan to share.
f)f<10000 or f>=30000 compares the number in your sort field. It's most useful combined with other terms, e.g. to keep only the common words from an occurrence search.
length)length>=3 matches expressions of 3 or more characters, length=1 single-character words. The raw field value is counted in Unicode characters, with no HTML stripping, so markup counts toward the length. An empty field has length 0.
occurrences:)Prioritize words from specific media, using Yomitan occurrence dictionaries.
occurrences:้่ฒใ้ฅใ>=5 matches words that appear 5 or more times in ้่ฒใ้ฅใ.occurrences:[้่ฒใ้ฅใ,็ฉข็ฟผใฎใฆใผในใใฃใข]>=10 adds up the counts from both.occurrences:all>=10 adds up every dictionary in user_files, for words common across all your media.Download them from Jiten: each media page has them under Download deck -> Yomitan (occurrences).
user_files folder.้่ฒใ้ฅใ. The folder name is what you type after occurrences:, so it can't contain spaces.term_meta_bank_*.json, and the updater needs index.json:user_files/
โโโ ้่ฒใ้ฅใ/
โ โโโ index.json
โ โโโ term_meta_bank_1.json
โโโ ็ฉข็ฟผใฎใฆใผในใใฃใข/
โโโ index.json
โโโ term_meta_bank_1.json
word_fields to match your note type. For Lapis:"word_fields": {
"expression_field": "Expression",
"expression_reading_field": "ExpressionReading"
}
The addon can update dictionaries that came from Jiten.
"auto_update_dicts": true in the sync_behavior section checks once a day, after a sync.Jiten's API allows roughly 10 requests per minute, so with more than 10 dictionaries an update pauses to wait out the limit. If that makes syncing feel slow, leave
auto_update_dictsoff and update from the menu.
By default a card counts only the entries that exactly match its expression and reading. The options in the matching section also credit it with related entries:
"matching": { "prefix_matching": true, "variant_matching": true }
They apply wherever occurrences: and seen: run, in the reorder and in the Browse bar. All are off by default, and they combine without counting an entry twice.
| Option | Card gets the counts of | Example |
|---|---|---|
kana_normalization |
the same word in the other kana script | ใฎใชใฎใช โ ใใใใ |
combine_word_forms |
every reading of its expression, plus kana-only entries of its reading | ๅไบฌ โ all ๅไบฌ entries |
prefix_matching |
longer entries that start with it | ๅฝซๅป โ ๅฝซๅปๅฎถ |
suffix_matching |
longer entries that end with it | ๅญฆๆ ก โ ๅฐๅญฆๆ ก |
variant_matching |
other spellings of the same word | ็
ใใ โ ็
ใ |
stem_matching |
its noun form | ๆใใ โ ๆใ |
compound_matching |
compounds built on its stem | ๅใ โ ๅใๆถใ |
honorific_folding |
its ใ/ใ/ๅพก form |
่ถ โ ใ่ถ |
The full rules follow. Every option only adds counts, so the worst a loose match can do is push a card over a threshold early.
<details> <summary><code>kana_normalization</code> and <code>combine_word_forms</code></summary>
kana_normalization folds katakana to hiragana on both the card and the dictionary before matching, in the expression and the reading. These pairs match with it on:
ใฎใชใฎใช/ใฎใชใฎใช and ใใใใ/ใใใใๅไบฌ/ใใณใญใณ and ๅไบฌ/ใชใใใใใฟๅธณ/ใใฟใกใใ and ใญใๅธณ/ใญใใกใใcombine_word_forms sums every entry under the card's expression, whatever its reading, plus every kana-only entry (ใ) for the card's reading. A ๅไบฌ/ใชใใใ card gets all ๅไบฌ entries and all kana-only ใชใใใ entries. A kana card, whose expression is its reading, isn't counted twice.
The two are independent. With both on, the kana is folded first and the combined lookup runs on the folded keys. </details>
<details> <summary><code>prefix_matching</code></summary>
The card gets the counts of every longer entry that starts with its expression. With entries ๅฝซๅปๅฎถ (100) and ๅฝซๅปๅ (30), a ๅฝซๅป card counts its own entry plus 130, so occurrences:MyDict>=50 can pick it up even if ๅฝซๅป alone appears only a few times.
ๆ would absorb ๆ็ด and ๆ่ก, where it is only part of the word and often read differently.ใ ใ ใฎ ใซ ใง ใฏ ใ ใธ ใจ), optionally followed by more, when the entry's reading starts with the card's reading plus that particle. ๆใ่ฒธใ (ใฆใใใ) credits ๆ/ใฆ but not ๆ/ใใ
, and ๆ็ด still gives nothing. The bare form counts too: ไฟใซ credits ไฟ/ใใ and ็นใซ credits ็น/ใจใ, so you don't need separate cards for them. The reading check is what keeps out on'yomi compounds and verbs like ็ฉใใ.ใใ, ใใ or ใใ credits it when the reading matches: ๅฑฏใใ/ใใใใใ credits ๅฑฏ/ใใใ but not ๅฑฏ/ใจใ, and ๆใใ credits ๆ/ใใ. The sound change before ใใ is allowed, so ๅฏใใ/ใใฃใใ credits ๅฏ/ใใค.ๅๅผทใใ already starts with ๅๅผท.<details> <summary><code>suffix_matching</code></summary>
The mirror of prefix matching: the card gets the counts of longer entries that end with its expression. Japanese compounds put the head last, so this gathers a word's family: ๅญฆๆ ก gets ๅฐๅญฆๆ ก, ไธญๅญฆๆ ก and ้ซ็ญๅญฆๆ ก.
ๅญฆๆ ก, ็ฎ็) and kanji-plus-okurigana words (้ฃในใ, ๅผทใ), so compound verbs and adjectives work: ๅบใ gets ๆใๅบใ and ้ฃใณๅบใ, ๅผทใ gets ๅฟๅผทใ and ๅๅผทใ. A bare single kanji (่ช, ๆฅ, ๆ) would absorb whole families with unstable readings and meanings, so it is left out, and so are pure kana cards (ใใ, ใใจ, loanwords).ๆฏใฎๆฅ (ใฏใฏใฎใฒ) credits ๆฅ/ใฒ, not ๆฅ/ใซใก, and ไปๆฅ or ๆฅๆฌ่ช give nothing.ใ or ใฌ: ใซใๆใใใ credits ๆใใ, ็ธๅคใใใ credits ๅคใใ, ่ฆใ็ฅใใ and ่ฆ็ฅใใฌ credit ็ฅใ, and ๆใใ credits ๆใ. The reading has to end the same way, so ใซใๆใใ (ใซใใใใใใ) doesn't credit ๆใ/ใใ ใใ and ๆฐดๅ
ฅใใ (ใฟใใใใ) doesn't credit ๅ
ฅใ/ใฏใใ. ใชใ is left out, because ใคใพใใชใ and ใใ ใใชใ would inflate their base verbs.ๆฅใใง credits ๆฅใ, ใซๆฒฟใฃใฆ credits ๆฒฟใ, ใใฎๆใซๅใใง credits ๅใถ, ่ฌนใใง credits ่ฌนใ. The reading has to match here too.<details> <summary><code>variant_matching</code></summary>
The card gets the counts of other spellings of the same word, differing in okurigana or kanji. Prefix and suffix matching can't reach these: ็
ใ is neither a prefix nor a suffix of ็
ใใ.
็
ใใ card gets ็
ใ but not ็ฆใใ (no shared kanji) or ใใใใ (no kanji). Okurigana families fold together: ่ฝ่/่ฝใก่, ๆฐๆ/ๆฐๆใก, ๅญไพ/ๅญใฉใ.็งๅญฆ and ๅๅญฆ, ไฟ่จผ and ไฟ้, ๅฏพ่ฑก and ๅฏพ็
ง apart.็ใ/็ฏใ, ๆปใ/ๆใ, ้คๆฒน/้ฌๆฒน, ๆๆถ/ๆๆฟค, ็ฑ ๅ/็ฏญๅ.combine_word_forms as well if you want them. Entries with no reading never match.<details> <summary><code>stem_matching</code></summary>
The card, in dictionary form, gets the counts of its noun form: the ้ฃ็จๅฝข (masu-stem) for verbs, and for ใ-adjectives the ใ form and the ใ/ใฟ/ใ nouns. Occurrence dictionaries list these as separate entries, so without this a ๆใใ card scores nothing against a dictionary that has only ๆใ.
ใ (ๆใใโๆใ). Godan verbs move the last kana from the ใ-row to the ใ-row (้ใถโ้ใณ, ๅพ
ใคโๅพ
ใก, ่ฉฑใโ่ฉฑใ, ๆณณใโๆณณใ). ใ-adjectives take ใ (ๆฉใโๆฉใ) and all three nouns (ๅผทใโๅผทใ/ๅผทใฟ/ๅผทใ).่ตทใใ finds ่ตทใ, ่ตฐใ finds ่ตฐใ, and the wrong guess matches nothing.ๆใ card is not credited by ๆใใ. The other way round, a rare derived form would take the count of a far commoner base word and jump the queue (็กใ, seen once, would absorb the thousands of ็กใ). Use prefix_matching if you want that direction.ๅญฆๆ ก never qualify. They must also differ, so a kana-only card can't validate a match (ใใใ won't absorb ใใ). The noun form must be at least 2 characters, which skips ่ฆใโ่ฆ and ็ฅใโ็ฅ.ใใ is irregular, so ๅๅผทใใ doesn't reach ๅๅผทใ. ใใ and ใใ verbs do work (ๆใใโๆใ), because they conjugate as ichidan.ใ that is really a past form gets caught (ๆฅใใโๆฅใ), and a ้ฃ็จๅฝข noun ending in ใ is treated as an adjective (ๅฒใโๅฒใฟ). Across 13 dictionaries that was 2 of 917 matches.<details> <summary><code>compound_matching</code></summary>
The card, in dictionary form, gets the counts of entries built on its stem. Much verb vocabulary lives here: a dictionary listing ๅฅฎใ็ซใค tells no other option anything about ๅฅฎใ, because it neither starts nor ends with ๅฅฎใ and doesn't share its reading.
ๅฅฎใ gets ๅฅฎใ็ซใค, ๅใ gets ๅใๆถใ and ๅใๆฑใ, ๅใใ gets ๅใๅ
ฅใใ, ้ฃในใ gets ้ฃใน็ฉ, ้้ใ gets ้้ใใชใ and ้้ใใชใ, ๅฐใชใ gets ๅฐใชใใจใ.ๆฑใ/ใ ใ gets ๆฑใใใใ/ใ ใใใใ and ๆฑใ/ใใ ใ doesn't.็จผใ gets ๆ้็จผใ, ๆญขใพใ gets ่กใๆญขใพใ, ๆใ gets ๆธๆใ, ไผใ gets ๅคไผใฟ. The reading may voice the stem's first sound, as compounds usually do (ๆ่งฆใ, ใฆใใใ, credits ่งฆใ).stem_matching also on, that entry is counted once.้ฃในใโ้ฃในใใใฎ) belong to prefix_matching whether or not that is on.่ฆๅใโ่ฆๅใ, ่ตทใใโ่ตทใใ), idioms ride along (ๅฝใใโๅฝใใๅ), and a rare base can take a common word's count (็ใ/ใใ, seen twice, absorbs the compounds of ็ใใ). Kana-only cards are excluded as in stem matching, so loanwords are safe.<details> <summary><code>honorific_folding</code></summary>
The card gets the counts of entries that are the same word with ใ, ใ or ๅพก in front, which is useful when a dictionary lists ใ่ถ or ๅพก็คพ and your card is the bare form.
ใ{X} adds its count to {X} when {X} contains a kanji (ใ่ถใฎ้โ่ถใฎ้, ใ้โ้) or is itself an entry in the same dictionary. A kana-only remainder needs that entry, which blocks junk like ใใใโใใ and ใใฏใใโใฏใใ.ใ่ถ card is unchanged, a ่ถ card gains ใ่ถ's count. With entries ใ่ถ (50) and ่ถ (10), ่ถ counts 60 and ใ่ถ 50. With only ใ่ถใฎ้ (9), a ่ถใฎ้ card counts 9.้ฃฏ/ใใ card picks up ใ้ฃฏ/ใใฏใ.
</details>kanji:)Prioritize words by the kanji you already know. A kanji is known once it appears in the expression of a card you've learned (a review or relearning card that isn't suspended). Each example also works with k:.
kanji:new=0: every kanji is known.kanji:new=1: exactly 1 unknown kanji.kanji:new>=2: 2 or more unknown kanji.kanji:num=1: exactly 1 kanji.kanji:num>=3: 3 or more kanji.A kanji stops being new as soon as one learned word contains it. To raise the bar, add a target: with kanji:new[3], a kanji stays new until 3 learned words contain it (kanji:new is kanji:new[1]). This helps keep practising kanji you've met in only one or two words. The target works on new and new_reading, not on num.
kanji:new_reading)kanji:new asks whether you've met the kanji. kanji:new_reading asks whether you've met the reading it has in this word, which is what the card tests.
Once you've learned ้ฃไบ (ใใใใ), kanji:new counts ้ฃในใ (ใในใ) as fully known, though ้ฃ=ใ is new to you. That's the card you're about to fail.
kanji:new_reading>=1: at least 1 kanji in a reading you haven't learned.kanji:new_reading>=1 kanji:new=0: words made entirely of kanji you know, in a reading you don't.kanji:new_reading[3]>=1: a reading stays new until 3 learned words use it.Readings are tracked per kanji, so ็ๆดป (ใใใใค) doesn't teach ็ใใ (ใใใ). Inflections share a reading: ไธใใ and ไธใใ are both ไธ=ใ, while ไธใ (ใฎใผใ) is different. Rendaku isn't a new reading either: ่ก (ใก) covers ้ผป่ก (ใฏใชใข).
Words whose reading doesn't split across their kanji, like ็ซๅท (ใใใฉ), ไปๆฅ (ใใใ) and gikun readings, count as new for every kanji they can't explain. Those are the least predictable readings, so that's usually what you want. When only part of a word is irregular, only that part counts: ็ผ้ก/ใใใญ credits ็ผ=ใ and flags only ้ก.
Set
word_fields.expression_reading_fieldto the field with the kana reading. Cards without a reading never match. Readings are checked against a bundled table built from KANJIDIC2. If this term matches almost every card, the reading field is usually the cause, and the console prints a warning.
Example: occurrences:้่ฒใ้ฅใ>=5 kanji:new=0 kanji:new_reading>=1 finds words common in the VN you're reading that look fully known but will trip you up.
seen:)Experimental:
seen:may change or be removed in a future version.
Prioritize words from your recent immersion, using daily occurrence dictionaries. The matching options apply to seen: too.
seen:N (short s:N) matches words in the daily dictionary of any of the last N days, however many times they appear. -seen:30 negates it.seen:1 is today. "Today" follows Anki's "Next day starts at" setting.seen:1 to seen:3 are cheap, while seen:30 and up get noticeably slower, more so with prefix_matching or variant_matching on. Use the smallest window that still means "recent". Reusing the same window in several searches costs nothing extra.My Daily Occurrences addon writes one for each day, from text that arrives over a websocket (the usual VN setup).
To build them yourself, put them in a _seen folder under user_files, one subfolder per day named YYYY-MM-DD:
user_files/
โโโ _seen/
โโโ 2026-06-11/
โ โโโ term_meta_bank_1.json
โโโ 2026-06-12/
โโโ term_meta_bank_1.json
Each term_meta_bank_*.json is an ordinary Yomitan occurrence dictionary and uses the same word_fields. The _seen folder is reserved: it isn't an occurrence dictionary, so occurrences:all skips it and occurrences:_seen can't reach it. Only seen:N reads it.
Make priority_search a list, and priority_search_mode decides how the searches combine:
"sequential": all of the first search, then the second, and so on. ["added:3", "tag:ใใใซใฒใผใ ::้่ฒใ้ฅใ"] puts recent cards first, then the ้่ฒใ้ฅใ cards."mix": every match in one pool, sorted together."cycle": the searches take turns, each placing its next limit= cards, until all run out. ["deck:A limit=10", "deck:B", "deck:C limit=5"] places A's top 10, all of B, C's top 5, then A's next 10, C's next 5, and so on. Without any limit= this is the same as "sequential".limit=X in a search keeps only its top X cards (added:3 limit=20: the 20 most frequent recent cards). In "cycle" mode it's the number of cards per turn, and the rest wait for the next turn.tuning.priority_limit caps the whole priority queue.tuning.priority_cutoff sends priority cards whose sort value is past this number (the rarer words, with a frequency-rank field) to the normal queue.tuning.normal_prioritization does the opposite: normal cards with a sort value under this number join the priority queue, after all your searches.Kanji reading and variant data is derived from KANJIDIC2, Copyright ยฉ the
Electronic Dictionary Research and Development Group,
used under the CC BY-SA 4.0 licence. The bundled
kanji_readings.txt and kanji_variants.txt are modified extracts (readings and variant groups only, re-encoded) and are likewise CC BY-SA 4.0.