Nodes/GrokComfyUI/Grok Video Chat Completions (Ace Data Cloud)
ComfyUI Node

Grok Video Chat Completions (Ace Data Cloud)

A chat LLM node wearing a video name — and how to actually use it

By AceDataCloud·Created 3 days ago·Updated 2 days ago· 0
Grok Video Chat Completions (Ace Data Cloud)
    • status
    • task_id
    • media_urls_json
    • first_media_url
    • result_json
    • trace_id
    ◄parameters_json{}►
    ◄model(from JSON/default)►
    ◄n►
    ◄messages►
    ◄max_tokens►
    ◄temperature►
    ◄top_p►
    ◄frequency_penalty►
    ◄presence_penalty►
    ◄seed►
    ◄stop►
    ◄max_completion_tokens►
    ◄logprobs►
    ◄top_logprobs►
    ◄stream_options►
    ◄parallel_tool_calls►
    ◄user►
    ◄reasoning_effort►
    ◄service_tier►
    ◄store►
    ◄metadata►
    ◄logit_bias►
    ◄modalities►
    ◄audio►
    ◄prediction►
    ◄web_search_options►
    ◄tools►
    ◄tool_choice►
    ◄response_format►

    Ignore the label. "Grok Video Chat Completions" doesn't generate video and doesn't touch a frame of it. It's an ordinary chat completions call - you send messages, you get text back - and the "Video" comes from the fact that this pack is built from Ace Data Cloud's Grok service contract, where chat is one of the tools in the same family as video generation. Nothing about the node decodes media.

    So why reach for it? Because an LLM inside a ComfyUI graph is genuinely useful, and this one is the "no local model, no VRAM, frontier-ish quality" option in a graph that already has four of these nodes installed. The usual job is prompt work: take your rough idea, rewrite it into a structured prompt for whichever model you're actually sampling with. That pattern is mainstream now - the community's own default is a small local abliterated model, precisely because it's free per call and doesn't filter. Reach for the hosted path when you want real large-chat quality and don't care about either of those.

    What the node is really doing

    It POSTs an OpenAI-shaped body to https://api.acedata.cloud/grok/chat/completions with the model and messages you supply, and normalizes whatever comes back into six STRING outputs. The contract allows grok-4.7, grok-4.5, grok-4 and grok-3, and it's copied from the service's published schema - which is why the widgets are a wall of OpenAI parameters you mostly won't touch.

    Two of them you will:

    • model - a dropdown that defaults to (from JSON/default). Leave it there and don't put a model into the JSON and validation stops you before any request with an error about the required model field. Just pick one.
    • messages - a plain STRING widget, but the contract wants an array. So you type JSON:
      [{"role":"user","content":"Rewrite this as a one-sentence cinematic prompt: a fox in a rainy alley"}]

    Everything else - temperature, top_p, max_tokens, seed, reasoning_effort, response_format, tools, web_search_options and the rest - is either a named widget or a field inside parameters_json. A nonempty widget overrides the matching JSON field, so you can keep a base body in parameters_json and nudge one value from the node. Arrays and objects go in as JSON strings; response_format set to {"type":"json_object"} is the cheap trick that keeps a downstream parse from choking on chatty preamble.

    Outputs, and where the text actually is

    All six outputs are STRINGs and they're identical across every tool node in this pack: status, task_id, media_urls_json, first_media_url, result_json, trace_id. For chat, status comes back succeeded synchronously (the client forces stream: false and this endpoint isn't treated as async), task_id is empty, and your text lives inside result_json - the whole cleaned response envelope, not just the answer. Wire it to a Show Text or PreviewAny node. The media outputs are normally empty strings here; the client scans any response for URL-shaped media fields, and a plain chat reply has none.

    This node is an output node, which matters more than it sounds: ComfyUI always executes output nodes. Queue the workflow to tweak a downstream sampler and you fire another paid call. Bypass it (Ctrl+B) when you don't need it.

    Install

    ComfyUI Manager → search Grok → confirm publisher acedatacloud, package "Grok by Ace Data Cloud" (registry ID grok), install, restart. Manually:

    cd ComfyUI/custom_nodes
    git clone https://github.com/AceDataCloud/GrokComfyUI
    cd GrokComfyUI && python -m pip install -r requirements.txt   # requests, jsonschema
    

    Then set the key in the ComfyUI process environment and restart the process:

    export ACEDATACLOUD_API_KEY=your_key_here   # ACEDATACLOUD_API_TOKEN also works
    

    There's no key field on the node, and the README is explicit that the key never goes into workflow JSON. Good - keep it that way. No local model, no GPU, no downloads.

    Where people get burned

    A missing key fails at run time, not at install. You get Set ACEDATACLOUD_API_KEY in the ComfyUI process environment and restart. Setting it in a shell that isn't the one launching ComfyUI, or setting it while ComfyUI is already running, produces exactly this. A key that is set but wrong gives you Ace Data Cloud HTTP 401.

    Malformed JSON is caught before the request, with messages like Invalid messages: does not meet the API's required constraint. or parameters_json must contain a JSON object. That's contract validation doing you a favour - it means a typo doesn't cost a call.

    Chat scaffolding in your conditioning is the failure mode worth knowing from the wider LLM-in-ComfyUI experience: chat models emit "Here's your prompt:" and role delimiters, and all of it lands in your prompt if nothing strips it. Ask for a bare output in the instruction itself, or use a JSON response format and parse it.

    Assume per-call billing. Read-only task lookups are free; this is not one of them. Check the current service price before you point a batch workflow at it.

    CategoryAce Data Cloud/Grok

    Inputs (29)

    NameTypeDefaultDescription
    parameters_jsonSTRING{}—
    modelCOMBO(from JSON/default)5 options: (from JSON/default), grok-4.7, grok-4.5, grok-4, grok-3
    nSTRING—
    messagesSTRING—
    max_tokensSTRING—
    temperatureSTRING—
    top_pSTRING—
    frequency_penaltySTRING—
    presence_penaltySTRING—
    seedSTRING—
    stopSTRING—
    max_completion_tokensSTRING—
    logprobsSTRING—
    top_logprobsSTRING—
    stream_optionsSTRING—
    parallel_tool_callsSTRING—
    userSTRING—
    reasoning_effortSTRING—
    service_tierSTRING—
    storeSTRING—
    metadataSTRING—
    logit_biasSTRING—
    modalitiesSTRING—
    audioSTRING—
    predictionSTRING—
    web_search_optionsSTRING—
    toolsSTRING—
    tool_choiceSTRING—
    response_formatSTRING—

    Outputs (6)

    NameTypeDescription
    statusSTRING—
    task_idSTRING—
    media_urls_jsonSTRING—
    first_media_urlSTRING—
    result_jsonSTRING—
    trace_idSTRING—