Ask an image model for a poster that says 'Mehta Sweets, Main Market' and you will usually get something close. Close is the problem. For a small business, a post that says 'Mehta Sweats' is worse than no post at all. And when you generate 365 posts for one shop, 'usually right' means a misspelling somewhere in the year, almost certainly.
I build Content365, which makes a whole year of branded social media posts for one Indian small business in one go. Early on we made one rule that shaped everything else: the image model never draws text. Not the name, not the phone number, not the price, not the call to action. This post explains how that works and what it costs us in flexibility.
We split the job in two. Each post is built in layers. The first layer is a scene painted by the image model: a product on a table, a shopfront, a festive setting. The prompt asks for a picture with no lettering and with room where copy will go. Everything after that is deterministic code. A decoration layer adds frames and accents. A copy layer sets the headline and selling text in one of ten layouts. A final layer places the brand's real logo, using a treatment that does not repeat within the year.
Because code sets every word, spelling and prices are exact by construction. If the shop's name is stored correctly, it is on the post correctly. The model never gets a chance to be creative with a phone number.
A few scheduling rules keep a year of this from looking mechanical. No layout runs two days in a row. The logo never sits in the same corner two days running. Posts are 1080x1350 with a square-safe centre, so a 1:1 crop for a grid or a WhatsApp share still keeps the important parts.
Indian scripts need real shaping. Hindi in Devanagari is not a row of independent letters. Conjuncts join consonants, and vowel signs attach before or after the consonant they belong to. Naive rendering produces text that is technically present and visibly wrong, and any Hindi reader spots it instantly. We shape Indic text with HarfBuzz, the open-source shaping engine used by major browsers and Android, before drawing it, so what lands on the image is what a native reader expects.
Privacy comes before any model sees anything. Business details often include a phone number, an email address or a WhatsApp number. We strip those from the text before any model reads it, and the compositor adds them back at the very end from the brand's own record. The model never needs them to paint a scene, so it never gets them.
Claims are gated too. Some post angles naturally want a claim: a rating, an award, a guarantee, a statistic. Those angles run only if the brand has verified that fact; otherwise the post is made without the claim. We also removed default template labels like 'BESTSELLER', because a label is a claim as well. More on that in a separate write-up.
QA is something the customer can see. Every render gets a vision check and a perceptual-hash check. The vision check reviews the finished image. The hash check compares it with the brand's other renders, so near-duplicates are rejected. A failed render is retried, up to three tries. If a day still fails after that, it ships with a visible warning in the customer's gallery instead of being quietly hidden. I would rather a customer see 'this one needs a look' than find a bad post after publishing it.
What does this cost us? The obvious trade-off is that we give up expressive lettering, the hand-painted signboard look that image models are getting good at. Our typography is only as good as our layouts, so layout design became a real part of the product, not an afterthought. We also maintain font coverage for every script we render, which is unglamorous work. For small businesses, where correctness beats flair, I think it is the right trade.
If you are building anything that puts generated images in front of customers with names, prices or legal text on them, my advice is the same rule: let the model paint, let code write.
For context on the product: Content365 is Rs 3,999 including GST per brand, one time, for 365 posts with captions and Indian festival days pinned in the calendar. We don't post for you, and Reels are not included yet. The cover image is a sample design for a made-up business. You can make 2 free posts every 48 hours with no payment at https://content365.si, and the full offer is at https://content365.si/offer. I built it, and I am happy to answer questions about the pipeline in the comments.
Top comments (0)