Generate PechaKucha Powerpoint
Turn a batch of images into a real PechaKucha deck, auto-timed
- images
- filename
PechaKucha is the presentation format where you get 20 slides and 20 seconds each - no exceptions, 6:40 total, then you sit down. GeneratePowerpoint is the ComfyUI end of that deal: feed it a batch of images and it writes an actual .pptx where every image is a full-bleed slide that auto-advances after the duration you set. It even defaults to 20 seconds, which is the author quietly honoring the real format instead of inventing a new one. You walk away with a finished, timed deck without ever opening PowerPoint.
Why you'd reach for it
You're probably not here for the presentation theory - you generated a stack of storyboard images, mood-board shots, or a slide-by-slide project pitch, and now you need them out of ComfyUI and into something you can present. This is the assemble step at the end of a batch workflow: generate N images in one queue run, then this node turns the batch into the deck. It's the one part of the pack that does something ComfyUI genuinely can't do on its own.
How it works
The whole pack's only real dependency is python-pptx, and this is where it does the work. The node takes images as a list (INPUT_IS_LIST = True), so a batched IMAGE tensor from a single KSampler pass is exactly what it wants. It saves each frame as a PNG to ComfyUI's temp folder, then builds the deck: a dark title slide with your title and a small "Generated using ComfyUI-PechaKucha" credit, then one slide per image with the image stretched edge-to-edge. The auto-advance is a genuine PowerPoint transition, not a hack - the code injects an OOXML <transition> fragment into each slide's XML with the duration in milliseconds (duration × 1000). Slide dimensions come from the first image's pixel size at 96 dpi, so a 1280×720 batch gives you a widescreen deck, and the finished file lands in ComfyUI/output/pecha_kucha (created on the fly). It returns the file path as its filename output.
The inputs that matter
- images - your batch. Any IMAGE tensor with multiple frames; one frame becomes one slide.
- title - the deck title, and the source of the filename (lowercased, spaces become underscores, so "My pecha" →
my_pecha.pptx). - slide_duration - seconds per slide, default 20, max 300. Set it to 20 and you've got true PechaKucha timing.
- titles + show_titles - wire the same list of prompts that generated the images into
titles, flipshow_titleson, and each slide gets its prompt as a caption at the bottom. The node asserts the list lengths match, so don't enable it with nothing wired.
Output: filename, a string like ./output/pecha_kucha/my_pecha.pptx. Feed it into the pack's DownloadPechaKucha node to get a clickable download button.
How to install it
Easiest via ComfyUI Manager: Manager → Install Custom Nodes → search "PechaKucha" → install, then restart. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/lerignoux/ComfyUI-PechaKucha
cd ComfyUI-PechaKucha
python -m pip install -r requirements.txt
Restart ComfyUI afterwards. That's the whole install - one dependency, no model downloads, nothing heavy. But there's a catch worth knowing before you blame the pack: it's written against ComfyUI's new comfy_api node API (the Nodes 2.0-era stuff). If you're on an older ComfyUI and the nodes never show up, the fix is to update ComfyUI itself, not to reinstall the pack.
Common issues
show_titleson with notitleswired → the length assert fails and the run errors. Wire the list or leave it off.- Trailing newline in your prompt box → your last prompt line is empty, which becomes one extra blank image and one blank slide. Delete the trailing Enter (details in the SplitPrompt article).
- The deck "disappears" - it didn't; it's in
output/pecha_kucha, not your output root. If a file with that title already exists, the pack appends_1,_2, and so on rather than overwriting. - Auto-advance not firing in your viewer - the transition is a real OOXML element, but some web previewers ignore it. Open it in actual PowerPoint or LibreOffice and the timing is there.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| title | STRING | My pecha | The title of this Presentation. |
| titles | STRING | the titles for each slide. | |
| slide_duration | INT | 200–300 | Each slide duration in seconds. |
| show_titles | BOOLEAN | false | Show each prompt as slide title. Needs to provide the titles input. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| filename | STRING | — |