簡報製作器
The Node That Turns Your Rendered Rooms Into a Real PowerPoint
- images
- result
Getting the images is only half the job. The other half is a deck that doesn't look like a ransom note - and that's what PresentationMaker exists for. It takes the renders coming out of your sampler, pairs each one with a slide entry from json_data, and composes a proper 16:9 PowerPoint file with a real layout: full-bleed cover and closing pages, a four-topic overview page, and image-plus-copy room pages in between.
What it is
This is the assembly node, not a thinking node. There's no LLM in here at all - it's a python-pptx layout engine. Everything it needs arrives on its inputs: the images your sampler produced and the JSON structure PresentationGenerator (or PDFMagazineGenerator, if you feel like cross-wiring) handed you.
How it works
The node reads the JSON array and the image batch, then enforces the one rule that matters: the image count has to match the slide count, or it returns 圖片數量與 JSON 數據項目不匹配 and refuses to build. When they do match, it constructs a 13.33 × 7.5 inch (16:9) deck where:
- the first and last slides are full-bleed images,
- the "提案風格概述" page gets a special four-topic layout (動線規劃, 設計主軸, 色彩與材質, 空間機能),
- and each room page is one render with its Chinese description beside it.
The template input is really just a color palette - five presets (經典簡約, 現代商務, 溫馨居家, 時尚雅緻, 清新自然) that set title, text, background and accent colors. It also downscales oversized renders to keep memory sane, and if your output file already exists it appends a counter rather than clobbering it (presentation01.pptx, presentation02.pptx, ...).
The inputs that matter
images- a batch of images, one per slide, in the same order as the JSON entries.json_data- the string output from PresentationGenerator. Don't pretty-print it into a multiline string; it wants the raw JSON.template- the palette. Cosmetic, pick what matches the job.output_path- default./output/presentation.pptx, relative to wherever you launched ComfyUI.font- this one is a minor trap worth knowing about: it defaults to the bundledcht.ttf, but the extracted font name is never actually applied to the text runs in this node, so changing it does nothing. The PPTX uses python-pptx's default font. The font input only really matters on the PDF side of the pack.
The single output, result, is a string like 簡報已成功生成:<path> telling you where the file landed - wire it into a text display if you want to read it in the graph.
Installing and wiring it
Same pack, same install: search "ComfyUI-DesignPack" in ComfyUI Manager, or clone https://github.com/dseditor/ComfyUI-DesignPack into custom_nodes and pip install -r requirements.txt (this node's real dependency is python-pptx). No model files, no API key - it's offline by design.
Where people get stuck
The count mismatch is the classic: you generated one prompt fewer than the JSON produced, or a sampler run failed silently, and the maker bounces the whole thing back with an error string. Regenerate the missing render and re-run. The other recurring complaint is Chinese text: the deck is authored in Traditional Chinese, and while the PPTX itself stores the text fine, opening it in PowerPoint on a machine without a Chinese font will make everything render as boxes or substituted glyphs - that's a font-fallback problem on the viewing side, not the node. And remember the output path is relative to your ComfyUI working directory, so if "where did my file go" is your problem, that's where to look first.
It's the dependable, boring node in a pack full of flashier ones - which, for a tool that exists to turn AI renders into a client-ready deck, is exactly the compliment it wants.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| json_data | STRING | — | |
| template | COMBO | 經典簡約 | 5 options: 經典簡約, 現代商務, 溫馨居家, 時尚雅緻, 清新自然 |
| font | COMBO | cht.ttf | 1 options: cht.ttf |
| output_path | STRING | ./output/presentation.pptx | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| result | STRING | — |