A tool to generate Anki flashcards from articles using GPT-4
Project description
Articles to Anki
Articles to Anki is a Python tool that automates the creation of high-quality Anki flashcards from articles, whether sourced from URLs or local files. Leveraging GPT-4, it intelligently generates focused cards that prioritize core concepts over trivial details, automatically selecting the optimal format (cloze or basic) for each concept to maximize learning effectiveness and avoid redundancy.
Features
- Fetch Articles: Download and parse articles from URLs or supported local file formats (PDF, EPUB, DOCX, TXT, and more)
- Multiple URL Sources: Process URLs from multiple organized files using
--url-files - Smart Parsing: Uses readability and GPT-4 to extract clean article text and titles, even from messy web pages
- Quality-Focused Card Generation: Prioritizes meaningful concepts worth remembering long-term, automatically filtering out trivial details, redundant content, and overly specific examples while selecting the optimal format (cloze or basic) for each concept
- Flexible Export: Send cards directly to Anki via AnkiConnect, or export them as text files for later use
- Smart Duplicate Detection: Identifies semantically similar cards even with different wording, preventing redundant flashcards
- Custom Prompts: Optionally provide your own prompt to customize card generation
- Caching: Optionally cache downloaded articles to speed up repeated runs
- Process Control: Fine-grained control over which articles to process and whether to allow duplicates
Quick Start
Installation
# Install with basic features
pip install articles-to-anki
# Install with advanced similarity detection (recommended)
pip install articles-to-anki[advanced_similarity]
Setup
# Create directories and download required resources
articles-to-anki-setup
# Set your OpenAI API key
export OPENAI_API_KEY='your_openai_api_key'
Usage
# Add URLs to articles/urls.txt, then run:
articles-to-anki
# Or process URLs from specific files:
articles-to-anki --url-files tech_articles.txt science_articles.txt
# Export to a specific deck with caching:
articles-to-anki --deck "Learning" --use-cache
Multiple URL Files
Organize your articles by topic, priority, or source using multiple URL files:
# Process URLs from multiple organized files
articles-to-anki --url-files technology.txt science.txt history.txt
# Combine with other options
articles-to-anki --url-files priority_articles.txt --deck "High Priority" --use-cache
File Organization Examples
urls/
├── technology.txt # AI, programming, tech news
├── science.txt # Research papers, discoveries
├── high_priority.txt # Must-read articles
└── daily_reading.txt # Regular reading list
Each file follows the same format as articles/urls.txt:
# Technology Articles
https://example.com/ai-breakthrough
https://example.com/programming-tutorial
# Comments start with #
https://example.com/machine-learning-guide
Requirements
- Python 3.9+
- OpenAI API key
- Anki with AnkiConnect (for direct export to Anki)
Installation Options
From PyPI (Recommended)
# Basic installation
pip install articles-to-anki
# With advanced similarity detection
pip install articles-to-anki[advanced_similarity]
# All features
pip install articles-to-anki[all]
From GitHub
# Latest development version
pip install git+https://github.com/japancolorado/articles-to-anki.git
# With advanced features
pip install "git+https://github.com/japancolorado/articles-to-anki.git#egg=articles-to-anki[advanced_similarity]"
Development Installation
git clone https://github.com/japancolorado/articles-to-anki.git
cd articles-to-anki
pip install -e .[dev]
Configuration
1. Set OpenAI API Key
export OPENAI_API_KEY='your_openai_api_key'
Or add it to your shell profile for persistence.
2. Run Setup
articles-to-anki-setup
This creates necessary directories and downloads NLTK resources for advanced similarity detection.
3. Add Content
- URLs: Add to
articles/urls.txtor create custom URL files - Local Files: Place PDF, EPUB, DOCX, TXT, etc. in the
articles/directory
Usage
Basic Usage
articles-to-anki
Command Line Options
articles-to-anki [OPTIONS]
Options:
--deck DECKNAME— Anki deck to export to (default: "Default")--model MODEL— OpenAI model to use (default: "gpt-4o-mini"). Examples: gpt-4o, gpt-4-turbo, gpt-4.1 mini, gpt-4.1--url-files FILE [FILE ...]— Additional URL files to process--use-cache— Cache downloaded articles to avoid re-fetching--to-file— Export to text files instead of Anki--custom-prompt "..."— Custom instructions for card generation--allow-duplicates— Allow duplicate cards to be created--process-all— Process all articles, even previously processed ones--similarity-threshold 0.85— Similarity threshold for duplicate detection (0.0-1.0)
Examples
# Process multiple URL files with custom deck
articles-to-anki --url-files tech.txt science.txt --deck "Learning"
# Use a specific OpenAI model
articles-to-anki --model gpt-4o --deck "Research"
# Use caching and custom prompt with different model
articles-to-anki --model gpt-4-turbo --use-cache --custom-prompt "Focus on practical applications"
# Export to files instead of Anki
articles-to-anki --to-file --url-files priority.txt
# Use cheaper model for large batches
articles-to-anki --model gpt-3.5-turbo --url-files bulk.txt
# Allow duplicates and process all articles
articles-to-anki --allow-duplicates --process-all
# Adjust duplicate detection sensitivity
articles-to-anki --similarity-threshold 0.75
Supported File Types
- Documents: PDF, DOCX, DOC, TXT, MD
- E-books: EPUB, MOBI, FB2
- Presentations: PPTX, PPT
- Other: XPS, CBZ, SVG
How It Works
- Article Extraction: Downloads URLs or reads local files, extracting clean text and titles
- Duplicate Prevention: Checks if articles have been processed before (unless
--process_all) - Intelligent Card Generation: Uses GPT-4 to create focused, high-quality cards by prioritizing core concepts, filtering out trivial details, and choosing the optimal format for each concept
- Smart Filtering: Detects semantically similar cards to prevent duplicates (unless
--allow_duplicates) - Export: Sends cards to Anki via AnkiConnect or exports to text files
- Record Keeping: Tracks processed articles to avoid reprocessing
Troubleshooting
Setup Issues
If you encounter setup problems:
# Fix NLTK issues specifically
articles-to-anki-fix-nltk
# Recreate directories only
articles-to-anki-setup --dirs-only
# Setup NLTK resources only
articles-to-anki-setup --nltk-only
Common Problems
AnkiConnect Issues:
- Ensure Anki is running with AnkiConnect addon enabled
- Check that cloze cards have proper
{{c1::text}}formatting - Try exporting to files first:
--to-file
NLTK Errors:
- Run
articles-to-anki-fix-nltkfor automated fixes - Set
NLTK_DATAenvironment variable:export NLTK_DATA=~/nltk_data - The tool automatically falls back to basic similarity detection if advanced features fail
API Errors:
- Verify your OpenAI API key is valid and has quota
- Check network connectivity
No Cards Generated:
- Verify article content is substantial and readable
- Try adjusting your custom prompt
- Check that URLs are accessible
Advanced Configuration
Edit articles_to_anki/config.py to customize:
- GPT model selection
- File paths and directories
- AnkiConnect settings
- Default similarity thresholds
Getting Free OpenAI Credits
Share input/outputs with OpenAI and get free credits!
- Sign up for OpenAI API: Visit platform.openai.com
- Enable data sharing: In your account settings, opt-in to share your API usage data with OpenAI
- Generate project API key: Use this key in your environment variable
OPENAI_API_KEY - Profit: Enjoy free credits for your Anki card generation enjoyment!
Development
Running Tests
pip install -e .[dev]
pytest
Code Formatting
black articles_to_anki/
flake8 articles_to_anki/
Building for Distribution
python -m build
twine check dist/*
License
MIT License - see LICENSE for details.
Contributing
Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.
Support
- Issues: GitHub Issues
- Documentation: This README and inline code documentation
- Troubleshooting: Use
articles-to-anki-fix-nltkfor NLTK issues
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file articles_to_anki-1.0.0.tar.gz.
File metadata
- Download URL: articles_to_anki-1.0.0.tar.gz
- Upload date:
- Size: 37.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78d2eeb80c54ba0635cccdc1bedabc903f053c8b20138b1a2f0c6a5b60cbe752
|
|
| MD5 |
26f0fcba5e78c0d15c43721de26a571c
|
|
| BLAKE2b-256 |
e6b96d25d22b193b21885ce84c3b45d829a705a845d64aec6888213fc51fb878
|
Provenance
The following attestation bundles were made for articles_to_anki-1.0.0.tar.gz:
Publisher:
publish.yml on JapanColorado/articles-to-anki
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
articles_to_anki-1.0.0.tar.gz -
Subject digest:
78d2eeb80c54ba0635cccdc1bedabc903f053c8b20138b1a2f0c6a5b60cbe752 - Sigstore transparency entry: 223906096
- Sigstore integration time:
-
Permalink:
JapanColorado/articles-to-anki@6960d723c777595b8cf7380e4cec5ac4e527ba7c -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/JapanColorado
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6960d723c777595b8cf7380e4cec5ac4e527ba7c -
Trigger Event:
push
-
Statement type:
File details
Details for the file articles_to_anki-1.0.0-py3-none-any.whl.
File metadata
- Download URL: articles_to_anki-1.0.0-py3-none-any.whl
- Upload date:
- Size: 33.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96c7101503602b15db6018fc147b7cd13d894530466547dd0e3a4a943a61df88
|
|
| MD5 |
b5783110f0598c0b3d0c940f8e195bba
|
|
| BLAKE2b-256 |
4a7808e4d58b5ceecd097af182bad2dec08346f190dfca46eef355f2c7e18163
|
Provenance
The following attestation bundles were made for articles_to_anki-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on JapanColorado/articles-to-anki
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
articles_to_anki-1.0.0-py3-none-any.whl -
Subject digest:
96c7101503602b15db6018fc147b7cd13d894530466547dd0e3a4a943a61df88 - Sigstore transparency entry: 223906098
- Sigstore integration time:
-
Permalink:
JapanColorado/articles-to-anki@6960d723c777595b8cf7380e4cec5ac4e527ba7c -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/JapanColorado
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6960d723c777595b8cf7380e4cec5ac4e527ba7c -
Trigger Event:
push
-
Statement type: