Nodes/ComfyUI Ino Nodes/Ino Vllm Run Sync
ComfyUI Node

Ino Vllm Run Sync

Call a Runpod serverless vLLM endpoint from your workflow — with image input if you need it

By nobandegani·Created about a year ago·Updated 3 months ago· 7
Ino Vllm Run Sync
    • success
    • id
    • status
    • delay_time
    • execution_time
    • response
    • reasoning
    • finish_reason
    ◄enabledtrue►
    ◄url►
    ◄api_key►
    ◄model►
    ◄user_prompt►
    ◄system_prompt►
    ◄image_url►
    ◄temperature0.7►
    ◄max_tokens1024►
    ◄timeout600►
    ◄max_polls70►
    ◄poll_delay10►
    ◄max_failed_retries10►

    Every serious local setup ends up wanting an LLM in the loop at some point - captioning, prompt rewriting, error diagnosis. Running one locally is a GPU tax on top of your diffusion workload, which is why the cloud route exists. Ino Vllm Run Sync calls a Runpod serverless vLLM endpoint from inside a workflow and waits for the answer, optionally handing the model an image URL so you can do vision tasks without a local vision model. The description: "Runs a synchronous vLLM inference request on Runpod serverless with optional image input."

    This is a niche node in a niche pack - it's the whole Runpod category - but for people who already rent Runpod GPUs, it's the cleanest way to get an LLM answer into the graph.

    How it works

    It submits a chat-completion-style request to your endpoint, then polls until the run finishes - that's what "sync" means here: the node blocks (within its timeout) rather than returning a job id for you to check later. It retries failed polls up to max_failed_retries times, so a cold-starting serverless worker doesn't instantly kill your workflow. It returns the full result envelope: success flag, job id, status, timings, the response text, any reasoning output, and the finish reason.

    The inputs that matter

    • url, api_key, model - your endpoint address, key, and model name. Each falls back to an env var if left empty: RUNPOD_LLM_URL, RUNPOD_LLM_API, RUNPOD_LLM_MODEL. Note the README mentions RUNPOD_API_KEY, but the code reads the RUNPOD_LLM_* set - set those if you're going the env-var route.
    • user_prompt - the actual request (required).
    • system_prompt - optional system instructions.
    • image_url - optional; pass a URL and the endpoint gets a vision input.
    • temperature (0–2, default 0.7) and max_tokens (default 1024) - the usual sampling knobs.
    • timeout (default 600s), max_polls (default 70), poll_delay (default 10s) - how long it waits before giving up.

    Outputs: success, id, status, delay_time, execution_time, response, reasoning, finish_reason.

    Where it wires in

    Caption-and-clean pipelines (image_url out of a download node, response into a prompt builder), LLM-assisted debugging via InoTerminalLog, or any workflow that needs a judgment call made before generation continues. The response string is the one you'll feed onward.

    Installing it

    Part of ComfyUI-InoNodes. ComfyUI Manager → search "ComfyUI Ino Nodes" → install → restart. Manual:

    cd ComfyUI/custom_nodes
    git clone https://github.com/nobandegani/ComfyUI-InoNodes
    cd comfyui_ino_nodes
    pip install -r requirements.txt
    

    Restart after. You need a Runpod serverless endpoint running vLLM and its API key; the openai client library (a pack dependency) handles the request plumbing.

    Common issues

    The dominant failure is a cold worker. Serverless endpoints spin down when idle, and the first call can take tens of seconds to come up - if success is false with a timeout, raise max_polls or poll_delay rather than assuming the endpoint is dead. Second, the env-var names are easy to get wrong: use RUNPOD_LLM_* (what the code reads), not RUNPOD_API_KEY. And remember this blocks your workflow for the full generation - a long max_tokens on a slow worker can pin the run for minutes. For heavy use, that's a feature of serverless billing (you pay per run), not a bug.

    CategoryInoRunpodHelper

    Inputs (13)

    NameTypeDefaultDescription
    enabledBOOLEANtrue—
    urlSTRING—
    api_keySTRING—
    modelSTRING—
    user_promptSTRING—
    system_promptoptSTRING—
    image_urloptSTRING—
    temperatureoptFLOAT0.70–2—
    max_tokensoptINT10241–128000—
    timeoutoptFLOAT60010–600—
    max_pollsoptINT701–100—
    poll_delayoptFLOAT101–60—
    max_failed_retriesoptINT100–20—

    Outputs (8)

    NameTypeDescription
    successBOOLEAN—
    idSTRING—
    statusSTRING—
    delay_timeINT—
    execution_timeINT—
    responseSTRING—
    reasoningSTRING—
    finish_reasonSTRING—