summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-07-19feat: improve flashcard storage and audio regenerationv0.6.0Paul Buetow
- Change default card storage from ~/Downloads to ~/.local/state/totalrecall/cards/ - Keep .apkg exports in ~/Downloads for user convenience - Fix audio regeneration to use random voice and speed (0.9-1.0) - Fix GNOME dock icon by updating StartupWMClass to "Totalrecall" - Fix navigation to properly find cards in new XDG state directory - Ensure config defaults are properly filled when using GUI mode - Bump version to 0.6.0 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19chore: bump version to 0.5.2v0.5.2Paul Buetow
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19feat: improve button icons for image generationPaul Buetow
- Generate image: Changed from ViewRefreshIcon to FileImageIcon for clearer image representation - Random image: Changed from MediaPhotoIcon to ColorPaletteIcon to suggest creativity/variety These icons better represent their functions and improve UI clarity. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19fix: set default audio speed to 1.0 for alloy voicePaul Buetow
Changed the default speed from 0.98 to 1.0 for initial audio generation to match the standard playback speed. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19fix: use default voice for initial generation, random for regenerationPaul Buetow
- Initial audio generation uses "alloy" voice with 0.98 speed - Regeneration uses random voice selection for variety - This ensures consistent initial experience while allowing variety on regeneration 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19fix: always use random voice selection for audio generationPaul Buetow
Previously, random voice was only used for regeneration. Now all audio generation uses a random voice from the available OpenAI voices for more variety in pronunciation. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19feat: add context cancellation for card operationsPaul Buetow
- Add per-card context tracking to cancel ongoing operations - Cancel audio/image generation when card is deleted - Keep delete button enabled during generation for cancellation - Add cleanup hook to remove recreated directories after deletion This allows users to cancel in-progress card generation by deleting the card, preventing orphaned API calls and file creation. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19feat: update default voice to alloy with speed 0.98Paul Buetow
- Changed default voice from 'nova' to 'alloy' - Changed default speed from 0.9 to 0.98 for better clarity - GUI now uses default voice/speed for first generation - Regeneration still uses random voice/speed for variety 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19feat: improve export functionality and fix configuration issuesPaul Buetow
- Add custom export directory selection in GUI export dialog - Change default export directory from ~/.local/state/totalrecall to ~/Downloads - Remove broken voice configuration from config file (voice is always random) - Fix discrepancies between code defaults and example config - Remove unimplemented image cache settings from example config The voice configuration was not working due to a bug where it only read from config if the command-line flag was set to "nova" (but default was empty string). Since voices are randomly selected anyway, this configuration option has been removed. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19feat: add app icon and change default output directoryPaul Buetow
- Add custom app icon with memory/brain theme - Icon now displays in GNOME app menu, window title bar, and process list - Change default output directory to ~/.local/state/totalrecall/ - Make output directory configurable via CLI flag, config file, or env var - Add desktop entry file for GNOME integration - Add install script for easy icon installation - Update README with icon display and default directory information - Bump version to 0.5.1 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19feat: improve GUI layout and add Cyrillic keyboard supportv0.5.0Paul Buetow
- Move navigation buttons to top toolbar - Increase window height (600→700px) and phonetic info area (100→180px) - Fix file check ticker race condition - Remove File menu, add export/help icons to toolbar - Add comprehensive Cyrillic keyboard support for all hotkeys - Support Cyrillic keys in all dialogs (help, export, delete confirmation) - Add project page link to help dialog - Bump version to 0.5.0 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18chore: bump version to 0.4.2Paul Buetow
- Fix Fyne tooltip layer error by deferring tooltip setup after layer creation - Add phonetic information generation to batch mode processing - Fix GUI not displaying phonetic info for batch-generated cards - Add debug logging for phonetic file loading - Fix checkForMissingFiles to handle placeholder text in phonetic display 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18feat: multiple improvements to GUI and codebasePaul Buetow
- Add random voice speed between 0.90-1.00 for more natural audio - Display voice and speed info in GUI audio player - Implement automatic retry loading for missing files (checks every 2 seconds) - Fix voice/speed info persistence during audio playback - Remove image caching functionality for cleaner codebase - Rename prompt.txt to image_prompt.txt for clarity - Fix GUI to recognize newly added cards during runtime (rescan on navigation) - Update README to reflect removed image cache These changes improve the user experience by making the audio more natural, providing better feedback about audio generation parameters, and ensuring the GUI stays synchronized with externally added cards. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18docs: update README with batch file translation formatPaul Buetow
- Added documentation for 'bulgarian = english' batch file format - Included examples of all three supported formats - Added note about API quota savings when providing translations - Updated Quick Start section with example batch file 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18feat: add support for 'bulgarian = english' format in batch filesPaul Buetow
- Batch files can now contain lines in format: bulgarian = english - Spaces are trimmed around both words automatically - Provided translations skip API calls, saving time and quota - Mixed format supported: some lines with translations, some without - Backwards compatible with existing batch files containing only words Example batch file: книга = book стол = table компютър молив = pencil 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18chore: bump version to 0.4.1Paul Buetow
- Fixed timestamp+hash naming for directories in CLI to match GUI - Fixed multiple directories being created for same word - Added phonetic alphabet fetching to processing counter - Limited image generation prompts to 1000 characters - Fixed Anki export to use unique filenames by prefixing with card ID 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18fix: use unique filenames in Anki exports by prefixing with card IDPaul Buetow
- Fixed issue where all cards used the same filenames (audio.mp3, image.jpg) - Now prefixes media files with card ID (directory name) in Anki exports - Updated both CSV and APKG generators to use unique names - Ensures Anki properly associates correct media with each card - Files in directories remain unchanged, only Anki references are prefixed 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18feat: limit image generation prompts to 1000 charactersPaul Buetow
- Added automatic prompt truncation when exceeding 1000 chars - Progressively removes less important parts: IMPORTANT notice first, then truncates scene - Also applies 1000 char limit to custom prompts - Added character count to prompt logging for visibility - Ensures compatibility with API limits while maintaining prompt effectiveness 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18fix: ensure single directory per card with consistent IDPaul Buetow
- Fixed issue where multiple directories were created for the same word - Added findCardDirectory to check for existing directories before creating new ones - Updated all file creation functions to reuse existing card directories - Applied fix to both GUI and CLI code - Added phonetic fetching to processing counter in generateMaterials - Now each card gets one directory with all its files 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18fix: use timestamp+hash naming for directories in CLI to match GUIPaul Buetow
- Updated CLI code to use internal.GenerateCardID() for directory names - Changed file naming to match GUI: word.txt, translation.txt, audio.mp3, image.jpg/png - Created internal/utils.go with shared GenerateCardID and SanitizeFilename functions - Fixed all references to use the new naming system consistently - Ensures both CLI and GUI use the same directory and file naming convention 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18feat: improve GUI usability with tooltips and reorganized layoutPaul Buetow
- Remove button captions in favor of icon-only buttons - Add comprehensive keyboard shortcuts dialog (File->Hotkeys) - Move toolbar with action buttons to top of window - Add hover tooltips to all buttons showing function and shortcut - Change export hotkey from 'E' to 'e' - Replace audio regenerate icon with more appropriate record icon - Add fyne-tooltip dependency for tooltip functionality 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18refactor: improve UI by removing unnecessary dialogsPaul Buetow
- Remove "Export Complete" dialog after exporting, use status bar instead - Remove Preferences menu item and dialog (not implemented) - Simplify File menu to only contain Export and Quit options 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18fix: improve APKG export functionalityv0.4.0Paul Buetow
- Fix Anki import errors by adding missing deck fields (newToday, revToday, etc.) - Fix media files not displaying/playing by using original filenames in cards - Add phonetic information to notes field with proper line breaks - Add 'e' hotkey for quick APKG export - Increment version to 0.4.0 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18fix: complete APKG format with all required Anki fieldsPaul Buetow
Based on Anki-Android database documentation: - Added 'autoplay' field to deck configuration - Added 'dyn' field to deck configuration - Added 'separate' field to new card settings - Added 'minSpace' field to review settings - Added 'replayq' field for replay queue - Added 'tags' array to note type - Added LaTeX pre/post fields for math support - Added 'media' arrays to all field definitions - Added missing collection config fields (schedVer, collapseTime, etc.) - Fixed 'ivlFct' field in review settings - Added 'bury' flags to new and review sections This should resolve all JSON parsing errors when importing APKG files into Anki desktop. Reference: https://github.com/ankidroid/Anki-Android/wiki/Database-Structure 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18feat: export all cards from anki_cards folder, not just current sessionPaul Buetow
- Changed GUI export to scan entire anki_cards directory - Uses GenerateFromDirectory to load all cards from subdirectories - Shows accurate count of total cards with audio/image stats - Works for both APKG and CSV export formats - No longer limited to cards from current session (savedCards) This ensures users can export their complete collection at any time, even after restarting the application. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18fix: Anki import error - add missing fields to deck configPaul Buetow
- Added missing 'id' field to deck configuration (dconf) - Added required fields to deck options: perDay, order, leechFails, etc. - Added missing fields to note type: sortf, req, vers - Fixed req field format to use interface{} for mixed types - Removed duplicate 'did' field in note type config - Added 'dyn', 'conf', and 'usn' fields to deck definitions This fixes the '500: JsonError missing field id' error when importing APKG files into Anki desktop. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18feat: major refactor - APKG export support and subdirectory organizationPaul Buetow
Major Features: - Added native .apkg (Anki package) export format with embedded media - Reorganized file structure to use subdirectories per word - Enhanced GUI export dialog with format selection (APKG/CSV) APKG Export Implementation: - Created apkg_generator.go with full SQLite-based Anki package generation - Includes custom card templates with professional CSS styling - Front side: Image + English word - Back side: Image + Bulgarian word + Audio + Notes - All media files automatically embedded in package - Custom deck names supported via --deck-name flag Directory Structure Changes: - Each word now gets its own subdirectory (e.g., anki_cards/ябълка/) - All related files (audio, images, translations, prompts) stored together - Cleaner organization and easier management - Prevents file naming conflicts GUI Updates: - Export dialog no longer shows file browser, exports directly to anki_cards - Format selection between APKG (recommended) and CSV (legacy) - Fixed navigation to properly load image prompts from subdirectories - Delete function now moves entire word directory to trash CLI Updates: - --anki flag now generates APKG by default - --anki-csv flag for legacy CSV format - All file generation uses subdirectory structure Bug Fixes: - Fixed handling of multi-word entries (e.g., "картоф картофи") - Fixed GenerateFromDirectory to properly handle words with underscores - Fixed phonetic files being treated as separate cards - Fixed image prompt preservation during navigation Breaking Changes: - File structure changed from flat to subdirectory-based - Existing files need to be reorganized into subdirectories 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18gui improvementsPaul Buetow
2025-07-18fix: move deleted files to trash instead of permanent deletionPaul Buetow
- Add missing _phonetic.txt file pattern to deletion list - Create .trashbin directory for deleted files - Move files to trash with timestamp collision handling - Update UI messages to reflect trash functionality 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18chore: bump version to 0.3.0v0.3.0Paul Buetow
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-18feat: dynamic artistic styles with weekly regenerationPaul Buetow
- Remove 42 hard-coded image generation styles - Load styles from cache file (artistic_styles.txt) - Generate styles via OpenAI API if file doesn't exist - Regenerate styles automatically if older than one week - Shuffle styles on each use to prevent LLM bias - Fix bug where generated images appeared in wrong dialog - Handle empty custom prompts properly - Remove Bulgarian word references from image prompts - Improve subject focus and visibility in prompts - Add error handling when styles cannot be loaded 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-17fixesPaul Buetow
2025-07-17fix: prevent UI element mix-ups during concurrent processing and rapid ↵Paul Buetow
navigation - Fixed one-way translation bug: English to Bulgarian no longer triggers reverse translation - Prevent mix-ups when rapidly entering new words while previous words are processing - Ensure all UI elements update only for their associated job: * Bulgarian/English text fields protected by job ID checks * Phonetic info saved to disk immediately and UI updates restricted * Audio file associations protected from background job interference * Image prompts saved immediately and UI updates controlled - Add mutex protection for thread-safe UI updates - Disconnect from background jobs when user starts typing new input - Save all generated data to disk immediately, not just on UI update - Improve navigation to properly load all associated data from disk This ensures correct flashcard generation even with rapid word entry and navigation. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-17add phoenetic alphabetPaul Buetow
2025-07-17feat: add manual translation editing and bidirectional translationPaul Buetow
- Replace translation label with editable entry field - Move translation field next to Bulgarian input for better UX - Add bidirectional translation support: - Bulgarian → English: auto-translate when only Bulgarian provided - English → Bulgarian: auto-translate when only English provided - No translation when both fields are filled - Show translations immediately upon generation - Auto-save translations when edited - Keep input fields populated during processing 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-17fix readmePaul Buetow
2025-07-17docs: update README to reflect GUI mode capabilitiesPaul Buetow
- Add comprehensive GUI mode documentation - Document keyboard shortcuts and interactive features - Clarify which features are CLI vs GUI specific - Update repository URL to Codeberg - Add scene generation feature mention - Reorganize features into Core and GUI sections 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-17feat: add contextual scene generation for flashcard imagesv0.2.0Paul Buetow
- Generate meaningful scenes for each Bulgarian word using OpenAI - Scene descriptions use English words for DALL-E compatibility - Creates more engaging and memorable flashcards with context - Bump version to v0.2.0 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16Remove Pixabay and Unsplash image search supportPaul Buetow
- Delete Pixabay and Unsplash implementation files - Remove API key configuration for both services - Update CLI and GUI to only support OpenAI DALL-E - Update documentation to reflect OpenAI as sole image provider - Fix tests to handle nil client in OpenAI implementation - Simplify configuration examples The application now exclusively uses OpenAI DALL-E for image generation, providing AI-generated educational images with creative art styles. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16only one img per cardPaul Buetow
2025-07-16fix: update button labels to show lowercase hotkeys and improve export locationPaul Buetow
- Change all button labels to show lowercase letters (g, n, i, a, r, d, p) - Update delete confirmation dialog to show lowercase y/n - Set default export location to anki_cards directory - Add note about CSV needing to be in same directory as media files - Fix prompt generation to remove Bulgarian word reference 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16feat: add custom image prompt support and keyboard shortcutsPaul Buetow
- Add text area next to image display for custom image generation prompts - Users can specify their own prompts or leave empty for auto-generation - Display the used prompt in the text area after generation - Load prompts from attribution files when navigating to existing cards - Add keyboard shortcuts for all GUI buttons: - G: Generate, N: New Word, I: Regenerate Image, A: Regenerate Audio - R: Regenerate All, D: Delete, P: Play audio - Left/Right arrows: Navigate between words - Y/N: Confirm/cancel delete dialog - Update UI layout with equal 50/50 split between image and prompt - Enable text wrapping in prompt text area - Add 25% chance to ask OpenAI for creative photo style suggestions - Fix concurrent processing to properly use custom prompts 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16feat: add concurrent processing, queue system, and UI improvementsPaul Buetow
- Implement concurrent word processing with background queue - Add processing statistics showing active tasks and total cards - Enable circular navigation through cards - Fix card deletion to update total count correctly - Add version number to GUI window title - Prevent unwanted UI reloads for background-processed cards - Enable immediate audio playback before image generation completes - Update 'Keep & Continue' button to 'New Word' - Improve queue status tracking for all processing operations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-16feat: add Fyne GUI mode with interactive flashcard managementPaul Buetow
- Add --gui flag to launch interactive GUI mode - Implement word navigation with prev/next buttons through existing cards - Add delete functionality to remove unwanted flashcards - Add fine-grained regeneration (image-only, audio-only, or both) - Implement audio playback using mpg123 on Linux - Auto-load first word on startup if cards exist - Save translation files for navigation persistence - Use DALL-E 2 with 512x512 images (half size) - Update audio speed to 0.9 (from 0.8) - Add comprehensive GUI documentation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15feat: add English translations and detailed attribution filesPaul Buetow
- Automatic Bulgarian to English translation for all words - Save translations to separate _translation.txt files - Include translations in Anki CSV export - Add detailed attribution files for audio and images: - Audio: model, voice, speed, instructions, processed text - Image: model, size, quality, style, full prompt used - Expand image styles to 42 different options (including superhero comic, yoga, etc.) - Improve image prompts to strongly avoid text generation - Fix image overwrite issue - now overwrites existing files instead of failing 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15feat: remove espeak, add random voice/style selection, fix punctuation in TTSPaul Buetow
- Removed espeak audio provider completely, now only uses OpenAI TTS - Audio now uses random voice selection by default (can override with --openai-voice) - Added --all-voices flag to generate audio in all 11 OpenAI voices - Images now use random art styles (13 different styles including superhero, yoga, cat-themed) - Fixed TTS to remove punctuation marks before speaking - Updated Bulgarian pronunciation instructions to explicitly avoid Russian accent 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15feat: add OpenAI gpt-4o-mini-tts support with voice instructionsPaul Buetow
- Add support for OpenAI's new gpt-4o-mini-tts model with customizable voice instructions - Add OpenAIInstruction field to audio configuration for natural language voice control - Update CLI with --openai-instruction flag for runtime voice customization - Enhanced cache key generation to include voice instructions - Update default model to gpt-4o-mini-tts with Bulgarian-optimized instructions - Add support for new voices: ash, ballad, coral, sage, verse - Improve error handling for models requiring special API access - Update documentation with examples and model information - Create .totalrecall.yaml.example with comprehensive configuration options Note: The gpt-4o-mini-tts model requires special API access and may not be available to all accounts yet. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15add vibe coding infoPaul Buetow
2025-07-15feat: add OpenAI DALL-E image generation and make OpenAI defaultv0.1.0Paul Buetow
- Implement OpenAI DALL-E provider for generating educational flashcard images - Add support for DALL-E 2 and DALL-E 3 with configurable size, quality, and style - Implement intelligent caching to minimize API costs - Make OpenAI the default provider for both audio (TTS) and images (DALL-E) - Add automatic fallback to free alternatives (espeak/pixabay) when OpenAI unavailable - Fix bug where cached images couldn't be copied to output directory - Update documentation with OpenAI setup instructions and examples - Add comprehensive unit tests for OpenAI image provider - Bump version to 0.1.0 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-14update todoPaul Buetow