{%- extends "base_plain.xhtml" -%} {%- block title -%}Flashcard Deck Converter{%- endblock -%} {%- block content %}

Flashcard Deck Converter

Git repository: Link

11/11/2021

Anki is a sophisticated spaced repetition flashcard program. It also has a codebase going on 15 years old made of Python and Rust, dependencies that make heavy use of Go, and a convoluted deck format, all to produce a desktop program 100-140MB in size depending on operating system. In short? It's a mess. But since it has been around for so long and is currently the most used open source flashcard program it is also the one with the most decks people have made for it.

The nearest competitor to Anki in my assessment is Fresh Memory. It is a much more compact and tidy project written in C++ using Qt with similar functionality for spaced reptition using arbitrarily sided flashcards. On the list of what's available the only other open source options are Mnemosyne, another massive mess of Python, or OpenCards, which uses Microsoft Powerpoint of all things for the deck format. Unfortunately Fresh Memory was abandoned shortly after it was open sourced and has a whole host of minor issues that need working on. I'll get around to doing that eventually.

In the meantime, here's a utility that converts Anki .apkg decks to Fresh Memory .fmd decks. Oh, and it can also output to comma separated value format too if you find that more useful. Due to differences between formats some information does not carry over very well, but for most decks it should still perform adequately.

A screenshot of the command line deck converter
Command line utility

Aside from the command line there's also a simple graphical interface put together using FLTK. Not the most pretty, but it works.

A screenshot of the graphical interface to the deck converter
Graphical utility

Anyone trying to compile this utility or otherwise taking a quick peek at the code or readme may note there are quite a few dependencies involved. This is due to Anki's aforementioned convoluted deck format. Digging down through layers of JSON inside an SQLite database inside a zipfile is a little bothersome. Dealing with Fresh Memory's current XML based deck format is a walk in the park by comparison, even if it is more unwieldy due to any deck with media not being all one file.

{% endblock -%}