Article· Updated June 2026

I keep a folder of images I never shipped — sticker sheets, app-icon explorations, watercolour location marks for journeys.im, hero images for glp3.wiki articles that didn't make the cut. Every one of them cost a few cents through the OpenAI image API. The few cents isn't the problem. The problem is the little meter that starts running in the back of my head the moment I want to try one more variation — cheap enough to use, expensive enough to hesitate. That hesitation was the real tax.
Here's what I'd missed for months: I was already paying for the exact same model. GPT Image 2, the one the API bills me per image for, is the model that runs inside ChatGPT and Codex when you ask either of them for a picture. If you pay for ChatGPT Plus or Pro, image generation is already part of the quota you bought. The API charge was a second payment for something my subscription already covered.
Codex — OpenAI's coding agent — will generate an image in the middle of a task without ever touching an API key. So the question was simple: could my own image skill borrow that path? It can.
How, briefly
You sign in to Codex once. It caches a token on your machine. A small open-source proxy reads that token and exposes the same image tool the API has, except it bills your subscription instead of your API balance. My skill starts the proxy, asks for the image, and saves the file — no key, no per-image charge. The first time it needs to, it walks me through the one-time sign-in; after that it's invisible.
That's the whole trick, and I'm deliberately not dressing it up. The decisions worth talking about came after.
Same image, both ways
I ran the identical prompt down both paths to make sure the subscription route wasn't a worse model in disguise. Same model, same output — the only line that moves is the bill.
| API key | ChatGPT plan | |
|---|---|---|
| Model | GPT Image 2 | GPT Image 2 (same) |
| Cost per image | ~$0.21 | $0 — plan quota |
| Auth | API key + balance | subscription you already pay for |
That one logged sticker cost 21 cents on the API and nothing on the plan. On its own, who cares. Multiply it by every throwaway variation across every project and it's the difference between iterating freely and rationing. The only thing the API gives me that the plan doesn't is headroom — which is the next decision.
Free by default, paid on purpose
The plan quota isn't infinite. Image turns burn through it three to five times faster than text, so fifty variations in one sitting would eat a real chunk of the monthly allowance. That limit is worth respecting — but honestly it's a happy problem. I'd been keeping the ChatGPT Plus subscription around without leaning on it for much, and image generation finally gives it a job. The skill handles the limit the way I'd decide it myself: it defaults to the free plan path when I'm signed in, falls back to the API key when I'm not, and takes a single --api flag to force the paid path when I mean to.
For one icon, free. For a bulk run, I pass --api and spend the dollar rather than burn down the plan's allowance. The point is that it's one word, not a config change — the cheap option is the default, and paying is a deliberate act.
The part that actually took the work
The billing was the easy half. The edges were the work.
GPT Image 2 can't give you a transparent background. OpenAI trained it for whole scenes, not cut-outs, and asking for transparency returns a flat "not supported for this model" — on the API and the subscription path alike, I checked both. So for stickers and app icons I fall back to a trick older than I am: tell the model to paint the background pure magenta, then key the magenta out afterwards.
The naive version leaves a tell. Where a white sticker border meets magenta, the pixels between them blend to pink, and a hard on-or-off cut keeps that pink as a halo ringing the whole sticker.

Left, the hard cut and its pink halo. Right, the same edge after the fix.
The fix is the math film compositors have used on green screens for decades. Instead of a hard yes or no, you make each edge pixel partly transparent based on how magenta it is, then rebuild its true colour by subtracting the magenta you know you added. The halo turns back into a clean white edge. It's about twenty lines of code, and it's the difference between a sticker that looks shipped and one that looks vibe-coded.
Where it ends up
It earns its place across everything visual I ship: watercolour location marks for journeys.im, die-cut stickers and app-icon explorations, hero images for glp3.wiki. The image at the top of this article was generated by the skill it describes — billed to my plan, zero dollars.
And because it's a Claude Code skill, my agents reach for it the same way I do. When one is building a screen and needs a placeholder icon, it asks the skill, which routes through my subscription and hands back a PNG without me in the loop.
None of this is a new model or a clever prompt. It's noticing I was paying twice for one thing, then spending a few hours closing the gap — most of it on edges, not billing. That's the shape of most of my wins lately. The leverage isn't the AI. It's spotting the seam, and doing the unglamorous part well enough that the result looks like nobody had to think about it.
Frequently asked
Is this against OpenAI's terms?
It's personal use of my own subscription's path — not account-sharing, reselling, or pooling. The honest caveat: the endpoint is undocumented, so OpenAI could change or close it at any time. I wouldn't build a product on it. I use it for my own asset generation.
Does it actually cost nothing?
Nothing against the OpenAI API balance. It spends ChatGPT plan quota instead, and image turns burn that quota roughly three to five times faster than text. For a one-off icon that's free in practice; for a bulk run I pass --api and pay the cents rather than burn down the plan's monthly allowance.
Can GPT Image 2 output a transparent background?
No, not natively — on either the API or the plan path. Both return "transparent background is not supported for this model." The skill paints a pure-magenta background instead, then keys it out with a soft-matte and despill pass so the edges come out clean.
Can I use it from Claude Code?
Yes. It ships as a skill in my claude-skills plugin. When an agent needs an image it reaches for the skill, which defaults to the ChatGPT-plan path when I'm signed in and the API key when I'm not.