Skip to content
Content
MCP

media-pipeline

Ships with media-pipeline: AI-powered image generation using Google Gemini or OpenAI (gpt-image-2), integrated with Claude Code.

From plugin
media-pipeline
831 skill1 MCP

Claude Code

> /plugin marketplace add guinacio/claude-image-gen
> /plugin install media-pipeline@media-pipeline-marketplace

From the README

What can you do with media-pipeline?

  • Generate images from text prompts using Google Gemini or OpenAI (gpt-image-2)

  • Dual-provider support

    model name routes the request automatically (gpt-image* → OpenAI, everything else → Gemini; dall-e* shut down on 2026-05-12)

  • Proactive Claude skill suggests images for websites, presentations, and more

  • Opt-in specialized workflows for narrower production pipelines, without adding them to every installation

  • Two execution modes

    CLI script (skill-only) or MCP server (protocol-based)

  • Configurable aspect ratios (1:1, 16:9, 9:16, etc.)

  • Multiple model support (quality vs speed) across both providers

  • Optional reference images to guide generation (up to 5, PNG/JPEG/WebP) on both providers

Security report

Info

Not enough data

  • Known flaws

    Not published

  • Signed build

    Not published

  • Maintained

    Nov 8, 2026

    Last push

  • Licence

    MIT

  • Runs as

    Local process

    On your machine

  • Deprecated

    Not published

Signals from public registries, not an audit. Checked Nov 15, 2026.

media-pipeline README

AI Image Generation - Claude Skill + MCP

AI-powered image generation using Google Gemini or OpenAI (gpt-image-2), integrated with Claude Code.

Features

  • Generate images from text prompts using Google Gemini or OpenAI (gpt-image-2)
  • Dual-provider support: model name routes the request automatically (gpt-image* → OpenAI, everything else → Gemini; dall-e* shut down on 2026-05-12)
  • Proactive Claude skill suggests images for websites, presentations, and more
  • Opt-in specialized workflows for narrower production pipelines, without adding them to every installation
  • Two execution modes: CLI script (skill-only) or MCP server (protocol-based)
  • Configurable aspect ratios (1:1, 16:9, 9:16, etc.)
  • Multiple model support (quality vs speed) across both providers
  • Optional reference images to guide generation (up to 5, PNG/JPEG/WebP) on both providers
  • Inpainting with a PNG mask, plus background and outputFormat control (including animated GIF and SVG), on OpenAI models
  • Images saved to disk within the configured output directory, with file paths returned
  • MCP server speaks the MCP 2026-07-28 spec, with backward compatibility for older MCP clients

Prerequisites

  • Google Gemini API key (Get one here) and/or an OpenAI API key (Get one here) — at least one is required
  • Node.js 20+ (only for manual installation)

Installation

Quick Install (Claude Code Plugin)

The plugin installs the core image-generation skill + CLI + MCP server in one step—no separate configuration needed. Specialized workflows are intentionally opt-in.

# Add the marketplace
/plugin marketplace add guinacio/claude-image-gen

# Install the plugin
/plugin install media-pipeline@media-pipeline-marketplace

Or install directly from GitHub:

/plugin install guinacio/claude-image-gen

Once installed:

  • Core skill uses the bundled CLI script (no MCP overhead)
  • MCP server is also available for direct tool calls
  • Specialized workflows are not auto-installed; add only the ones you need

Tip: Since the skill runs the CLI directly, you can disable the MCP server in Claude Code's MCP list to reduce startup overhead. The skill will continue to work without it.


Quick Install (Claude Desktop Extension)

For Claude Desktop users, install the pre-built extension:

  1. Download media-pipeline.mcpb from Releases
  2. Open Claude Desktop
  3. Go to Settings → Extensions → Advanced settings
  4. Click Install Extension and select the .mcpb file
  5. Enter your Gemini and/or OpenAI API key when prompted (at least one is required)

Manual Installation

For developers who want to customize or build from source:

1. Build the MCP Server
cd mcp-server
npm install
npm run bundle
2. Use the Standalone CLI
cd mcp-server
GEMINI_API_KEY=your-api-key-here node build/cli.bundle.js \
  --prompt "Landing page hero image for a fintech startup" \
  --aspect-ratio "16:9"

The CLI routes to Gemini or OpenAI based on the model name and returns structured JSON on stdout. It does not require the MCP server layer. Any custom output path must still remain inside the configured output directory.

To run the CLI from any folder, install it as a command from the repository root:

npm install -g ./mcp-server
media-pipeline-cli --help

Installing a local folder globally links to it, so later builds of the clone are picked up without reinstalling. The CLI reads its settings from environment variables (see Configuration), so set at least one API key in your shell or system environment.

3. Add to Claude Code

Option A: Using MCP server

claude mcp add --transport stdio media-pipeline \
  --env GEMINI_API_KEY=your-api-key-here \
  -- node /path/to/claude-image-gen/mcp-server/build/bundle.js

The -- separates Claude CLI flags from the server command.

Option B: Manual config

Add to your Claude Code config (~/.claude.json):

{
  "mcpServers": {
    "media-pipeline": {
      "command": "node",
      "args": ["/path/to/claude-image-gen/mcp-server/build/bundle.js"],
      "env": {
        "GEMINI_API_KEY": "${GEMINI_API_KEY}",
        "GEMINI_DEFAULT_MODEL": "${GEMINI_DEFAULT_MODEL:-gemini-3-pro-image}",
        "OPENAI_API_KEY": "${OPENAI_API_KEY}",
        "OPENAI_DEFAULT_MODEL": "${OPENAI_DEFAULT_MODEL:-gpt-image-2}",
        "IMAGE_PROVIDER": "${IMAGE_PROVIDER:-gemini}",
        "IMAGE_OUTPUT_DIR": "${IMAGE_OUTPUT_DIR:-~/generated-images}",
        "REQUEST_TIMEOUT_MS": "${REQUEST_TIMEOUT_MS:-60000}",
        "MEDIA_PIPELINE_LOG_LEVEL": "${MEDIA_PIPELINE_LOG_LEVEL:-info}"
      }
    }
  }
}

The ${VAR:-default} syntax uses environment variables with fallback defaults.

Running Claude Code inside the clone: the repository's own .mcp.json is the plugin's server definition, and its path uses ${CLAUDE_PLUGIN_ROOT}, which is only set when the repository is installed as a plugin. In a session opened in the clone, Claude Code loads it as a project server that takes the place of the media-pipeline server configured above, and it fails with Cannot find module '…${CLAUDE_PLUGIN_ROOT}…bundle.js'. To keep using your own config there, trust the folder, then disable the project server in .claude/settings.local.json (ignored by git; Claude Code reads that file in a trusted folder) and restart Claude Code:

{
  "disabledMcpjsonServers": ["media-pipeline"]
}
4. Install Skill Manually (Optional)

If not using the plugin:

cp -r skills/image-generation ~/.claude/skills/

Outside the plugin, the skill runs the media-pipeline-cli command, so install the CLI as a command first (step 2).

5. Install a Specialized Workflow (Optional)

Specialized workflows live outside skills/, so the plugin does not discover or install them automatically. The current character-reference workflow is for dressing Blender character renders and preparing garments for image-to-3D tools.

From a cloned repository:

python -m pip install -r optional-workflows/character-reference-sheets/requirements.txt
cp -r optional-workflows/character-reference-sheets ~/.claude/skills/

Built a specialized workflow of your own? See Contributing a Specialized Workflow.

6. Build Extension from Source (Optional)

To create your own .mcpb extension for Claude Desktop:

cd mcp-server
npm install -g @anthropic-ai/mcpb
npm run pack:mcpb

This creates mcp-server/media-pipeline.mcpb using bundled runtime entry points for both the MCP server and the standalone CLI.

The packed extension is committed to the repo and served from the Releases page, so it must not fall behind source. pack:mcpb records a hash of every packed file in mcp-server/mcpb-contents.json, and npm test recomputes them — change the source without repacking and the suite fails. The archive itself is not byte-reproducible (zip stores timestamps), which is why the inputs are hashed rather than the .mcpb.

Versioning

mcp-server/package.json is the single source of truth for the version. mcp-server/manifest.json, mcp-server/package-lock.json, .claude-plugin/plugin.json and .claude-plugin/marketplace.json are all derived from it — never edit their version fields by hand.

To bump:

cd mcp-server && npm version minor --no-git-tag-version

npm version updates package.json and the lockfile, then the version lifecycle script propagates it to the remaining manifests and stages them. npm run sync:version does the same propagation on its own, and npm run check:version reports drift without writing. Both npm test and npm run pack:mcpb fail on drift, so a release cannot ship with mismatched manifests.

Usage

Direct Tool Usage

Use create_asset to create a hero image for a tech startup website

With the Skill

The skill will proactively suggest image generation when:

  • Building websites with hero sections
  • Creating presentations
  • Working with placeholder images
  • Developing marketing materials

Configuration

Environment Variables

VariableRequiredDefaultDescription
GEMINI_API_KEYAt least one of GEMINI_API_KEY / OPENAI_API_KEY-Your Gemini API key
GEMINI_DEFAULT_MODELNogemini-3-pro-imageDefault Gemini model to use
OPENAI_API_KEYAt least one of GEMINI_API_KEY / OPENAI_API_KEY-Your OpenAI API key
OPENAI_DEFAULT_MODELNogpt-image-2Default OpenAI model to use
IMAGE_PROVIDERNogeminiProvider (gemini or openai) used when a request omits model
IMAGE_OUTPUT_DIRNo~/generated-imagesWhere to save images. Left unset, the MCP server writes to generated-images in your home directory — not the current directory, since a server launched by Claude Desktop/Code has an unpredictable working directory. Relative paths are resolved against that working directory. ~, $HOME, and %USERPROFILE% are expanded. The bundled plugin config (.mcp.json) sets ./generated-images explicitly, and the CLI defaults to the current directory instead (see --output-dir)
REQUEST_TIMEOUT_MSNo60000Request timeout for both Gemini and OpenAI. GEMINI_REQUEST_TIMEOUT_MS is still read when this one is unset. Claude Desktop stops a tool call at 240 seconds; the extension setting is capped there. SVG generation took about 2.5 minutes, so raise this (or the CLI --timeout-ms) to 180000 for SVG. Claude Code's own cap is MCP_TOOL_TIMEOUT
MEDIA_PIPELINE_LOG_LEVELNoinfoStderr logging level

Providers

The server is dual-provider: it routes each request to Google Gemini or OpenAI (gpt-image-2) automatically based on the model name — models starting with gpt-image go to OpenAI, everything else goes to Gemini. dall-e-2 and dall-e-3 were shut down on 2026-05-12 and are rejected before a request is sent. When a request omits model entirely, IMAGE_PROVIDER selects which provider's default model is used.

  • Aspect ratios on OpenAI: OpenAI image models only support 1024x1024, 1536x1024, and 1024x1536. Requested aspect ratios are mapped to the nearest supported size, and if the mapping isn't exact the response includes a warning describing the substitution.
  • Reference images: supported on both providers — pass up to 5 reference image paths to guide generation.
  • size: OpenAI models only. An exact WIDTHxHEIGHT (or auto) that replaces the aspect ratio mapping above. Refused locally unless both sides are multiples of 16, neither edge exceeds 3840, and the ratio is between 1:3 and 3:1. The GIF frame-sheet budget is left to the API.
  • mask, background, outputFormat, complexity, frameCount, frameDurationMs, svgModel, svgReasoningEffort: OpenAI models only — Gemini models reject them.
    • mask takes an absolute path to a PNG whose transparent areas are the region the model repaints; everything else is preserved from the base image. It requires referenceImages, and OpenAI documents the mask as needing an alpha channel and the same dimensions as the base image. Checked locally: the file really is a PNG, it is under the API's 4MB mask limit (masks are capped well below reference images, whose limit here is 20MB), and it is not fully opaque — an opaque mask marks nothing, so it is rejected before the request is sent. Left to the API: the dimension match, and whether a PNG carrying transparency in a tRNS chunk instead of an alpha channel is accepted — that case is sent with a warning rather than blocked.
@guinacio
Ships withmedia-pipeline
831 skill1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
83
Star history of guinacio/claude-image-gen on GitHub, a chart by star-history.com

More MCP servers from other plugins.

prompts.chat

prompts.chat

MCP

Ships with promptschat: f.k.a. Awesome ChatGPT Prompts. Share, discover, and collect prompts from the community. Free and open…

@gh-f@gh-fInstall MCP
emdash-docs

emdash-docs

MCP

Ships with emdash: A full-stack TypeScript CMS built on Astro. EmDash takes the ideas that made WordPress dominant --…

emdash5d14k
@emdash-cms@emdash-cmsInstall MCP
codegraph

codegraph

MCP

Ships with webiny-js: Open-source content platform. Self-hosted on AWS serverless. Built as a TypeScript framework you extend…

webiny-js4d8.1k
@webiny@webinyInstall MCP
drawio

drawio

MCP

Ships with drawio-mcp: The official draw.io MCP (Model Context Protocol) server that enables LLMs to create and open diagrams in…

@jgraph@jgraphInstall MCP

Questions about media-pipeline.

Which coding agents can use media-pipeline?
media-pipeline works in any agent that reads an MCP config file: Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf. Each agent reads it from its own file; this page names the file for each one.
How do I add media-pipeline to Claude Code?
Run these in order, one at a time. 1. In Claude Code: /plugin marketplace add guinacio/claude-image-gen 2. In Claude Code: /plugin install media-pipeline@media-pipeline-marketplace