Media Form Post Node
Upload image, audio, and video together as a form — one node, any mix
- image
- audio
- video
- form_fields
- headers
- text
- response_bytes
- json
- status_code
- response_headers
The Media Form Post Node is the "upload my stuff" node. Where the pack's other senders do one job - raw binary, or a single image - this one accepts an IMAGE, an AUDIO, and a VIDEO input all at once and ships whatever you connect as a classic multipart/form-data file upload, with plain form fields alongside. It's built for APIs that take file uploads: TTS services that want a reference voice, SVC servers that take a clip, video-processing endpoints that want a source video.
It's the newest member of ComfyUI-HttpRequestNodes, ahkimkoo's fork of felixszeto's ComfyUI-RequestNodes. If the Binary Post Request Node is the "one raw body" tool, this is the "proper browser-style upload" tool - and it's the only node in the pack that lets you send all three media types in a single request.
What you set
Only target_url is required. Everything else is optional, but the node's own description is the rule: at least one media input required - connect an image, an audio clip, a video, or any combination. If you don't, it bails with a friendly "No media input provided" response without sending anything.
image/audio/video- the media sockets. Each is re-encoded before upload: images to PNG, audio to WAV (via soundfile), video to MP4 (via imageio, fps auto-detected from the VIDEO type).image_field/audio_field/video_field- the multipart field names, defaulting toimage,audio,video. If your API expectsfileorvoiceinstead, this is where you fix it without touching the server.form_fields(KEY_VALUE) - extra non-file fields, like a model name or a speed setting, wired from a Key/Value Node.headers(KEY_VALUE) - merged over whateverrequestssets automatically.
The outputs
Five: text, response_bytes (raw bytes, blob-decoder friendly), json (parsed response or {"raw": ...}), status_code, and response_headers. Like the binary node it uses a 300-second timeout, and it fails soft - connection errors come back as an error dict and status 0, not a crash.
Install
ComfyUI Manager → search ComfyUI-HttpRequestNodes → Install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/ahkimkoo/ComfyUI-HttpRequestNodes
pip install soundfile imageio imageio-ffmpeg
Category: RequestNode/Post Request. Those three pip packages are the real dependency story here - they're what encode your audio and video into WAV/MP4 before upload. No models, no keys. The workflow pattern to steal: Audio To Blob Node → this node → Blob To Audio Node on the way back in, and you've built a round-trip TTS or voice-clone pipeline that never touches disk.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| target_url | STRING | http://127.0.0.1:8000/api/upload | — |
| imageopt | IMAGE | — | |
| audioopt | AUDIO | — | |
| videoopt | VIDEO | — | |
| image_fieldopt | STRING | image | — |
| audio_fieldopt | STRING | audio | — |
| video_fieldopt | STRING | video | — |
| form_fieldsopt | KEY_VALUE | — | |
| headersopt | KEY_VALUE | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |
| response_bytes | BYTES | — |
| json | JSON | — |
| status_code | INT | — |
| response_headers | DICT | — |