Anki 25.05 Beta

Hi all,

A new beta is now available, with the headline feature being a new FSRS version. Please give it a try and let us known how you go. It contains the security fixes that were recently released in 25.02.x as well.

If you’re an FSRS user, after updating, optimizing your presets is recommended. The FSRS param count differs from previous releases, and the mobile clients will continue to use the old parameters until the mobile clients get an update, so you may see the same card be given different delays depending on the platform you review on.

11 Likes


I feel like this is kinda janky, especially the fact that I can still scroll, but scrolling only affects what’s in the background, behind this window…which isn’t really a window, actually.
@A_Blokee perhaps making a proper separate window for the simulator is better

I get an error when clicking Simulate.

Anki 25.05 (0aaa6383)  (ao)
Python 3.9.18 Qt 6.6.2 PyQt 6.6.1
Platform: Windows-10-10.0.26100

Traceback (most recent call last):
  File "aqt.taskman", line 148, in _on_closures_pending
  File "aqt.taskman", line 88, in <lambda>
  File "aqt.operations", line 259, in wrapped_done
  File "concurrent.futures._base", line 439, in result
  File "concurrent.futures._base", line 391, in __get_result
  File "concurrent.futures.thread", line 58, in run
  File "aqt.operations", line 243, in wrapped_op
  File "aqt.deckbrowser", line 163, in get_data
  File "anki.scheduler.base", line 78, in deck_due_tree
  File "anki._backend_generated", line 376, in deck_tree
  File "anki._backend", line 161, in _run_command
pyo3_runtime.PanicException: called `Result::unwrap()` on an `Err` value: PoisonError { .. }

My FSRS 5 parameters produce Log loss: 0.2463, RMSE(bins): 1.59%.
If I clear the parameters field, optimize and then evaluate, I get Log loss: 0.2453, RMSE(bins): 1.71%.

I am really not sure which among FSRS 5 and FSRS 6 is better.

Another observation:
If I manually change the last parameter (w20) from 0.23 to 0.5, then RMSE improves.
Log loss: 0.2453, RMSE(bins): 1.69%.
So, FSRS 6 may perform better for my deck if the initial value of decay was closer to 0.5?

I can try and fix the scrolling issue.

2 Likes

I think simulator should have its own pop-up window, like Stats.

2 Likes

@L.M.Sherlock

Bug: even with S0 set to minimum possible values and DR=99%, the shortest interval that I get is 50 minutes


image

On another preset I can’t get <1d intervals at all
Just a speculation, but I think these are two separate bugs: some kind of parent deck->subdeck interaction went wrong and the calculation of intervals also went wrong

1 Like

fixed in

3 Likes

Request: Pressing Escape while the new FSRS Simulator pane is displayed should close the simulator, rather than closing the entire Options window.

2 Likes

Does this also mean the difficulty (D) will be different depending on which client performs a review? I’m a little worried that doing reviews of the same cards with both FSRS-6 and earlier versions will lead to inconsistent results, for example if a client using old FSRS-5 params reads a D value that was set using new FSRS-6 params.

Yes. Difficulty, stability and retrievability will be different

1 Like


Bug: moving cards between decks causes the review entries in Card Info to reverse. Specific to 25.05, can’t reproduce it on 25.02.4.

EDIT: apparently Luc already identified what causes it.

3 Likes

I’m not sure if this is a bug, but I would like the field names themselves to be exported as well, not just _1, _2, etc., when exporting a deck in the “Notes in Plain Text (.txt)” format.


When importing into Excel.
image

1 Like

Running Anki from terminal produces the following output on clicking Simulate. Seems to be an issue in FSRS-rs @L.M.Sherlock @A_Blokee

thread '<unnamed>' panicked at C:\Users\dae\.cargo\git\checkouts\fsrs-rs-42b9aeb7291fb120\c771768\src\optimal_retention.rs:235:18:
index out of bounds: the len is 19 but the index is 20
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
2025-04-26 21:05:45,503:ERROR:waitress: Exception when servicing <waitress.channel.HTTPChannel connected 127.0.0.1:13941 at 0x1c2d3902cd0>
Traceback (most recent call last):
  File "waitress.task", line 84, in handler_thread
  File "waitress.channel", line 430, in service
  File "waitress.task", line 168, in service
  File "waitress.task", line 436, in execute
  File "waitress.proxy_headers", line 64, in translate_proxy_headers
  File "flask.app", line 1498, in __call__
  File "flask.app", line 1473, in wsgi_app
  File "flask.app", line 880, in full_dispatch_request
  File "flask.app", line 865, in dispatch_request
  File "aqt.mediasrv", line 319, in handle_request
  File "aqt.mediasrv", line 741, in _handle_dynamic_request
  File "aqt.mediasrv", line 690, in wrapped
  File "aqt.mediasrv", line 671, in <lambda>
  File "anki._backend_generated", line 1106, in simulate_fsrs_review_raw
  File "anki._backend", line 161, in _run_command
pyo3_runtime.PanicException: index out of bounds: the len is 19 but the index is 20

thread '<unnamed>' panicked at rslib\src\backend\mod.rs:122:18:
called `Result::unwrap()` on an `Err` value: PoisonError { .. }
2025-04-26 21:07:18,977:ERROR:waitress: Exception when servicing <waitress.channel.HTTPChannel connected 127.0.0.1:13963 at 0x1c2d5d39400>
Traceback (most recent call last):
  File "waitress.task", line 84, in handler_thread
  File "waitress.channel", line 430, in service
  File "waitress.task", line 168, in service
  File "waitress.task", line 436, in execute
  File "waitress.proxy_headers", line 64, in translate_proxy_headers
  File "flask.app", line 1498, in __call__
  File "flask.app", line 1473, in wsgi_app
  File "flask.app", line 880, in full_dispatch_request
  File "flask.app", line 865, in dispatch_request
  File "aqt.mediasrv", line 319, in handle_request
  File "aqt.mediasrv", line 741, in _handle_dynamic_request
  File "aqt.mediasrv", line 690, in wrapped
  File "aqt.mediasrv", line 671, in <lambda>
  File "anki._backend_generated", line 1106, in simulate_fsrs_review_raw
  File "anki._backend", line 161, in _run_command
pyo3_runtime.PanicException: called `Result::unwrap()` on an `Err` value: PoisonError { .. }
2 Likes

Fix/Missing-simulator-decay-for-fsrs5 by Luc-Mcgrady · Pull Request #322 · open-spaced-repetition/fsrs-rs · GitHub Should be fixed here.

4 Likes

I’m sorry, I think the fix I’ve done may work but not be optimal. Could you post what parameters you were using when you got the error?

3.1596, 15.8164, 48.4383, 75.6924, 7.3861, 0.9642, 3.5537, 0.0010, 1.6586, 0.2855, 1.1704, 1.9675, 0.0280, 0.4180, 2.3210, 0.0119, 3.0956, 0.5971, 0.6925
1 Like

I can’t reproduce it. The fix should work anyway.

Try A.colpkg.mp4 (57 KB, please rename to remove .mp4, I can’t upload .colpkg files here)

After opening this, just enable FSRS and click Simulate to reproduce the error.

Some more Anki bugs I noticed while trying to generate this example:

  • If I delete a deck containing < in its name, the deck name in the tooltip is truncated.
  • If a PoisonError occurs, restarting Anki opens the default profile, not the profile in which the error occurred. This almost caused me to lose most of my cards because Anki tried to delete most of my cards from my main profile on restart after it crashed after I deleted the cards in a test profile and then tried to reproduce the Simulate error. Fortunately, I noticed it in time and used one-way sync from mobile to fix.
1 Like