DiffusionGemma Advertisement End Card Renderer
The Only Place Your Brand Copy Is Guaranteed to Appear Verbatim
- end_card_images
- end_card_report_json
- status
- ready
DiffusionGemmaAdvertisementEndCardRenderer is where the advertisement stack finally stops generating and starts typesetting. Everything before it - the DiffusionGemma Director, MiniMax H3, even the music - is stochastic. This node is not. It takes the campaign-locked finishing copy from the contract and renders it onto an end card deterministically, in a legible hierarchy, for the exact contracted number of frames. And its signature rule is refreshingly hard-nosed: copy that cannot fit is rejected, never clipped. If your legal line is too long for the card, you get an error and a fixable problem, not a truncated sentence that could get an actual lawyer annoyed.
The inputs are the advertisement_contract_json and the card geometry: width/height (defaults 720×1280 for the 9:16 master) plus three colors - background_color (#10141f, a near-black), brand_color (white), and accent_color (a mint green). The node validates that the contract carries an exact end-card frame count matching the contracted duration, checks the tensor won't blow past a 2 GiB allocation ceiling, and then lays out the fields in a hierarchy: brand name largest, then product, headline, variant, offer, price, CTA, approved claims, and the legal line. It reads those fields from the contract's exact finishing copy - the same SHA-locked strings the campaign contract froze - and verifies the card's brand/product/CTA actually agree with the root contract before it renders a single pixel. Outputs are end_card_images (a batch, one frame for each of the 3-second card's 72 frames at 24 fps), end_card_report_json, and status/ready.
The reason this node exists is worth dwelling on, because it's the pack's strongest opinion. Generated in-scene text in AI video is unreliable - labels warp, spelling drifts, claims get mangled - and no amount of prompt engineering fixes it reliably. So instead of trusting the video model with your brand, the stack routes all legal and contractual copy to a deterministic renderer where it cannot be misspelled. The README is blunt about it: treat generated in-scene labels as unreliable typography; exact brand, CTA, and legal copy is guaranteed only in the deterministic end card.
For a beginner, the practical knobs are the three colors (pick brand-appropriate values) and - much more importantly - the copy you typed upstream in the Campaign Contract. The end card is only as good as the exact copy it draws from. If it rejects, the error message is the useful part: it'll tell you which field couldn't fit or which hierarchy rule broke. Adjust the copy or the card size, not the node.
Install is pack-wide: ComfyUI Manager search "DiffusionGemma Prompt Builder", or git clone https://github.com/exportAnything/ComfyUI-DiffusionGemmaPromptBuilder into custom_nodes and restart. The ad workflow wants ComfyUI 0.33.1+ and the H3 model files for the video; this node renders its frames locally with Pillow-style drawing - fast, deterministic, and free of GPU sampling. When the Master Finisher later replaces the master's tail with this card, the delivered ad finally contains text you can stand behind.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| advertisement_contract_json | STRING | — | |
| width | INT | 72064–4096 | — |
| height | INT | 128064–4096 | — |
| background_color | STRING | #10141f | — |
| brand_color | STRING | #ffffff | — |
| accent_color | STRING | #76f7c5 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| end_card_images | IMAGE | — |
| end_card_report_json | STRING | — |
| status | STRING | — |
| ready | BOOLEAN | — |