#5609·anki

Improve FSRS simulator with deck-scoped searches and clearer workload inspection

Author: einewxeromCreated Sep 15, 2026Updated Sep 15, 2026

Problem

Anki's current FSRS simulator is powerful, but it is difficult to answer some practical questions from the UI:

  • What happens if I simulate only one deck instead of every deck using the preset?
  • Which cards are actually included in the simulator's search?
  • How many cards are new/learning/review in the simulated scope?
  • How do two or more simulations compare in terms of new cards, reviews, and total daily workload?
  • Can I inspect the exact values for a simulated day and export the results?

The backend already accepts a search in SimulateFsrsReviewRequest, but Deck Options currently initializes that search to the current preset and the simulator UI does not expose scope selection directly.

There was an earlier discussion in #2661 about the simulator search counting all cards using a preset versus limiting it to the current deck. That issue was completed for a different purpose, but it suggests deck scope has been considered before.

Proof of concept

I built an add-on prototype, FSRS Simulator Inspector, that uses Anki's native FSRS simulation backend and adds:

  • editable simulator search
  • quick scope choices for current preset / current deck / current deck + subdecks
  • card-pool counts for the selected scope
  • separate New / Reviews / Total workload series
  • multiple overlaid simulation runs
  • per-day hover values
  • simulation history summary
  • CSV export
  • a deck-screen launcher for running the simulator in the current deck context

The add-on does not implement a separate scheduling algorithm; it delegates simulation to Anki's existing native FSRS backend.

Proposed upstream direction

Rather than importing the add-on's PyQt dialog into core, I propose porting the useful parts into the existing Svelte FSRS simulator UI.

First PR: simulator scope + transparency

Keep the existing SimulatorModal.svelte and backend, and add:

  1. Editable simulator search field.
  2. Quick scope actions:
    • Current preset
    • Current deck only
    • Current deck + subdecks
  3. Visible summary of the selected card pool.
  4. Explicit New / Reviews / Total workload series.
  5. Preserve existing simulation settings and Save to Preset behavior.

This can reuse the existing SimulateFsrsReviewRequest.search field, so deck-scoped simulation should not require a new simulation algorithm.

Follow-up PRs (only if maintainers want them)

  • simulation history table / comparison UX
  • CSV export
  • launch simulator from the deck overview screen

I would keep these separate so each PR stays focused and reviewable.

Motivation

Preset-wide simulation can be misleading when a preset is shared across several subjects or when a user is deciding how many new cards to study in one specific deck. Exposing the simulator's existing search scope makes the result easier to understand without changing FSRS itself.

Questions for maintainers

  1. Would deck-specific / editable simulator scope be acceptable in core?
  2. Should the simulator search default remain the current preset search?
  3. Would maintainers prefer the card-count summary to reuse existing card-search APIs, or should it be omitted from the first PR?
  4. Is the deck overview launcher desirable, or should simulation remain inside Deck Options only?