Anki import files for practical language learning.
spanish/- Spanish decks and import files- future languages get their own directories at the repo root
Most files are simple CSV imports.
Typical mapping:
- Front/Back vary by deck, and many decks include both directions in the same CSV.
Start small, keep decks practical, and optimize for real-world communication.
spanish/nouns.csvspanish/verbs.csvspanish/adjectives.csvspanish/useful_phrases.csvspanish/nouns_images.csv- experimental image -> Spanish noun deck
The root nouns.txt, verbs.txt, adjectives.txt, and phrases.txt files are the reusable base packs for future languages.
When adding new vocabulary or phrases to a language-specific deck, also add the English source item to the matching root .txt seed list so the shared library keeps growing.
This repo now includes a reusable pronunciation workflow for Anki across languages:
- audio files live in
<language>/audio/ - deck CSVs store inline Anki sound tags like
[sound:querer.mp3] - the generation script is
scripts/generate_anki_audio.py - preset defaults live in
anki-audio-presets.json - the repo-local skill is
skills/anki-audio/SKILL.md
Spanish verbs example:
uv run --with edge-tts python scripts/generate_anki_audio.py --preset spanish-verbsOther current presets:
spanish-nounsspanish-adjectivesspanish-useful-phrases
To regenerate from scratch:
uv run --with edge-tts python scripts/generate_anki_audio.py --preset spanish-verbs --forceYou can sync the repo CSVs and media into Anki Desktop without manually dragging files into collection.media or re-importing each CSV.
Requirements:
- Open Anki Desktop on the computer that owns the collection.
- Install the AnkiConnect add-on (
2055492159). - Run a dry-run first:
uv run python scripts/sync_to_anki.py --language spanish --dry-runThen run the real sync:
uv run python scripts/sync_to_anki.py --language spanishCurrent Spanish deck mapping:
spanish/adjectives.csv→Spanish Adjectivesspanish/nouns_images.csv→Spanish Image Nounsspanish/nouns.csv→Spanish Nounsspanish/useful_phrases.csv→Spanish Phrasesspanish/verbs.csv→Spanish Verbs
By default, media is uploaded through AnkiConnect. If you prefer direct file copy, pass your local media directory:
uv run python scripts/sync_to_anki.py \
--language spanish \
--copy-media-dir "/Users/rasul/Library/Application Support/Anki2/User 1/collection.media"The script creates missing decks, uploads/copies referenced [sound:...] and <img src="..."> files, adds new notes, updates existing notes matched by their Front field inside each deck, and triggers Anki sync unless --no-sync is passed.
It also cleans up two old manual-import artifacts when run against AnkiConnect:
- deletes accidental literal header notes where the note content is
Front/Back - normalizes stale notes whose
Fronthad an old trailing parenthetical, liketo want (querer), when the current CSV now usesto want
This repo also includes a reusable image-based deck workflow for any language:
- image files live in
<language>/images/ - image-based deck CSVs reference bare filenames with HTML like
<img src="el-cafe.jpg"> - the helper script is
scripts/generate_anki_image_deck.py - preset defaults live in
anki-image-presets.json - the repo-local skill is
skills/anki-images/SKILL.md
Important: the script only scaffolds the deck CSV plus a prompt manifest. The actual image creation step happens separately via an image-generation tool/model or manual sourcing.
Preferred generation path: use OpenAI image generation through OpenClaw's OpenAI Codex OAuth subscription auth, for example image_generate with openai/gpt-image-2. Do not require or document a direct OPENAI_API_KEY for this workflow; the intended auth path is the same Codex OAuth subscription used by the agents/chats.
Spanish nouns example:
uv run python scripts/generate_anki_image_deck.py --preset spanish-nouns-images --overwrite-outputThe script writes:
- an image-based deck CSV such as
spanish/nouns_images.csv - an editable prompt manifest in the image directory, such as
spanish/images/nouns_image_prompts.csv
Use the prompt manifest as a starting point, then review and tighten prompts for ambiguous concepts before generating images at scale. Prompt manifests live next to images because they are generation metadata, not import decks.