Difforum · Scene Stills (storyboard)
One picture per scene, painted in order — the storyboard that becomes your keyframes
- direction
- model
- clip
- vae
- first_image
- keyframes
- indices
- first
- last
- info
Why you'd reach for it
Here's the thing about driving a video model with keyframes: the frames you feed it are your film. H3 will play between them beautifully, but it can't tell a story you didn't draw. Difforum's Director already holds your scenes as text - prompt, mood, camera, timing. Scene Stills turns that text into pictures, one per scene, at the frame where each scene starts, using whatever image model you point it at.
Then you wire its output into H3 Guides or LTX Guides and the video model animates between pictures that already tell the story. The alternative is rendering a whole feedback pass to get a look, sampling frames out of it and hoping they line up with your beats. This is a handful of stills instead. Templates 17–19 are built exactly this way, and they're the easiest templates in the pack to actually finish something with.
The mechanism, briefly
For each scene with a non-empty prompt, it encodes style + scene prompt through your CLIP, samples with common_ksampler, and decodes. So it accepts any image model ComfyUI can load - SDXL finetune, SD1.5, Flux, a DMD2 turbo.
Two design details do the heavy lifting:
The seed is fixed and shared. Every still samples with the same seed, so the model's composition habits and texture carry across beats. That's most of what makes a set look like one film.
continuity paints each still over the one before. Not a coincidence check - literally: the previous still is VAE-encoded and used as the starting latent with denoise = 1 − 0.45 × continuity. At the 0.5 default that's denoise 0.775, enough to change the scene while keeping palette, light and layout. At 0 you get an empty latent and full denoise - free composition, and the look can jump between scenes. At 1 it's a gentle repaint, denoise 0.55, which mostly freezes you in place.
Stills are made at long_edge in the canvas aspect, rounded to a multiple of 64 - the image model's own comfortable size, so they stay sharp when the video model renders them smaller.
Inputs worth touching
- style - written once, in front of every scene prompt: medium, light, lens, palette. This is the single highest-leverage box in the node. One look, repeated, and the stills read as a sequence rather than five unrelated images.
- continuity - 0.5 is the sane start. Push to 0.7–1.0 for one location where only the light changes; drop to 0–0.2 when the scenes are genuinely different places.
- steps / cfg / sampler_name / scheduler - 24 / 5.5 /
dpmpp_2m/karrasfor a base model. With a turbo or DMD2 model, 4–8 / 1–2 /lcmoreuler_ancestral/sgm_uniform. Mixing these up is the usual cause of mud. - long_edge - size the stills at your image model's native resolution, not the video model's.
- first_image (optional) - your own picture as still number one, and the rest get painted after it. Nice when you already have the hero frame and want the set to match its light.
You also need direction (the timeline), plus model, clip and vae. It errors if every scene is empty - the node's way of saying the Director isn't wired or has nothing in it.
Outputs
keyframes is the batch, indices is the comma-separated frame list - together they go into H3 Guides / LTX Guides / Animatic. first and last are for a first-last-frame video model if you only want the endpoints. info prints each scene's start time, frame and how it was made (new or over the previous, denoise 0.78), which is the quickest way to see whether continuity is doing what you think.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/chillithebillis/Difforum.git difforum
Restart, or search Difforum in ComfyUI Manager. The pack's only real dependency is numpy, which ComfyUI already has - no torch version roulette, no build tools. Full reference is in the repo's docs/NODES.md.
What goes wrong
- Faces. The pack's own advice, and it's right: objects, places, hands and silhouettes survive small render sizes; faces don't. Avoid faces in stories built this way, or expect to fix them elsewhere.
- Stills all look the same.
continuitytoo high for scenes that are supposed to move somewhere new. - Stills look like five different films.
continuityat 0 and a different seed or style per scene. Set continuity around 0.5 and sanity-check thatstyleis doing its job. - It re-runs when you only changed a later node. Expected - this node actually samples, so it's a real cost in the graph, not a pass-through. Budget it like a small img2img job: six stills at 24 steps is a couple of minutes on a mid-range card, and you only queue it once per look change.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| direction | DIFFORUM_DIRECTION | The Director timeline: one still per scene that has a prompt. | |
| model | MODEL | An image model (SDXL, SD1.5, Flux...). | |
| clip | CLIP | — | |
| vae | VAE | The VAE that matches the model. | |
| style | STRING | The look shared by every still, written once: medium, light, lens, palette. It goes in front of each scene prompt. | |
| negative | STRING | blurry, low quality, watermark, text, deformed | What no still should show. |
| steps | INT | 241–150 | Sampling steps per still. 24 for a base model, 4-8 with a turbo / DMD2 model. |
| cfg | FLOAT | 5.50–30 | Prompt strength. 5-6 for a base model, 1-2 for turbo / DMD2. |
| sampler_name | COMBO | dpmpp_2m | Sampler. euler / dpmpp_2m for regular models, euler_ancestral or lcm for turbo. |
| scheduler | COMBO | karras | Noise schedule. karras / normal for regular models, sgm_uniform for turbo. |
| seed | INT | 70–18446744073709550000 | Same seed for every still, so they share composition habits and texture. |
| continuity | FLOAT | 0.500–1 | How much each still is painted over the one before. 0 = every still from scratch (free composition, the look can jump). 0.5 = palette and layout carry over. 1 = small changes only. |
| long_edge | INT | 1024256–4096 | Size the stills are made at, in the canvas aspect. Use the image model's own size (1024 SDXL, 768 SD1.5): the video model scales them down itself. |
| first_imageopt | IMAGE | Your own picture as the first still; the rest are painted after it. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| keyframes | IMAGE | — |
| indices | STRING | — |
| first | IMAGE | — |
| last | IMAGE | — |
| info | STRING | — |