Custom scheduling (v3): add deck related info

caveat: Hopefully I didn’t miss something that’s already built in. If so please point me into the right direction.

I think it would be useful to have some numbers controlled by the current deck like the easy bonus, interval modifier, hard interval, maximum interval available in the v3 scheduler. This would make the custom scheduling much more flexible, more useful and easier to understand.

Motivation: In my family the randomization of intervals is not popular. If I had the deck info I could build a custom scheduler without fuzzed intervals that works on the desktop and the ipad and that respects different deck settings.

Thanks.

Maybe I’m still missing missing something. But the {{Deck}} field only seems to help indirectly. I didn’t think of this. Indeed I could write all deck settings into a json file and load it into all card templates and then use a special field like {{Deck}} to access the right setting. So technically my problem is solved. Or is there something easier?

Though I still think that it might be useful and make the custom scheduling more intuitive if deck settings like the interval modifier were directly available with a variable provided by anki.

E.g. if you don’t like the overdue handling for the good button where only half of the overdue interval is taken into account (in the python scheduler you had code like (card.ivl + delay // 2) * fct). So at the moment I can write code like this to take into account the full actual interval:

let easeFactor = states.current.normal.review.easeFactor;
let elapsed = states.current.normal.review.elapsedDays;
states.good.normal.review.scheduledDays = elapsed * easeFactor;

But then neither the interval modifier nor the maximum interval is applied.

It would be nice to have a variable like DECK_SETTING_INTERVAL_MODIFIER provided by Anki so that you could write code like

let easeFactor = states.current.normal.review.easeFactor;
let elapsed = states.current.normal.review.elapsedDays;
let prelim_ivl = elapsed * easeFactor * DECK_SETTING_INTERVAL_MODIFIER;
let ivl = Math.min(prelim_ivl, DECK_SETTING_MAXIMUM_INTERVAL);
states.good.normal.review.scheduledDays = ivl;

So it’s still the same custom scheduling code that’s applied to all decks.

(please ignore errors in my example. I only added to make my idea more clear)

You can refer to my custom scheduling code at

Thanks.

My suggestion is that if anki provided these settings with built-in variables anki would be less confusing, especially if some v3 js becomes popular and gets shared so that people just copy and paste it, forget it, and some time later change they change and rely on deck settings that won’t get applied.

If all scheduling related stuff is available directly maybe some modification becomes popular that can’t be foreseen right now.

I only asked because I thought that this should only require a modest change in the anki code that shouldn’t slow it down.

2 Likes

It’s an escape hatch for advanced users, and I don’t want to encourage people to be copying and pasting code there that they don’t understand. The deck options are a more friendly interface for users who don’t necessarily understand how the algorithm works, but if you’re reimplementing parts of the algorithm yourself, you can just store any variables in the code instead.

I don’t remember where I heard this, but it was my understanding that the custom scheduling was going to replace addons eventually. Is it just supposed to be supplementary and addons aren’t eventually being deprecated?

Custom scheduling provides a way to adjust some aspects of the scheduler. It doesn’t enable all the things add-ons could (relatively easily) do with v2; for those cases you’re better off sticking with v2 if you can’t live without the add-on.