Anki 23.12 Beta

Hi all,

A new beta is available. Please let us know how it goes for you.


The deck options Save dropdown now lets you optimize all presets at once.

That needs a confirmation dialog.

I don’ think so - you can interrupt it, and you can undo it.

The search used for optimizing presets is now remembered. By @abdnh in #2827

The default is empty, with a faint “preset:” query. If I enter “-is:suspended”, that’s what is remembered. That doesn’t seem right.

With “Undo Deck Options”?

If you’re assuming that it should add an implicit ‘preset:foo’ to the search you enter, that would restrict users from including other decks in their search.


1 Like

So, if I want -is:suspended in each of my presets, I have to enter “preset:""” and paste the preset name into each one? My preset names are like “nonimp: post general preset 21%” (non-priority, postponable, desired retention 79%).

The context menu for the empty field consists of a “Copy” item that does nothing. It could copy the hint instead. Or maybe just pressing “→” in the empty field could insert the preset name.

Anki does not update the preset name if I clone or rename a preset, and does not ask to save the preset after I edit the field.
And even if I save (I’m separating this deck because it has RMSE(bins) 14% with the more general preset),

  • stats for preset:"imp adva pron-fr 20%" -is:suspended show 106 cards, ⁨1,034⁩ reviews.
  • Optimize says “⁨Only ⁨444⁩ reviews were found.⁩”

In “Rename Preset”, Esc closes Deck Options instead of just the Rename Preset window.

Added an auto-advance feature. Activate from More menu; configure via deck options. By @abdnh in #2765

The More button is when reviewing a card, you can check a box to auto-advance it. What about the deck options?

Rewrite the optimal retention code. The new code will give different results, and is faster. By @L-M-Sherlock, @asukaminato0721 and @dae in open-spaced-repetition/fsrs-rs#122 and open-spaced-repetition/fsrs-rs#124
The Brent method makes it harder to predict how many iterations will be required, so don’t set a total; the frontend will just display the number of elapsed iterations.

Deck size: 1100
Minutes study/day: 3

Days to Simulate 730
Iteration: 4
Estimated retention: 0.83

Days to Simulate 731
Iteration: 5
Estimated retention: 0.78

different deck (“Iteration: number” starts disappearing at the end if the number of days is over 400 or so, but not always)

Deck size: 5000
Minutes study/day 8
66, 5, 0.78
67, 6, 0.75
68, 5, 0.78
69, 7, 0.77
70-1514, 4, 0.83
1515-1636, 4, 0.87.
1637-1697, 5, 0.92.
1698, 6, 0.94
2000, 6, 0.95

Anki 23.10.1rc4:
66-69, 0.77
70, 0.79
400, 0.82
450, 0.81
500, 0.77
600, 0.80
650, 0.81
700, 0.80
750, 0.77
775, 0.80
800, 0.81
900, 0.81
1000, 0.77
1514, 0.82
1636, 0.83
1700, 0.84
2000, 0.86

In release notes there is an info about FSRS change: “Minor improvements to the algorithm. While not essential, you may wish to re-optimize your FSRS parameters after updating.”
Is it safe to use this version alongside with Ankidroid alpha, that still uses 23.10.1 backend?

1 Like

The deck options Save dropdown now lets you optimize all presets at once.

Thanks for implementing it, I’ve been waiting for it. Manually going through all presets is quite tedious.

It’d be great if we could also calculate and set optimal retention for all presets – at least when the feature is not deemed experimental anymore.

Look at the above — which one would you set?

My topic about field collapsing was locked. Separate "Collapse by default" for only empty fields and mark the non-empty collapsed fields
I used to use “Multi-column note editor”, but now there is no comparable add-on, so each field is now taking up a row, and there is no way to see which of the collapsed fields are non-empty.

TBH, I don’t have the Math or programming skills to understand the issue, let make that judgment.

I would prefer whichever method saves the most time, and from Sherlock’s and dae’s preference I infer that it’s the Brent method.

Perhaps I would err on the safe side for important decks and on the risky side with less important ones. But I don’t think it makes sense to implement two concurrent methods.

The first column is the number of days, the last column is the “optimal retention”. The middle column is the number of iterations the Brent method did.
Note how the change in the number of iterations that happens at some numbers of days changes “optimal retention” by 4-5%. That also happened with the old method.
It would seem that according to the Brent method, I have to decide between 0.94, 0.92, 0.87 and 0.83 retention based on whether I assume I can still review those cards in 4y 8mo, 4y 6-8mo, 4y 2-6mo, or only less than that. If the more iterations, the more precise the result, then it should just use at least 6 iterations for that deck.
Also, if, like the older method, it is not even a real simulation with introduction of new cards spread along the whole time (not to mention considering the cards I already am reviewing), I can’t even think of what it should mean.


rtl - In the explanation of deck options

1 Like

While such features may come at one point, for now you’ll need to deal with some inconvenience when you step outside the standard workflow. One alternative you may wish to consider is resetting the suspended cards to new, or moving them to a different deck, so you don’t need to adjust your search.

They’re in the Timer section.

@L.M.Sherlock I noticed some weirdness when I was testing, too - maybe some issue with the implementation rather than the algorithm itself?

I believe so, yes.

I’m not sure it will leave experimental status in the near future. It doesn’t cope with decks that start non-empty, and it currently appears to be buggy. Even without the bugs, I would not recommend using its outputs directly. They may be useful to give you a general idea, however.

I’m not sure why that happened - topics shouldn’t be auto-locked in that category. I’ve re-opened it.

@abdo @hkr Bootstrap expects us to load a separate .css file in RTL mode. That’s rather cumbersome and may introduce other regressions, so a more targeted fix might be nice. The following works, but breaks LTR:

.modal-header .btn-close {
    padding: 1rem 1rem !important;
    margin: -1rem auto -1rem -1rem !important;

I tried the following, but it didn’t work. Any ideas?

:dir(rtl) .modal-header .btn-close {
    padding: 1rem 1rem !important;
    margin: -1rem auto -1rem -1rem !important;

It could be due to the randomness of simulation. Increasing the sample size could alleviate it.

Oh. I thought it was related to the Advance feature of FSRS Helper.

The following steps occur the following error on my environment.
(This error wasn’t produced on Anki 23.10.1.)

  1. Open Anki
  2. “Browse”


DbError { info: "SqlInputError { error: Error { code: Unknown, extended_code: 1 }, msg: \"no such column: c.type\", sql: \"\\nINSERT INTO sort_order (nid)\\nSELECT nid\\nFROM cards\\nWHERE (\\n    odid = 0\\n    AND type != 0\\n    AND queue > 0\\n  )\\nGROUP BY nid ORDER BY MIN(CASE WHEN due > 1000000000 OR c.type = 0 THEN due ELSE (due - 3900) * 86400 + 1701329969 END);\", offset: 169 }", kind: Other }

After closing the error dialog box, the following blank browser screen is shown.

Debug info:

Anki 23.12 (4109d1e8)  
Python 3.9.15 Qt 6.6.0 PyQt 6.6.0
Platform: Windows-10-10.0.19045

What I have done:

  • Restart Anki
  • Restart Windows
  • Disable all the addons
  • “Check database”
  • Another profile (The error isn’t reproduced here)
  • Downgrade to 23.10.1 (The error isn’t reproduced here)