Publish workflow
publish_workflowPublish a tested workflow from this chat to the public library at emero.studio/workflows and add it to today's email digest draft. Live immediately. Calling again with the same slug replaces that post.
You write the words; the server fills every fact. Never write a model name, a cost, or a prompt in the body: each {{gen:...}} token becomes the media plus its model, real cost and exact prompt.
slug: [use-case]-[model], lowercase-hyphens, e.g. "jewelry-video-ad-seedance". Never change it after publishing.
title: models first, then the use case. Comparing models: "Seedance 2.5 vs MiniMax H3 - jewelry ad from two photos". One model: "GPT Image 2.5 - photo to ink illustration in five styles". Use the model names the generations show.
seo_title: max 60 chars. Lead with the model people search for, then the outcome, e.g. "Seedance 2.5 Jewelry Video Ad from 2 Photos: Prompts + Cost", "Kling 3.0 Fashion Ad: Ostrich Hands Over a Bag".
summary: max 100 chars, one plain sentence on what the workflow does. No terminal period.
Brands: never put a real brand or its trademarks in the slug, title, seo_title, summary or teaser: no house names (Gucci, Prada, Louis Vuitton) and no product marks (Damier, Intrecciato, GG, Kelly). Describe the look instead: "orange monogram bucket hat", "woven leather bag". In the body, name a brand only where the workflow needs it, never as if the post were their ad. Every post shows a no-affiliation disclaimer.
teaser: a short noun phrase with its article for the email, e.g. "a 10 second jewelry ad from two photos".
body: markdown only (## headings, paragraphs, lists, bold, links), no HTML. Open with why the approach works, then "## 1. " per step, each step a short paragraph followed by its token. Place outputs with {{gen:}} using the id generation returned, e.g. {{gen:job:3e6bb619-7a5d-47e8-bec4-6d841e941634#0}}. End with "## Why it works".
alts: alt text per token, keyed by the same artifact id: what the output shows, e.g. "Emerald ring and necklace on black velvet". The model name is appended automatically.
cover (optional): the artifact id of the generation that represents the post in share previews, the library card and the top of the post. Pick the strongest single frame, e.g. the delivery shot of a fashion spot, not the empty background plate. Must be one of the body's {{gen}} ids. A video works, a still is taken from it. Omitted = the first generation in the body. To change the cover later, publish again with the same slug and the new cover.
replaces (optional): when you publish a post under a NEW slug to rename an existing one, pass the old slug here. The old post is taken down and its URL redirects to the new one, keeping its date. Never publish a renamed post without it, or the library shows the post twice.
Voice: concise, first person, plain words, no em dashes. Show the user the full post and get their go before calling.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| alts | Yes | ||
| body | Yes | ||
| slug | Yes | ||
| cover | No | ||
| title | Yes | ||
| teaser | Yes | ||
| summary | Yes | ||
| replaces | No | ||
| seo_title | Yes |