Protoface Resume Run
Your browser crashed and the job already billed you. This gets it back.
- images
- videos
- audio
- text
- data
- files
Every other node in the Protoface pack can spend money. This one can't. Protoface Resume Run takes a run id and fetches a job that already exists - no submission, no new request, no charge. It is the node you want after a timeout, a browser tab you closed by accident, a ComfyUI restart mid-generation, or a rotated API key, and it's the one people discover last.
Why it exists
API generation is asynchronous and metered: you post a job, the provider works on it for a minute or ten, you poll, you download. That's a lot of surface for things to go wrong on the client side while the server is happily finishing the work and billing you for it. The pack is unusually honest about this in its docs - "a polling timeout leaves a recoverable job rather than submitting another one," interruption requests cancellation and cancellation "does not imply a refund." So the pack's design assumes recovery is normal, not exceptional.
Resume Run is the manual half of that story. The automatic half is the journal: before submitting, the extension records a request identity and reuses its idempotency key on ambiguous failures, so requeueing the same node with the same generation_id picks up where it left off. When the journal and the node are both gone - new graph, other machine, deleted state - the run id is all you have. That's what this node is for.
How it works
The run_id string goes to GET /v1/runs/<id>/status and the node polls it, showing a progress bar, until the job reaches a terminal state. Then it fetches the finished run and downloads its outputs through exactly the same materialiser every generation node uses, so what you get back is byte-for-byte what the original node would have produced.
If the job actually failed on the provider's side, you get an error naming the run and the error code, with the useful reminder attached: keep the generation_id to inspect that same run, increment it to request a new paid job. If the job simply hasn't finished inside the configured window - PROTOFACE_JOB_TIMEOUT_SECONDS, 7200 by default - you get a timeout that tells you to queue unchanged or use Resume Run again. Nothing is resubmitted either way.
Where do you get a run id? Every generation node in the pack has a run id output, and the pack surfaces the same id on the result preview and in your Protoface account. Copy it somewhere durable the first time you care about a job.
Inputs and outputs
run_id (STRING) is the only input. Paste the id. Whitespace is trimmed for you.
The outputs are the full sweep of modalities, all lists: images, videos, audio, text (transcripts and captions, for the models that return them), data (structured results), and files (every original downloaded asset). Whichever ones are empty for your job just stay empty - you wire the two or three you need into Preview Image, Save Image, a video preview, or Protoface Save File.
That breadth is deliberate. Because this node doesn't know what kind of job it's fetching, it exposes every media type and lets the graph take what applies. It also means one Resume Run node can replace a whole broken tail of a workflow: reattach your save/preview nodes to it, queue, and you're done.
Install
The standard pack install, and you'll likely be doing it in a hurry, so:
cd ComfyUI/custom_nodes
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git protoface
python -m pip install -r protoface/requirements.txt
Then restart, reload the browser, and set the API key via the Protoface button in the lower right (or PROTOFACE_API_KEY / PROTOFACE_API_KEY_FILE for headless). ComfyUI 0.41.0+, Python 3.10+. There's also a Resume Run template under Templates → the Protoface extension, which is the fastest way to see the wiring before you build it yourself.
Where it goes wrong
Wrong account. Run ids resolve inside the credentials namespace they were created in. Resume Run with a different key returns not-found, and no amount of retrying will fix it - check that the key in the settings dialog matches the account that owns the job. Rotating a key is precisely the moment the docs tell you to reach for this node rather than a new submission.
Deleting the state directory. PROTOFACE_STATE_DIR (default ~/.cache/protoface-comfyui) holds the job journal, cached catalog and downloaded media. It is not a cache you should clear to "troubleshoot" - the README is explicit that deleting it loses recovery and deduplication information and can lead to a second paid submission.
Expecting it to cancel. It only reads. If you want the job stopped, interrupt the original node's execution; that sends a best-effort cancellation, and whether you're refunded is between you and your account's billing page.
Using it to dodge a schema change. Archived node definitions refuse new submissions after a model's contract changes, by design. Resume Run still retrieves their old results - which is the intended escape hatch, not a workaround.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| run_id | STRING | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| videos | VIDEO | — |
| audio | AUDIO | — |
| text | STRING | — |
| data | PROTOFACE_DATA | — |
| files | PROTOFACE_FILE | — |