Skip to content

Changelog

  • Publish the complete documentation site at https://anki-llm.raine.dev and bundle its LLM-readable reference for offline access through anki-llm docs.
  • Generate multiple fields in one process-file or process-deck request, with validation and all-or-nothing updates that preserve existing data when a response fails.
  • Build or run anki-llm reproducibly on Linux and macOS with the new Nix flake.
  • Add Microsoft Edge TTS support, including bundled Edge voices and no required API key. (#6)
  • Stream LLM thinking content in real-time during card generation in the TUI
  • Add gemini_thinking_enabled config option to disable thinking for Gemini models
  • Verify duplicate search candidates match exactly before flagging duplicates (#5)
  • Fix model picker selection resetting after filtering with keyboard input
  • Add xAI as a provider with Grok 4.3 model
  • Add doctor command to diagnose configuration, API keys, AnkiConnect connectivity, and workspace setup.
  • Add support for DeepSeek V4 models.
  • Treat empty DEEPSEEK_API_KEY and GEMINI_API_KEY environment variables as unset, so they fall back to other configured providers.
  • Add anki_connect_url config key to customize the AnkiConnect endpoint (defaults to http://localhost:8765).
  • tts: fall back to annotation-stripped text when furigana parsing fails, so audio still gets generated for notes with malformed ruby markup.
  • Add note-type command - pull Anki note type templates and CSS into local files, edit them in any editor, then push changes back to Anki. note-type status shows a live diff of what has drifted.
  • Add workspace support - a directory with a prompts/ folder is now a workspace. Run workspace init to set one up. Prompts and settings are resolved from the current workspace automatically.
  • Add workspace init and workspace info subcommands
  • Breaking: prompts_dir config setting is replaced by default_workspace. Set it to your workspace directory and all commands resolve prompts, note types, and default model from there regardless of your working directory.
  • process-deck now skips notes that already have content in the target field by default - use --force to re-process and overwrite existing values.
  • Breaking: process-deck and process-file prompts now require a YAML frontmatter block declaring the target field. The --field, --json, and --require-result-tag CLI flags are removed. Add a frontmatter block to each prompt file:

    ---
    output:
    field: Translation
    require_result_tag: true # optional
    ---
  • Breaking: JSON-merge output (--json) is no longer supported for process-*. Prompts now always write a single field.

  • Add --preview flag to process-deck and process-file - process a small sample of cards with the LLM and show a diff-like summary of what would change, then prompt for confirmation before running the full batch.

  • Add update command - self-update to the latest release from GitHub
  • Add docs command - show bundled documentation in the terminal
  • Add z key in the generate TUI to skip post-select processing - useful when you want to bypass quality checks or other post-processing steps configured in a prompt
  • Fix large deck exports failing due to HTTP response buffer limit (#3)
  • tts-voices browser now copies voice YAML to clipboard on Enter and stays open so you can keep exploring voices, instead of exiting immediately
  • generate summary screen now lets you replay imported audio with p
  • Furigana parser now accepts katakana loanwords with reading annotations (e.g. スパイク[すぱいく]), fixing TTS preparation for those cards
  • Added tts command - synthesize audio for Anki card fields and upload to Anki as media
  • Added support for multiple TTS providers: OpenAI, Azure Neural, Google Cloud, and Amazon Polly
  • Added tts-voices subcommand - browse, filter, and preview voices from all providers in an interactive TUI
  • TTS is now integrated into the generate pipeline - audio is synthesized automatically as a pipeline step before cards are added to Anki
  • Added TTS preview hotkey in the generate selection screen - press P to preview audio before committing
  • Added utterance IR with furigana parsing for better Japanese pronunciation
  • Post-select processing now shows per-card field diffs, making it easy to see what each processing step changed
  • Added per-step cost reporting after post-select processing
  • Added Summary step in the sidebar for run completion view
  • Legacy (non-TUI) mode now correctly fails on import errors instead of silently exiting successfully
  • Added interactive batch TUI for process-deck - same live progress, row previews, and summary screen as process-file
  • Added interactive batch TUI for process-file - live progress with elapsed time, row previews, and a summary screen when done
  • Added --query flag to process-deck and export to filter which notes are processed or exported
  • Added snapshot/rollback system for process-deck - use history to view past runs and rollback to undo changes
  • Added support for any OpenAI-compatible LLM provider - configure a custom endpoint and use any model
  • Added batch/multi-term input - paste multiple terms or press Tab to queue them, then process all at once into a single selection view
  • Added single-card regeneration with feedback - press R on a card to regenerate it with custom guidance (e.g. “make the definition simpler”)
  • Added duplicate diffing - duplicate cards now show a field-by-field diff against the existing Anki note, and pressing F force-selects them when the new version is better
  • Added $EDITOR integration - press E in the selection screen to edit a card’s fields in your editor
  • Added inline term input - press N in the selection screen to generate cards for a new term without leaving the view
  • Added card removal - press X to remove unwanted cards from the selection
  • Model picker now supports type-to-filter and Ctrl-N/Ctrl-P navigation
  • Model changes in the selection screen are now deferred, showing which model generated each card
  • Added prompt picker - prompts in the prompts directory are auto-discovered, and a picker appears when --prompt is omitted. Use Ctrl+P to switch prompts during a session. Last used prompt is remembered.
  • Added model pricing display in the model picker
  • Model can now be switched from the card selection, done, and error screens (Ctrl+O)
  • Done screen now shows the final generated cards, allows copying card text, and deleting imported cards
  • Added step history browsing on done and error screens - review what each processing step produced
  • Breaking: post_process and quality_check prompt template keys have been replaced with a unified processing pipeline. See the README for the new configuration format.
  • All LLM queries are now automatically logged to ~/.local/state/anki-llm/logs/
  • LLM errors are now logged to the session log file
  • generate-init now outputs to the prompts directory by default
  • Added gemini-3.1-flash-lite-preview model, removed gpt-5.4-pro
  • Nerd Font checkbox glyphs are now configurable
  • Fixed CJK characters bleeding into the sidebar
  • Fixed cross-provider model overrides not applying in processing steps
  • Fixed Ctrl+P not opening the picker when a prompt was already remembered
  • Added interactive TUI for the generate command - full-screen terminal interface with sidebar progress, card preview, and keyboard-driven workflow
  • Added post_process support in prompt templates - delegate individual field generation to separate focused LLM calls for higher quality results
  • Breaking: prompt template YAML keys switched from camelCase to snake_case (noteTypenote_type, fieldMapfield_map, qualityCheckquality_check). Old keys will produce a clear error prompting you to update.
  • Improved terminal output with colors and better-styled progress bars
  • Card selector now shows full field content without truncation
  • Rewrote the entire tool in Rust - single self-contained binary, no Node.js runtime required
  • Added gemini-3-flash-preview and gemini-3.1-pro-preview model support
  • Added gpt-4.1-mini, gpt-4.1-nano, gpt-5.1, and gpt-5.2 models
  • Temperature parameter is now omitted for GPT-5 models (not supported by the API)
  • Arrays in LLM responses are now converted to HTML lists in generate
  • Added progress spinners during prompt generation and card generation
  • Added optional quality check step in generate - the LLM reviews generated cards before presenting them for selection
  • generate-init now shows which model was selected and improves the model selection flow
  • Gemini is automatically used when only GEMINI_API_KEY is set, even if no OpenAI key is present
  • Added copy mode in generate - generated card fields can be copied to an existing note instead of creating a new one
  • LLM cost is now reported after generate and generate-init complete
  • Card selector shows all fields of the selected card for easier review
  • Fixed missing whitespace between HTML elements in card display
  • Markdown is always converted to HTML in generate output
  • Vim-style hotkeys enabled in interactive selection prompts
  • Added generate command - interactively generate multiple contextual flashcard examples for a term and add selected cards to your Anki deck
  • Added generate-init wizard - uses an LLM to analyze your existing cards and produce a tailored prompt template file for the generate command
  • generate now supports YAML output and can append to existing YAML/CSV files with schema validation
  • Import command now auto-detects the key field from column names
  • Added gpt-5 and gpt-5-mini model support
  • Cards are validated concurrently during generation for faster feedback
  • Model can be set in config and overridden per-command
  • Added query command for direct AnkiConnect access from the CLI or AI agents
  • Initial release
  • export - export an Anki deck to CSV or YAML
  • import - import a CSV or YAML file back into Anki
  • process-file - file-based batch workflow: export, process with LLM, import (supports resume)
  • process-deck - direct in-place batch processing of deck notes with an LLM
  • OpenAI and Google Gemini model support
  • Template-based prompt files with field substitution
  • Concurrent processing with retry logic and cost tracking