Repository navigation
Releases: hex/claude-image-generation
Releases · hex/claude-image-generation
Release list
2026.9.1
What's changed
Features
- Typed
generatetool -- on Claude Code builds with function hooks, the plugin registersmcp__claude-image-generation__generate. The model passesprompt,providers,outputBase,inputImagesandaspectRatioinstead of writing arun-all.shline, and the tool refuses a bad input (blank prompt, unknown provider, anoutputBasewith an extension, a non-W:Hratio) before anything runs. It runsrun-all.shwith the same pane and retry offer, and answers with asavedormissingline per file (3815b07) /configdefaults --Default providers(all,gemini,openai,xai,openrouter) andOutput directory(default.). The tool uses them when a call names no provider or path (3815b07)- Tool first in the command, agent and skill -- they call the tool when it's there and skip the provider and path questions. The Bash path stays for builds without function hooks and for flags the tool doesn't take, like
--image-size,--quality,--backgroundor--model(e6248a5)
Fixes
- openai.sh refuses
--input-fidelityongpt-image-2-- OpenAI says that model always edits at high fidelity and doesn't take the parameter, so the script now exits with a clear error forgpt-image-2and its dated snapshots. Older models keep the flag (3bb2753) - Resize tests no longer fail on a loaded machine -- they waited a fixed 6 seconds; under heavy load the watcher only got 6 to 9 of the 11 width reads the redraw needs. They now wait for the reads themselves (e52d300)
Docs
- README, the skill,
TESTING.mdand the hooks dev loop cover the tool, its refusals, the ten-minute limit, the missing inline preview outside tmux, andclaude plugin test(d0044be, cdcd888) - Release audit:
--input-fidelityandgpt-image-2sizes (anyWxHup to 3840, 3:1) corrected everywhere, xAIqualitydocumented in api-details, the xAI five-image cap scoped to 2.0, OpenAI shutdown dates in the model table,gpt-image-2andgemini-3-pro-imagepricing, the transparent-background preview caveat, OpenRouter's HTTP 200 errors, and the OpenRouter example model moved toopenai/gpt-image-2 - The command and
TESTING.mdno longer point at pane logs after the pane has deleted them;TESTING.md's coverage table and manual steps match the current tests and the tool-first command
Full changelog: 2026.9.0...2026.9.1
2026.9.0
What's changed
Features
- OpenRouter provider --
scripts/openrouter.shreaches any image model OpenRouter routes to through one key, defaultgoogle/gemini-3.1-flash-image. Opt-in for parallel runs with--providers gemini,openai,xai,openrouter. From PR #1, with the default moved to the GA slug (3d3dca4, f702dd3, 68adc4b) - Model defaults moved to the current models -- Gemini now runs
gemini-3-pro-image(GA since 2026-05-28; the preview ID passed Google's shutdown date) and xAI runsgrok-imagine-image-2.0(flagship since 2026-08-07). The retiredgrok-imagine-image-proslug had been redirecting to the cheaper quality model since 2026-05-15. xai.sh picks up what came with 2.0:--quality low|medium|auto, five reference images on edits instead of three, and the21:9and5:2ratios (43c78d7) - Automatic retry of transient API errors -- every provider retries a 429, a 5xx or a network failure up to three times with a doubling delay.
IMAGE_MAX_RETRIESandIMAGE_RETRY_DELAYtune it; the pane shows(retry 2/3)on the pending line (0f4273c, 2917773) - Retry from the pane -- when a provider fails inside
run-all.sh, the pane offers[r] retry failed (xai) · [esc/ctrl-d] closeforDISPLAY_PANE_RETRY_WAITseconds (default 45; 0 disables).rre-runs only the failed providers in the same call; Esc closes (398405f, 9292342) - Resize redraw -- the streaming pane replays every image and error block once a new width has held for half a second, in drawn order (8b3c635, d9d00e6, 1ba72af)
waiting online -- the pane names the providers still running, council style: animated until the first image renders, then written once under each block. The list clips to the pane width (0c0bf55)
Fixes
- Images no longer vanish from the pane -- three causes closed: the retry offer's per-second countdown rewrite (1dd2962), status lines wrapping in a narrow pane (d612081, 2f6c5ea), and a redraw in first-seen order (1ba72af). In tmux control mode any repeated rewrite of a row erases the inline images, so every one-line write is now single and guarded against auto-wrap
- xai.sh reports the saved format from the bytes -- 2.0 answers with JPEG, and the log said png regardless (aaba527)
- Provider logs append across a retry instead of truncating (8931831)
Docs
- GA Gemini IDs everywhere, the OpenAI alt-model shutdown dates (
gpt-image-12026-10-23;gpt-image-1.5,gpt-image-1-mini,chatgpt-image-latest2026-12-01), the xAI pro-to-quality redirect and 2.0 pricing - Retry, retry offer, resize redraw and waiting line described in README and the skill;
TESTING.mdcovers the new suites - Release audit: the xAI five-image cap everywhere the docs still said three, 21:9 and 5:2 in the ratio table, the OpenAI
--input-fidelity highhelp (first five images on gpt-image-2),openrouter.batsandretry.batsin the coverage table, and a fixed manual cap check inTESTING.md
Full changelog: 2026.8.1...2026.9.0
2026.8.1
What's Changed
Features
- Every provider in a batch now shares one streaming tmux pane instead of splitting its own. Providers launched directly — not only through
run-all.sh— find the window's live pane through a registry entry under$TMPDIRand join it, so three providers produce one pane rather than three. The entry is a directory, makingmkdirthe atomic create-once lock; a token per participant underactive/decides when the pane closes, andrun-all.shholds one for its whole batch (c490c29)
Fixes
- The test suite no longer opens panes in your live tmux session. The gemini, openai, and xai suites run the provider scripts far enough to reach the display pane, so they now call
disable_display, and a static check fails any suite that runs a provider or runner script against the live session without it (5f322d8) - Display suites no longer leave a watch directory behind for every pane they build —
TMPDIRis isolated per test and removed in teardown (5f322d8)
Docs
- README covers the registry, the create-once claim, and the token refcount that decides when the pane closes. The skill and agent guides note that providers share a pane only while they overlap in time, so
run-all.shremains the way to reach several at once. TESTING lists the new suite and adds a manual check for two providers launched directly at the same time (96608e1)
Other
- Ignore cs session-local files and add
.csmerge drivers (8df283e) - Internal cleanups from a review pass over the above: the token protocol is now a matched
__pane_acquire/__pane_releasepair sorun-all.shno longer reaches intodisplay.sh's private layout; the tmux target-args block that had been copied to four call sites is one helper; joining a pane reads its registry entry once with a builtin instead of three times through forkedcats; and the invariant that only a self-attached process may close a pane is now recorded where someone would otherwise be tempted to level it (a927560, and the follow-up)
Full Changelog: 2026.7.1...2026.8.1
2026.7.1
What's changed
- Multi-image input —
--input-imageis now repeatable, for multi-image references and edits across all three providers. Caps: Gemini 14, OpenAI 16, xAI 3. Gemini accepts reference images in both--mode generateand--mode edit; OpenAI and xAI in edit mode only. xAI edit mode now posts to/v1/images/edits, andrun-all.shforwards every--input-imageto each provider. - Test hygiene — the bats suite no longer spawns real tmux panes when run inside a tmux session.
- Flaky test fix — the bash32 watcher compatibility test no longer hangs on a live stdin.
Documentation
- Refreshed the calendar-versioning example in the README.
Full changelog: 2026.7.0...2026.7.1
2026.7.0
What's changed
Streaming display pane
- Images now accumulate as they arrive — each provider's image appears when it finishes and stays visible for the rest of the run. Previously the animated spinner erased earlier images in tmux control mode, so only the last provider's image survived. (
d45f331) - Uniform image sizing — every provider image renders at a fixed 30% of the pane, normalized to one on-screen size regardless of PNG/JPEG/DPI. (
3ac5e92,e7c0478,db08f37,e569523) - Orientation-aware split — the pane takes the terminal's longer axis: a right-hand column when wide, a bottom band when tall/narrow. (
2443558) - Fixed pane blanking when a provider's elapsed-time field was empty. (
db16306) - Hardened display-failure handling and pane-active success reporting. (
d9357cb)
Providers & reliability
- Edit mode keeps the base64 payload out of argv — avoids arg-length limits and process-list exposure. (
3509f78) - Runs on macOS system bash 3.2 for the parallel scripts. (
75719dc) - image-generator agent works non-interactively and loads its tools/model correctly. (
53fd320,42a191b)
Documentation
- Corrected the streaming-pane spinner description (shows until the first image, then silent so images accumulate).
- Fixed "three tasks" → "one task tracking the parallel run" in the test checklist; completed the test-coverage table.
- Removed the orphaned "Grid view" feature bullet; clarified
--thinking-level/--input-fidelitydefaults; removed 3 stray test PNGs.
Full changelog: 2026.5.0...2026.7.0
2026.5.0
What's changed
Architecture
- New
scripts/run-all.sh— single shell that owns parallel-provider execution; replaces the agent-orchestrated Task-subagent pattern. Forks Gemini, OpenAI, and xAI in parallel under a shared streaming pane and exits with the aggregate status. Supports--providerssubset selection and per-provider--gemini-extra/--openai-extra/--xai-extraflag passthrough. - Council-style streaming pane — the watcher now renders per-provider colored banners (gemini blue / openai gray / xai red) with model + timing, plus an animated bottom spinner of providers still working. Errors render inline as red banners. Single source of truth for provider colors via
provider_palette. - Status-event protocol —
display_pane_status/display_pane_errorwrite a TSV log + per-provider error files;display_pane_begin/display_pane_finish/display_pane_failare the convenience helpers providers call. Backward-compatible with the legacy manifest API. - Provider scripts gained
provider_die/provider_finishhelpers (defined indisplay.sh) — eliminates duplicate error-handling and finish logic across gemini.sh, openai.sh, xai.sh.
Bug fixes
- imgcat in tmux pane — added
-Hand-rflags alongside-Wso PNGs with embedded DPI metadata render at the requested width instead of a tiny default size. Affected OpenAI's gpt-image-2 PNGs specifically. run-all.shextra-args quoting — replaced aneval-based array assignment withread -raso per-provider extras containing whitespace work correctly.
Performance
- Watcher drain loop — replaced per-tick
wc -l+ per-linesed -n(O(N·M) forks) withmapfile -t(O(N) total). Watcher CPU stays flat regardless of how many status events accumulate.
Documentation
- README, SKILL.md, commands/generate-image.md, agents/image-generator.md, and TESTING.md updated to document
run-all.shas the parallel-mode mechanism. Plugin Components table now listsrun-all.sh.
Full changelog: 2026.4.3...2026.5.0
2026.4.3
What's changed
- OpenAI default model is now
gpt-image-2(snapshotgpt-image-2-2026-04-21). The previous defaultgpt-image-1.5remains available via--model gpt-image-1.5orOPENAI_IMAGE_MODEL. - Doc audit pass — swept remaining "GPT Image 1.5" display strings out of README, SKILL.md, the agent prompt, and api-details.md so the documentation matches the new default.
- Untracked skill evals + workspace artifacts — added
skills/image-generation/evals/,image-generation-workspace/, and stray root test PNGs to.gitignore. Removedevals/evals.jsonfrom the repo. These were noisy benchmark outputs that don't belong in plugin distribution.
Documentation
- README features bullet, version example, and provider table refreshed for gpt-image-2.
- SKILL.md frontmatter version bumped, prompting tips updated.
- api-details.md OpenAI section heading and
chatgpt-image-latestnote updated. - agents/image-generator.md and commands/generate-image.md provider descriptions updated.
Full changelog: 2026.4.2...2026.4.3
2026.4.2
Documentation audit release
Post-release fixes discovered during docs audit after 2026.4.1 shipped.
Critical fix
- Gemini image-size restriction was overstated: Only
512is exclusive to `gemini-3.1-flash-image-preview`. The Pro default (`gemini-3-pro-image-preview`) supports `1K`, `2K`, and `4K`. Previous docs incorrectly told users to switch to Flash for any resolution above 1K.- Fixed in `scripts/gemini.sh` usage string
- Fixed in `skills/image-generation/references/api-details.md`
- Fixed in `skills/image-generation/SKILL.md`
Agent updates
- `agents/image-generator.md` — "both providers" → "all providers" (we've had 3 providers since 2026.3.0)
- Added Optional Parameters section listing all the 2026.4.1 flags with usage hints, so the agent can pass `--image-size`, `--thinking-level`, `--resolution`, `--output-format`, `--input-fidelity`, etc. when users specify quality/size/format preferences
Test documentation
- `TESTING.md` Section 3.3 and 3.5 — "two tasks / two output files" → "three tasks / three output files"
- Added `hero-xai.png` to example filename list
API reference examples
- `api-details.md` xAI code examples now use `grok-imagine-image-pro` (the new default) instead of the standard-tier model
Full changelog: 2026.4.1...2026.4.2
2026.4.1
Multi-provider upgrade release
All three providers gain new default models and API parameters.
Gemini
- Default model:
gemini-3-pro-image-preview("Nano Banana Pro", premium quality, 10 aspect ratios, up to 14 reference images) - Alternate:
gemini-3.1-flash-image-preview("Nano Banana 2", adds 4 extreme ratios1:4/4:1/1:8/8:1and512resolution) - New flags:
--image-size—512/1K/2K/4K(UPPERCASE required — hard API rejection on lowercase)--thinking-level—minimalorHigh--image-only— suppresses text response--search-grounding— enables Google Search grounding
OpenAI
- Default model unchanged:
gpt-image-1.5 - Alternate:
gpt-image-1-mini(3-4x cheaper, use via--model) - New flags:
--output-format—png/jpeg/webp(jpegis faster thanpng)--output-compression— 0-100 integer forjpeg/webp--moderation—autoorlow--input-fidelity—loworhigh(edit mode, preserves faces/logos)
--size,--quality,--backgroundnow acceptauto
xAI
- Default model:
grok-imagine-image-pro(premium tier, 30 RPM) - Alternate:
grok-imagine-image(standard, 300 RPM — use for bulk) - New flag:
--resolution—1kor2k(LOWERCASE required — opposite of Gemini!) - New aspect ratios:
19.5:9,9:19.5,20:9,9:20,auto - Removed:
grok-2-imagereferences (deprecated 2026-02-28)
Documentation fixes
- Corrected Gemini 3.1 Flash pricing: 2K is
$0.101(not$0.134), 4K is$0.151(not$0.268) - Noted
gemini-2.5-flash-imagescheduled shutdown on 2026-10-02 - Clarified free tier status: unavailable on Gemini image gen (Dec 2025), removed from xAI (Mar 2026), OpenAI unchanged
- Documented xAI single-image-edit aspect ratio quirk (output matches input, cannot override)
- Updated OpenAI rate limits to IPM/TPM format
- Added JSON body alternative for
/v1/images/editsdocumentation
Tests
- All 99 bats tests pass
- Updated default model assertions for gemini and xai
Full changelog: 2026.4.0...2026.4.1
2026.4.0
What's changed
- Documentation audit -- fixed 12 issues across README, TESTING.md, api-details.md, generate-image.md, and gemini.sh
- Skill evals -- added evals/evals.json for skill benchmark testing
Documentation fixes
- Fixed xAI default model shown as
grok-2-imageinstead ofgrok-imagine-image(command, api-details) - Fixed Gemini API config key:
imageGenerationConfig->imageConfig(api-details) - Removed non-existent model name
gemini-2.5-flash-preview-image-generationfrom README example - Removed undocumented "Session start check" feature and
hooks/from architecture diagram - Updated provider selection from "both in parallel" to "all in parallel" (3 providers)
- Clarified OpenAI editing: "Single image (API supports up to 16)"
- Added
tests/to Plugin Components table - Added xAI model override example to TESTING.md
- Expanded gemini.sh usage string to list all 10 aspect ratios
Full changelog: 2026.3.2...2026.4.0