Hero & OG Image Generation
Generate a post's hero image and OG card via MCP or the admin UI, review candidates, iterate, and recover any past generation's prompt and references.
A post's hero image (the big banner at the top) and its Open Graph card (the image shown when the link is shared on social) are both generated by the same image model, through two surfaces: the post_posts_by_id_hero MCP tool, and the Generate tab of the Hero panel in the post editor.
Generating
Both surfaces take a prompt (or auto-generate one from the post's title and content), an optional style, and optional reference images — curated photos from your Reference Images library, or any asset already in your media library — that anchor a face, product, or brand element in the result.
Through the MCP tool you also get:
- Review candidates. Pass
commit: falseto generate without touching the post. You get back an asset you can accept (accept_asset_id) or discard. - Iteration. Pass
iteration_promptwithsource_image_url(a prior result'simage_url) to edit an existing hero instead of generating from scratch — "make the background darker" anchors on the previous image and applies just that change. - OG cards. Pass
target: "og"to generate the 1200×630 social card instead of the hero. An OG card never takes references unless you name them explicitly, and only the title and subtitle ever render as text on it.
Generation history
Every call to either surface — hero or OG, a straight commit or a review candidate, a fresh generation or an iteration — is recorded: the prompt you asked for, the exact prompt sent to the model, any iteration instruction and source image, the reference images that were actually used (and whether they were named explicitly, inherited from the post's last hero, or auto-matched from the prompt), who or what generated it, and the model. An MCP caller can pass caller_name to self-report who/what it is — that's a label it supplies, not a verified identity.
Recovering it:
get_hero_history(MCP tool) returns the full list for a post, newest first, pluscurrent_hero.recorded— whether the post's current hero has a matching history row.- The History tab in the post editor's Hero panel shows the same list with a thumbnail per entry, and a one-click Reuse button that fills the Generate tab's prompt and reference selection from that entry so you can regenerate the same look, or tweak it first.
A hero generated before this history existed has nothing to recover — current_hero.recorded reads false for it, and the History tab calls it out as unrecorded rather than guessing. Nothing is backfilled; history only covers generations made from here on.