Video Advanced Parameters
Camera moves, looping, and end frames for hosted video APIs
- end_image
- params_json
The Generate Video node already carries a lot of controls - resolution, duration, fps, aspect ratio. What it doesn't carry is the cinematography: camera motion, motion strength, looping. That's this node's lane. It's a parameter builder like the other advanced nodes in the pack: fields in, params_json out, and you feed that string into Generate Video's advanced_params_json input. The idea is you keep the main node for the basics and use this one when you want the video to do something.
How it works
No network calls - it just serializes your non-default settings into a JSON object. The usual pack behavior: defaults are skipped, so leave everything alone and it emits {}. Then Generate Video merges it into the /videos/create request.
There's one genuinely neat feature hiding in here: the end_image input. Feed it an IMAGE from anywhere in your graph and the node base64-encodes it and sends it as end_image_url - a first-frame-to-last-frame control, if your provider supports it. That's the kind of thing that turns a hosted video node into something you can actually art-direct.
The inputs
seed- ≥ 0 for reproducible generations, −1 for random.motion_strength(0–2, default 1) - how much movement the model injects.camera_motion-none,static,pan_left,pan_right,zoom_in,zoom_out, orrotate. The pick-one dropdown that does the cinematic heavy lifting.loop-false/true. Seamless looping clips for backgrounds or social content.upscale-false/true, if the provider offers an upscaling pass.negative_prompt- what you don't want (meaningless to providers that don't support it).guidance_scale(1–20) andsteps(1–150) - the familiar CFG/diffusion pair, sent alongsidecfg_scale/num_inference_stepsaliases for provider compatibility.end_image(optional) - the last-frame image, as above.
Wiring it up
params_json → Generate Video's advanced_params_json. That's it. It also pairs with the optional image input on Generate Video for a start frame, so you can go: start image in Generate Video, end image here, and let the API animate between them.
Installing it
Part of the ComfyUI-AI-CustomURL pack:
cd ComfyUI/custom_nodes
git clone https://github.com/bowtiedbluefin/ComfyUI-AI-CustomURL
cd ComfyUI-AI-CustomURL
pip install -r requirements.txt
Or ComfyUI Manager → search "AI CustomURL", restart. No model downloads.
The honest caveat
Everything in this node is sent as-is to the provider, and "as-is" is the risk. OpenAI's own video endpoint has a very specific set of accepted fields, and camera-motion/loop/motion-strength are not in it - so on OpenAI this mostly does nothing (or errors, depending on how strict the endpoint is). These parameters are aimed at compatible providers whose APIs actually expose them. Same advice as the image advanced node, louder: read your provider's docs first. It's a handy control surface, not a guarantee.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | -1-1–2147483647 | — |
| motion_strength | FLOAT | 1.00–2 | — |
| camera_motion | COMBO | none | 7 options: none, static, pan_left, pan_right, zoom_in, zoom_out, +1 |
| loop | COMBO | false | 2 options: false, true |
| upscale | COMBO | false | 2 options: false, true |
| negative_prompt | STRING | — | |
| guidance_scale | FLOAT | 7.51–20 | — |
| steps | INT | 501–150 | — |
| end_imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| params_json | STRING | — |