550W Upload and Submit Video
One clip, one click, no more burned-in subtitles
- result_json
What you're actually getting
550W Upload and Submit Video uploads one MP4 or MOV from ComfyUI's input folder and submits it for watermark and subtitle removal - full-frame by default, which is what you want when text is burned across a phone-format vertical clip. Two service calls wearing one node: upload, then submit.
Set expectations on the return value first. There is no video tensor here: the output is JSON holding a task ID and, later, result URLs. Your pipeline ends with a URL, not a decoded clip you can feed into a Video Combine. Poll with the sibling node, 550W Video Task Query, then download the finished file from its URL.
Subtitle removal is a chore that never goes away - the "watermark" beat runs 40 to 60 new threads a month, steady. A service that does the whole frame in one shot is attractive, assuming the per-clip cost is acceptable.
The inputs that matter
- file - a dropdown, not a socket, populated by scanning
ComfyUI/inputfor.mp4and.mov. Drop your clip in there, then refresh node definitions (or restart) if it doesn't show: the list is built when ComfyUI assembles node definitions, so a file added later stays invisible until you do. - idempotency_key - 8 to 128 characters of letters, digits and
._:-(the image and share-link nodes cap theirs at 64). This is your retry handle: same key on a repeat attempt tells the service it's the same submission rather than a new billable one. A short placeholder fails outright. - rect - empty means the whole frame, which is the default and the right answer for burned-in captions. Otherwise a JSON array of four integers,
[x1,y1,x2,y2]in pixels, top-left to bottom-right,x1<x2andy1<y2, all inside the actual video dimensions. It's parsed as JSON, so0,0,1920,200fails and[0,0,1920,200]works. Floats fail; only whole pixels. - confirm_charge - defaults to off, and off means nothing is sent. Tick it or you'll spend ten minutes debugging a one-word
Invalid input. - language and the optional auth_mode (
api_keyoroauth): language changes error wording, auth_mode picks the credentials and never falls back silently.
What happens after you hit Queue
The file goes up as a multipart POST, then the node validates the returned metadata before submitting: long side 1920 or under, short side 1080 or under, duration 1 to 600 seconds, 1 GiB file ceiling. Fail any of those and you get an invalid-input error and no submission - no charge, but no explanation more specific than "Invalid input". A 4K clip or twelve-minute vlog? Re-encode first:
ffmpeg -i input.mov -vf "scale='min(1920,iw)':-2" -c:v libx264 -crf 20 -c:a aac -movflags +faststart clip.mp4
The upload's read timeout is 180 seconds, so a big file on a slow line is where this fails - with "Request outcome unknown; query the task before retrying". That advice isn't decoration: resubmitting an unknown outcome is how people pay twice for one clip, and the pack never replays a submission for you.
Install
ComfyUI Manager → search 550W Watermark & Text Eraser → install → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/sunshinehu/comfyui-550w-media
cd comfyui-550w-media
python -m pip install -r requirements.txt
Dependencies are requests, requests-toolbelt and keyring; notably absent are ffmpeg, PyAV and torch. Nothing is transcoded locally, no model is downloaded, the GPU sits idle - the clip is processed remotely. Python 3.11+.
export FIFTYW_API_KEY="..." # https://eraser.550wai.com/api/
export FIFTYW_USER_NO="..."
Restart ComfyUI with those set, and buy credits separately - installing costs nothing, submitting does.
Two honest cautions
Only upload what you're allowed to edit. The service is a fixed HTTPS endpoint and your clip genuinely leaves your machine - the mechanism, not a bug. That's the standard trade of every API-wrapper node: cheap convenience for one job you can't do locally, at the price of your media going somewhere you don't control.
This pack has no community track record. Searching the corpus for the author, the repo or the service returns zero threads - not few, none. That doesn't make it malicious; the code is short and the pack is unusually careful about credentials. But "holds your key, phones home by design" is the category of custom node that got weaponized once already, and the ecosystem still has no review process. Read the source before handing it an account - for a ~40-line node that's ten minutes.
And if you're only cleaning a couple of clips, the local route is real: mask the subtitle band per frame and let an inpainting or video-removal model fill it (people still name video-subtitle-remover for exactly this), or run a frame-by-frame instruction edit. Slower, free after setup, and it never leaves your disk - for footage you didn't shoot, that's the deciding factor.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| language | COMBO | en | 2 options: zh-CN, en |
| file | COMBO | 0 options: | |
| idempotency_key | STRING | — | |
| rect | STRING | — | |
| confirm_charge | BOOLEAN | false | — |
| auth_modeopt | COMBO | api_key | 2 options: api_key, oauth |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| result_json | STRING | — |