File size: 4,547 Bytes
2077d8b 970f1a9 2bc1f40 2077d8b 729864f 8f805ec aee77fd 75775c4 2077d8b 970f1a9 d09f6aa 970f1a9 d09f6aa 2bc1f40 970f1a9 0ffe7cd d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa 970f1a9 d09f6aa |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
---
title: AnkiGen
emoji: π
app_file: app.py
requirements: requirements.txt
python: 3.12
sdk: gradio
sdk_version: 5.13.1
---
# AnkiGen - Anki Card Generator
AnkiGen is a Gradio-based web application that generates Anki-compatible CSV and `.apkg` deck files using Large Language Models (LLMs) based on user-specified subjects and preferences.
## Features
- Generate Anki cards for various subjects or from provided text/URLs.
- Generate a structured learning path for a complex topic.
- Customizable number of topics and cards per topic.
- User-friendly interface powered by Gradio.
- Exports to CSV for manual import or `.apkg` format with default styling.
- Utilizes OpenAI's structured output capabilities.
## Screenshot

## Installation for Local Use
Preferred usage: [uv](https://github.com/astral-sh/uv)
1. Clone this repository:
```bash
git clone https://github.com/brickfrog/ankigen.git
cd ankigen
uv venv
source .venv/bin/activate # Activate the virtual environment
```
2. Install the required dependencies:
```bash
uv pip install -e . # Install the package in editable mode
```
3. Set up your OpenAI API key:
- Create a `.env` file in the project root (`ankigen/`).
- Add your key like this: `OPENAI_API_KEY="your_sk-xxxxxxxx_key_here"`
- The application will load this key automatically.
## Usage
1. Ensure your virtual environment is active (`source .venv/bin/activate`).
2. Run the application:
```bash
uv run python app.py
```
*(Note: The `gradio app.py` command might also work but using `python app.py` within the `uv run` context is recommended.)*
3. Open your web browser and navigate to the provided local URL (typically `http://127.0.0.1:7860`).
4. In the application interface:
- Your API key should be loaded automatically if using a `.env` file, otherwise enter it.
- Select the desired generation mode ("Single Subject", "Learning Path", "From Text", "From Web").
- Fill in the relevant inputs for the chosen mode.
- Adjust generation parameters (model, number of topics/cards, preferences).
- Click "Generate Cards" or "Analyze Learning Path".
5. Review the generated output.
6. For card generation, click "Export to CSV" or "Export to Anki Deck (.apkg)" to download the results.
## Project Structure
The codebase has been refactored from a single script into a more modular structure:
- `app.py`: Main Gradio application interface and event handling.
- `ankigen_core/`: Directory containing the core logic modules:
- `models.py`: Pydantic models for data structures.
- `utils.py`: Logging, caching, web fetching utilities.
- `llm_interface.py`: Interaction logic with the OpenAI API.
- `card_generator.py`: Core logic for generating topics and cards.
- `learning_path.py`: Logic for the learning path analysis feature.
- `exporters.py`: Functions for exporting data to CSV and `.apkg`.
- `ui_logic.py`: Functions handling UI component updates and visibility.
- `tests/`: Contains unit and integration tests.
- `unit/`: Tests for individual modules in `ankigen_core`.
- `integration/`: Tests for interactions between modules and the app.
- `pyproject.toml`: Defines project metadata, dependencies, and build system configuration.
- `README.md`: This file.
## Development
This project uses `uv` for environment and package management and `pytest` for testing.
1. **Setup:** Follow the Installation steps above.
2. **Install Development Dependencies:**
```bash
uv pip install -e ".[dev]"
```
3. **Running Tests:**
- To run all tests:
```bash
uv run pytest tests/
```
- To run with coverage:
```bash
uv run pytest --cov=ankigen_core tests/
```
*(Current test coverage target is >= 80%. As of the last run, coverage was ~89%.)*
4. **Code Style:** Please use `black` and `ruff` for formatting and linting (configured in `pyproject.toml` implicitly via dev dependencies, can be run manually).
5. **Making Changes:**
- Core logic changes should primarily be made within the `ankigen_core` modules.
- UI layout and event wiring are in `app.py`.
- Add or update tests in the `tests/` directory for any new or modified functionality.
## License
BSD 2-Clause License
## Acknowledgments
- This project uses the Gradio library (https://gradio.app/) for the web interface.
- Card generation is powered by OpenAI's language models.
|