Spaced repetition scheduler

Replay a card review log with SM-2 or FSRS and see when every card is due, what its interval is, and which cards have become leeches.

Try:
Schedule

About this tool

Paste a flashcard review log and this tool replays each card's history to compute the next review date. It is designed for quick schedule audits: no account, no deck database, and no hidden state. Each run is deterministic, so the same rows and options produce the same due dates.

Use one row per review with a card name, a date, and a grade:

card, date, grade
capital-of-peru, 2026-08-01, good
capital-of-peru, 2026-08-02, good
capital-of-peru, 2026-08-08, good
kanji-water, 2026-08-01, again
kanji-water, 2026-08-02, hard

Rows may be comma, tab, semicolon, pipe, or whitespace separated. Grades can be words (again, hard, good, easy), four-button numbers (14), or SuperMemo quality scores (05). A line containing only a card name declares an unreviewed card so it appears as new and due.

Worked example

With SM-2 defaults and today = 2026-08-24, this input:

card, date, grade
capital-of-peru, 2026-08-01, good
capital-of-peru, 2026-08-02, good
capital-of-peru, 2026-08-08, good
kanji-water, 2026-08-01, again
kanji-water, 2026-08-02, good
new-card-never-seen

produces a schedule table with each card's next due date, interval, days until due, repetition count, lapse count, and status. Use output = csv for spreadsheets, output = json for scripts, output = explain to see every state transition, or output = forecast to project the next reviews assuming the selected forecast grade.

Limits and edge cases

FAQ

Which algorithm should I choose?

Choose sm2 when you want the classic repetition/ease/interval model used by many simple flashcard schedulers. Choose fsrs when you want difficulty, stability, retrievability, and desired-retention controls. FSRS output is useful for comparing how the same history would schedule under a memory-model approach.

Can this import a full flashcard collection?

It imports a review log, not card fronts, answers, tags, or media. Export the columns you need as text or CSV: card identifier, review date, and grade. Optional state fields such as ease=, interval=, reps=, lapses=, difficulty=, stability=, and last= can be added to seed existing scheduler state.

Why do my dates differ from a flashcard app?

Apps often add interval fuzz, daily load balancing, buried siblings, deck limits, timezone rules, and version-specific scheduler tweaks. This tool intentionally computes a deterministic per-card schedule from the pasted history and parameters. Use the output as an auditable calculation, not as a full deck-sync replacement.

Does the tool train FSRS weights?

No. Training FSRS weights requires optimisation over a large history and is out of scope for a synchronous browser-local calculator. Paste a 21-number vector if you already have one; otherwise the built-in defaults are used.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool spaced-repetition-scheduler "capital-of-peru, 2026-08-01, good
capital-of-peru, 2026-08-02, good
kanji-water, 2026-08-02, again"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/spaced-repetition-scheduler/?reviews=capital-of-peru%2C%202026-08-01%2C%20good%0Acapital-of-peru%2C%202026-08-02%2C%20good%0Akanji-water%2C%202026-08-02%2C%20again&algorithm=sm2&grade_scale=auto&today=2026-08-24%20%28blank%20%3D%20last%20review%20in%20the%20log%29&output=table&sort=due&only_due=true&desired_retention=0.9&ease_start=2.5&min_ease=1.3&first_interval=1&second_interval=6&easy_bonus=1.3&hard_multiplier=1.2&interval_modifier=1.0&max_interval=36500&forecast_reviews=6&forecast_grade=good&fsrs_weights=0.2172%2C%201.1771%2C%203.2602%2C%20%E2%80%A6%20%2821%20numbers%2C%20blank%20%3D%20built-in%29

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.