Silver API Text Loader
Pull Live Text From Any URL Straight Into Your Prompt
- STRING
Ever wanted a prompt that updates itself? A workflow that pulls today's headlines, a number from your own server, or the latest item from a feed into the text box without you touching anything? That's the whole job of Silver API Text Loader, and it's the rare "API" node with nothing to configure.
What it actually is
Despite the name, there's no API key, no client library, no credits. It just does an HTTP GET on whatever URL you give it and hands the response back as a plain string. The "API" is any endpoint you point it at. It sits in the lightweight corner of the API-node family - the kind of node that phones home for data rather than to run a model - and it's a plumbing-layer move more than anything else: one value source fanned out to your prompt, except the value happens to live on the internet.
How it works
The mechanism is about as simple as it gets. The node GETs your URL with a short 10-second timeout and a browser-style user agent. If you leave json_tag empty, you get the raw response body verbatim. If you set a tag, it parses the response as JSON and walks a dot-separated path into it - so data.prompt digs into {"data": {"prompt": "..."}}, and 0.text pulls [{"text": "..."}] off a list. Nested dicts and array indices both work.
Two failure behaviors are worth knowing because they're unusually forgiving. If the tag isn't found, the node doesn't error - it returns the whole raw response instead and logs a line to the console, which is how you end up with a wall of JSON inside your prompt and no idea why. And if the fetch itself fails, it returns a string that literally says Error: .... That string then flows into whatever you wired it to, so a dead endpoint produces a prompt containing an error message rather than a crash. Keep that in mind before you point this at something flaky.
The inputs that matter
There are only three, and the last one is a trick:
url- where to GET. Empty means "output an empty string."json_tag- the dot-path into a JSON response. Leave blank for raw text.seed- this is the interesting one. The node never actually uses the seed for randomness; look at the code and it's accepted and ignored. Its real job is to break ComfyUI's execution cache. A node whose inputs haven't changed gets skipped on the next queue run, so the seed exists so you can force a fresh fetch by randomizing it (set the widget's control torandomize). If you leave it fixed at 0, the node fetches once and then happily reuses that cached string forever.
The single output is a STRING, which wires straight into a CLIP Text Encode or any text input.
Installing it
Silver Nodes is a small utility pack by SilverAndJade - not a heavyweight like rgthree, but actively maintained (v1.1.0 added this node). The easiest path is ComfyUI Manager: search for "ComfyUI Silver Nodes" and install. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/SilverAndJade/comfyui-silver-nodes
Then restart ComfyUI. No models to download - this node fetches everything at run time.
Where people get burned
Three things, in order of how often they bite. First, the cache thing above - a "why isn't it updating?" question is almost always the fixed seed. Second, endpoints that need auth: there's no header or token configuration here, so anything behind a login will fail. Third, and most importantly, remember you just made your workflow network-dependent. If the URL goes away, your run "succeeds" with an error string in the prompt. For a fun demo it's great; for a workflow you'll run unattended for months, think twice.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| url | STRING | — | |
| json_tag | STRING | — | |
| seed | INT | 00–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |