BYOKey Luma Image to Video
Luma image-to-video — animate a still with Ray 2 and your own key
- first_image
- last_image
- luma_concepts
- output
This is the node you reach for when you have a still you love and want it moving. BYOKey_Luma_Image2Video calls Luma's Dream Machine API (api.lumalabs.ai/dream-machine/v1) with your own key and turns an image - optionally with a text prompt - into a video that starts from (or ends at) that frame. Returns a real ComfyUI VIDEO output, no Comfy proxy, no credits.
The distinctive thing about Luma's image-to-video versus most of the pack's other video nodes: you can supply a first frame, a last frame, or both. That's the power feature. Supply both and you get a video that interpolates between two endpoints - animate an expression change, a camera move, a scene transition - which is dramatically more controllable than "here's an image, make it move." That first/last-frame control is exactly the kind of capability that makes a hosted image-to-video model worth wiring into a workflow.
How it works
Same submit-and-poll pattern as the other Luma node: POST /generations, poll until completed or failed, download, wrap in VIDEO. Your first_image/last_image go up as part of the generation request, and the prompt guides the motion. Like all the pack's video nodes it blocks while it waits - that's the queue, not a hang.
The inputs that matter
first_image/last_image- the endpoints of your video. The node description says it needs at least one of them; both is where the magic is.prompt- motion language shines here: "the camera slowly pushes in as the subject turns toward it." Describe the motion, not the image - the image already shows the subject.model-ray-2(default),ray-flash-2,ray-1-6. Same caveat as the text-to-video sibling: resolution and duration are ignored for ray-1-6.resolution- 540p up to 4k for ray-2. Yes, 4k exists here; yes, it costs. Draft at 540p.duration- 5s or 9s.loop- boolean; useful for animated loops from a still.luma_concepts- theLUMA_CONCEPTSinput for precise camera motion via a Luma Concepts node.poll_interval/max_wait- queue-waiting knobs (defaults 10s/600s).
seed is nondeterministic regardless of value, per the honest tooltip.
Output is output (VIDEO) - wire into a video preview or save node.
Installing it
It's one of 37 nodes in comfyui-byokey, with zero extra dependencies beyond ComfyUI's bundled torch/aiohttp/PIL/numpy/av. Install via ComfyUI Manager (search "byokey") or:
cd ComfyUI/custom_nodes
git clone https://github.com/MeteorAndy/comfyui-byokey.git
Restart, and it's under api/byokey/video. No models download - Luma does the compute.
Gotchas
The first/last-frame combo is the thing to lean on but also the thing to budget for - every frame pair is a full generation, and getting the interpolation right often means a couple of takes, each billed. Feed good images in too: a low-res or messy source frame gives you a low-res or messy video, and Luma won't fix it for you. The usual video-node cautions apply (max_wait on a busy queue, cost scaling with resolution/duration), and the pack-standard hygiene: your key is saved into the workflow JSON, so scrub it before sharing workflows. If you've got a still that deserves to move, this node is how that happens inside ComfyUI.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | Your Luma API key. | |
| base_url | STRING | https://api.lumalabs.ai/dream-machine/v1 | Luma API base URL (override for relays). |
| prompt | STRING | Prompt for the video generation. | |
| model | COMBO | ray-2 | The video generation model to use. |
| resolution | COMBO | 540p | Output resolution (ignored for ray-1-6). |
| duration | COMBO | 5s | Video duration (ignored for ray-1-6). |
| loop | BOOLEAN | false | Whether the video should loop. |
| seed | INT | 00–18446744073709550000 | Seed to determine if node should re-run; results are nondeterministic regardless of seed. |
| first_imageopt | IMAGE | First frame of generated video. | |
| last_imageopt | IMAGE | Last frame of generated video. | |
| luma_conceptsopt | LUMA_CONCEPTS | Optional Camera Concepts to dictate camera motion via the Luma Concepts node. | |
| poll_intervalopt | INT | 101–120 | Seconds between poll attempts. |
| max_waitopt | INT | 60030–3600 | Maximum seconds to wait for completion. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output | VIDEO | — |