{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Collection", "description": "An entire Anki collection.", "type": "object", "additionalProperties": false, "definitions": { "reviewConfiguration": { "type": "object", "additionalProperties": false, "required": [ "easinessPerEasyReview", "fuzz", "intervalFactor", "maxIntervalDays", "perDay" ], "properties": { "easinessPerEasyReview": { "type": "number", "description": "An extra multiplier applied to a card's Ease when you rate it Easy" }, "fuzz": { "type": "number", "description": "Fudge factor to prevent cards which were created and reviewed together from all appearing together. Semantics unknown; observed to be 0.05 in the wild" }, "intervalFactor": { "type": "integer", "description": "Multiplication factor applied to the intervals Anki generates; unknown semantics, observed to be 1 in the wild" }, "maxIntervalDays": { "type": "integer", "description": "Maximum number of days that can pass between reviews", "minimum": 0 }, "perDay": { "type": "integer", "description": "Number of cards to review per day", "minimum": 0 } } }, "lapse": { "type": "object", "additionalProperties": false, "required": [ "delays", "leechAction", "leechFails", "minInterval", "multiplier" ], "properties": { "delays": { "type": "array", "description": "Successive delays in days between the learning steps of the cards", "items": { "type": "integer", "minimum": 0 } }, "leechAction": { "enum": [ "suspend", "mark" ], "description": "What to do when a card in this deck becomes a leech" }, "leechFails": { "type": "integer", "description": "Number of times a review of a card must fail before the card is marked as a leech", "minimum": 0 }, "minInterval": { "type": "integer", "description": "Lower limit of the new interval after a card is marked leech, in days", "minimum": 1 }, "multiplier": { "type": "number", "description": "The multiplier applied to a review interval when answering Again.", "minimum": 0 } } }, "newCardConfiguration": { "type": "object", "additionalProperties": false, "required": [ "delays", "initialEase", "intervals", "order", "maxNewPerDay" ], "properties": { "delays": { "type": "array", "description": "The list of successive delays between learning steps of new cards, in minutes", "items": { "type": "integer", "minimum": 0 } }, "initialEase": { "type": "integer", "description": "100x the multiplier for how much the Good button will delay the next review, so 2500 delays the next review 2.5x on a Good review", "minimum": 0 }, "intervals": { "type": "object", "description": "List of delays when leaving learning mode after pressing the various buttons", "additionalProperties": false, "required": [ "good", "easy", "unused" ], "properties": { "good": { "type": "integer", "description": "The delay in days after pressing the Good button", "minimum": 0 }, "easy": { "type": "integer", "description": "The delay in days after pressing the Easy button", "minimum": 0 }, "unused": { "type": "integer", "description": "An unused delay, probably set this to 7", "minimum": 0 } } }, "order": { "enum": [ "random", "due" ], "description": "How to display new cards - by order of due date, or at random" }, "maxNewPerDay": { "description": "How many new cards can be shown per day", "type": "integer", "minimum": 0 } } }, "field": { "type": "object", "additionalProperties": false, "description": "A field of a note, holding a single piece of data; a card may ask you to recall a field, for example", "required": [ "displayName" ], "properties": { "displayName": { "type": "string", "description": "The name used inside templates to refer to this field" }, "rightToLeft": { "type": "boolean" }, "sticky": { "type": "boolean" }, "fontSize": { "type": "integer", "minimum": 0 }, "font": { "type": "string", "description": "e.g. Arial" } } }, "deckConfiguration": { "type": "object", "additionalProperties": false, "description": "Configuration of a deck, without any mention of its notes", "required": [ "autoPlay", "lapse", "name", "new", "replayQuestionAudioWithAnswer", "review", "showTimer", "maxTimerTimeoutSeconds" ], "properties": { "autoPlay": { "type": "boolean", "description": "Whether to play audio immediately on showing the question" }, "lapse": { "description": "What to do with lapsed cards", "$ref": "#/definitions/lapse" }, "name": { "type": "string", "description": "Name of the deck configuration, which as far as I can tell is unused" }, "new": { "description": "How to show new cards from the deck", "$ref": "#/definitions/newCardConfiguration" }, "replayQuestionAudioWithAnswer": { "type": "boolean", "description": "Whether to replay question audio when the answer is displayed" }, "review": { "description": "Configuration governing how card metadata changes with each review", "$ref": "#/definitions/reviewConfiguration" }, "showTimer": { "type": "boolean", "description": "Whether to show a timer while cards are open" }, "maxTimerTimeoutSeconds": { "type": "integer", "description": "The time in seconds after which to stop the timer", "minimum": 0 } } }, "standardTemplate": { "type": "object", "additionalProperties": false, "description": "Each non-cloze note gets turned into `n` cards by applying `n` templates to the note. The template determines which fields get shown where on the card.", "required": [ "answerFormat", "questionFormat", "name" ], "properties": { "answerFormat": { "type": "string", "description": "How the answer of this card gets displayed. You can refer to fields of the note with {{FieldName}}.", "example": "{{FrontSide}}\n\n