Interpolate Generations
The transition node — morph one clip into another and it's genuinely good at it
- client
- video_url
- generation_id
If there's one thing the community consistently says Luma's Dream Machine is best at, it's transitions. Comments about the Ray models keep coming back to "the Luma transitions were just perfect sometimes." LumaInterpolateGenerations is the node that puts that to work: you give it two existing generations and it produces a new clip that smoothly morphs from the end of the first into the start of the second.
This is a different job from LumaExtendGeneration. Extend continues the same footage; interpolate bridges two different clips. Same underlying idea - keyframes - but the keyframes here are both pinned to whole generations instead of one anchor and one free end. Think of it as the cut you'd otherwise hand to an editor, except the cut itself is generated.
How it works
generation_id_1 and generation_id_2 (both required; a missing one raises "Both generation IDs are required") become frame0 and frame1 in the API call, exactly like the first/last frame image keyframes in LumaImage2Video - except here the frames are previous generations rather than uploaded images. You also set prompt (what should happen during the transition), model, resolution, and save. Outputs are the new video_url and generation_id for the interpolated clip.
The practical loop: generate clip A, generate clip B, wire both ids into this node, and out comes the transition. Because both endpoints already exist, the interpolation doesn't have to invent the whole scene - it just has to make a believable bridge, which is exactly where Luma's motion quality shows.
What to set
generation_id_1andgeneration_id_2- wire the string outputs from two earlier generation nodes. These are the only inputs that actually matter for what the node does.prompt- describes the transition itself ("camera pans from scene A to scene B") rather than re-describing either clip.model/resolution- match the source clips so the bridge doesn't look like a different render stitched in.
Installing
It ships in the official Luma pack: ComfyUI Manager → search "ComfyUI-LumaAI-API", or git clone https://github.com/lumalabs/ComfyUI-LumaAI-API into ComfyUI/custom_nodes and pip install -r requirements.txt (just lumaai, requests, numpy, Pillow - nothing heavy, nothing local). You still need a LumaAIClient node with your key feeding client.
Common issues
- "Both generation IDs are required" - you left one of the two id inputs empty. Easy to do, since they're optional-looking strings; both must be wired.
- The bridge is a jump cut, not a morph - the interpolation is only as good as its endpoints. If both source clips are heavily different in style, even a good model can only do so much. Keeping the same model and resolution for A and B helps a lot.
- Credit burn - this is a whole new generation on top of the two you already paid for. It's the most expensive node in the pack per use, so prototype transitions on
ray-flash-2first.
There's an example ExtendingGeneration.json-style wiring in the pack's workflows folder for the extend flow, and the same keyframe pattern applies here - two ids in, one new clip out. If you've ever wanted a "wow" transition shot without cutting in an editor, this is the node.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| client | LUMACLIENT | — | |
| prompt | STRING | — | |
| model | COMBO | 3 options: ray-flash-2, ray-2, ray-1.6 | |
| resolution | COMBO | 2 options: 540p, 720p | |
| save | BOOLEAN | true | — |
| generation_id_1 | STRING | — | |
| generation_id_2 | STRING | — | |
| filenameopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |
| generation_id | STRING | — |