BYOK (bring-your-own-key) ComfyUI nodes for generating video through external providers — Gemini/Veo, OpenAI Sora, Azure, and RunwayML — via LiteLLM. No local GPU-hungry model required; you supply your own provider API key and pay that provider directly.
Status: text-to-video works for all providers; image-to-video (a reference image guiding the animation) works for Gemini/Veo only. Text-to-image is planned as a separate node — see Roadmap.
- One node, every provider. Pick a provider from a dropdown; the node's fields update to show only that provider's real parameters.
- BYOK. Your API key never touches this repo or any third party beyond the provider itself. Prefer setting it as a server-side environment variable; an optional in-node override exists for convenience (see Security note).
- Provider-accurate parameters. Each provider exposes its own supported aspect ratios, resolution tiers, and duration range — no guessing which combination is valid.
| Provider | provider value |
Models | Aspect ratios | Resolutions | Duration |
|---|---|---|---|---|---|
| Google Gemini (Veo) | gemini |
Fetched live from your account via google-genai; falls back to a built-in list (veo-3.1-fast-generate-preview, veo-3.1-fast-generate-001, veo-3.1-generate-preview, veo-3.1-generate-001, veo-3.1-lite-generate-preview, veo-2.0-generate-001) if that fails |
16:9, 9:16 | 1K, 2K | 4–8s |
| OpenAI (Sora) | openai |
sora-2, sora-2-pro, sora-2-pro-high-res |
16:9, 9:16 | 1K, 2K | 4–12s* |
| Azure OpenAI (Sora) | azure |
sora-2, sora-2-pro, sora-2-pro-high-res |
16:9, 9:16 | 1K, 2K | 4–12s* |
| RunwayML | runwayml |
gen3a_turbo, gen4_turbo, gen4_aleph, gen4_image, gen4_image_turbo |
16:9, 9:16 | 1K, 2K | 5s or 10s |
* OpenAI/Azure's upper duration bound isn't published by the provider; 12s is a conservative default rather than a confirmed hard limit.
Gemini's model list is fetched live from google.genai.Client().models.list() at node-registration time when a Gemini API key is available on the ComfyUI server, so new Veo releases show up automatically without an update to this package.
Image-to-video (a reference image conditioning the result) is currently supported for Gemini/Veo only. The other providers are text-to-video only for now — see Roadmap. The models, aspect ratios, resolutions, and durations in the table above apply to both text- and image-to-video.
- ComfyUI with the V3 node API (
comfy_api.latest). - Python dependencies (installed automatically, see
requirements.txt):litellm==1.92.0google-genai==1.47.0
- An API key from at least one of the providers above.
Via ComfyUI Manager: search for ComfyUI_ExternalAPI and install.
Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/andy-ratsirarson/ComfyUI_ExternalAPI.git
cd ComfyUI_ExternalAPI
pip install -r requirements.txtRestart ComfyUI afterward.
Set the environment variable(s) for whichever provider(s) you plan to use on the machine running the ComfyUI server, then restart ComfyUI.
| Provider | Environment variable(s) |
|---|---|
| Gemini | GEMINI_API_KEY (or GOOGLE_API_KEY) |
| OpenAI | OPENAI_API_KEY |
| Azure OpenAI | AZURE_API_KEY, AZURE_API_BASE (your endpoint), AZURE_API_VERSION (optional) |
| RunwayML | RUNWAYML_API_SECRET (or RUNWAYML_API_KEY) |
The node also has an optional api_key input that overrides the environment variable for that run. Prefer the environment variable. Anything typed into api_key gets saved into the workflow JSON and into output file metadata — so it can leak if you share a workflow or an output file. Only use it for quick one-off testing.
- Add the node: right-click canvas → Add Node →
external_api/video→ API Video Generate (BYOK). - Enter a text
prompt. - Under
source, leave it ontextfor text-to-video (see Image-to-video below for theimageoption). - Pick a
provider— the node reveals that provider'smodeldropdown. - Pick a
model— the node reveals that model's settings:size(aspect ratio),resolution,seconds(duration), and any provider-specific extras (e.g. Gemini'sperson_generation/negative_prompt, RunwayML'sseed). - Run the graph. The node polls the provider until the video finishes, then outputs a
VIDEO.
Optional inputs: api_key (see Security note), poll_interval (seconds between status checks, default 10), timeout (max seconds to wait, default 600).
To animate a reference image instead of generating from text alone:
- Set
sourcetoimage. The node reveals aproviderdropdown that currently lists onlygemini. - Pick
gemini, then pick a Veomodel— same models as text-to-video. - The node reveals:
size(aspect ratio: 16:9 or 9:16),resolution(1K/2K),seconds(4–8s),reference_image,person_generation, and an optionalnegative_prompt. - Connect
reference_image— anIMAGEsocket, same as any other ComfyUI node that takes an image. Wire in a Load Image node to upload/pick a file, or connect any other node'sIMAGEoutput directly (including an image generated earlier in the same workflow — no need to save it to disk first). This input is technically optional at the graph level, but image-to-video will fail at runtime with a clear error if left unconnected. - Enter a
prompt. It's still required with image-to-video — the prompt directs how the reference image is animated. - Run the graph. As with text-to-video, the node polls until the video finishes and outputs a
VIDEO.
Note: for image-to-video, person_generation only offers allow_adult (text-to-video also offers allow_all). Google restricts generation to adults when a reference photo is provided, so the broader option isn't available here.
This currently supports exactly one reference image per generation. It does not (yet) support multiple reference images, tagging/naming images for reference within the prompt text, or interpolation/video-extension — see Roadmap.
- Image generation — a separate
APIImageGeneratenode, tracked in issue #2. - Image-to-video — implemented for Gemini/Veo (set
sourcetoimage), single reference image only. Support for the other providers (OpenAI/Azure Sora, RunwayML) is future work. - Multi-image references — RunwayML supports referencing several images at once (with in-prompt tagging), and Gemini/Veo 3.1 separately supports up to 3 reference images plus last-frame interpolation and video extension. None of this richer, multi-image capability is implemented yet — today's image-to-video is single-image only for both providers that support it at all.
pip install -e ".[dev]"
pytestTests fake just enough of comfy_api.latest (see tests/conftest.py) to exercise the nodes outside a real ComfyUI install — no GPU or ComfyUI checkout required.
MIT — see LICENSE.