The project's README from github.com/GENEXIS-AI/gpt-image-skill. As one markdown file: README.md.
Generate and edit GPT images from Codex, Claude Code, Google Antigravity, or another compatible local agent through the user's ChatGPT subscription. Direct prompts stay unchanged; when the user delegates several different designs, the agent develops a distinct image-ready prompt for each concept. Real reference files pass into generation, bridge-produced transparent PNGs are checked for alpha/transparency support, results stay in the active project, and ready outputs run with bounded parallelism.
install skill → Sign in with ChatGPT → direct prompt or delegated concept prompts + local image inputs
→ single generate or bounded parallel batch
→ built-in $imagegen → <project>/generated-images/*.png
This repository does not call the OpenAI Images API and does not create a separately billed Images API request. Built-in image generation still consumes included ChatGPT/Codex usage and remains subject to plan and workspace limits. OpenAI currently states that Codex image generation is not available on the Free plan and that supported-plan image generations use included limits 3–5× faster on average than similar non-image turns, depending on quality and size. This skill does not bypass that boundary.


Paste this into Codex, Claude Code, Google Antigravity, or another local coding agent:
Install and verify GPT Image Skill for the current user from:
https://github.com/GENEXIS-AI/gpt-image-skill
For this task, I authorize read-only environment checks; a persistent clone or safe fast-forward update;
user-level installation of missing Git, a supported Node.js 22+ LTS, and Codex CLI;
creation of the gpt-image links for Codex, Claude Code, and Google Antigravity; and starting Sign in with ChatGPT device authorization.
Read AGENT_INSTALL.md at the repository root and follow it as the one-time installation contract.
Do not use the Images API, OPENAI_API_KEY, or API-key login. Do not generate a live image yet.
Pause only if administrator privileges are required, an unrelated existing path would be changed,
local changes would be discarded, or existing Codex authentication would need to be replaced.
Otherwise, install the required components, run bootstrap --target all --yes --json,
and continue until bootstrap's consolidated readiness report shows best_practice_pass=true.
Do not add a separate doctor, plan, inspect, or no-image generation check when bootstrap passes.
Finally, report the persistent clone path, all three installed skill paths, and ChatGPT-auth evidence.
Then give me the brief getting_started guide in my language: common aspect ratios,
quality phrases, one creation example, one reference or revision example, and one transparent-background example.
Do not use unexplained jargon such as "dry-run"; call it a setup check that does not create an image.
This prompt authorizes ordinary user-level setup without authorizing administrator elevation, destructive changes, replacement of existing authentication, a live generation, or a GitHub Star. The full boundary is in AGENT_INSTALL.md.
After setup, invoke $gpt-image in Codex, /gpt-image in Claude Code, or mention gpt-image in an Antigravity request. Antigravity discovers the global skill automatically from its official skill directory. The host loads the concise skill only for image tasks; it does not need to reread this README on every request.
The installing agent should end with a small guide like this, translated into the user's language:
GPT Image Skill is ready. No image was generated during setup.
Common aspect-ratio requests: 1:1, 16:9, 9:16, 4:3, 3:4
Quality phrases: draft, high quality, high detail / final quality
Try:
$gpt-image Create a cozy reading room at sunset, 16:9, high quality.
/gpt-image Use @references/character.png as the character reference and place it in a rainy city, 9:16, high quality.
Use the gpt-image skill to create a flat blue robot app icon with a transparent background, 1:1, high quality.
CLI model policy: no model ID is pinned; Codex selects a current account-available model at Low reasoning.
Plan note: setup verifies sign-in, not image entitlement. Current Codex pricing excludes image generation from Free.
These are common natural-language requests, not a fixed API size list. Other framing or dimension requests can be written normally, and exact pixel dimensions may vary with built-in image generation. The guide appears once after installation rather than after every image.
For one direct image or edit, the skill forwards the user's image request unchanged. It does not “improve” a short prompt with unsolicited details. A request such as “make five different poster designs” is different: it explicitly asks the agent to develop five creative concepts. The agent preserves the shared subject, references, brand, text, ratio, and other constraints, then sends one complete, meaningfully different image prompt per output. Job numbers remain in IDs and filenames, never in image prompts.
The bridge requires a readable local PNG, JPEG, or WebP path for each reference. It passes those files into the actual $imagegen call. It never replaces an unresolved reference with a text description and continues anyway.
In Claude Code or Antigravity:
@path/to/image.png or an explicit filesystem path.codex exec process.<project>/generated-images/inputs/ and uses the copy.~/.claude/image-cache; choosing “the newest image” could select the wrong or private file.Each bridge invocation is ephemeral. For “change the result you just made,” the agent must use the previous generated output as the next --edit-target and reattach every still-needed reference. Reusing the original source is a different operation and loses the prior edit.
The default path is:
quick ChatGPT-auth check → current account-available Codex model at Low reasoning
→ built-in image generation → minimal PNG sanity check
→ PATH + inline Markdown
Planning, the setup check that does not create an image (--dry-run), capabilities --json, inspect --input, and detailed JSON remain available for troubleshooting. They are not required before a normal image request.
Codex model names and availability change over time. The default CLI bridge therefore does not pin Luna, Sol, Terra, or any other model ID and does not embed a model catalog. Codex selects a current model available to the signed-in account, while the runner requests Low reasoning—the CLI name for Light in the ChatGPT app. The selected Codex model receives a finalized, tightly scoped instruction and calls $imagegen.
The image renderer is not pinned either. OpenAI currently documents Codex's built-in renderer as gpt-image-2, but this repository invokes the built-in image-generation capability by name so OpenAI can update the underlying renderer without a skill release. The outer Codex model can affect tool routing and instruction following, but it does not replace the built-in renderer or directly set its visual rendering quality.
The default auto policy is intentionally small:
--orchestrator-model account-default removes even the Low override and leaves both model and reasoning to Codex. A current model ID can still be pinned as an advanced, explicit user choice; the runner accepts the ID without maintaining its own allowlist.
This policy lowers bridge overhead on supported plans, but it cannot make image generation available on ChatGPT Free. Codex itself is included in Free, while the official pricing page separately says image generation is unavailable there. See Codex models, Codex image generation, and Codex pricing.
generate remains the one-image happy path. For two or more outputs, the skill automatically batches every job whose inputs already exist. Different design concepts run independently; same-design variants may run together while reading one shared edit target or design reference. Only an output-to-input dependency creates another stage. The batch checks ChatGPT auth once and uses default concurrency 2, maximum 4, with no Doctor, planning, inspection, model-discovery preflight, fallback turn, or image-generation retry per job.
$imagegen under Sign in with ChatGPTimage_gen tool directly only when it is backed by included ChatGPT/Codex usageOPENAI_API_KEY, API-key Codex login, and Images API fallbackgpt-image skill for Codex, Claude Code, and Google AntigravityPATH=... and absolute MARKDOWN=... after normal generation| Intent | Bridge arguments |
|---|---|
| Text-to-image | --mode generate |
| New image guided by a reference | --mode generate --reference PATH |
| Multiple references | Repeat --reference; add matching --reference-role only for explicit roles |
| Change an existing image | --mode edit --edit-target PATH |
| Change the last generated image | Use the last returned path as the new --edit-target |
| Variation | --mode variation --edit-target PATH |
| Transparent output | Use --background transparent only when requested |
| Same design, different styles | Repeat --mode variation --edit-target SAME_PATH in a batch |
| Same identity, different scenes | Repeat --mode generate --reference SAME_PATH in a batch |
| Different designs in parallel | Give each batch job its own prompt and references |
| CLI model routing | Default auto = current account-available Codex model at Low reasoning |
The edit target is Image 1. Supporting references follow in command-line order.
image_gen.| Environment | Status | Keep together |
|---|---|---|
| macOS | Supported | macOS Node.js, Codex, clone, and workspace |
| Linux | Supported | Linux Node.js, Codex, clone, and workspace |
| Native Windows | Supported | Windows Node.js, Codex, junctions, and workspace |
| WSL2 | Supported | Keep the complete toolchain on the Linux side |
| WSL1 | Unsupported | Move to WSL2 or native Windows |
Use a persistent clone because the installed skill links point to it.
REPOSITORY_URL="https://github.com/GENEXIS-AI/gpt-image-skill"
INSTALL_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/gpt-image-skill"
git clone "$REPOSITORY_URL" "$INSTALL_DIR"
cd "$INSTALL_DIR"
node ./gpt-image/scripts/validate_skill.mjs
node ./gpt-image/scripts/gpt_image.mjs bootstrap --target all --yes --json
Keep WSL2 clones under the Linux home directory, not /mnt/c.
$RepositoryUrl = "https://github.com/GENEXIS-AI/gpt-image-skill"
$InstallDir = Join-Path $env:LOCALAPPDATA "gpt-image-skill"
git clone $RepositoryUrl $InstallDir
Set-Location $InstallDir
node .\gpt-image\scripts\validate_skill.mjs
node .\gpt-image\scripts\gpt_image.mjs bootstrap --target all --yes --json
Installed locations:
~/.agents/skills/gpt-image~/.claude/skills/gpt-image~/.gemini/config/skills/gpt-image$env:USERPROFILE\.agents\skills\gpt-image, $env:USERPROFILE\.claude\skills\gpt-image, and $env:USERPROFILE\.gemini\config\skills\gpt-imagemacOS, Linux, and WSL2 use symlinks. Native Windows uses directory junctions. Existing unrelated paths are never replaced.
The Antigravity target is the current global skill location documented for the Antigravity app. For the Antigravity SDK, skills_paths may instead point directly to the repository's gpt-image directory. Image generation still runs through the ChatGPT-authenticated Codex bridge; the skill deliberately does not substitute Antigravity's provider-native generate_image tool.
A successful bootstrap includes:
{
"ok": true,
"status": "ready",
"doctor": {
"platform_supported": true,
"node_supported": true,
"codex_available": true,
"chatgpt_subscription_login": true,
"api_environment_forwarded": false,
"codex_skill_installed": true,
"claude_skill_installed": true,
"antigravity_skill_installed": true,
"best_practice_pass": true
},
"getting_started": {
"present_in_user_language": true,
"common_aspect_ratios": [
{ "ratio": "1:1" },
{ "ratio": "16:9" },
{ "ratio": "9:16" },
{ "ratio": "4:3" },
{ "ratio": "3:4" }
]
}
}
The user completes browser or device authorization personally. The skill never requests or reads a password, token, API key, or ~/.codex/auth.json.
Codex:
$gpt-image A cobalt-blue glass robot on a warm off-white background.
Claude Code:
/gpt-image A cobalt-blue glass robot on a warm off-white background.
Google Antigravity:
Use the gpt-image skill to create a cobalt-blue glass robot on a warm off-white background.
Direct runner:
node ./gpt-image/scripts/gpt_image.mjs generate \
--prompt "A cobalt-blue glass robot on a warm off-white background." \
--out "generated-images/glass-robot.png"
The command above uses the default auto policy: Codex selects a current model available to the signed-in account, while the runner requests Low reasoning. No model catalog, model discovery, fallback, or extra diagnostic turn is involved. To leave both the model and reasoning effort entirely at Codex defaults:
node ./gpt-image/scripts/gpt_image.mjs generate \
--prompt "A cobalt-blue glass robot on a warm off-white background." \
--orchestrator-model account-default \
--out "generated-images/glass-robot.png"
An advanced caller can explicitly pin any current Codex orchestrator and reasoning effort. The runner deliberately has no model-ID allowlist because the catalog changes. This changes the agent that routes $imagegen, not the built-in renderer:
node ./gpt-image/scripts/gpt_image.mjs generate \
--prompt "A cobalt-blue glass robot on a warm off-white background." \
--orchestrator-model "<current-codex-model-id>" \
--orchestrator-effort medium \
--out "generated-images/glass-robot.png"
Ask for transparency naturally in any supported host:
Use the gpt-image skill to create a flat cobalt-blue robot app icon with a transparent background, 1:1, high quality.
The agent keeps the creative prompt authoritative and routes transparency separately. With the bridge, the explicit runner form is:
node ./gpt-image/scripts/gpt_image.mjs generate \
--prompt "Create a flat cobalt-blue robot app icon, 1:1, high quality." \
--background transparent \
--out "generated-images/robot-icon-transparent.png"
Transparent output must be a PNG with an alpha channel or PNG transparency chunk. When --background transparent is requested, the runner rejects a PNG that has neither; this verifies transparency support without pretending to be a visual-quality review. A checkerboard pattern, white canvas, or solid-color background is not a valid substitute for transparency. If a subscription-native host tool has no real background control, the skill uses the bridge when available instead of claiming transparency it cannot verify.
In Claude Code, give the skill a stable path:
/gpt-image Use @references/robot.png as the character reference. Draw it riding a bicycle.
In Antigravity, use an explicit readable workspace path:
Use the gpt-image skill with references/robot.png as the character reference. Draw it riding a bicycle.
Direct runner:
node ./gpt-image/scripts/gpt_image.mjs generate \
--mode generate \
--prompt "Draw this character riding a bicycle." \
--reference "/absolute/path/robot.png" \
--out "generated-images/robot-bicycle.png"
First edit:
node ./gpt-image/scripts/gpt_image.mjs generate \
--mode edit \
--prompt "Replace the bicycle basket with a small wooden crate." \
--edit-target "generated-images/robot-bicycle.png" \
--out "generated-images/robot-bicycle-crate.png"
Follow-up edit—use the edited result, not the original:
node ./gpt-image/scripts/gpt_image.mjs generate \
--mode edit \
--prompt "Make the wooden crate dark green." \
--edit-target "generated-images/robot-bicycle-crate.png" \
--out "generated-images/robot-bicycle-green-crate.png"
node ./gpt-image/scripts/gpt_image.mjs generate \
--prompt "Use Image 1 for the character and Image 2 for the bicycle design." \
--reference "/absolute/path/character.png" \
--reference-role "character" \
--reference "/absolute/path/bicycle.png" \
--reference-role "bicycle design" \
--out "generated-images/combined.png"
The skill chooses one of three structures without asking the user to know the CLI:
variation for the same composition in different styles, or use the design as the first reference when identity moves into different scenes or layouts.