CLI for AI media generation — images and videos from text prompts. Built for developers who want to generate assets directly from the terminal or let AI coding assistants (like Claude Code) produce visuals autonomously during development.
Supports multiple providers with an extensible architecture: Gemini (Google, free tier), Freepik (10+ models), and Higgsfield (images + video).
One command does everything — installs dependencies, builds, links globally, installs the Claude Code skill, and configures credentials:
git clone git@github.com:tree-ia/media-generator-cli.git
cd media-generator-cli
./setup.shThe setup script will:
- Install dependencies (
npm install) - Build the project (
tsc) - Link
mediagenglobally (npm link) - Install the Claude Code skill at
~/.claude/skills/mediagen/ - Prompt for provider selection and API credentials (saved to
~/.config/mediagen/config.json)
If you prefer to set things up manually:
git clone git@github.com:tree-ia/media-generator-cli.git
cd media-generator-cli
npm install
npm run build
npm link
# Install Claude Code skill
mkdir -p ~/.claude/skills/mediagen
cp skills/SKILL.md ~/.claude/skills/mediagen/SKILL.md
# Configure credentials
mediagen config set provider gemini
mediagen config set api-key YOUR_GEMINI_API_KEYmediagen --help
mediagen modelsGemini (free tier available):
- Go to aistudio.google.com/apikey
- Create an API key
- Configure:
mediagen config set provider gemini
mediagen config set api-key YOUR_KEYFreepik (€5 free credit):
- Go to freepik.com/api → Developer Dashboard
- Generate an API key
- Configure:
mediagen config set provider freepik
mediagen config set api-key YOUR_KEYHiggsfield (Creator plan required):
- Go to cloud.higgsfield.ai/api-keys
- Generate a new API key pair (Key + Secret)
- Configure:
mediagen config set provider higgsfield
mediagen config set api-key YOUR_KEY
mediagen config set api-secret YOUR_SECRETmediagen config # show current config (credentials masked)
mediagen config show --json # JSON output
mediagen config path # show config file location
mediagen config providers # list available providers
mediagen config set provider <name> # change default provider
mediagen config set api-key <key> # save API key for current provider
mediagen config set api-secret <secret> # save API secret (Higgsfield only)
mediagen config set output-dir <path> # change default output directory
mediagen config remove <provider> # remove stored credentialsAll config is stored in ~/.config/mediagen/config.json.
Every command and subcommand has --help with examples:
mediagen --help
mediagen image --help
mediagen image generate --help
mediagen video generate --help# Basic
mediagen image generate --prompt "modern office building at sunset"
# With size and quality
mediagen image generate \
--prompt "hero banner for construction company" \
--size 16:9 \
--quality 2K \
--output ./public/hero.png
# With specific provider and model
mediagen image generate \
--prompt "logo design" \
--provider gemini \
--model gemini-pro-preview \
--quality 2K \
--output ./logo.png
# Non-blocking (returns request ID immediately — Freepik/Higgsfield only)
mediagen image generate --prompt "test image" --no-pollVideo generation is currently supported by Higgsfield only.
# From local image
mediagen video generate \
--image ./hero.png \
--prompt "cinematic zoom out" \
--provider higgsfield \
--output ./hero-video.mp4
# From URL with specific model
mediagen video generate \
--image https://example.com/photo.png \
--prompt "slow pan right" \
--model seedance \
--provider higgsfield \
--output ./pan.mp4mediagen status <request-id>
mediagen status <request-id> --jsonmediagen models # list models for current provider
mediagen models --provider freepik # list models for a specific provider
mediagen styles # list image styles
mediagen motions # list video motion presetsUpload a local file to get a public URL (useful for video generation, Higgsfield only):
mediagen upload ./reference.pngCharacters provide visual consistency across multiple generations (Higgsfield only):
mediagen characters list
mediagen characters create --name "Worker" --images ./ref1.png ./ref2.png
mediagen image generate --prompt "worker on site" --character <id> --output ./scene.png| Model | Name | Quality | Notes |
|---|---|---|---|
gemini-flash |
Gemini 2.5 Flash | Good | Fast, free tier available |
gemini-flash-preview |
Gemini 3.1 Flash Preview | High | Supports 2K/4K |
gemini-pro-preview |
Gemini 3 Pro Preview | Highest | Supports 2K/4K, slower |
| Model | Name | Notes |
|---|---|---|
mystic |
Mystic | Flagship, hyper-realistic |
flux-2-pro |
Flux 2 Pro | High quality, custom dimensions |
flux-2-klein |
Flux 2 Klein | Sub-second generation |
flux-kontext |
Flux Kontext Pro | Context-aware |
flux-pro |
Flux Pro 1.1 | Great detail |
flux-dev |
Flux Dev | Lighting/framing effects |
hyperflux |
HyperFlux | Ultra-fast |
seedream-4.5 |
Seedream 4.5 | Creative, cinematic |
seedream-4 |
Seedream 4 | Artistic |
runway |
RunWay | Pixel ratio format |
| Model | Type | Notes |
|---|---|---|
soul |
Image | Flagship text-to-image |
reve |
Image | Versatile |
seedream |
Image | ByteDance, artistic |
dop-preview |
Video | Fast preview quality |
dop-standard |
Video | Highest quality |
seedance |
Video | Professional-grade |
kling |
Video | Cinematic animations |
These flags work on all generation commands:
| Flag | Description |
|---|---|
--provider <name> |
Override default provider |
--output, -o <path> |
Save result to local file |
--json |
Machine-readable JSON output |
--no-poll |
Return request ID without waiting |
--help, -h |
Show help for any command |
Use --size with any of these ratios:
1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9
mediagen is designed to be used by AI coding assistants via the --help self-documentation pattern. Claude Code can run mediagen --help, understand all commands, and generate assets autonomously during development.
Copy the included skill to your Claude Code skills directory:
# Global (available in all projects)
cp -r skills/SKILL.md ~/.claude/skills/mediagen/SKILL.md
# Per-project
mkdir -p .claude/skills/mediagen
cp skills/SKILL.md .claude/skills/mediagen/SKILL.mdOnce installed, Claude Code will automatically use mediagen when you ask it to generate images or videos for your project.
CLI (mediagen) |
MCP Server | |
|---|---|---|
| Context cost | ~350 tokens | ~50,000+ tokens |
| Setup | npm link |
JSON config + server process |
| Self-documenting | --help on every command |
Schema loaded upfront |
| Composability | Unix pipes, &&, output redirection |
None |
| LLM fluency | Trained on billions of CLI interactions | Zero training data on MCP schemas |
src/
├── index.ts # Entry point, commander setup
├── config.ts # Configuration (~/.config/mediagen/config.json)
├── commands/ # One file per command group
│ ├── image.ts # mediagen image generate
│ ├── video.ts # mediagen video generate
│ ├── status.ts # mediagen status <id>
│ ├── models.ts # mediagen models
│ ├── styles.ts # mediagen styles
│ ├── motions.ts # mediagen motions
│ ├── upload.ts # mediagen upload <file>
│ ├── characters.ts # mediagen characters list|create
│ └── config.ts # mediagen config show|set|remove|providers
├── providers/
│ ├── types.ts # Provider interface (contract)
│ ├── registry.ts # Provider factory
│ ├── gemini/ # Google Gemini (direct API)
│ │ ├── index.ts
│ │ ├── client.ts
│ │ └── models.ts
│ ├── freepik/ # Freepik API
│ │ ├── index.ts
│ │ ├── client.ts
│ │ └── models.ts
│ └── higgsfield/ # Higgsfield API
│ ├── index.ts
│ ├── client.ts
│ └── models.ts
└── utils/
├── output.ts # Formatting (table, colors, JSON)
└── download.ts # Download results to local files
- Create
src/providers/<name>/index.tsimplementing theProviderinterface - Register it in
src/providers/registry.ts - No changes needed in commands — they work through the provider abstraction
After pulling new changes:
./update.shThis rebuilds, relinks globally, and updates the Claude Code skill.
# Run without building (uses tsx)
npm run dev -- image generate --prompt "test"
# Build
npm run build
# Type-check only
npx tsc --noEmitMIT