Image Creation Service

Composition by machine, design by hand.

Status In Production · 2025
Role Design + EngineeringSolo · custom-built templates
Context San Antonio ReviewA component of the SAR system
Stack
Python Flask Pillow Claude API Render Photoshop

Creating an image for each work was the single slowest step between approval and going live. The obvious 2026 fix is to generate the image with AI. SAR doesn’t do that, and the reason is this entire case study. The agent selects text and composes; it never generates. The visual identity stays a made thing.

The Trust Question

Does it matter whether someone is looking at a made thing or a generated one?

Every piece needs an image, and producing one by hand for each was the slowest step in the pipeline. Generative AI solves that in a single prompt. The pull to do that is enormous because the bottleneck is a genuine resource problem.

The visual identity is part of what readers recognize. When someone encounters a SAR image, they recognize it as SAR. Generative imagery would break that trust: the audience would believe they were seeing the organization’s visual voice when they were actually seeing an inference, and the design labor that built the identity would be erased in the process.

So, the design separates two things that the bottleneck had fused together. The labor — selecting and placing — is what slowed publication down. The identity — the templates themselves — is what made the images worth having. Automate the first, but don’t touch the second.

The pull toward generation
“Image creation is the bottleneck. Generative AI would solve it in one prompt.”
What that would cost
“The visual identity is bespoke and recognizable. Generating it erases both the identity and the design labor behind it.”
What I Designed

An agent that selects and composes, but doesn’t generate

The system is built on fifteen templates designed in Photoshop and exported as PNGs. They are the visual identity. The agent’s job is to choose three lines from an approved piece, choose one of the templates, and composite the text onto it. Claude handles selection and placement, nothing more. It never creates a template, never generates imagery, never alters a design.

This is the production path. The three steps in the middle are the agent’s work. The content enters the system via human approval, and the result leaves through human review.

Approved piece content manager-approved Select 3 lines Claude · author’s own words Pick template 1 of 15 · weighted Composite Pillow Editor review HITL · approve or reject reject → regenerate on a new template HUMAN STEP AGENT WORK AUTOMATED
Select, compose, review. A rejected image regenerates on a different template; an approved image saves to the Media Library and publishes with the piece. No step generates imagery.
What I Deliberately Did Not Build

Generation, in every form, is alluring.

The bottleneck made generation tempting at several points. Each rejection maintains the same line: the agent works with made things, it does not manufacture them.

AI-generated images
The central decision. Generative imagery would have erased the bottleneck and replaced a recognizable, custom-designed identity, erasing the design labor that built it.
AI-generated captions or summaries
The agent selects three real lines from the approved content. It never writes new text, never paraphrases, never summarizes. The words on every image are the author’s own.
Algorithmic template generation
The agent picks from a fixed set of fifteen; it doesn’t synthesize variations or mutate designs. When new assets are required, a human designs the new template and the agent can use it forever.
Auto-publishing without review
Every composite reaches a content manager before it goes live. A rejection regenerates on a different template, rather than forcing a bad result through. The automation removes the production labor, not the human oversight.
How It Works

Selection, composition, review.

Line selection

Claude API
Three lines that stand alone

Claude reads the approved content and selects three lines that function as an epigraph. It’s a fragment that stands on its own, rather than a quote that needs its surrounding context to make sense. The selection is restricted to existing lines from the work, and the agent is instructed not to write or paraphrase. The words that end up on the image are the author’s.

Template selection + composition

Python · Pillow
Pick one of 15, place the text

The agent selects one of the fifteen custom-built templates by weighted random choice and composites the selected lines into the template’s text area with Pillow.

# 15 hand-built templates, weighted so some recur more than others template = random.choices(TEMPLATES, weights=TEMPLATE_WEIGHTS, k=1)[0] # The agent picks from a fixed, hand-designed set — it never synthesizes one img = Image.open(template.path) # a designer made this PNG draw_epigraph(img, lines, template.text_box) # composition, not generation

Delivery + review

Flask · Render · WP Media Library
Workflow-triggered, editor-gated

The agent runs as a Flask service on Render, triggered when a piece is approved. It saves the finished JPEG to the WordPress Media Library, where it sits as a draft asset for the editor to review. Approve, and it publishes with the piece. Reject, and the agent regenerates on a different template.

Result

The slowest step, automated, with identity intact.

15
Custom templates
0
Ai-generated images
3
Lines per image
#1
Bottleneck removed

Preserved

  • The visual identity stays a made thing.
  • The words on every image are the author’s own.
  • The design labor that built the identity isn’t erased.
  • Readers encounter a recognizable visual voice.

Now possible

  • The slowest production step is no longer a bottleneck.
  • New templates extend the system. Design once, and the agent uses it indefinitely.
  • Image volume scales without proportional design labor.
  • The pattern ports to any system templatizing a custom-designed asset at scale, like branded social graphics, certificate generation, or localized marketing collateral.