Morpheus Dream π
One shot of the long-video chain, nothing more
- shots
- start_frame
- end_frame
- shots
- info
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:
- A wired
start_framealways wins - that image is the first frame (stretched to the canvas, no crop, so match the aspect ratio). - Otherwise,
link: continue- the shot inherits the previous shot's last generated frame. A continuous take. - 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 optionalllm_config) reworks this shot just before sampling, when the real first frame finally exists.autorewrites 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.offis right when you pasted a finished prompt yourself. Ignored entirely if the sampler has nollm_config.- Outputs:
shots(the chain, to pass on) andinfo(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.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | What happens in THIS shot. With both keyframes wired, describe the transition between them. | |
| duration | FLOAT | 5.20.2β15.1 | Shot 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. |
| link | COMBO | continue | How 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_offset | INT | 00β4294967295 | Added 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). |
| shotsopt | KINBURG_MORPHEUS_SHOT | Wire the PREVIOUS 'Morpheus Dream' here to chain them. Leftβright = shot order. Leave empty for the first shot. | |
| start_frameopt | IMAGE | First 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_frameopt | IMAGE | Last 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_strengthopt | FLOAT | 0.9990.9β1 | How 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. |
| refineopt | COMBO | auto | Whether 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)
| Name | Type | Description |
|---|---|---|
| shots | KINBURG_MORPHEUS_SHOT | β |
| info | STRING | β |