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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
|
# totalrecall - Bulgarian Anki Flashcard Generator
<p align="center">
<img src="assets/icons/totalrecall_512.png" alt="TotalRecall Icon" width="256" height="256">
</p>
`totalrecall` is a versatile tool for generating Anki flashcard materials from Bulgarian words. It offers both a command-line interface (CLI) and a graphical user interface (GUI) for creating audio pronunciation files and AI-generated images.
It has mainly been vibe coded using Claude Code CLI.
⚠️ **Important:** This tool uses OpenAI services for audio and image generation, which requires an API key. See [Quick Start](#quick-start) for setup instructions.
## Features
### Core Features
- Audio generation using **OpenAI TTS**: High-quality, natural-sounding voices (requires API key)
- Random voice selection by default for variety
- Option to generate in all 11 available voices
- Automatic Bulgarian to English translation
- Saves translations to separate text files
- Includes translations in Anki CSV export
- Image generation:
- **OpenAI DALL-E**: AI-generated educational images with contextual scenes and random art styles
- Scene generation creates memorable contexts for each word
- Batch processing of multiple words
- Anki-compatible CSV export with translations
- Random voice variants and speech speed
- Audio caching to save API costs
- **Default output directory**: `~/.local/state/totalrecall/` (configurable)
## Installation
### Prerequisites
1. **For OpenAI TTS** (required for audio generation):
- Create an account at https://platform.openai.com
- Generate an API key at https://platform.openai.com/api-keys
- Set the key using one of these methods:
- Environment variable: `export OPENAI_API_KEY="sk-..."`
- Configuration file: Add to `.totalrecall.yaml`
### Building from Source
```bash
git clone https://codeberg.org/snonux/totalrecall.git
cd totalrecall
go build -o totalrecall ./cmd/totalrecall
```
### Installing to Go Bin Directory
Using Task (recommended):
```bash
cd totalrecall
task install
```
Or using go install directly:
```bash
cd totalrecall
go install ./cmd/totalrecall
```
Or install from remote repository:
```bash
go install codeberg.org/snonux/totalrecall/cmd/totalrecall@latest
```
This will install the binary to `~/go/bin/totalrecall`, which should be in your PATH.
### Desktop Icon Installation (GNOME/Fedora)
TotalRecall includes a desktop icon for GNOME integration. To install:
**For current user only:**
```bash
cd totalrecall
./install-icon.sh
```
**System-wide installation:**
```bash
cd totalrecall
sudo ./install-icon.sh
```
After installation, you may need to log out and log back in for the icon to appear in GNOME's application menu. The icon will show up as "TotalRecall" in the Education category.
## Quick Start
**Note:** By default, totalrecall uses OpenAI for both audio and images. Make sure to set your OpenAI API key:
```bash
export OPENAI_API_KEY="sk-..."
```
### GUI Mode (Default)
When launched without arguments, totalrecall opens an interactive graphical interface:
```bash
totalrecall
```
### CLI Mode
1. Generate materials for a single word (uses OpenAI by default):
```bash
totalrecall ябълка
```
2. Generate with specific DALL-E model:
```bash
totalrecall ябълка --openai-image-model dall-e-3
```
3. Process multiple words from a file:
```bash
totalrecall --batch words.txt
```
Example `words.txt` with translations:
```
книга = book
стол = table
компютър
молив = pencil
```
4. Generate with Anki package:
```bash
totalrecall ябълка --anki # Creates APKG file (recommended)
totalrecall ябълка --anki --anki-csv # Creates CSV file (legacy)
totalrecall ябълка --anki --deck-name "My Bulgarian Words" # Custom deck name
```
### GUI Mode
Launch the interactive graphical interface:
```bash
totalrecall # GUI mode is now the default
# or explicitly:
totalrecall --gui
```
The GUI is best navigated using keyboard shortcuts for efficient workflow. Press **`h`** at any time to display a complete list of all available keyboard shortcuts.
Key features:
- Fast keyboard-driven interface
- Real-time audio playback
- Batch processing support
- Visual feedback for all operations
## Configuration
Create a `.totalrecall.yaml` file in your home directory or project folder:
```yaml
audio:
format: mp3 # Audio format (wav or mp3)
# OpenAI settings
openai_key: "sk-..." # Your OpenAI API key
openai_model: "gpt-4o-mini-tts" # Model: tts-1, tts-1-hd, or gpt-4o-mini-tts
openai_speed: 0.8 # Speed: 0.25 to 4.0 (may be ignored by gpt-4o-mini models)
openai_instruction: "You are speaking Bulgarian language (български език). Pronounce the Bulgarian text with authentic Bulgarian phonetics, not Russian." # For gpt-4o-mini models only
# Caching
enable_cache: true
cache_dir: "./.audio_cache"
image:
provider: openai # Image provider (currently only openai is supported)
# OpenAI DALL-E settings
openai_model: "dall-e-2" # Model: dall-e-2 or dall-e-3
openai_size: "512x512" # Size: 256x256, 512x512, 1024x1024
openai_quality: "standard" # Quality: standard or hd (dall-e-3 only)
openai_style: "natural" # Style: natural or vivid (dall-e-3 only)
output:
directory: ~/.local/state/totalrecall # Default location (can be overridden)
naming: "{word}_{type}"
```
## Usage
### CLI Mode
```bash
totalrecall [word] [flags]
```
### GUI Mode
```bash
totalrecall # Default mode when no arguments provided
```
### Batch file format
Create a text file with Bulgarian words, optionally with English translations:
**Format 1: Bulgarian words only**
```
ябълка
котка
куче
хляб
вода
```
**Format 2: Bulgarian words with translations**
```
книга = book
стол = table
прозорец = window
компютър = computer
молив = pencil
```
**Format 3: Mixed format**
```
книга = book
котка
стол = table
куче
молив = pencil
```
When translations are provided, they are used directly without calling the translation API, saving time and API quota. Spaces around the words and translations are automatically trimmed.
### Output Files
By default, all files are saved to `~/.local/state/totalrecall/`. You can override this with the `-o` flag or the `output.directory` config option.
For each word, the tool generates:
- `word.mp3` - Audio pronunciation (random voice)
- `word_translation.txt` - English translation
- `word_1.jpg`, `word_2.jpg`, etc. - Generated images
- `bulgarian_vocabulary.apkg` - Anki package file (when using --anki flag)
- `anki_import.csv` - Anki import file (when using --anki --anki-csv flags)
With `--all-voices` flag:
- `word_alloy.mp3`, `word_nova.mp3`, etc. - Audio in all 11 voices
## Anki Import
### Method 1: APKG Format (Recommended)
1. Generate materials with the `--anki` flag
2. In Anki, go to File → Import
3. Select the generated `.apkg` file
4. All media files are included automatically
5. Cards are ready to use with custom styling
### Method 2: CSV Format (Legacy)
1. Generate materials with `--anki --anki-csv` flags
2. In Anki, go to File → Import
3. Select the generated `anki_import.csv`
4. Copy all media files to your Anki media folder
5. Map fields appropriately during import
### GUI Export
The GUI mode offers an export dialog where you can:
- Choose between APKG and CSV formats
- Set a custom deck name
- Export all generated cards at once
|