Nodes/Nilor Nodes by Nilor Corp/๐Ÿ‘บ Media Stream Output (URL)
ComfyUI Node

๐Ÿ‘บ Media Stream Output (URL)

The upload node that only makes sense inside Nilor's own infrastructure

By nilor-corpยทCreated 2 years agoยทUpdated 6 months agoยท 6
๐Ÿ‘บ Media Stream Output (URL)
  • images
  • uploaded_url
โ—„output_namedefault_outputโ–บ
โ—„formatโ–พโ–บ
โ—„framerate24โ–บ
โ—„content_id<auto-filled by system>โ–บ
โ—„venue<auto-filled by system>โ–บ
โ—„canvas<auto-filled by system>โ–บ
โ—„scene<auto-filled by system>โ–บ
โ—„presigned_upload_url<auto-filled by system>โ–บ
โ—„job_completions_queue_url<auto-filled by system>โ–บ
โ—„output_object_keys<auto-filled by system>โ–บ
โ—„job_type<auto-filled by system>โ–บ

Let's be straight about this one: MediaStreamOutput is not a node for you unless you're running inside Nilor Corp's own pipeline. It's the custom-node layer of a distributed ComfyUI farm - a worker renders images, and this node uploads them to object storage and pings a job queue so a "brain" API knows the work is done. If you found it by googling after a workflow error, the honest answer is that most of its inputs are auto-filled by the system that runs the workflow, not by you.

What it does mechanically

You feed it an images tensor, pick format (png or mp4), and it does two things:

  1. Uploads. PNG mode saves the first image of the batch and PUTs it to the presigned_upload_url. MP4 mode encodes the whole batch into an MP4 via imageio at your chosen framerate (default 24, 1โ€“240) and uploads that. The URL is a pre-signed S3/object-storage PUT URL - that's why it's a plain requests.put and needs no auth of its own.
  2. Notifies. After the upload, it builds a JSON completion message (content_id, status: completed, venue, canvas, scene, the uploaded object key) and sends it to job_completions_queue_url via boto3, using SQS/ElasticMQ endpoints from the pack's config. It returns the uploaded_url as a string.

The inputs content_id, venue, canvas, scene, presigned_upload_url, job_completions_queue_url, output_object_keys, and job_type all default to the literal string <auto-filled by system>. A companion script in the pack's web/js folder hides those widgets from the UI - the system is expected to fill them before the workflow runs. output_name is the key you care about: it's how the system matches this output to its entry in output_object_keys, which is a stringified dict the node parses back into JSON.

Why most people should skip it

If you're a normal local user, everything about this node is dead weight. It needs the .env / config wiring the pack documents (MinIO or S3-compatible endpoints, NILOR_SQS_* variables, AWS-style credentials), a pre-signed URL, and an SQS queue - infrastructure that exists to make a farm of ComfyUI workers coordinate. On a standalone install it will fail the moment it tries to talk to a queue that doesn't exist, and unlike the pack's utility nodes, this one can't fall back to anything. It's genuinely useful only if you're building exactly this: ComfyUI workers whose results get shipped back to a central service.

The one idea worth stealing even outside that setup: the whole pack's philosophy - upload via pre-signed URL (no long-lived credentials in the node) and signal completion through a queue rather than a direct callback - is a sane pattern for anyone wiring ComfyUI into an external API.

Install and dependencies

ComfyUI Manager (search "Nilor Nodes") or clone https://github.com/nilor-corp/nilor-nodes into custom_nodes. This node's runtime needs are real: boto3, imageio + imageio-ffmpeg (for MP4 encoding), requests, and the config loader - all in the pack's requirements.txt. It also reads a .env file the pack expects to be present for secrets, so a bare install won't have working credentials. Restart ComfyUI, and if you just need to silence the missing-node warnings from a workflow you don't actually want to run, uninstall rather than fighting it.

CategoryNilor Nodes ๐Ÿ‘บ/Streaming

Inputs (12)

NameTypeDefaultDescription
output_nameSTRINGdefault_outputโ€”
imagesIMAGEโ€”
formatCOMBO2 options: png, mp4
framerateINT241โ€“240โ€”
content_idSTRING<auto-filled by system>โ€”
venueSTRING<auto-filled by system>โ€”
canvasSTRING<auto-filled by system>โ€”
sceneSTRING<auto-filled by system>โ€”
presigned_upload_urlSTRING<auto-filled by system>โ€”
job_completions_queue_urlSTRING<auto-filled by system>โ€”
output_object_keysSTRING<auto-filled by system>โ€”
job_typeSTRING<auto-filled by system>โ€”

Outputs (1)

NameTypeDescription
uploaded_urlSTRINGโ€”