Nodes/Difforum/Difforum · Scene Stills (storyboard)
ComfyUI Node

Difforum · Scene Stills (storyboard)

One picture per scene, painted in order — the storyboard that becomes your keyframes

By chillithebillis·Created 4 months ago·Updated 17 days ago· 10
Difforum · Scene Stills (storyboard)
  • direction
  • model
  • clip
  • vae
  • first_image
  • keyframes
  • indices
  • first
  • last
  • info
◄style►
◄negativeblurry, low quality, watermark, text, deformed►
◄steps24►
◄cfg5.5►
◄sampler_namedpmpp_2m►
◄schedulerkarras►
◄seed7►
◄continuity0.50►
◄long_edge1024►

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 / karras for a base model. With a turbo or DMD2 model, 4–8 / 1–2 / lcm or euler_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. continuity too high for scenes that are supposed to move somewhere new.
  • Stills look like five different films. continuity at 0 and a different seed or style per scene. Set continuity around 0.5 and sanity-check that style is 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.
CategoryDifforum/2 · Direction

Inputs (14)

NameTypeDefaultDescription
directionDIFFORUM_DIRECTIONThe Director timeline: one still per scene that has a prompt.
modelMODELAn image model (SDXL, SD1.5, Flux...).
clipCLIP—
vaeVAEThe VAE that matches the model.
styleSTRINGThe look shared by every still, written once: medium, light, lens, palette. It goes in front of each scene prompt.
negativeSTRINGblurry, low quality, watermark, text, deformedWhat no still should show.
stepsINT241–150Sampling steps per still. 24 for a base model, 4-8 with a turbo / DMD2 model.
cfgFLOAT5.50–30Prompt strength. 5-6 for a base model, 1-2 for turbo / DMD2.
sampler_nameCOMBOdpmpp_2mSampler. euler / dpmpp_2m for regular models, euler_ancestral or lcm for turbo.
schedulerCOMBOkarrasNoise schedule. karras / normal for regular models, sgm_uniform for turbo.
seedINT70–18446744073709550000Same seed for every still, so they share composition habits and texture.
continuityFLOAT0.500–1How 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_edgeINT1024256–4096Size 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_imageoptIMAGEYour own picture as the first still; the rest are painted after it.

Outputs (5)

NameTypeDescription
keyframesIMAGE—
indicesSTRING—
firstIMAGE—
lastIMAGE—
infoSTRING—