Poster
Lay out a real poster with real typography, because diffusion can't spell
- images
- image
Poster exists because of a specific, well-known failure: diffusion models smear text. Dense or bilingual copy - a title, a tagline, a cast list - comes out as mush in almost every image generator. Poster's answer is to split the job: the AI generates the visuals upstream, and this stage lays out the text with real typography, rendered by an actual browser engine rather than diffusion. What you see in the live preview is exactly what Run produces.
Pick a layout template (the default is hero), and every element - title, body copy, shapes, image boxes - can be dragged, resized, and edited right on the card. It's a mini layout tool bolted onto the canvas, and it produces pixel-accurate text because it's not guessing at letterforms.
The inputs
images(autogrow) - connect one image and the next slot appears. Poster elements reference images by slot number; double-click an image box on the card to re-pin which connected image it shows. Wire your AI-generated visuals in here.template- the layout preset (herodefault; the pack also ships sidebar and infographic layouts). Every element of every template remains editable.width/height- poster dimensions in pixels (256–4096, default 1240×1754 - roughly A4-ish portrait). The schema marks these internal, but they're the canvas size you're laying out on.layout- the serialized canvas blob (positions, colors, fonts). Internal; written as you drag things.
One output: image (COMFYTV_IMAGE), the finished poster.
What it's good for
Title cards, thumbnails, promo graphics, infographic-ish composites, bilingual posters where text legibility is non-negotiable. It's the end of a pipeline that starts with generation - Generate → pick the frame → maybe upscale → Poster for the text and final composition. Because the text is real text, you can also iterate the wording without re-rolling the artwork: change the copy, keep the visual.
The honest caveat: this is a layout node, not a design tool. You get templates and draggable elements, not a full vector editor - think "make a clean poster fast" rather than "replace InDesign." That's fine, because the alternative in ComfyUI is usually no text at all.
Install
Pack-wide one-liner:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart ComfyUI - Desktop/macOS users: clone into the running instance by absolute path, verify __init__.py at the top level, and restart the backend, not just the browser. ComfyUI Manager finds it as "ComfyTV". No extra Python dependencies.
Two practical notes: at larger width/height values the exported image is heavy, so don't inflate the canvas unless the print or placement needs it. And like every ComfyTV stage, the output is a project snapshot - if a native ComfyUI node needs the poster, put a Bridge between them.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| template | COMBO | hero | Layout template. Every element can be dragged, resized, and edited on the card. |
| width | INT | 1240256–4096 | Internal — poster width in pixels. |
| height | INT | 1754256–4096 | Internal — poster height in pixels. |
| layout | STRING | {} | Internal — canvas layout + colors + fonts blob. |
| images | COMFY_AUTOGROW_V3 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | COMFYTV_IMAGE | — |