Skip to main content
Join the official 2020 Python Developers SurveyStart the survey!

an Anki *.apkg and collection.anki2 reader and editor

Project description


Build Status PyPI version PyPI license PyPI pyversions

An Anki *.apkg and collection.anki2 reader and editor to work with in Python. Also included a module on AnkiConnect.

I also created a new sync system called AnkiDirect.

The *.apkg format specification can be viewed from Anki decks collaboration Wiki and AnkiDroid. In my AnkiDirect, I tried to comply with the format specification as much as possible.


pip install AnkiTools

Featured modules

Anki file conversion

>>> from AnkiTools import anki_convert
>>> anki_convert('Chinese.apkg', out_file='Chinese_anki.xlsx')
>>> anki_convert('my_workbook.xlsx', out_format='.apkg')

The supported formats are .xlsx, .apkg and .anki2.

AnkiDirect API

You can directly edit the Anki app data in user's Application Data path.

from AnkiTools import AnkiDirect
import json

with open('payload.json') as f:
    payload = json.load(f)
with AnkiDirect() as api

Some supported payloads include:

  "data": {
    "note_type A": [
        "data": {
          "header A": "a",
          "header B": "b"
        "decks": {
          "Forward": "Test Deck::Forward",
          "Backward": "Test Deck::Backward"
  "definitions": {
    "note_type A": {
      "templates": [
          "name": "Forward",
          "data": {
            "qfmt": "{{header A}}",
            "afmt": "{{FrontSide}}\r\n\r\n<hr id=answer>\r\n\r\n{{header B}}"
          "name": "Backward",
          "data": {
            "qfmt": "{{header B}}",
            "afmt": "{{FrontSide}}\r\n\r\n<hr id=answer>\r\n\r\n{{header A}}"
      "css": ".card {\r\n font-family: arial;\r\n font-size: 20px;\r\n text-align: center;\r\n color: black;\r\n background-color: white;\r\n}\r\n"


>>> from AnkiTools import AnkiConnect
>>> AnkiConnect.is_online()
>>> params = {'actions': [{'action': 'deckNames'}, {'action': 'browse', 'params': {'query': 'deck:current'}}]}
>>>'multi', params=params)
{'result': [['Default', 'SpoonFed', 'Chinese Hanzi Freq', 'Chinese Vocab'], None], 'error': None}

The actual addable actions and parameters can be viewed from AnkiConnect.


  • AnkiDirect two-way sync between Excel file and the Anki app.
  • Specifying metadata (e.g. card distribution, decks) in the Excel file and make it convertible and syncable.
  • Add CRUD to AnkiDirect ("update" and "remove" pending.)


  • Testing on other OS's, e.g. Windows XP, Windows 10, Ubuntu Linux. (I tested on Mac.)
  • Manual testing of whether the generated *.apkg can be opened without subsequent errors in the Anki app.
  • Writing test cases and testing parameters. The current ones are viewable at /tests/parameters.json and /tests/files/.
  • Specifying challenging payloads for AnkiDirect.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for AnkiTools, version 0.3.7
Filename, size File type Python version Upload date Hashes
Filename, size AnkiTools-0.3.7-py3-none-any.whl (248.0 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size AnkiTools-0.3.7.tar.gz (44.0 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page