LLLMInterpretUrl
LLLMInterpretUrl grabs text and links for you
- url_list
- STRING
- LIST
The most boring, genuinely useful task in any "LLM reads the web" workflow is turning a URL into text your model can actually digest. That's LLLMInterpretUrl. Point it at a page and it returns either the visible text (great for feeding a completion node), the links, or a parsed article - as a string and a list.
Yes, the display name is "LLLMInterpretUrl" with three L's. The author leans into the "LiteLLM" typo; you'll find it in the node menu by that exact name.
How it works
The node has three moving parts worth knowing:
- url - the page to fetch. Note the default is
http://127.0.0.1:3389/infer, i.e. a local inference server. Unless you're running something on that port, type a real URL. - get_what - the extraction mode:
text(all visible text on the page),links(every anchor as a("label", "href")pair),urls, orarticle(parsed title + content as markdown, via thearticle-parserlibrary). - url_list - optional. Give it a
LISTof URLs and the node fetches them all (concurrently, with a cap of 5 in flight) and joins the results. If it's empty, it falls back to your singleurl.
There's also a headers input with a default of Content-Type:application/json, and here's a quirk worth knowing: the fetch code doesn't actually send those headers yet. The field exists, the request doesn't use it. If you genuinely need custom headers (auth, user-agent), this node isn't there yet - patch it or fetch the content another way.
Under the hood it's aiohttp for fetching, BeautifulSoup for the text/link extraction, and article-parser for article mode. Outputs are STRING (the joined result, or the single URL's result) and LIST (the per-URL results). So wire STRING into a completion node's prompt/messages, or keep LIST around if you want per-page granularity.
A real gotcha: the dependencies aren't declared
beautifulsoup4 and article-parser are imported by this node's code, but neither is in the pack's requirements.txt. On a fresh install the pack loads fine, then this node throws ModuleNotFoundError the first time you run it. Fix it once:
cd ComfyUI/custom_nodes/ComfyUI_LiteLLM
pip install beautifulsoup4 article-parser
(aiohttp is covered by the requirements, so only these two are usually missing.)
Where people trip
- The sleeps. After fetching, the node sleeps 10 seconds per batch of 5 URLs. On a 20-URL list that's a deliberate ~40-second pause. It's there to be polite to servers, not a hang - don't kill the run.
- Links mode is weird on purpose. The links come back formatted as Python-looking tuple strings (
("label", "href")) so you canevalthem downstream if you're building something programmatic. That's by design, but it surprises people expecting plain hrefs. - Single-page mode returns STRING, and LIST is the same content wrapped. Don't double-count; they're the same data in two shapes so you can wire either type.
Installing
Pack-level: ComfyUI Manager → search "LiteLLM" (repo Hopping-Mad-Games/ComfyUI_LiteLLM) → Install → Restart, or clone into ComfyUI/custom_nodes and pip install -r requirements.txt. Then run the two pip installs above before first use. No API key needed for this node itself - it's just an HTTP fetcher - but the moment its output hits a completion node, the key rules for whatever model you chose apply (environment variables, never in the graph).
It's a niche tool, but if you're building "summarize these links into a shot list" workflows it's the missing fetch step. Just budget for the extra installs and that fixed 10-second-per-batch pacing.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| url | STRING | http://127.0.0.1:3389/infer | — |
| get_what | COMBO | 4 options: text, links, urls, article | |
| headersopt | STRING | Content-Type:application/json | — |
| url_listopt | LIST | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |
| LIST | LIST | — |