Difforum · Film Director
Drag scenes on a timeline, get camera, prompt, and strength schedules for free
- params
- camera_keys
- prompt_schedule
- strength_schedule
- camera_shots
- info
Most Difforum workflows ask you to assemble the animation by hand: write a camera string here, a prompt schedule there, a strength curve somewhere else, and pray they agree. Difforum · Film Director is the pack's answer to that - and the README calls the advanced template that uses it the place to start. Instead of managing schedules separately, you describe the clip as scenes: each scene has a frame_start, a mood, a camera preset, and a prompt. The node turns that timeline into four coordinated outputs - camera_keys, prompt_schedule, strength_schedule, and camera_shots - so camera, prompt, and denoise strength all move together.
The default timeline shows the shape of a piece:
[
{"frame_start": 0, "mood": "calm", "camera": "dolly_in", "prompt": "ancient forest, golden hour, wide establishing shot"},
{"frame_start": 60, "mood": "build", "camera": "orbit_right","prompt": "roots and moss, glowing details, warm rim light"},
{"frame_start": 120, "mood": "climax", "camera": "spiral", "prompt": "explosion of light, cosmic transformation"},
{"frame_start": 180, "mood": "resolve", "camera": "zoom_out", "prompt": "embers becoming stars, calm, vast cosmic scale"}
]
Four scenes, four moods, a whole arc. The timeline is a custom JS widget in the ComfyUI DOM (falling back to a plain multiline JSON box if the widget doesn't load - a nice touch), and the moods map to internal presets that set camera speed/intensity, denoise strength, and even lens per scene. You don't write expressions at all.
The other inputs shape the interpretation:
style_preset-cinematic,documentary,music_video,psychedelic. A global grade over the mood presets; pick one that matches the project's vibe.strength_bias(−0.25–0.25) - nudge every scene's denoise strength up or down without editing the timeline. The one-global-dial fix for "everything looks too morphy."camera_scale(0.1–3) - the same idea for camera speed/amplitude across all scenes.variation+variation_seed- deterministic jitter (0–1) on top of the mood presets, hashed by (seed, scene) so the same seed always gives the same variant andvariation=0reproduces the timeline exactly. It's a taste lever, not a randomizer - you can dial in "same structure, slightly different moves" without hand-editing.
Outputs are all STRINGs because they're schedules in text form: camera_keys feeds the Camera Keys node's syntax, camera_shots feeds Camera Shots (same moves as hard cuts - you get both blend and cut for free), prompt_schedule feeds the Prompt Schedule node, and strength_schedule feeds the Feedback Sampler's strength input. Plus info, a per-scene summary that's your plan on paper.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/chillithebillis/Difforum.git difforum
Restart ComfyUI (console: [Difforum] loaded N nodes) or ComfyUI Manager → "Difforum". numpy-only. The JS widget lives in the pack's js/ folder, so a full restart (not just a node reload) is worth it if the timeline doesn't render.
Common issues
- Timeline renders as a plain text box - the custom widget didn't load; restart ComfyUI fully. It still works, just less pretty.
- A scene never appears - its
frame_startexceedsmax_frames; the node skips it. Checkinfo. - Schedules don't reach the sampler - remember the outputs are strings; they need the matching node (Camera Keys / Prompt Schedule) to become the
DIFFORUM_CAMERAandDIFFORUM_PROMPTobjects the sampler consumes.
Film Director is the rare node that removes work instead of adding control. It's not for people who want every sine wave hand-tuned - it's for people who want a film, with scenes and moods, and don't want to babysit four schedules to get there.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| params | DIFFORUM_PARAMS | — | |
| timeline | STRING | [{"frame_start": 0, "mood": "calm", "camera": "dolly_in", "prompt": "ancient forest, golden hour, wide establishing shot, epic scale"}, {"frame_start": 60, "mood": "build", "camera": "orbit_right", "prompt": "roots and moss, glowing details, warm rim light, shallow focus"}, {"frame_start": 120, "mood": "climax", "camera": "spiral", "prompt": "explosion of light, cosmic transformation, high contrast"}, {"frame_start": 180, "mood": "resolve", "camera": "zoom_out", "prompt": "embers becoming stars, calm, vast cosmic scale"}] | — |
| style_preset | COMBO | cinematic | 4 options: cinematic, documentary, music_video, psychedelic |
| strength_bias | FLOAT | 0.00-0.25–0.25 | — |
| camera_scale | FLOAT | 1.000.1–3 | — |
| variation | FLOAT | 0.000–1 | — |
| variation_seed | INT | 00–4294967295 | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| camera_keys | STRING | — |
| prompt_schedule | STRING | — |
| strength_schedule | STRING | — |
| camera_shots | STRING | — |
| info | STRING | — |