Image posts & carousels
Ballad writes the words on the slide and the caption; the image is composited from a text-free background Ballad generates for each post (or one you supply), in your colours, font and logo — so the text is exactly what you approved.
Some things land better as a picture. A hard number, a before-and-after, five steps worth swiping through — a wall of text buries all of them.
Ballad writes the words on the slide and the caption underneath, then composites the image in your colours. You download the slides and post them.
What a visual post is
Two parts:
- The caption — the text you paste into the composer, written in your voice like any other post.
- The slides — one image for a card, two to ten for a carousel. Each slide carries a headline, an optional second line, and alt text.
Every slide in a post shares one background image. That keeps a carousel looking like a set rather than a pile, and means a ten-slide carousel costs the same to generate as a single card.
Everything renders at 1080×1080 — square is the one ratio LinkedIn, X, Bluesky, Threads and Instagram all accept without cropping.
The important part: the background is generated text-free, and the words are composited on top by the renderer. Image models are unreliable at typography — they invent letters and mangle spelling. Here the text on the slide is exactly the text you approved, because it was never part of the generated image.
Turning it on
For LinkedIn, X, Bluesky and Threads, enable the Image posts & carousels format on a voice under Settings → Voices → that voice → Formats. Visual posts then ride the normal channel lane, the way a thread does on X — they don't get a separate cadence to manage.
Settings → Voices is people. The company's own voice has its own page, so wherever this guide says Settings → Voices → that voice, read Settings → Brand for the brand voice — same sections underneath.
For Instagram, just switch the channel on. There's no format toggle, because Instagram is nothing but visual posts.
Each channel caps how many images a post can carry — X and Bluesky take four; LinkedIn, Threads and Instagram take ten — and Ballad enforces the cap rather than leaving it to you. The generator is given the channel's limit, so it never drafts a carousel that won't fit, and a longer one written by hand or submitted by an agent is rejected at validation with a "too many slides" notice before it can reach approval.
Your brand look
One look for the whole workspace, set once at the top of Settings → Brand. Every voice renders in it — image posts, carousels, and card-style opening images — and the footer still names whoever is speaking, so a teammate's post looks like the company without pretending to be someone else.
| Setting | What it does |
|---|---|
| Three colours | background, headline, and an accent used for the rule, slide counter and handle |
| Font | Space Grotesk, Inter, or Instrument Serif |
| Logo | PNG, JPEG, SVG or WebP up to 1 MB — replaces the initials in the footer |
| Show handle | whether your @handle appears on the last slide |
A live sample updates as you change them, so you're not approving a look you haven't seen.
The theme is snapshotted onto each post when it renders. Changing your colours restyles new posts; it doesn't silently restyle everything you've already approved.
Reviewing
A visual post arrives rendered, not as a script to imagine. Review is the same gate as any other post:
- Edit the words on a slide and that slide re-renders. Only the slide you changed — the others are untouched.
- Regenerate the background if the art direction missed. New background, same words.
- Approve once every slide is right.
Publishing
On X, Ballad posts it. Connect the voice's X account under Settings → Voices → that voice → Accounts & look and an approved image post goes out from that account on its slot, or straight away if you asked for it now — up to the four images X carries, which is the cap Ballad already keeps it inside.
Everywhere else it's assisted — Ballad renders, you post:
- Open the publish step.
- Download each slide.
- Copy the caption.
- Post in the composer, attaching the slides in order.
Instagram is from your phone. Ballad does not use the Instagram Graph API — that needs a Business account linked to a Facebook Page and a review process, which is a lot of setup to post an image. Download the slides, then post from the Instagram app.
Order matters on a carousel: the first slide is the hook that stops the scroll, the last one carries the call to action.
What it costs
Cheap enough not to think about:
| Per post | |
|---|---|
| Art direction | ~$0.001 |
| Background image | ~$0.01–0.04, once per post regardless of slide count |
| Slide rendering | no model — about 0.3s a slide |
Roughly a dollar a month at a visual post per batch per channel.
With image generation off, nothing breaks: the background falls back to a two-stop gradient in your brand colours, and the post carries on. Same words, same layout, no model cost.
From an agent
// Cards — one image
generate({ kind: "linkedin_image" })
generate({ kind: "x_image" })
generate({ kind: "bluesky_image" })
generate({ kind: "threads_image" })
generate({ kind: "instagram_image" })
// Carousels. X and Bluesky have no carousel kind — but create_draft below
// takes a two-to-four-slide carousel on either.
generate({ kind: "linkedin_carousel" })
generate({ kind: "threads_carousel" })
generate({ kind: "instagram_carousel" })
create_draft({
format: "visual",
layout, // "card" | "carousel"
slides, // headline, sub, alt
caption,
backgroundPrompt, // optional — art-direct it yourself
backgroundImage, // optional — bring your own
})
edit_draft({ slides, backgroundPrompt }) // re-renders what changed
set_brand({ ... }) // workspace-wide: colours, font,
// logo URL, handle
edit_draft re-renders only the slides whose words actually changed, so
correcting one headline in a ten-slide carousel doesn't redo the other nine. See
Connect Claude to Ballad for scopes — drafting needs
draft, set_brand needs decide.
Checklist
- "Image posts & carousels" enabled on the voice, for LinkedIn, X, Bluesky and Threads
- Instagram channel on, if you post there
- Brand look set — colours, font, logo, handle
- First post reviewed: words right, background right, every slide rendered
- X account connected on the voice, if you post there — Ballad publishes it
- Everywhere else: slides downloaded and posted in order, caption pasted