I was using a GPU to solve a CSS problem. Not metaphorically.
I was building an automated social media pipeline, and one step looked like this:
Post → AI image prompt → image model → generated image → publish
It seemed reasonable. AI could write or help prepare the content, so why not let an image model handle the visual too? Then I actually tried automating it, and that's when the problems started.
The image wasn't really the thing I needed
When you tell an image model "create an image about software automation," you've given it a huge amount of creative freedom. That's useful when you actually want creativity. For an automated social post, I usually didn't. I wanted something far more boring: a relevant image, a headline, readable typography, a good layout, consistent branding, predictable dimensions.
Instead, I'd get something excellent, then something resembling an advertisement, then a gift-card design, then an elaborate futuristic scene that technically represented "automation" but wasn't something I'd want attached to the post. The model wasn't necessarily failing. I was giving a generative system a problem that didn't require generation. That distinction turned out to matter a lot.
Nondeterminism is a lot less fun inside automation
When manually generating an image, a bad result is just inconvenient. You regenerate it, maybe tweak the prompt, eventually get something you like. Put that process inside unattended automation and "just generate another one" stops being a satisfying error-handling strategy.
I could add another model to evaluate the generated image, but then I've built an AI system to check whether another AI system performed a task that might not have needed either of them. That felt backwards. I wanted the image stage of the pipeline to behave like software: known input, valid output, every time.
Then I looked at what this was costing computationally
Image generation is expensive relative to what the final artifact actually is. Run the model locally and you need a GPU. Don't have one, and you're paying an API per image. At small scale that's easy to ignore, but automation changes the economics: publish repeatedly across multiple accounts or platforms, and you've deliberately put a relatively expensive operation inside a loop.
For what, though? Most of my final images were essentially image + typography + layout + branding. Looking at that, I had the embarrassingly obvious realization: I was using a GPU to solve a CSS problem.
So I removed AI from that part of the pipeline
That decision became SocImage. Instead of asking a model to imagine the final social image, I describe the card as structured data, roughly like this:
{
"headline": "Build systems, not repetitive tasks",
"content": "Automation should remove work, not create another thing to supervise.",
"image": "...",
"card": 5
}
SocImage takes that and renders the final image. It doesn't generate the design with an AI image model, and that difference changes the behavior of the whole pipeline. No GPU needed, no image-generation API charge per card, rendering is fast, and most importantly the output is deterministic. Change the headline and only the headline changes, not the background, composition, typography, lighting, or general interpretation of reality along with it. That's a surprisingly useful property for software.
But templates can become boring
The obvious trade-off: I didn't want to fix unpredictable AI images by making every post look identical. So SocImage isn't built around one universal card. It has multiple card designs with different approaches to imagery, typography, and composition, and automation can choose between them while each individual design stays constrained. That gives me controlled variation, visual diversity without handing complete creative control to a probabilistic model on every run.
The renderer also changed how I use AI
I haven't stopped using generative AI, just gotten more selective about where. An illustration of something that doesn't exist, an unusual scene, original artwork, that's a generative problem. But if I already know I want this headline plus this image plus this layout plus this brand, asking a model to reinterpret all of those decisions is usually unnecessary. I already know what I want. I just need software to render it.
Not every automation gets better when you add AI
We're currently very good at asking "can AI do this?" I'm increasingly interested in "should AI do this?" AI brings capabilities traditional software can't easily reproduce, but depending on the application it also brings latency, cost, compute requirements, and nondeterminism. Those are engineering trade-offs. Sometimes worth paying, sometimes not, and sometimes we're swapping a deterministic function for a probabilistic system just because the probabilistic system is more exciting. SocImage exists because I caught myself doing exactly that.
The funny part: after switching to deterministic cards, I started using them on my actual social profiles, and engagement improved significantly in a short period. So the simpler system wasn't just cheaper and easier to automate, the output performed better too. That was reason enough to keep building it.
If you're working on automated publishing, or you're curious about the renderer, I made SocImage available here:
And if you're building AI-heavy automation, here's the question I'd be interested in hearing your answer to: what's one part of your current AI pipeline that probably doesn't need AI at all?
Top comments (0)