Custom Answer Buttons for Anki

Add custom buttons to the Anki reviewer's bottom bar. Each button can reschedule a card using a flexible syntax covering fixed days, interval multipliers, random ranges, specific dates, and midpoint intervals, along with per-card dynamic sorting and visibility conditions.

Days Format Reference
The Days field controls how the card is rescheduled.
1. Variables, Numbers & Math Operators
Numbers & Operators
- Numbers: Plain integers or decimals (e.g.,
14, 1.5).
- Math Operators: Standard operators
+, -, *, /, ( ).
Native Button Variables
Use card interval variables directly (short one-character aliases accepted):
current β Current card interval
again or a β Native Again interval
hard or h β Native Hard interval
good or g β Native Good interval
easy or e β Native Easy interval
Target Date Variable
@YYYY-MM-DD β Calculates the exact number of days from today to the specified date (e.g., @2026-12-31).
Math Examples
14 β Exactly 14 days later
good * 1.5 β 1.5Γ the native Good interval
hard + 2 β 2 days more than native Hard interval
@2026-12-31 - 5 β 5 days before 31 Dec 2026
(good + hard) / 2 β Average of Good and Hard intervals
2. Special Combinations
You can combine any variables, numbers, or dates using Range (~) or Midpoint (:):
Random Range (X~Y)
Generates a random interval between X and Y (inclusive):
5~10 β Random integer between 5 and 10 days
hard~easy β Random interval between native Hard and Easy
good~15 β Random interval between native Good and 15 days
Midpoint (X:Y)
Calculates the exact midpoint (X + Y) / 2 between X and Y:
good:easy β Midpoint between Good and Easy intervals
10:20 β Midpoint between 10 and 20 days (15 days)
h:e β Midpoint using short aliases
@2026-12-31:good β Midpoint between target date and Good interval
3. Rounding & Minimum Day Rules
- Minimum Day Limit: Any calculated result
< 1 day (including 0, decimals between 0.0 and 1.0, or negative numbers) is automatically floored to 1 day (1d).
- Decimal Rounding: Any decimal value β₯ 1 is rounded (
round()) to the nearest whole day.
Button Settings

Basic Tab
- Button Label β Text shown on the button
- Days β Interval math expression (see above)
- Ease Bonus (%) β Modifies the card's internal Anki Ease Factor when a value is provided. You must input a percentage number (e.g.
15 for +15%, -15 for -15%)
- Shortcut β Keyboard shortcut, e.g.
5 or Ctrl+Shift+5
- Allow shortcuts in Question state β Trigger this button via keyboard before the answer is revealed. (Note: this applies to Native Buttons as well).
- Show tooltip β Brief on-screen confirmation after each button press. (Note: this applies to Native Buttons as well).
- Auto-hide when narrow β Hide this button when the window is too small. (Note: this applies to Native Buttons as well).
Appearance Tab
Button Colour
Click Pick Colour⦠to open a colour picker. The preview shows the hex code on a coloured background. Click Clear to restore the default Anki style.
Show button in card states
Three checkboxes: New / Learning / Review.
- Uncheck all three to completely hide the button.
- Partial selection shows the button only in selected states
Visibility Condition (optional)
Hide this button when its computed interval falls outside a range:
- Hide if interval < β Button disappears when days < X (Supports Math/Variables)
- Hide if interval > β Button disappears when days > X (Supports Math/Variables)
Leave blank for no restriction. Particularly useful for multiplier or midpoint buttons:
Example: A "current" * 1.5 button with "Hide if interval > 180" won't appear on cards already scheduled far in the future, where aggressive multiplication would be inappropriate.
Visibility is evaluated dynamically per card based on the button's computed interval.
β If you notice visual flickering or unexpected layout jumps, leave blank to turn it off.
Advanced Tab
Simulate Native Presses
Safely simulate a sequence of native button presses per card state to update the card's memory state and review history (revlog) before setting the due date. Separate fields for New, Learning, and Review states (defaults to good for New and Learning). (Note: this does not apply to Native Buttons).
Syntax: Separate keys by +
- e.g.,
good+good
- e.g.,
easy+good
Variables:
Note: Short aliases like a, h, g, and e are also accepted. Leave empty to skip simulation for this state.
Global Settings
Opened via the Global Settings button in the main config dialog.
- Take over native buttons β Replaces Anki's native Again/Hard/Good/Easy buttons with customisable versions that match this addon's styling and layout. Note: The native core logic remains intact; only the visual buttons are taken over.
Button Order
Auto (sort by interval)
Buttons are sorted by computed interval length each time a card is shown. For multiplier and midpoint buttons whose interval changes per card.
β If you notice visual flickering or unexpected layout jumps, switch to Custom mode.
Custom (configured order)
Buttons appear in the order defined in the main list. Use the ββ buttons to reorder manually.
Filtered Deck / Custom Study Support
Custom buttons natively support filtered decks. Because filtered decks have different rules (some reschedule cards, some don't), you can control how custom buttons behave inside them via the Global Settings dialog.
- Apply date only if 'Reschedule' is enabled β (Default) Smart mode. Custom buttons always appear. If the filtered deck has "Reschedule cards based on my answers" checked, they apply your target interval. If unchecked (e.g. for cramming), pressing them acts like a native Good button and safely returns the card to its home deck without altering its interval.
- Always show and forcefully reschedule β Custom buttons always appear. Pressing them forcefully applies the target interval, overriding the filtered deck's "Reschedule" setting.
- Hide custom buttons entirely β Custom buttons will never appear in any filtered deck.
Technical note: When applying a custom date in a filtered deck, the addon answers with Good first to let Anki safely handle the deck-transition (return to home deck) before applying our specific due date.
Notes on FSRS
This addon perfectly changes the exact due date of a card. However, it cannot directly modify FSRS Stability (S) and Difficulty (D).
Because Anki does not provide a native API to manually overwrite a card's S and D variables like it does for due dates, we are left with a limitation: your card's date is moved, but its underlying FSRS memory state doesn't fully reflect that massive jump.
While you can use the "Simulate Native Presses" feature in the Advanced tab to make the addon simulate clicking native buttons before setting the date (which updates S and D a little bit and logs the review), simulating a bunch of button presses at once still doesn't dramatically or predictably change S and D to perfectly match your custom interval.
Recommendation:
- If you strictly use FSRS and care deeply about precise memory state tracking, it is highly recommended to stick to Anki's native buttons.
- Alternatively, you can roll back to the SM-2 algorithm, which relies on a simpler Ease factor that works much more predictably with custom rescheduling.
Compatibility with Other Button Addons
To put it simply, this addon is not compatible with other addons that modify or interact with the answer buttons.
Most other button-related addons work by intercepting and modifying Anki's built-in native buttons. However, this addon creates and injects completely new custom buttons into the interface. Because our buttons are separate entities, they fall entirely outside the scope of what those other addons modify or listen to. There is no workaround for this limitation.
Changelog
v2.4 (2026-08)
- Flicker-Free Layout Engine: Zero-delay rendering for dynamic visibility conditions (hide if < min / > max days). Buttons are filtered synchronously during the initial layout pass, completely eliminating UI flickering.
- Kernel-Level Interval Parsing: Accurate sorting of
New/Learning/Review state cards by interacting directly with Anki's Rust backend Protobuf definitions.
- Native Button Tooltips: Optional tooltips can now be toggled for taken-over native buttons, seamlessly matching Anki's native translation strings.
v2.3 (2026-08)
- Simulate Native Presses: Per-card-state sequence customization for New, Learning, and Review states (defaults to
good for New and Learning).
- Revlog Sync: Every simulated press in a sequence is recorded as a real review history entry (
revlog) and committed to the database, ensuring complete FSRS/SM-2 state tracking and card info logging.
- Unified Undo: All sequence presses, log entries, and rescheduling operations are merged into a single
Ctrl+Z undo step.
- Ease Bonus Refinement: Intelligently handles New cards (defaulting base ease to 250%) and supports percentage adjustments.
v2.2 (2026-08)
- Math Engine: The
Days field now supports standard math expressions (+, -, *, /, ( )).
- Ease Bonus Field: Decoupled ease factor adjustments into a dedicated percentage UI field that modifies the card's internal Ease when a value is provided.
v2.1 (2026-08)
- Native Button Takeover: new Global Setting to incorporate Anki's native Again/Hard/Good/Easy buttons into your custom layout. They retain their native logic but can be restyled and reordered among your custom buttons!
- Visibility condition (Appearance tab): hide a button when its interval falls outside a
[min, max] range β evaluated per card, live
- Dynamic layout (Layout Settings): auto-sort re-orders buttons by computed interval on each card flip, including variable-interval buttons
- Colour picker:
QColorDialog replaces raw text input; preview swatch updates live
- Card states in Appearance tab: three checkboxes (New/Learning/Review), all on by default; uncheck all = hidden
- Table simplified to 4 columns: Label Β· Days Β· Shortcut Β· Colour (states/grade mode/auto-hide removed from list view)
- Filtered deck fix: custom buttons now correctly reschedule cards inside custom-study decks
v2.0 (2026-08)
- Random range (
5~10), specific date (@YYYY-MM-DD), midpoint (X:Y)
- Multiplier bases: Hard / Good / Easy interval (
*1.3g, x2h, Γ1.5e)
- Per-button CSS colour, state-dependent visibility, sort by length, ββ reorder, three-tab editor
v1.5 (2026-07)
- Multiplier Support: Multiply the card's current interval (e.g.
*1.5, x2) instead of using fixed days. Automatically respects deck options (Interval Modifier and Maximum Interval).
- Ease Bonus: Adjust the card's internal Ease factor via parentheses in the Days field (e.g.
14(+15%), *1.5(-10%)).
v1.0 (2026-01)
Download & Installation
Option 1: Install via AnkiWeb
You can install this addon directly from within Anki using its addon code:
452291788
View on AnkiWeb
Option 2: Manual Installation via GitHub
- Go to the Releases page.
- Download the latest
.ankiaddon file.
- Double-click the file to install it into Anki.
Contact & Open Source
This project is fully open-source. You can view the source code, report bugs, or contribute on GitHub:
Author
If you encounter any bugs, have feature requests, or need help configuring the addon, feel free to reach out via GitHub Issues or email!