summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-07-22Bump version to 0.7.2v0.7.2Paul Buetow
- Fixed background image generation race conditions - Fixed UI updates when navigating between cards - Improved file sync and error handling
2025-07-22Fix GUI background image generation race conditionsPaul Buetow
- Add file.Sync() after image download to ensure data is flushed to disk - Add double-checking in UI updates to prevent wrong card updates - Fix background job completion to reload files when user navigates back - Add file size validation in image display widget - Improve error messages for image loading failures This fixes two issues: 1. 'png: invalid format: not enough pixel data' error when navigating during generation 2. Images not updating when navigating back to a card after background generation completes
2025-07-22Remove audio cache feature to simplify codebase and avoid cache-related issuesPaul Buetow
πŸ€– Generated with [opencode](https://opencode.ai) Co-Authored-By: opencode <noreply@opencode.ai>
2025-07-21cleanupPaul Buetow
2025-07-21clarifyPaul Buetow
2025-07-21fixPaul Buetow
2025-07-21fixPaul Buetow
2025-07-21add audio playbackPaul Buetow
2025-07-21add screnshotsPaul Buetow
2025-07-21feat: Enhanced bulk import, archive functionality, and export improvementsPaul Buetow
## Bulk Import Enhancements - Added support for three flexible batch file formats: - `BULGARIAN = ENGLISH` - Both provided, no translation needed - `= ENGLISH` - Only English provided, auto-translated to Bulgarian - `BULGARIAN` - Only Bulgarian provided, auto-translated to English - Implemented smart file checking to skip already processed words - Check all required files (word.txt, translation.txt, phonetic.txt, audio/image files and their attribution/metadata) - Added batch processing summary with statistics ## Archive Functionality - Renamed --clear flag to --archive for clarity - Archive cards directory to ~/.local/state/totalrecall/archive/cards-TIMESTAMP - Added archive button to GUI toolbar with folder icon - Archive confirmation dialog supports keyboard shortcuts (y/n/c/ESC) ## Export Improvements - Anki exports now show full file path in output - Changed default export location to home directory (~) for both CLI and GUI - Auto-adjust image size to 1024x1024 when DALL-E 3 is selected ## Other Improvements - Added TranslateEnglishToBulgarian method for reverse translation - Enhanced batch processing with better error handling and progress reporting - Improved file integrity checking for complete word processing πŸ€– Generated with [opencode](https://opencode.ai) Co-Authored-By: opencode <noreply@opencode.ai>
2025-07-21correct the readmePaul Buetow
2025-07-21fix(gui): Display phonetic info immediately when fetchedv0.7.1Paul Buetow
- Update phonetic display as soon as data is available, not after image generation - Apply fix to both single word and batch processing modes - Improves user experience by showing IPA transcription without delay - Bump version to 0.7.1 πŸ€– Generated with [opencode](https://opencode.ai) Co-Authored-By: opencode <noreply@opencode.ai>
2025-07-21fix(processor): Fetch phonetic info immediately after translationPaul Buetow
Moves the phonetic information fetching to occur immediately after the word has been translated. This ensures that the phonetic data is available as early as possible in the processing pipeline. Previously, the phonetic information was fetched after image generation, which caused an unnecessary delay. This change improves the logical flow of the word processing sequence.
2025-07-21more on thisPaul Buetow
2025-07-21feat: improve consistency between CLI and GUI modesPaul Buetow
- Fix batch mode to store cards in ~/.local/state/totalrecall/cards/ matching GUI behavior - Add --no-auto-play flag to disable automatic audio playback (enabled by default) - Simplify phonetic fetching in CLI to match GUI (IPA only, no detailed explanations) - Remove redundant --gui flag as GUI is already the default mode - Align image generation settings: both modes now use DALL-E 2 with 512x512 resolution πŸ€– Generated with [opencode](https://opencode.ai) Co-Authored-By: opencode <noreply@opencode.ai>
2025-07-21Release v0.7.0: Add auto-play feature and improve keyboard navigationv0.7.0Paul Buetow
New Features: - Added auto-play feature for audio with 'u'/'Ρƒ' hotkey toggle - Auto-play is enabled by default on app startup - Automatically plays audio when new files are generated - Automatically plays audio when navigating between cards - Added Escape key support to unfocus all input fields - Works for Bulgarian word input - Works for English translation input - Works for image prompt multi-line input Improvements: - Increased default window size by 10% (800x700 β†’ 880x770) - Fixed duplicate hotkey handling for 'u', 'h', and 'l' keys - Fixed tooltip initialization error by deferring audio player tooltips Bug Fixes: - Fixed Fyne threading errors in audio playback - Fixed tooltip layer initialization order issue - Removed duplicate keyboard shortcut handlers The auto-play feature enhances the learning experience by automatically playing pronunciation audio when cards are generated or when navigating through existing cards. Users can toggle this feature on/off at any time using the 'u' or 'Ρƒ' hotkey.
2025-07-21fix: implement log viewer with newest-first ordering to avoid scroll issuesPaul Buetow
- Replace phonetic display with a proper log viewer widget - Prepend new log messages instead of appending to show newest first - Capture stdout/stderr output to display in the log viewer - Remove problematic auto-scroll functionality that wasn't working - Add timestamp to each log message for better tracking This approach eliminates the need for auto-scrolling since the latest messages are always visible at the top of the log viewer. πŸ€– Generated with [opencode](https://opencode.ai) Co-Authored-By: opencode <noreply@opencode.ai>
2025-07-20test: add comprehensive test coverage for refactored packagesPaul Buetow
Add test suites for all newly created packages from the main.go refactoring: - batch: 100% coverage - file reading, parsing, edge cases - cli: 96.7% coverage - command setup, flags, configuration - translation: 92% coverage - API integration, caching, errors - phonetic: 87.5% coverage - API fetching, file operations - models: 77.3% coverage - model listing functionality - processor: 18% coverage - basic tests (limited by API dependencies) Total: 1159 lines of test code across 7 new test files πŸ€– Generated with [opencode](https://opencode.ai) Co-Authored-By: opencode <noreply@opencode.ai>
2025-07-20Refactor main.go into focused packagesPaul Buetow
- Reduced main.go from 961 lines to 89 lines (91% reduction) - Created new packages for better separation of concerns: - cli: Command-line interface setup and configuration - processor: Core word processing logic and orchestration - batch: Batch file processing functionality - translation: Bulgarian to English translation services - models: OpenAI model listing functionality - phonetic: Phonetic information fetching - Each package has clear documentation in doc.go files - Improved testability and maintainability - All existing functionality preserved - All tests passing and build successful
2025-07-20test: add comprehensive test suite for audio and anki packagesPaul Buetow
- Add tests for audio package (62.8% coverage) - OpenAI provider tests with mocking - Provider interface and fallback mechanism tests - Bulgarian text validation tests - Audio caching functionality tests - Add tests for anki package (84.8% coverage) - CSV generation tests - APKG package generation tests - Card management and formatting tests - Directory scanning and media handling tests - Add test utilities and mocks - Mock implementations for external dependencies - Test helpers for common operations - Utilities for creating test directories and files - Update Taskfile.yaml with comprehensive test targets - test: Run all tests - test-verbose: Run with verbose output - test-coverage: Run with coverage report - test-coverage-html: Generate HTML coverage report - test-race: Run with race detector - test-short: Run only short tests - test-all: Comprehensive suite with coverage and race detection - clean: Remove build artifacts and test files - Fix existing image package tests - Remove tests for non-existent methods - Update tests to match actual implementation - Skip tests requiring live OpenAI API This provides a solid foundation for ensuring code quality and catching regressions. πŸ€– Generated with [opencode](https://opencode.ai) Co-Authored-By: opencode <noreply@opencode.ai>
2025-07-20feat: add quit confirmation dialogPaul Buetow
- Added confirmation dialog when pressing 'q' to quit the application - Supports y/ъ to confirm, n/Π½ or ESC to cancel - Prevents accidental app closure - Consistent with delete confirmation dialog pattern πŸ€– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20feat: add ESC key support for all dialogsPaul Buetow
- Added ESC key to close help dialog - Added ESC key to close/cancel export dialog - Updated dialog instructions to show ESC option - ESC already supported for delete confirmation and unfocusing text areas πŸ€– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20feat: change help hotkey to ? and add vim-style navigationPaul Buetow
- Changed help screen hotkey from 'h' to '?' - Added vim-style navigation keys: h/Ρ… for previous, l/Π» for next - Updated help dialog to reflect new key bindings - Updated button tooltips with new shortcuts πŸ€– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20feat: make GUI default mode and always use random voicev0.6.1Paul Buetow
- GUI mode now launches by default when no arguments provided - Updated .desktop file to remove unnecessary --gui flag - Updated README to reflect GUI as default mode - Audio generation always uses random voice and speed (0.90-1.00) - No more defaulting to "alloy" voice for first generation - Bump version to 0.6.1 πŸ€– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19delete test filesPaul Buetow
2025-07-19more on thisPaul Buetow
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>