Fractional New-Card Scheduler
Explore all Ritornello decks and add-ons.

Fractional New-Card Scheduler is an Anki add-on for decks that should introduce
new cards more slowly than Anki's normal whole-number daily limits allow.
Instead of choosing between 0/day and 1/day, you can schedule patterns such
as 1 every 3 days, set different limits by weekday, and spread related decks
across a steady rotation. The add-on applies those plans through Anki's
Today-only new-card limits, so changes are temporary and reset with Anki's next
day.
It also includes deck health badges for decks that are blocked by 0/day limits
or have no unsuspended new cards available.

Browse the full media gallery.
Install
Requires Anki 2.1.55 or newer.
From AnkiWeb
- In Anki, open
Tools -> Add-ons -> Get Add-ons....
- Enter add-on code
304166926.
- Restart Anki.
- Use
Tools -> Fractional Scheduler: Open Config to edit config.
AnkiWeb page: https://ankiweb.net/shared/info/304166926
From a GitHub release
Download the .ankiaddon from the latest tagged release, then use Tools → Add-ons → Install from file…. File installs do not receive AnkiWeb automatic updates.
From Source
- Copy the
addon folder into your Anki add-ons directory as its own folder,
such as FractionalScheduler.
- Restart Anki.
- Use
Tools -> Fractional Scheduler: Open Config to edit config.
- Configure both scheduling and deck health badges from that dialog.
Features
- Each schedule can enable fractional limits, notify badges, both, or neither.
- Every-N-days schedules such as 1 card every 3 days.
- Three fractional strategies:
balance_first, fraction_first, and hash.
- Day-of-week schedules with separate values for Mon-Sun.
- Ordered deck rules per schedule using exact names or shell-style wildcards. Prefix a rule with
! to exclude matching decks; a later matching rule includes them again.
- The picker supports selecting several decks at once.
Pick deck... adds exact rules, while Add wildcard... and Exclude wildcard... add include/exclude subtree rules for every selected deck.
- Exact rules and simple subtree rules such as
Deck::* or !Deck::* follow their root deck when it is renamed, including parent-deck renames. General patterns such as *Chemistry* retain their text pattern.
- Optional stable staggering for
fraction_first and day-of-week schedules.
- Leaf-only matching so container decks do not receive fractional limits.
- Per-schedule notify descendant modes: direct only, any blocked descendant, all blocked descendants, or hide container badges.
- Filtered decks are skipped.
- Automatic apply on profile open, collection open, and optionally just before sync, with an at-most-once-per-day guard.
- Preview table for the next 14 days, including daily totals, persistent column widths, and grouping by identical schedules.
Rebalance Offsets recomputes stable stagger assignments for the currently matched decks in a schedule.
- Read-only API for other add-ons via
mw.fractional_scheduler_api.
See Scheduling Strategies for the tradeoffs
between the fractional strategies.
Usage Notes
- The config dialog autosaves; there is no separate Save button.
- Deck rules run from top to bottom, and the last matching rule wins. For example, use
Geography*, !GeoTrainer*, GeoTrainer::A*, and GeoTrainer::B::C to include Geography, exclude GeoTrainer, then add those two GeoTrainer branches back.
Apply Now writes Today-only limits immediately for the matched decks.
Before sync applies limits before collection sync when the installed Anki
version exposes the pre-sync hook.
Rebalance Offsets updates stored stagger assignments and preview data; deck
limits change on the next apply.
- If you use a non-midnight Anki day rollover, the epoch calculation respects
the rollover hour.
addon/meta.json is local Anki state and is intentionally not tracked in git.
Public API
The add-on registers a read-only service on mw:
snapshot = mw.fractional_scheduler_api.get_schedule_health_snapshot(col)
It returns a dictionary keyed by deck id. Each value reports:
deck_id
deck_name
schedule_id
cycle_length_days
has_future_positive_limit
next_positive_day_offset
The service only includes matched, non-dynamic decks that survive leaf_only
filtering. A deck is considered to have a future positive limit if, within one
full schedule cycle, at least one day yields > 0 new cards.
Config Example
{
"epoch": "2026-01-01",
"schedules": [
{
"id": "bio-slow",
"type": "every_n_days",
"m": 1,
"n": 3,
"fractional_strategy": "balance_first",
"targets": ["Biology::*"],
"fractional_enabled": true,
"notify_enabled": true,
"notify_descendant_mode": "direct_only",
"leaf_only": true,
"stagger": {"mode": "stable"}
},
{
"id": "chemistry-notify",
"type": "every_n_days",
"m": 1,
"n": 1,
"targets": ["*Chemistry*"],
"fractional_enabled": false,
"notify_enabled": true,
"notify_descendant_mode": "all_included_descendants_blocked",
"leaf_only": true
}
],
"defaults": {
"apply_on_profile_open": true,
"apply_on_collection_open": true,
"apply_on_sync": false,
"apply_once_per_day": true,
"dry_run": false,
"log_level": "info"
}
}
Debug Logging
- Debug logging is off by default and no queue/history diagnostics are shown in the UI.
- To enable temporary scheduler diagnostics before Anki loads the add-on, start Anki with the environment variable
FRACTIONAL_SCHEDULER_DEBUG=1.
- When enabled, the add-on appends JSON lines to
fractional-scheduler-debug.log in the platform temporary directory.
- The log may include deck names, schedule ids, queue order, and introduction-history details, so treat it as potentially sensitive and delete it when you are done.
- When debug logging is not enabled, the add-on removes any old temporary debug log on profile/collection open.
GUI Smoke Test
The repository has an anki-addon-workbench config and probe add-on for a disposable Anki GUI smoke test. With anki-workbench installed, run:
anki-workbench smoke --xvfb
The probe verifies that the add-on module loads and that
Fractional Scheduler: Open Config appears in Anki's Tools menu.
Release
Release packaging uses the sibling anki-addon-release project.
make release
That target validates the manifest/listing metadata, builds
dist/fractional-new-card-scheduler.ankiaddon, inspects the archive contents,
and runs an AnkiWeb dry run. Use make release-handoff to write handoff files
for a browser/manual upload, or make release-login and make release-publish
when publishing through the release browser profile with credentials from a
git-ignored .env file.
License
MIT. See LICENSE.
Support continued development: ritornello.dev/support.