Nodes/Difforum/Difforum · Film Director
ComfyUI Node

Difforum · Film Director

Drag scenes on a timeline, get camera, prompt, and strength schedules for free

By chillithebillis·Created 3 months ago·Updated about a month ago· 7
Difforum · Film Director
  • params
  • camera_keys
  • prompt_schedule
  • strength_schedule
  • camera_shots
  • info
timeline[{"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_presetcinematic
strength_bias0.00
camera_scale1.00
variation0.00
variation_seed0

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 and variation=0 reproduces 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_start exceeds max_frames; the node skips it. Check info.
  • Schedules don't reach the sampler - remember the outputs are strings; they need the matching node (Camera Keys / Prompt Schedule) to become the DIFFORUM_CAMERA and DIFFORUM_PROMPT objects 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.

CategoryDifforum

Inputs (7)

NameTypeDefaultDescription
paramsDIFFORUM_PARAMS
timelineSTRING[{"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_presetCOMBOcinematic4 options: cinematic, documentary, music_video, psychedelic
strength_biasFLOAT0.00-0.25–0.25
camera_scaleFLOAT1.000.1–3
variationFLOAT0.000–1
variation_seedINT00–4294967295

Outputs (5)

NameTypeDescription
camera_keysSTRING
prompt_scheduleSTRING
strength_scheduleSTRING
camera_shotsSTRING
infoSTRING