Content Generator¶
Writes the publishing draft from the transcript: title, subtitle, YouTube description, LinkedIn post, and pull quotes — all in a single pass.
At a glance¶
| Needs | A transcript with speakers matched to real people |
| Produces | The Publishing draft on the conversation |
| Waits when | Rarely — it fails rather than waits if the transcript isn't good enough |
| Re-running | Safe. Regenerate replaces the draft, including manual edits |
What it does¶
Sends the transcript to the AI model once, with your instructions, and gets every text asset back in one structured response. One call rather than six keeps the outputs consistent with each other — the LinkedIn post and the description are describing the same conversation in the same voice, because they were written together.
The instructions are settings on the step, editable in the web UI: a shared base instruction plus one per output. See Writing prompts for the sections available and how to inject live conversation context (participant bios, connected organisations) into them.
Quality gates — why it sometimes refuses¶
Before spending a model call, the step checks the transcript is worth writing from:
- enough content — a transcript below the minimum segment count is rejected;
- speakers resolved — a transcript whose speakers aren't matched to real people is rejected.
Both thresholds are step settings. When a gate trips, the step fails with a note saying what to fix rather than producing weak, misattributed copy from a thin transcript. Confident nonsense is worse than an obvious blocker: nobody proofreads a draft that looks finished.
How it behaves¶
- Transient model errors are retried in place — a few times, with increasing gaps, before the step gives up and waits for its next scheduled run.
- Permanent errors fail immediately — a bad API key, a rejected request, or a quality-gate failure won't fix itself by retrying.
- Regenerating is a clean slate. The Regenerate action on the Publishing panel clears the existing draft and re-runs. Manual edits are lost — copy anything you want to keep first.
Troubleshooting¶
| Symptom | Likely cause | What to do |
|---|---|---|
| Error: transcript too short | The transcript has fewer segments than the step's minimum | Check the transcript imported correctly; if the conversation genuinely was that short, lower the minimum on the step |
| Error: speakers not resolved | Some speakers aren't matched to real people | Assign speakers in the assign-speakers UI, then regenerate |
| Error mentioning the API key | The model credentials are missing or rejected | An administrator fixes the agent configuration, then re-run |
| Draft generated but the voice is wrong | The prompts need tuning | Edit the step's prompt sections, then regenerate — see Writing prompts |
LinkedIn post contains a placeholder like [Link to Video] |
The prompt asks for a link, but no video exists yet at generation time | Fix the prompt — the real URL is appended automatically later. See Writing prompts |
| Regenerated and lost my edits | Regenerate replaces the whole draft | Expected. Edit after regenerating, not before |
| Draft is fine but the video shows the old title | The title is pushed to YouTube by a separate step | Re-run the metadata sync step — see YouTube publishing |
Technical reference¶
| Step type | content_generator |
| Runs after | A transcription step — not a declared dependency, but it needs transcript rows to exist |
| Feeds | cover_image_generator, youtube_video_upload |
| Reads | TranscriptSegment rows; step settings model, max_tokens, min_segments, min_distinct_speakers, prompts.* |
| Writes | fields.title, fields.subtitle, fields.language, fields.youtube_description, fields.linkedin_post, fields.instagram_quotes, and fields.qa (segment count, distinct speakers, warnings) |
| Provenance | Every field is stamped with the job, model, prompt version and timestamp that produced it, so staleness is knowable per field rather than per run |
| Needs on the agent | gemini.api_key |
| Model | Google Gemini, one structured call per generation |