Skip to main content

Multimodal media generation CLI for Google GenAI

Project description

genmedia

Multimodal media generation CLI for Google GenAI. Images, video, and image editing from the terminal. Bring your own API key.

Install

# uv (fastest)
uv tool install genmedia

# or run without installing
uvx genmedia image "a cat on a skateboard" --pretty

# pipx
pipx install genmedia

# pip
pip install genmedia

Requires Python 3.11+.

Setup

Get a Gemini API key and set it:

export GEMINI_API_KEY="your-key-here"

Usage

Generate images

# Simple
genmedia image "a cat on a skateboard" --pretty

# Full control
genmedia image "abstract gradient, soft pastels" \
  --model gemini-3.1-flash-image-preview \
  --size 4K \
  --aspect 16:9 \
  --output backgrounds/pastel.png

# Batch
genmedia image "product mockup on marble" --count 3 --output-dir shots/

# Using Imagen
genmedia image "photorealistic mountain lake" --model imagen-4.0-generate-001

Edit images

genmedia edit input.png "remove the background" --pretty
genmedia edit photo.jpg "make the sky more dramatic" -o edited.jpg

Generate video

# Text-to-video
genmedia video "a cat riding a skateboard downhill at sunset" --duration 8 --pretty

# Image-to-video (animate a still image)
genmedia video "the scene comes to life" --image keyframe.jpg --pretty

# Frame interpolation (morph between two images)
genmedia video "smooth transition" --image start.jpg --last-frame end.jpg

List models

genmedia image --list-models
genmedia video --list-models

Dry run

genmedia image "test" --dry-run   # shows request payload without calling API

Output

JSON by default (for AI agents and scripts):

{
  "status": "success",
  "files": [
    {
      "path": "/tmp/genmedia/genmedia_001.jpg",
      "mime_type": "image/jpeg",
      "size_bytes": 534182
    }
  ],
  "model": "gemini-3.1-flash-image-preview",
  "elapsed_seconds": 14.3,
  "request": {
    "prompt": "a cat on a skateboard",
    "aspect_ratio": "16:9"
  }
}

Use --pretty for human-friendly output:

Saved to /tmp/genmedia/genmedia_001.jpg (521.7 KB)
Model: gemini-3.1-flash-image-preview | Time: 14.3s

Errors go to stderr as JSON with distinct exit codes:

  • 0 — success
  • 1 — API error (rate limit, server error, content blocked)
  • 2 — validation error (bad params, missing API key)
  • 3 — file I/O error

Models

Image generation

Model Notes
gemini-3.1-flash-image-preview Default. Best quality.
gemini-3-pro-image-preview Previous generation.
gemini-2.5-flash-image Older, faster.
imagen-4.0-generate-001 Imagen. Different API, good for photorealism.

Video generation

Model Notes
veo-3.0-generate-001 Default. Standard quality.
veo-3.0-fast-generate-001 Faster, lower quality.
veo-3.1-generate-preview Newer preview.
veo-3.1-fast-generate-preview Newer fast preview.

For AI agents

genmedia is designed to be called by AI agents. JSON output by default, structured errors on stderr, distinct exit codes for branching. No interactive prompts, no spinners unless --pretty is set.

import subprocess, json

result = subprocess.run(
    ["genmedia", "image", "a logo for my app", "--aspect", "1:1"],
    capture_output=True, text=True
)

if result.returncode == 0:
    data = json.loads(result.stdout)
    image_path = data["files"][0]["path"]

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

genmedia-0.1.1.tar.gz (42.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

genmedia-0.1.1-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

Details for the file genmedia-0.1.1.tar.gz.

File metadata

  • Download URL: genmedia-0.1.1.tar.gz
  • Upload date:
  • Size: 42.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for genmedia-0.1.1.tar.gz
Algorithm Hash digest
SHA256 654df8e57bc13e5af99657c9320ad9ad5f39164f77fdc2c2dd1a979b5f8714e4
MD5 84918774dba92409bfdb8951046737d8
BLAKE2b-256 2d13e54b70b15d11ffed71ab9087e095c4ebac721718b01d9c783d75eb65ae27

See more details on using hashes here.

File details

Details for the file genmedia-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: genmedia-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 18.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for genmedia-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f70955c432dbd6de223546b32384952e6d18a15134cffafe2e60557d45dbf568
MD5 11246ed85c45d3622e8d6117a4282744
BLAKE2b-256 95b757ba9694982a82194f0bd7789b363526f4670f296649a14328b354639664

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page