Provider: Vertex AI
Vertex AI — Gemini through your Google Cloud project, not AI Studio
- provider
Same Gemini models, different door. Google AI Studio hands you a key and a quota; Vertex AI puts the same models behind a Google Cloud project, a region, and a billing account. People reach for Vertex when the bill has to land on a corporate card, when data has to stay in a region, when the API needs to be governed like the rest of their infrastructure - or when they already have GCP credits and no appetite for another account.
In this pack the Provider: Vertex AI node wires into the Gemini-family model nodes: Gemini Chat and Nano Banana (image generation and editing). It shares the Gemini route with Google AI Studio, so the model dropdown doesn't change - what changes is who's serving it and who's invoicing you.
Two ways to authenticate, and you pick one
This is the whole node, really. Vertex accepts either:
- An express-mode API key - paste it into
api_keyand leavecredentials_jsonempty. Simple, and fine for personal use. - A service-account credential - paste the whole service-account JSON into
credentials_json(it's a multiline field, on purpose), and setproject_idandlocation. The pack builds credentials from what you pasted and talks to Vertex with them.
The node's own logic picks the first path when api_key is filled and credentials_json is empty; otherwise service-account credentials win. So don't fill both and wonder which one is being used.
Here's a genuinely confusing detail worth absorbing before you spend an evening on it: the credentials_json field wants the JSON contents, but the "vertex_ai_json" key in api_key.json is treated as a file path to that JSON, and GOOGLE_APPLICATION_CREDENTIALS is left for Google's own library to pick up as a path too. Same idea, three different shapes depending on where you put it.
Fallbacks, in the pack's order: project_id → "vertex_ai_project" in api_key.json → GOOGLE_CLOUD_PROJECT. location → "vertex_ai_region" → VERTEX_AI_REGION. For location, global or a real region like us-central1; leave it blank and you're at the mercy of whatever the client guesses.
The rest of the fields
base_url overrides the endpoint - leave it empty. proxy_url takes an HTTP or SOCKS proxy, and timeout is per-request in seconds with 0 meaning no limit. Neither is exotic; both are the kind of thing that saves you when you're behind a corporate network that doesn't like Google's API host.
Output is the usual single provider port. Nothing happens until you wire it into a model node - on its own this node is inert. And because it shares the Gemini route, a model version that has no Gemini route will fail with a message listing the providers that work, which is your cue to stop blaming the credentials.
Installing
ComfyUI Manager, search the pack title; or:
cd ComfyUI/custom_nodes
git clone https://github.com/yogurt7771/ComfyUI-YogurtNodes.git
cd ComfyUI-YogurtNodes && pip install -r requirements.txt
Restart. The node is in YogurtNodes/LLM/Providers, and at runtime the display name carries the pack's " (Yogurt Nodes)" suffix. The pack pulls google-genai in as a dependency, which the Vertex path needs - if that install failed, nothing here will work and the traceback will look unrelated.
# custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/api_key.json
{
"vertex_ai_json": "/absolute/path/to/service-account.json",
"vertex_ai_project": "my-project-id",
"vertex_ai_region": "us-central1"
}
Where people get burned
Almost always the same three things. The Vertex AI API isn't enabled on the project - that's a console click, not a code fix, and the error is vague. The region doesn't host the model you asked for, which looks identical from the canvas but is a location typo. Or the service account is missing the role that lets it call Vertex, in which case you get a permission error that reads like an auth error and isn't.
One expectation to drop on the way in: Vertex is not cheaper, and it isn't less moderated. It's the same models under Google's content policy - routing through your own project doesn't buy you a looser filter, because there are no weights for you to patch. What it buys you is a billing line item and a region, and if that's what you needed, this is the node.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | Vertex AI express-mode API key. Leave empty to use service-account credentials. | |
| credentials_json | STRING | Service-account JSON. Leave empty to use 'vertex_ai_json' from api_key.json or GOOGLE_APPLICATION_CREDENTIALS. | |
| project_id | STRING | Leave empty to use 'vertex_ai_project' from api_key.json. | |
| location | STRING | Region such as global or us-central1; empty uses 'vertex_ai_region'. | |
| base_url | STRING | API base URL; leave empty for the default endpoint. | |
| proxy_url | STRING | Proxy URL, e.g. http://127.0.0.1:7890 or socks5://127.0.0.1:1080. | |
| timeout | INT | 00–3600 | Request timeout in seconds; 0 means no limit. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| provider | YOGURT_LLM_PROVIDER | — |