ObsidianKi
Automated flashcard generation to Anki from your Obsidian vault.
Installation
# uv
uv tool install obsidianki
# uv (source)
uv tool install https://github.com/ccmdi/obsidianki.git
# pip
pip install obsidianki
# pip (source)
pip install https://github.com/ccmdi/obsidianki.git
Why?
Obsidian is a knowledge store. You write notes without the explicit intention of reviewing them later. The knowledge in Obsidian is unstructured (natural language), and forcing flashcard review into Obsidian via manual question/answer pairs is making it something it fundamentally isn't.
Anki, on the other hand, is an application exactly for purposeful review. Anki is inherently structured via "question/answer" flashcard format.
To get the best of both worlds, knowledge management in Obsidian and review scheduling in Anki, we need to translate the unstructured notes to structured flashcards. Bridging this gap is the main goal of ObsidianKi.
Setup
Run:
obsidianki
This will start the interactive setup. Here's what you'll need:
-
Obsidian access (pick one in setup):
- Obsidian CLI (Obsidian 1.12+): enable Command line interface in Settings → General and register the CLI.
- Local REST API: install the plugin and copy the API key from its settings.
-
AnkiConnect setup:
- Add-on code:
2055492159 - Keep Anki running
- Add-on code:
The interactive setup will guide you through model selection and configuration.
Usage
oki # Generate from random old notes
oki --notes "React" # Generate from specific note
oki --notes "frontend/*:3" # Sample 3 notes from folder
oki -q "What is X?" # Standalone query (no source note)
oki --notes "React" -q "hooks" # Targeted extraction from note
See the reference for all commands and options.
Index
-
Vector deduplication - best deduplication method
-
MCP server - for conversational use
-
Environment variables - optional
.envsettings for Obsidian -
Reference - cli usage
Configuration options
| Setting | Default | Description |
|---|---|---|
max_cards |
6 |
Maximum cards per session |
notes_to_sample |
3 |
Number of notes to process in default mode |
days_old |
30 |
Only process notes older than N days |
sampling_mode |
"weighted" |
"weighted" or "uniform" note selection |
card_type |
"custom" |
"basic" or "custom" Anki card type |
deck |
"Obsidian" |
Default Anki deck name |
approve_notes |
false |
Review each note before processing |
approve_cards |
false |
Review each card before adding to Anki |
deduplicate_via_history |
false |
Avoid duplicates using processing history |
deduplicate_via_deck |
false |
Avoid duplicates by checking existing deck cards |
use_deck_schema |
false |
Match existing card formatting in deck |
syntax_highlighting |
true |
Enable code syntax highlighting |
upfront_batching |
false |
Process notes in parallel (faster) |
batch_size_limit |
20 |
Max notes per batch |
batch_card_limit |
100 |
Max cards per batch |
density_bias_strength |
0.5 |
Bias strength against over-processed notes (0-1) |
search_folders |
[] |
Limit processing to specific folders (array) |
vector_dedup |
false |
Enable semantic deduplication via embeddings |
vector_threshold |
0.7 |
Similarity threshold for duplicate detection (0-1) |
Metadata
Release files for obsidianki 0.9.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| obsidianki-0.9.1.tar.gz | 58.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| obsidianki-0.9.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 130.9 kB
Release files / obsidianki-0.9.1.tar.gz
| Download URL | obsidianki-0.9.1.tar.gz |
|---|---|
| Size | 58.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b21be465455586bff52328c8bc30a067bb91e30e85305a1d4d8c587d379ff158
|
|
BLAKE2b-256 checksum How to use checksums |
932fb724bf38aaa4982fe4ca51fb0276827188cc0df14a7662191fa2fa88b5f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 9, 2026.
Transparency logRelease files / obsidianki-0.9.1-py3-none-any.whl
| Download URL | obsidianki-0.9.1-py3-none-any.whl |
|---|---|
| Size | 72.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ad08f59d876b4667c635408733435aacbdfeb53c99fd47b9ea1336aa0150b9bb
|
|
BLAKE2b-256 checksum How to use checksums |
f4bb41c734dfd46effa4c3061ea223a11356bfbeb71cecfbc062859f9865b047
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 9, 2026.
Transparency logSecurity for obsidianki 0.9.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for obsidianki-0.9.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.