Anki 23.10 Beta 1-4

Seems like Ankihub has been programmed with the wrong assumption that Anki’s versioning scheme will always be SemVer with three parts and two dots, i.e <major>.<minor>.<patch>. This is no bug in Anki but an oversight of the addon developers (see Falsehoods progammers believe about versions). It’s an easy fix, you should contact them regarding this issue. Just be nice to them as well, Anki 23.10 is in beta and you cannot demand addon developers to have their addons ready for a beta release, though now is a perfect opportunity for them to fix that before the stable release.


This was reported to them here: [Anki 23.10 Beta 1] ANKI_MINOR = int(ANKI_VERSION.split(“.”)[-1]) - 🐛 Bug - AnkiHub Community


Here are some issues/suggestions related to Beta 2:

  • In the following warning, mention that you can use the FSRS4Anki Helper add-on if you are doing some of your reviews on an older client.
    “Please ensure all of your Anki clients are Anki(Mobile) 23.10+ or AnkiDroid 2.17+. FSRS will not work correctly if one of your clients is older.”

  • The model weights box should be pre-filled with the default weights. Another approach can be that if the box is empty when the alert says “Not enough reviews”, the default weights should be filled. The default weights can be found here.

  • Show a popup when the user sets desired retention beyond the permissible range. “The permissible range for desired retention is 0.80 to 0.97.” Currently, the value changes without any feedback. This seems to be a poor UX.

  • The compute weights option doesn’t show progress.

  • Add “(experimental)” to the title of Compute optimal retention section.

  • As someone else suggested above, the popup in the compute optimal retention option should have a set/accept button to enter the calculated optimal retention into the desired retention box.

  • Below the compute button for calculating optimal retention, change “XX.XX%” to “XX.XX% complete.” Without the word “complete”, it can be misleading.

Edit: I have strikethrough the points that have been already addressed.


My add-on encountered a runtime error because of this as well. I have already dealt with it palliatively. Others will possibly error out as well

Strange values when compare with hugginface optimizer:

Same collection, have this on hugginface:

0.9125, 2.6423, 13.0192, 37.6986, 4.8109, 0.8471, 0.871, 0.1224, 1.6091, 0.1, 1.0587, 2.1375, 0.0945, 0.2959, 1.2633, 0.351, 2.61

But on Anki Optimizer got this values:

0.4539, 2.4708, 4.4940, 10.1726, 4.6113, 1.0770, 0.7907, 0.0065, 1.8461, 0.1000, 1.2860, 2.1311, 0.0960, 0.2613, 1.3191, 0.2322, 2.7905

@L.M.Sherlock can you check ?

Sherlock already noticed that the Rust version doesn’t have some lines of code related to removing outliers, so I believe this will be fixed in the next beta release.

This means at this time the huggingface version is more accurate ?

Ok I just looked into the fsrs-rs crate and yep the 1/10 steps in the progress are intended. Is the progress precision something I could do a PR? I’m not super familiar with the Anki, rust and ts/svelte but this is a small enough change that I feel confident I could fix myself (would be my first Anki contribution). Just worried that maybe it’s easier for Daniel to make such a one-liner fix himself as part of many other hotfixes, rather than going through a PR overhead.

Edit: Just opened More sensible lower FSRS progress indicator precision by meliache · Pull Request #2684 · ankitects/anki · GitHub, feel a bit bad adding myself as contributor for something this minor so I guess I might need to contribute more to earn it, but would be happy to for one of my favourite pieces of software.

For me not only weights are different, but the suggested retention is way off.
From built-in optimizer:
optimal weights: 0.1470, 2.1895, 17.3448, 99.9993, 5.2425, 1.0745, 0.9880, 0.0020, 1.4400, 0.1060, 0.8645, 2.2417, 0.0129, 0.2055, 1.4329, 0.2102, 3.6234
optimal retention: 0.81

optimal weights: 0.2161, 5.8335, 17.2775, 66.0253, 3.2419, 2.6328, 1.5366, 0.0, 1.5298, 0.1, 0.9383, 2.1657, 0.0225, 0.2071, 1.3273, 0.203, 6.1733
optimal retention: 0.85

Here is a deck I used: jezyki_obce.apkg - Google Drive

I have tracked it in:


Yeah I realized after playing with the python optimizer that what I thought was happening wasn’t what was happening anyway. I’m not sure what is causing the difference in result, then, I suppose it might just be that the implementations between the two are different? I assume Anki uses the rust optimizer, and not the python optimizer?

The log loss and RMSE is slightly better for the parameters I get from the Python optimizer, so while I don’t think it is taking account of deleted cards, it does seem to be taking account of something that the other isn’t, maybe.

Edit: Ah, I see this is already being addressed. I didn’t read down the thread.

Please add a button to reschedule all cards

Personally I’m fine with this being left to addons for now. But, if we add this to Anki, wouldn’t it be nice to have this also in the browser next to set due date, something like reschedule according to scheduler? Or maybe just an additional option within set due date.

1 Like

What is the minimum number of reviews for the weights to be calculated

What is the minimum number of reviews for the weights to be calculated

You must have at least 1000 reviews to generate custom weights.

1 Like

I am using different preset for parent deck and different for subdecks.
Cards are directly in the subdecks. Parent deck doesn’t have any it’s own cards - it’s serving only a grouping function to study multiple decks at once.
Let’s say, that I put different FSRS weights for each preset.
While I am studying parent deck which weights and requested retention will be used? From parent deck or from subdeck?

1 Like

A Feature Request . The parameters box by default instead of being blank to be filled with the default parametars provided by FSRS4ANKI . That way it would be easier for people just starting with anki to use fsrs and when they accumulate 1000 reviews they can click the button to optimize parameters.

1 Like

The default parameters are used when the field is empty. At least I base this on the fact that when leaving the field empty I can still click Analyze to compute the RMSE and logloss figures-of-merit and they are the same as when entering the default parameters manually.

But that’s not obvious and it’s not shown what the default parameters are, so it’s e.g. not obvious to the user how much the custom training changed the defaults. Maybe add the default parameters as light grey placeholder-text into the field? And that should also be explained in a tooltip which we will hopefully get before stable release.

I checked the code, didn’t find the default values in the Anki repo but seems that they are set in the fsrs-rs rust crate that Anki uses. Editing the settings menu is easy for me but I have no idea how to expose the fsrs-rs defaults to typescript.


As someone else suggested above, the popup in the compute optimal retention option should have a set/accept button to enter the calculated optimal retention into the desired retention box.

I suggested this, but I also really don’t like popups (might be because I’m using a tiling WM). Yesterday I took some time trying to implement my idea how a solution might look like and opened the draft pull-request Button to set desired FSRS retention to optimal/calculated by meliache · Pull Request #2685 · ankitects/anki · GitHub. This is how it looks like with this PR:

Before computation After computation After clicking once
image image image

@dae was very nice to fix some issues that I could not, but also expressed some concerns

I do worry that users are going to shoot themselves in the foot by blindly selecting the suggested retention without understanding the implications.

I didn’t therefore I would be happy about feedback in the PR discussion, which approach you think would offer the better user experience. Do others agree on my dislike of popups? Should the result be copy-able text-field instead of a button to avoid blindly clicking it?

1 Like

I like the idea of a button much more, than pop-up.
If a optimal retention is limited to 0.80-0.97 range I don’t think people will “shoot themselves in the foot”.
The only feature may be, to fill in the “Deck size” with the number of cards currently using the preset instead of hardcoded 10’000.

Good morning, is there already a detailed tutorial explaining what each feature is for?
I have some questions:

What is the difference between “Compute” and “Analyse”?
What is the difference between “Compute optimal weights” and “Compute optimal retention”?
I don’t understand what this text field above the buttons is for.

1 Like