TOS Upload Video URL
The Glue Node That Makes Seedance Reference Video Work
- video
- url
- object_key
- is_reused
- text
Here's the awkward thing about ByteDance's Seedance video API: it wants reference videos as public URLs, and it will not accept your local file. TOSUploadVideoURL exists to paper over exactly that gap. It takes a local video from your ComfyUI graph, uploads it to Volcengine's TOS object storage (think AWS S3, ByteDance edition), and hands you back a pre-signed URL - which you then feed straight into the video_url input of the pack's SeedanceVideoGenerate node. Upload node → video node, done.
TOS (that's the service's actual name) is the sanctioned way to do this, and the node is built around the official limits: reference videos max out at 50 MB and should be .mp4 or .mov. Exceed the size cap and it refuses up front with a clear error instead of letting the API reject you halfway. Hand it a file that's already under the limit and it just works.
What you configure
The node needs a TOS bucket to exist, and you fill in the details:
- bucket - your bucket name. You create it in the Volcengine console.
- endpoint - default
tos-cn-beijing.volces.com; change it if your bucket lives elsewhere. - region - default
cn-beijing, keep in sync with the bucket. - expires_seconds - how long the signed URL stays valid, 60 seconds up to 30 days. If your Seedance generation runs longer than the TTL, the URL dies mid-poll. Keep it generous.
- reuse_existing - hashes the file and skips re-uploading if the object already exists. Handy for re-running a workflow without re-uploading the same clip every time; off by default.
The input that matters
You have two ways in. Either wire a VIDEO tensor from LoadVideo / CreateVideo into the video port, or type a local path into file_path. If you give both, file_path wins - the source is explicit about that. It also validates the path exists before it does anything, so a typo fails fast. Outputs are url (the pre-signed URL - this is the one you wire into Seedance's video_url), object_key, is_reused, and a text log with the SHA-256, size, and upload status.
The thing people trip on: it's a second key
Every other node in this pack runs on ARK_API_KEY. This one does not. TOS needs its own credentials via TOS_ACCESS_KEY and TOS_SECRET_KEY environment variables - a different pair from your ARK key, created in the TOS section of the Volcengine console. You'll also need the SDK that the base README glosses over:
pip install tos
The pack's requirements.txt includes it, but if you installed the node before that dependency was added, the node fails on import with a helpful "run pip install tos" message. Other than that, it's the same install story as the rest of the pack: ComfyUI Manager → search "Seedream Image Generate", or clone the repo into custom_nodes. No model files here - this node's whole job is moving bytes to a bucket and minting a URL. If your reference clip is already on a public URL and under 50 MB, you can honestly skip this node entirely; it only earns its keep when the video starts its life on your disk.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| bucket | STRING | TOS 桶名称 | |
| endpoint | STRING | tos-cn-beijing.volces.com | TOS Endpoint,例如 tos-cn-beijing.volces.com |
| region | STRING | cn-beijing | 桶所在地域,例如 cn-beijing |
| expires_seconds | INT | 360060–2592000 | 预签名 URL 时效,单位秒,范围 60-2592000(30天) |
| reuse_existing | BOOLEAN | false | 是否按文件内容哈希复用已上传对象。关闭时每次都会重新上传 |
| object_prefix | STRING | seedance/ | 上传到桶内的对象前缀 |
| videoopt | VIDEO | 可连接 LoadVideo / CreateVideo 等节点输出 | |
| file_pathopt | STRING | 本地视频路径。若同时提供 video 与 file_path,则优先使用 file_path |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| url | STRING | — |
| object_key | STRING | — |
| is_reused | BOOLEAN | — |
| text | STRING | — |