diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-01 20:07:10 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-01 20:07:10 +0300 |
| commit | 3ed1c1ba41709c0de75512643c50b064f7dce650 (patch) | |
| tree | 6706c2217de844d5d2aa72d4d604af72468f6d40 /internal/cli | |
| parent | d59813eb7ec44e8f57f75ece502a2360ab939816 (diff) | |
z8: finish Nano Banana CLI wiring
Diffstat (limited to 'internal/cli')
| -rw-r--r-- | internal/cli/command.go | 10 | ||||
| -rw-r--r-- | internal/cli/command_test.go | 16 |
2 files changed, 13 insertions, 13 deletions
diff --git a/internal/cli/command.go b/internal/cli/command.go index 2efe2a0..924740e 100644 --- a/internal/cli/command.go +++ b/internal/cli/command.go @@ -20,9 +20,9 @@ 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 for explicit CLI runs; it currently supports OpenAI only. Nano Banana CLI selection is pending z8. +representative images. Launching with no arguments opens the interactive GUI, which uses Nano Banana for images by default. Explicit CLI runs can use OpenAI or Nano Banana via --image-api, and config files can set image.provider too. -Nano Banana model and text-model flags are exposed for upcoming runtime wiring. +Nano Banana model and text-model flags are available for Nano Banana image generation. Examples: totalrecall # Launch interactive GUI (default) @@ -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 for explicit CLI runs (OpenAI only for now; GUI no-arg path defaults to Nano Banana)") + cmd.Flags().StringVar(&flags.ImageAPI, "image-api", flags.ImageAPI, "Image source for explicit CLI runs (OpenAI or Nano Banana; config file image.provider also applies when unset)") 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") @@ -82,8 +82,8 @@ func setupFlags(cmd *cobra.Command, flags *Flags) { cmd.Flags().StringVar(&flags.OpenAIImageStyle, "openai-image-style", flags.OpenAIImageStyle, "Image style: natural or vivid (dall-e-3 only)") // Nano Banana Image Generation flags - cmd.Flags().StringVar(&flags.NanoBananaModel, "nanobanana-model", flags.NanoBananaModel, "Nano Banana image model for upcoming runtime wiring") - cmd.Flags().StringVar(&flags.NanoBananaTextModel, "nanobanana-text-model", flags.NanoBananaTextModel, "Nano Banana text model for upcoming runtime wiring") + cmd.Flags().StringVar(&flags.NanoBananaModel, "nanobanana-model", flags.NanoBananaModel, "Nano Banana image model used when Nano Banana image generation is selected") + cmd.Flags().StringVar(&flags.NanoBananaTextModel, "nanobanana-text-model", flags.NanoBananaTextModel, "Nano Banana text model used when Nano Banana image generation is selected") // Bind flags to viper if err := bindFlagsToViper(cmd); err != nil { diff --git a/internal/cli/command_test.go b/internal/cli/command_test.go index 2efe405..67ef6c4 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 for explicit CLI runs; it currently supports OpenAI only") { - t.Errorf("Expected Long description to explain the current explicit CLI image-provider matrix") + if !strings.Contains(cmd.Long, "Explicit CLI runs can use OpenAI or Nano Banana via --image-api") { + t.Errorf("Expected Long description to describe explicit CLI Nano Banana support") } // 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 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) + if imageAPIFlag.Usage != "Image source for explicit CLI runs (OpenAI or Nano Banana; config file image.provider also applies when unset)" { + t.Errorf("Expected image-api help to describe CLI Nano Banana support and config fallback, got %q", imageAPIFlag.Usage) } nanoBananaModelFlag := cmd.Flags().Lookup("nanobanana-model") @@ -120,8 +120,8 @@ func TestSetupFlags(t *testing.T) { if nanoBananaModelFlag.DefValue != "gemini-3.1-flash-image-preview" { t.Errorf("Expected default nanobanana-model to be gemini-3.1-flash-image-preview, got %s", nanoBananaModelFlag.DefValue) } - if !strings.Contains(nanoBananaModelFlag.Usage, "upcoming runtime wiring") { - t.Errorf("Expected nanobanana-model help to describe future wiring, got %q", nanoBananaModelFlag.Usage) + if !strings.Contains(nanoBananaModelFlag.Usage, "selected") { + t.Errorf("Expected nanobanana-model help to describe supported Nano Banana selection, got %q", nanoBananaModelFlag.Usage) } nanoBananaTextModelFlag := cmd.Flags().Lookup("nanobanana-text-model") @@ -131,8 +131,8 @@ func TestSetupFlags(t *testing.T) { if nanoBananaTextModelFlag.DefValue != "gemini-2.5-flash" { t.Errorf("Expected default nanobanana-text-model to be gemini-2.5-flash, got %s", nanoBananaTextModelFlag.DefValue) } - if !strings.Contains(nanoBananaTextModelFlag.Usage, "upcoming runtime wiring") { - t.Errorf("Expected nanobanana-text-model help to describe future wiring, got %q", nanoBananaTextModelFlag.Usage) + if !strings.Contains(nanoBananaTextModelFlag.Usage, "selected") { + t.Errorf("Expected nanobanana-text-model help to describe supported Nano Banana selection, got %q", nanoBananaTextModelFlag.Usage) } } |
