Nodes/ComfyUI_EmAySee_CustomNodes/EmAySee Advanced Oobabooga Connector
ComfyUI Node

EmAySee Advanced Oobabooga Connector

Point ComfyUI at a local LLM — the kitchen-sink Oobabooga chat connector

By EmAySee·Created about a year ago·Updated 5 months ago· 3
EmAySee Advanced Oobabooga Connector
    • answer
    • thinking
    • full_raw
    ◄api_urlhttp://10.0.0.71:5000/v1/chat/completions►
    ◄api_keysupersecretkey►
    ◄promptEnter prompt here►
    ◄system_promptYou are a helpful assistant.►
    ◄seed-1►
    ◄max_tokens512►
    ◄temperature1.00►
    ◄top_p1.00►
    ◄min_p0.00►
    ◄top_k0►
    ◄repetition_penalty1.00►
    ◄reasoning_effortmedium►
    ◄auto_continuefalse►
    ◄max_continues3►
    ◄stop_on_errortrue►
    ◄best_of1►
    ◄echofalse►
    ◄frequency_penalty0.00►
    ◄presence_penalty0.00►
    ◄n1►
    ◄suffix►
    ◄user►
    ◄preset►
    ◄dynatemp_low1.00►
    ◄dynatemp_high1.00►
    ◄dynatemp_exponent1.00►
    ◄smoothing_factor0.00►
    ◄smoothing_curve1.0►
    ◄typical_p1.00►
    ◄xtc_threshold0.10►
    ◄xtc_probability0.00►
    ◄epsilon_cutoff0.00►
    ◄eta_cutoff0.00►
    ◄tfs1.00►
    ◄top_a0.00►
    ◄top_n_sigma0.00►
    ◄dry_multiplier0.00►
    ◄dry_allowed_length2►
    ◄dry_base1.75►
    ◄encoder_repetition_penalty1.00►
    ◄no_repeat_ngram_size0►
    ◄repetition_penalty_range1024►
    ◄penalty_alpha0.00►
    ◄guidance_scale1.0►
    ◄mirostat_mode0►
    ◄mirostat_tau5.0►
    ◄mirostat_eta0.10►
    ◄prompt_lookup_num_tokens0►
    ◄max_tokens_second0►
    ◄do_sampletrue►
    ◄dynamic_temperaturefalse►
    ◄temperature_lastfalse►
    ◄auto_max_new_tokensfalse►
    ◄ban_eos_tokenfalse►
    ◄add_bos_tokentrue►
    ◄enable_thinkingtrue►
    ◄skip_special_tokenstrue►
    ◄static_cachefalse►
    ◄truncation_length0►
    ◄custom_token_bans►
    ◄negative_prompt►
    ◄dry_sequence_breakers"\n", ":", "\"", "*"►
    ◄grammar_string►
    ◄sampler_priority►
    ◄stop_sequences►

    ComfyUI runs diffusion models locally, and it can run a text model too - you just need a bridge. EmAySee Advanced Oobabooga Connector is that bridge: it sends your prompt to a text-generation-webui (Oobabooga) instance running an OpenAI-compatible API and returns the model's answer as a string you can feed anywhere in the graph.

    The promise is real: one node, a prompt in, an answer out, and suddenly you have an LLM inside ComfyUI doing prompt rewriting, tag generation, workflow scripting, whatever you can get a local model to do. And "local" is the operative word - no API key from a cloud vendor, no per-token billing, the same spirit as running your own Stable Diffusion. The author, who posts about these nodes on Reddit, is upfront that this family of connectors is not a one-and-done: "you need to craft a good prompt to have it convert though," they wrote, "you need to give the LLM a set of instructions." Treat it as a raw API client, not a magic prompt-improver.

    How it works

    The node posts a JSON payload to your api_url using the OpenAI /v1/chat/completions schema, with system_prompt and prompt as the message pair. Around fifty sampler settings - temperature, top_p, top_k, min_p, repetition penalty, DRY, mirostat, and more - are forwarded if you've changed them from defaults, so it behaves like the full text-generation-webui API exposed as a node.

    Two behaviors stand out. First, auto_continue: if the model stops because it hit max_tokens, the node re-calls the API up to max_continues times, appending the output until the model finishes naturally - a genuine convenience for long generations. Second, thinking parsing: it scans the response for <think>...</think> blocks (the format reasoning models like DeepSeek R1 use) and splits the output into answer and thinking. If a <think> tag is opened but never closed, the answer becomes the literal string [REASONING TRUNCATED] and the thinking gets the rest - a design choice worth knowing about, because that exact string is a sentinel some of the pack's other nodes watch for.

    The inputs that matter

    There are a lot of them, but a beginner sets these:

    • api_url - defaults to http://10.0.0.71:5000/v1/chat/completions. That's the author's LAN address; you must change it to your own Oobabooga server. It must be running with its API enabled (--api flag) at the matching port.
    • api_key - defaults to supersecretkey. If your server isn't enforcing auth, any value works; if it is, use the real one.
    • prompt and system_prompt - the actual conversation. This is where you invest your effort.
    • seed (-1 = random), max_tokens, temperature, top_p, min_p - the core generation controls.

    Outputs are answer (clean text), thinking (the extracted reasoning), and full_raw (the entire JSON response, pretty-printed - your debugging friend).

    Install

    Part of the EmAySee pack:

    cd ComfyUI/custom_nodes
    git clone https://github.com/EmAySee/ComfyUI_EmAySee_CustomNodes
    

    Restart ComfyUI (or Manager → "ComfyUI_EmAySee_CustomNodes"). No requirements.txt - it needs only requests, which ComfyUI already ships. You do need a running Oobabooga text-generation-webui with the API enabled.

    Gotchas

    The default api_url pointing at 10.0.0.71 is the #1 gotcha - every new user hits a connection error until they change it. Next, stop_on_error defaults to True, meaning a backend error crashes the workflow; flip it to False if you'd rather get an error string and keep going. Timeout is 600 seconds, so a slow model won't bail early - but it also means a hung server stalls your workflow for ten minutes. And remember: this is hobbyware with an explicit no-support disclaimer, and the "OpenAI-compatible" label means it should work with other compatible servers (vLLM, LM Studio) but is only tested against Oobabooga. Start with reasoning_effort: medium and a well-crafted system prompt, and you're most of the way there.

    CategoryEmAySee/LLM

    Inputs (65)

    NameTypeDefaultDescription
    api_urlSTRINGhttp://10.0.0.71:5000/v1/chat/completions—
    api_keySTRINGsupersecretkey—
    promptSTRINGEnter prompt here—
    system_promptSTRINGYou are a helpful assistant.—
    seedINT-1-1–18446744073709550000—
    max_tokensINT5121–32768—
    temperatureFLOAT1.000–2—
    top_pFLOAT1.000–1—
    min_pFLOAT0.000–1—
    top_kINT00–200—
    repetition_penaltyFLOAT1.001–2—
    reasoning_effortCOMBOmedium3 options: low, medium, high
    auto_continueBOOLEANfalse—
    max_continuesINT31–10—
    stop_on_errorBOOLEANtrue—
    best_ofoptINT11–10—
    echooptBOOLEANfalse—
    frequency_penaltyoptFLOAT0.00-2–2—
    presence_penaltyoptFLOAT0.00-2–2—
    noptINT11–10—
    suffixoptSTRING—
    useroptSTRING—
    presetoptSTRING—
    dynatemp_lowoptFLOAT1.000–2—
    dynatemp_highoptFLOAT1.000–2—
    dynatemp_exponentoptFLOAT1.000–10—
    smoothing_factoroptFLOAT0.000–10—
    smoothing_curveoptFLOAT1.00.1–10—
    typical_poptFLOAT1.000–1—
    xtc_thresholdoptFLOAT0.100–1—
    xtc_probabilityoptFLOAT0.000–1—
    epsilon_cutoffoptFLOAT0.000–1—
    eta_cutoffoptFLOAT0.000–1—
    tfsoptFLOAT1.000–1—
    top_aoptFLOAT0.000–1—
    top_n_sigmaoptFLOAT0.000–10—
    dry_multiplieroptFLOAT0.000–2—
    dry_allowed_lengthoptINT20–20—
    dry_baseoptFLOAT1.751–5—
    encoder_repetition_penaltyoptFLOAT1.001–2—
    no_repeat_ngram_sizeoptINT00–20—
    repetition_penalty_rangeoptINT10240–8192—
    penalty_alphaoptFLOAT0.000–10—
    guidance_scaleoptFLOAT1.00–20—
    mirostat_modeoptINT00–2—
    mirostat_tauoptFLOAT5.00–20—
    mirostat_etaoptFLOAT0.100–1—
    prompt_lookup_num_tokensoptINT00–20—
    max_tokens_secondoptINT00–32768—
    do_sampleoptBOOLEANtrue—
    dynamic_temperatureoptBOOLEANfalse—
    temperature_lastoptBOOLEANfalse—
    auto_max_new_tokensoptBOOLEANfalse—
    ban_eos_tokenoptBOOLEANfalse—
    add_bos_tokenoptBOOLEANtrue—
    enable_thinkingoptBOOLEANtrue—
    skip_special_tokensoptBOOLEANtrue—
    static_cacheoptBOOLEANfalse—
    truncation_lengthoptINT00–131072—
    custom_token_bansoptSTRING—
    negative_promptoptSTRING—
    dry_sequence_breakersoptSTRING"\n", ":", "\"", "*"—
    grammar_stringoptSTRING—
    sampler_priorityoptSTRING—
    stop_sequencesoptSTRING—

    Outputs (3)

    NameTypeDescription
    answerSTRING—
    thinkingSTRING—
    full_rawSTRING—