genviz-rs
Unified Rust library for AI media generation (images and video) via multiple providers.
Features
- 6 providers: Flux, Gemini, Grok, OpenAI (gpt-image-1/dall-e-3), Sora, and Veo
- 13 Flux models: FLUX.1, FLUX.2, Kontext, Fill, Expand, Ultra variants
- Unified trait interface: Same API regardless of provider
- Image editing: Edit existing images with text prompts (all providers)
- Format validation: Verify image magic bytes match claimed format
- Robust error handling: Typed errors with retryability, billing detection, rate limit headers
- CLI included: Generate images and videos from the command line
- MCP server: Integrate with Claude Code and other AI agents
Installation
[]
= "0.2.0"
Feature flags:
flux-image(default) - Enable Flux image provider (13 models)gemini-image(default) - Enable Gemini image providergrok-image(default) - Enable Grok Imagine provideropenai-image(default) - Enable OpenAI image provider (gpt-image-1, dall-e-3)grok-video(default) - Enable Grok video provideropenai-video(default) - Enable Sora video providerveo(default) - Enable Veo video providercli- Build CLI binary
Quick Start
use ;
async
Image Providers
Gemini (Google)
use ;
// Nano Banana Pro (default, highest quality)
let provider = builder.build?;
// Nano Banana (faster, cheaper)
let provider = builder
.model
.build?;
Requires GOOGLE_API_KEY env var. Get one at Google AI Studio.
Flux (Black Forest Labs)
use ;
// Flux Pro 1.1 (default)
let provider = builder.build?;
// FLUX.2 Max (latest, editing + generation)
let provider = builder
.model
.build?;
// Kontext Pro (context-aware editing)
let provider = builder
.model
.build?;
Available models: FluxPro11, FluxPro11Ultra, FluxPro, FluxDev, Flux2Max, Flux2Pro, Flux2Flex, Flux2Klein4B, Flux2Klein9B, KontextPro, KontextMax, FillPro, ExpandPro
Requires BFL_API_KEY env var. Get one at api.bfl.ai.
Grok Imagine (xAI)
use GrokProvider;
let provider = builder.build?;
Requires XAI_API_KEY env var. Get one at x.ai.
OpenAI (gpt-image-1, dall-e-3)
use ;
// gpt-image-1 (default)
let provider = builder.build?;
// DALL-E 3
let provider = builder
.model
.build?;
Requires OPENAI_API_KEY env var. Get one at platform.openai.com.
Video Providers
Grok Imagine Video (xAI)
use ;
let provider = builder.build?;
let request = new.with_duration;
let video = provider.generate.await?;
video.save?;
Sora (OpenAI)
use ;
let provider = builder.build?;
let request = new
.with_duration
.with_aspect_ratio;
let video = provider.generate.await?;
video.save?;
Requires OPENAI_API_KEY env var.
Veo (Google)
use ;
let provider = builder.build?;
let request = new
.with_resolution;
let video = provider.generate.await?;
video.save?;
Requires GOOGLE_API_KEY env var with billing enabled.
CLI Usage
# Install
# Generate images
# Image editing (all providers support --input)
# Generate videos
# List providers
# JSON output
Provider capabilities:
| Provider | --aspect-ratio |
--width/--height |
--seed |
--input (editing) |
|---|---|---|---|---|
| Gemini | - | - | yes | yes |
| Flux | yes | yes | yes | yes |
| Grok | yes | - | - | yes |
| OpenAI | yes | yes | - | yes |
MCP Server (AI Agent Integration)
Run as an MCP server for integration with Claude Code and other AI agents:
Claude Code Configuration
Add to ~/.claude/claude_desktop_config.json:
Available Tools
generate_image
| Parameter | Required | Description |
|---|---|---|
prompt |
Yes | Text description of the image |
provider |
No | gemini (default), flux, grok, or openai |
output_path |
No | Save path (returns base64 if omitted). Use {n} placeholder for batch. |
model |
No | Model variant |
width/height |
No | Dimensions in pixels (Flux/OpenAI) |
aspect_ratio |
No | 1:1, 16:9, 9:16, 4:3, 3:4, 21:9 |
seed |
No | For deterministic generation (Gemini/Flux) |
count |
No | Number of images (1-10, default 1) |
concurrency |
No | Max parallel requests (1-5, default 3) |
input_image |
No | Base64-encoded image for editing (all providers) |
generate_video
| Parameter | Required | Description |
|---|---|---|
prompt |
Yes | Text description of the video |
provider |
No | grok (default), openai, or veo |
output_path |
No | Save path |
duration |
No | Video duration in seconds |
aspect_ratio |
No | e.g., 16:9, 9:16 |
Request Options
let request = new
.with_aspect_ratio // 16:9
.with_seed // Deterministic
.with_format; // Output format
Error Handling
use GenVizError;
match provider.generate.await
License
MIT