summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-01 19:52:05 +0300
committerPaul Buetow <paul@buetow.org>2026-04-01 19:52:05 +0300
commit6c26a1c42c01104442e354cae1f7e14052b55082 (patch)
tree688baf485636e3bc9703ac38ea35836690920c96
parent4a7c3822956fee540cac2a51538c50bbb5007dac (diff)
z9: clarify GUI provider matrix
-rw-r--r--README.md9
-rw-r--r--internal/cli/command.go4
-rw-r--r--internal/cli/command_test.go8
3 files changed, 11 insertions, 10 deletions
diff --git a/README.md b/README.md
index c1444cc..d08c7a8 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
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.
+⚠️ **Important:** Audio generation uses OpenAI services. The no-arg GUI image path uses Google Gemini Nano Banana by default, while explicit CLI image generation currently remains OpenAI-only. See [Quick Start](#quick-start) for setup instructions.
[<img src="assets/totalrecall.png" alt="TotalRecall screenshot">](assets/totalrecall.png)
[🔊 Computer / Компютър audio example](assets/audio.mp3) (Download raw file, and then play locally)
@@ -27,7 +27,8 @@ It has mainly been vibe coded using Claude Code CLI.
- Automatic Bulgarian to English translation
- Saves translations to separate text files
- Image generation:
- - **OpenAI DALL-E**: AI-generated educational images with contextual scenes and random art styles
+ - **Google Gemini Nano Banana**: Default image path for the no-arg GUI launch
+ - **OpenAI DALL-E**: Explicit CLI image generation path for now
- Scene generation creates memorable contexts for each word
- Batch processing of multiple words
- Anki-compatible export
@@ -93,7 +94,7 @@ After installation, you may need to log out and log back in for the icon to appe
## Quick Start
-**Note:** By default, totalrecall uses OpenAI for audio and Nano Banana for images in the GUI. Make sure to set your OpenAI API key and Google API key:
+**Note:** By default, totalrecall uses OpenAI for audio. The no-arg GUI image path uses Nano Banana, while explicit CLI image generation remains OpenAI-only until `z8` lands. Make sure to set your OpenAI API key and Google API key:
```bash
export OPENAI_API_KEY="sk-..."
export GOOGLE_API_KEY="..."
@@ -116,7 +117,7 @@ Key features:
### CLI Mode
-1. Generate materials for a single word (explicit CLI runs use OpenAI for images unless you override `--image-api`):
+1. Generate materials for a single word (explicit CLI image generation uses OpenAI only for now; Nano Banana CLI selection is pending `z8`):
```bash
totalrecall ябълка
```
diff --git a/internal/cli/command.go b/internal/cli/command.go
index eac89c2..2efe2a0 100644
--- a/internal/cli/command.go
+++ b/internal/cli/command.go
@@ -20,7 +20,7 @@ func CreateRootCommand(flags *Flags) *cobra.Command {
Long: `totalrecall generates Anki flashcard materials from Bulgarian words.
It creates audio pronunciation files using OpenAI TTS and downloads
-representative images. Launching with no arguments opens the interactive GUI, which uses Nano Banana for images by default. Use --image-api to override the image backend for explicit runs.
+representative images. Launching with no arguments opens the interactive GUI, which uses Nano Banana for images by default. Use --image-api for explicit CLI runs; it currently supports OpenAI only. Nano Banana CLI selection is pending z8.
Nano Banana model and text-model flags are exposed for upcoming runtime wiring.
@@ -57,7 +57,7 @@ func setupFlags(cmd *cobra.Command, flags *Flags) {
// Local flags
cmd.Flags().StringVarP(&flags.OutputDir, "output", "o", defaultOutputDir, "Output directory")
cmd.Flags().StringVarP(&flags.AudioFormat, "format", "f", flags.AudioFormat, "Audio format (wav or mp3)")
- cmd.Flags().StringVar(&flags.ImageAPI, "image-api", flags.ImageAPI, "Image source override (GUI no-arg path defaults to Nano Banana; explicit CLI default is OpenAI)")
+ cmd.Flags().StringVar(&flags.ImageAPI, "image-api", flags.ImageAPI, "Image source for explicit CLI runs (OpenAI only for now; GUI no-arg path defaults to Nano Banana)")
cmd.Flags().StringVar(&flags.BatchFile, "batch", "", "Process words from file (one per line)")
cmd.Flags().BoolVar(&flags.SkipAudio, "skip-audio", false, "Skip audio generation")
cmd.Flags().BoolVar(&flags.SkipImages, "skip-images", false, "Skip image download")
diff --git a/internal/cli/command_test.go b/internal/cli/command_test.go
index 6c5273d..2efe405 100644
--- a/internal/cli/command_test.go
+++ b/internal/cli/command_test.go
@@ -26,8 +26,8 @@ func TestCreateRootCommand(t *testing.T) {
if !strings.Contains(cmd.Long, "uses Nano Banana for images by default") {
t.Errorf("Expected Long description to describe the Nano Banana GUI default")
}
- if !strings.Contains(cmd.Long, "Use --image-api to override the image backend") {
- t.Errorf("Expected Long description to explain the image backend override")
+ if !strings.Contains(cmd.Long, "Use --image-api for explicit CLI runs; it currently supports OpenAI only") {
+ t.Errorf("Expected Long description to explain the current explicit CLI image-provider matrix")
}
// Test that flags are set up
@@ -109,8 +109,8 @@ func TestSetupFlags(t *testing.T) {
if imageAPIFlag.DefValue != "openai" {
t.Errorf("Expected default image-api to be openai, got %s", imageAPIFlag.DefValue)
}
- if imageAPIFlag.Usage != "Image source override (GUI no-arg path defaults to Nano Banana; explicit CLI default is OpenAI)" {
- t.Errorf("Expected image-api help to describe the GUI Nano Banana default and explicit CLI override, got %q", imageAPIFlag.Usage)
+ if imageAPIFlag.Usage != "Image source for explicit CLI runs (OpenAI only for now; GUI no-arg path defaults to Nano Banana)" {
+ t.Errorf("Expected image-api help to describe the GUI Nano Banana default and OpenAI-only CLI image path, got %q", imageAPIFlag.Usage)
}
nanoBananaModelFlag := cmd.Flags().Lookup("nanobanana-model")