Nodes/Kinburg-Nodes/Morpheus Dream πŸŒ™
ComfyUI Node

Morpheus Dream πŸŒ™

One shot of the long-video chain, nothing more

By KinburgΒ·Created 3 months agoΒ·Updated 6 days agoΒ· 1
Morpheus Dream πŸŒ™
  • shots
  • start_frame
  • end_frame
  • shots
  • info
β—„promptβ€”β–Ί
β—„duration5.2β–Ί
β—„linkcontinueβ–Ί
β—„seed_offset0β–Ί
β—„keyframe_strength0.999β–Ί
β—„refineautoβ–Ί

Morpheus Dream is deliberately boring: it's one shot of a MiniMax H3 storyboard. A prompt, a duration, an optional start/end frame, and the rule for how the shot begins. Chain several together and the whole row feeds Morpheus (Video Sampler), which does all the hard seam work. On its own it's the node you reach for when you want to hand-build one opening shot and let an LLM write the rest of the story around it.

How a shot decides where it starts

That's the whole design, and it's a three-way priority:

  1. A wired start_frame always wins - that image is the first frame (stretched to the canvas, no crop, so match the aspect ratio).
  2. Otherwise, link: continue - the shot inherits the previous shot's last generated frame. A continuous take.
  3. Otherwise (link: cut, or it's shot 1) - no keyframe at all: pure text-to-video. That's your hard montage cut.

end_frame is the target the shot moves toward (cover-cropped to the canvas). Worth knowing: the next shot still inherits the generated tail frame, not this image, which is what keeps the two visually identical.

The duration widget is in seconds but snaps up to the model's frame grid - 17k+5 frames at 24 fps, i.e. steps of 0.71 s, so you'll see values like 5.17, 5.88, 6.58. The trained range is 124–362 frames (5.17–15.08 s); anything shorter runs but is out of distribution. The info output tells you the length you actually got, so check it once rather than assuming.

seed_offset is the "re-roll just this shot" dial: it's added to this shot's seed and folds into the shot's cache key, so every earlier shot still replays from cache while later ones re-sample (their first frame changed). keyframe_strength (0.999) is how hard the model is held to its keyframes - it's H3's visual_cond_noise_aug. Lower it a hair on a long chain where re-encoded handoff frames accumulate color drift, but otherwise leave it alone; it's an advanced knob with a good default.

The optional stuff

  • shots - wire the previous Dream here to chain them. Leftβ†’right is shot order; leave it empty for the first shot.
  • refine - whether the sampler's vision LLM (its optional llm_config) reworks this shot just before sampling, when the real first frame finally exists. auto rewrites the opening when the shot starts from a frame the writer never saw (an inherited tail), and writes the whole shot when there's no proper prompt. off is right when you pasted a finished prompt yourself. Ignored entirely if the sampler has no llm_config.
  • Outputs: shots (the chain, to pass on) and info (the snapped length and what the shot got wired).

Installing and gotchas

Same pack as everything else: ComfyUI Manager β†’ search "Kinburg-Nodes", or git clone https://github.com/Kinburg/Kinburg-Nodes into ComfyUI/custom_nodes and restart. No per-node install. The heavy lift is the H3 model itself (and note the H3 Community License excludes the US, EU, UK and South Korea - check your region before downloading the weights).

The mistakes people make here are the usual suspects: keyframes whose aspect ratio doesn't match the canvas (stretched, not cropped), and durations below 5.17 s producing shots that feel rushed because the model wasn't trained there. For a first storyboard, chain a few Dreams with link: continue, feed the row into Morpheus, and let the seams be someone else's problem.

CategoryKinburg-Nodes/Bestiary/Morpheus

Inputs (9)

NameTypeDefaultDescription
promptSTRINGWhat happens in THIS shot. With both keyframes wired, describe the transition between them.
durationFLOAT5.20.2–15.1Shot length in seconds. Snapped UP to the model's frame grid β€” 17k+5 frames at 24 fps, i.e. steps of 0.71 s: … 4.46, 5.17, 5.88, 6.58 … s. The trained range is 124-362 frames = 5.17-15.08 s; anything shorter still runs but is out of distribution. The 'info' output shows the length you actually get.
linkCOMBOcontinueHow this shot starts when NO 'start_frame' is wired: β€’ continue β€” inherit the last generated frame of the previous shot (a continuous take; motion still resets slightly at the seam, since the model only sees a still frame). β€’ cut β€” start from nothing: text-to-video. A hard montage cut. A wired 'start_frame' always wins over both.
seed_offsetINT00–4294967295Added to this shot's seed. Bump it to re-roll THIS shot only β€” it changes the shot's cache key, so every earlier shot still replays from cache (later ones re-sample, because their first frame changes).
shotsoptKINBURG_MORPHEUS_SHOTWire the PREVIOUS 'Morpheus Dream' here to chain them. Left→right = shot order. Leave empty for the first shot.
start_frameoptIMAGEFirst frame of this shot. Overrides 'link'. NOTE: it is STRETCHED to the canvas (no crop), so its aspect ratio should match β€” the sampler's 'canvas' = auto takes the canvas from this image.
end_frameoptIMAGELast frame of this shot β€” the target the shot moves toward (cover-cropped to the canvas). The next shot still inherits the GENERATED tail frame, not this image, so the two stay visually identical.
keyframe_strengthoptFLOAT0.9990.9–1How hard the model is held to its keyframes (the model's visual_cond_noise_aug). 1.0 = exact; lower mixes noise into the keyframe latent and lets the shot drift from it. Worth lowering a hair on a long chain, where re-encoded handoff frames accumulate colour/detail drift. Advanced β€” leave at 0.999 unless you are chasing that.
refineoptCOMBOautoWhether the sampler's own vision LLM (its optional 'llm_config' input) reworks this shot just before it is sampled, when the real first frame finally exists. β€’ auto β€” rework the OPENING when this shot's first frame is one the writer never saw (an inherited tail: its text was written against a forecast); write the whole shot when there is no proper prompt at all; otherwise leave it alone. β€’ off β€” hands off. Use this when you pasted a finished prompt yourself. β€’ opening β€” always rewrite [Scene Overview] and the first beat from the real frame. β€’ full β€” always rewrite the shot from the frames, keeping the style and negative sections. Ignored entirely when no 'llm_config' is wired into the sampler.

Outputs (2)

NameTypeDescription
shotsKINBURG_MORPHEUS_SHOTβ€”
infoSTRINGβ€”