PRYX ComfyUI Higgsfield Image to Video
Animate one still image with Kling, Seedance or Wan 3 — no checkpoints involved
- image
- audio
- references
- end_image
- video
- local_file
- remote_url
- request_id
- credits (-1 unavailable)
- usd (-1 unavailable)
- status
You have a picture. You want it to move. Locally that means a 14B video model, a stack of quantized weights, twenty minutes of sampling and a clip still capped around five seconds. The Image to Video node is the other door: connect a still, write a prompt, get a clip from one of 22 documented Higgsfield endpoints - Kling 3.0 Standard/Pro/4K/Turbo, Kling 2.5 and 2.6, Seedance 2.0 and 2.5, Wan 3.0 and Wan 2.6/2.7, MiniMax H3 and Hailuo 2.3, LTX 2.5 fast and pro, PixVerse V6, Happy Horse.
Cost, though. Every one of those is a metered cloud call, and image-to-video is where the money actually goes. That's why this node defaults to estimate_only.
How it works
model picks the endpoint; the node then exposes that model's controls and its media sockets. Connect a native IMAGE - a Load Image, a local render, whatever - to image. Some models also take an explicit end_image (the Kling First/Last Frame variants, Seedance 2.0/2.5, Wan 3.0, MiniMax H3, LTX 2.5, PixVerse V6, Wan 2.7); the socket only appears when your selected model supports one, exactly one image.
The flow behind the canvas: validate inputs against the model's schema → upload any connected local media through Higgsfield's presigned upload flow → call the provider's estimate route → and only then, if request_mode is generate, submit the paid job and poll until it completes, with bounded retries and backoff, downloading the result into ComfyUI's output directory (or temp, if auto_save is off).
Polling is honest about its limits: progress events report phase and elapsed time, and the provider exposes no reliable percentage or ETA through this integration. A request that times out locally is never re-submitted - one deliberate generation, not two, which is the right call when each one costs money.
The inputs that matter
prompt is a connected input, not a text box - wire a Primitive/String or Config UI Prompt node into it. Then:
duration- the union of the models' allowed values shows as5, 10, 6, 8, 15, with real ranges stretchier than that (some endpoints run to 30). Your model's actual set wins.resolutionandaspect_ratio- union lists again:720p, 1080p, 480p, 4k, 2k, 2K, 360p, 540p, and ratios from16:9throughadaptiveandauto.adaptiveis usually what you want for a still you didn't crop, since it follows the source frame.seed--1omits it; the provider may ignore it even when set.generate_audio/sound- whether the provider produces a soundtrack. Two fields because different models call it different things.enable_thinking- reasoning mode on models that support it.mode(std/pro/4k) - this is the provider's quality tier, not billing.request_modeis the billing switch. Kling's README-era naming made this exact confusion common enough to be worth repeating.bitrate_mode(standard/high),fps,camera_movement,negative_prompt,cfg_scale(0–1 here, per the catalog),aigc_watermark,prompt_optimizer,prompt_extend,elements(JSON), andmulti_shotswithmulti_prompt- a JSON array of shot objects withpromptandduration, up to 6 items on models that support multi-shot.
audio and references sockets show up because some of these endpoints accept an audio track or ordered extra media. For several of them you simply don't get those sockets. Model limits are enforced before upload, and the status output carries the reference mapping after the run.
Outputs
video is a native VIDEO (or a local path fallback on ComfyUI builds without a wrapper - there's also local_file for that). remote_url is JSON text of the provider URL, useful for logging only. request_id is empty on estimates. credits and usd are the estimate, -1 when unavailable. status is the diagnostics blob: status, elapsed time, URLs, reference mapping, provider status.
In estimate_only the video output is intentionally empty. If you're staring at a blank output node, that's the first thing to check.
Install and credentials
Manager: search PRYX ComfyUI Higgsfield, install, restart. Manual install:
cd ComfyUI/custom_nodes
git clone https://github.com/PRYX-STUDIO/pryx-comfyui-higgsfield.git pryx-comfyui-higgsfield
python -m pip install -r pryx-comfyui-higgsfield/requirements.txt
Windows portable: ..\python_embeded\python.exe -m pip install -r .\pryx-comfyui-higgsfield\requirements.txt. ComfyUI 0.35.0+, frontend 1.53.6+, Python 3.10–3.13. Dependencies are higgsfield-client, httpx, jsonschema - nothing to download into models/, which is a nice change of pace.
Credentials go in Settings → PRYX ComfyUI Higgsfield → Credentials as one key-id:key-secret string, or HF_KEY / HF_API_KEY+HF_API_SECRET for headless. Stored locally; never a workflow value. Set max_usd positive before you flip to generate - zero means "no limit", which is not what most people mean.
When it goes wrong
A model missing from the dropdown is a capability or status filter, not an outage - refresh the catalog, restart, Ctrl+F5. Connected media rejected means the model wants a different media type, fewer items, or a specific source/end frame; run Reference Preview before blaming the node. And credentials validating does not guarantee the generation will: model availability, credits, content policy and duration limits are all provider-side, and the status output is where their answer lands.
Inputs (29)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | alibaba-happy-horse-image-to-video | Catalog model ID. Connect PRYX ComfyUI Higgsfield Model Catalog or choose a model from the dropdown. |
| seedopt | INT | -1-1–2147483647 | Optional deterministic seed. The provider may ignore it. Range: -1–2147483647. Use -1 to omit the seed and let the provider choose randomly. |
| durationopt | COMBO | 5 | Video duration in seconds. The selected model defines the valid range. Choices: 5, 10, 6, 8, 15 Range: 1–30. |
| resolutionopt | COMBO | 720p | Output resolution supported by the selected model. Choices: 720p, 1080p, 480p, 4k, 2k, 2K, 360p, 540p. |
| aspect_ratioopt | COMBO | adaptive | Output framing. Use the exact format shown in the choices. Choices: 16:9, 4:3, 1:1, 3:4, 9:16, adaptive, auto, 21:9. |
| generate_audioopt | BOOLEAN | true | Sound |
| enable_thinkingopt | BOOLEAN | false | Deep Thinking |
| bitrate_modeopt | COMBO | high | Select the encoded video bitrate tier. Choices: standard, high. |
| modeopt | COMBO | pro | Provider quality tier; separate from request_mode, which controls billing. Choices: std, pro, 4k. |
| soundopt | COMBO | off | Whether the provider should generate a soundtrack. Choices: on, off. |
| multi_shotsopt | BOOLEAN | false | Generate multiple shots when supported by the selected model. |
| multi_promptopt | STRING | JSON array of shot objects with prompt and duration; check the model limits. Items: 0–6. Enter valid JSON; leave blank to omit this optional field. | |
| cfg_scaleopt | FLOAT | 0.500–1 | How strongly the model follows the prompt. The catalog defines the valid range. Range: 0–1 Step: 0.01. |
| negative_promptopt | STRING | Things the model should avoid showing. Characters: 1–2048. | |
| elementsopt | STRING | Catalog-defined model parameter. Enter valid JSON; leave blank to omit this optional field. | |
| fpsopt | COMBO | 25 | Frames per second Choices: 24, 25, 48, 50. |
| camera_movementopt | COMBO | dolly_in | Camera motion preset supported by this model. Choices: dolly_in, dolly_out, dolly_left, dolly_right, jib_up, jib_down, static, focus_shift. |
| aigc_watermarkopt | BOOLEAN | false | Include the provider's AI-generated-content watermark. |
| prompt_optimizeropt | BOOLEAN | true | Provider-specific prompt optimization setting. |
| prompt_extendopt | BOOLEAN | false | Allow the provider to expand the prompt. |
| promptopt | STRING | Prompt text. Connect a Config UI Prompt node for long prompts. | |
| request_modeopt | COMBO | estimate_only | Estimate cost without generating, or submit the paid generation request. |
| max_usdopt | FLOAT | 0.000–10000 | Hard USD limit. Zero disables the limit; no generation is submitted above this value. |
| auto_saveopt | BOOLEAN | true | Save completed media in ComfyUI output; disable to keep it in the temporary directory. |
| timeoutopt | FLOAT | 180010–7200 | Maximum local wait time in seconds. A timed-out remote generation is never submitted again. |
| imageopt | IMAGE | Start image. The selected model defines whether it is required. | |
| audioopt | AUDIO | Direct audio reference. The selected model defines whether it is required and the accepted limits. | |
| referencesopt | PRYX_HF_REFERENCES | Optional ordered references; the selected model defines the limit. | |
| end_imageopt | IMAGE | Optional last frame. Exactly one image; available only for models supporting end frames. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| local_file | STRING | — |
| remote_url | STRING | — |
| request_id | STRING | — |
| credits (-1 unavailable) | FLOAT | — |
| usd (-1 unavailable) | FLOAT | — |
| status | STRING | — |