Our synthetic content generator prepares a short text prompt and a companion image prompt. Both templates offer random topic choices. Sampling separately can produce a post about composting beside an illustration about bicycle maintenance even when each individual generation follows its own prompt correctly.

We construct an independent prompt assembly fixture that chooses the topic once and carries it into both templates. The examples use invented editorial topics and no campaign data. They make no model API calls and supply no claims about engagement or publishing performance.

Resolve the shared decision before rendering

The topic is a shared editorial input. Style and composition can vary independently after that input is fixed. We represent the resolved topic as part of a content bundle so both renderers receive the same value and neither renderer silently resamples it.

An explicit topic override takes precedence over random selection. That gives an editor control over the subject without removing variation from the remaining prompt fields. The fixture uses a deterministic selector to make the assembly tests repeatable and records the final choices beside the prompt strings.

function bundle({ topics, override, index = 0 }) {
  const topic = override ?? choose(topics, index);
  if (typeof topic !== "string" || topic.trim() === "")
    throw new Error("topic");
  const textPrompt = `Explain one specific decision about ${topic}.`;
  const imagePrompt = `Illustrate ${topic} using abstract shapes.`;
  return { topic, textPrompt, imagePrompt, templateVersion: 1 };
}

A Python implementation can express the same boundary using argparse for the override and a small record passed to both rendering functions. Keeping resolution separate from rendering also makes it possible to inspect the choices without contacting a model provider.

A seed has a limited reproducibility claim

A random seed can reproduce template selections when the selection algorithm and input ordering stay fixed. It does not guarantee identical output from a remote language or image model. Provider behavior and model revisions can change even when the prompt text stays identical.

We store the resolved choices and final prompt strings because a seed alone depends on the exact order of random draws. Adding one new choice near the beginning of the pipeline changes later draws and can make a previous run difficult to reconstruct from only its seed.

We resolve the shared topic before either template is rendered because editorial agreement between the text and the image should follow from the data passed into the pipeline and should not depend on two independent random selections happening to choose the same subject or on a reviewer noticing the mismatch after generation has already completed.

For a reproducible assembly record we retain a template version and the input topic alongside the selected style fields. For model execution we also record the provider's model identifier and the request parameters that affect generation. Those are two different layers of evidence.

Define the unit of review

The reviewable object is the bundle containing copy and imagery along with their prompts. Approving the text alone does not establish that the image says the same thing. A generated image can introduce an unsupported visual claim even when the copy is carefully constrained.

Our fixture produces a JSON serializable bundle. It preserves the shared topic and the exact prompts that went to each renderer. A production tool can add output identifiers and editorial status without confusing generated output with content already approved for publication.

Text and image templates share one resolved topic
10 assertions passed

The tests cover the random selection path and the explicit override. They verify that both prompt strings contain the resolved topic and that an empty topic set fails before rendering. We compare two deterministic runs so a change in prompt assembly has an inspectable expected output.

Measure the pipeline without inventing campaign results

A useful internal quality measure is the fraction of generated bundles accepted unchanged under a defined review rubric. Its denominator is all bundles reviewed in the same period. A separate measure can track how often the image and text disagree on the chosen topic.

Neither measure establishes public reach or conversion. Those outcomes require publication records and platform measurements under a consistent reporting window. The fixture contains no such observations so the article's result is the tested assembly invariant and not a claim that automated content improves audience growth.

Give the review tool a deliberately mismatched synthetic bundle before trusting its agreement check. Then keep the topic consistent while inserting an unsupported visual assertion and verify that the editorial review distinguishes subject agreement from factual accuracy.

Sources and examples