TensorScale Cosmos3 Nano Video To Video (Soze)
Restyle a clip's appearance, not its motion
- video
- video
- video_path
- request_id
- config
- status
The video-to-video sibling of the Cosmos3 Nano text node, and the one with the most important single sentence in its tooltip: the prompt describes the target appearance, not the motion. Cosmos is a world model - it already understands what the source clip is doing. Your job is to say what it should look like, not to re-describe the action. Feed it a clip of a car driving and prompt "rainy night, neon reflections, cinematic grade" and you get the same car, same driving, new look.
The inputs
Same required spine as the t2v node: prompt, seconds, fps, resolution (height profile: 256–768), aspect_ratio (comma form - 16,9, not 16:9), seed. Then the source clip:
video- the sourceVIDEOobject. By default it's inlined as base64, and the tooltip says the obvious thing: inline video usually exceeds the 10 MiB body cap.video_url- a public HTTPS URL. Overrides the video socket when set. If your clip is hosted, this is the path of least resistance.use_fal_upload- defaults to on, because it's the mechanism that saves you: the connected video goes to FAL's CDN and a URL is sent instead of inlining. Leave it on. (It needs a workingFAL_KEYeven though generation is TensorScale.)
The two tuning dials differ from the t2v node: num_steps defaults to 50, the documented high-quality transformation setting (not the t2v's 35), and guidance defaults to 4.5. These are the values the service ships for restyling - if the output looks under-processed, steps are the first thing to raise.
How it works
TensorScale's /v2/cosmos3-nano/v2v runs synchronously with a model-scoped key (TENSORSCALE_API_KEY_COSMOS3_NANO, falling back to TENSORSCALE_API_KEY). The request is a single POST that stays open through the whole generation - the timeout widget (default 1800s) is a read timeout, and video-in/video-out is the slowest shape in this family.
Outputs: video, video_path, request_id, config, status.
Install and key
From the Soze pack ("Quality of Life Nodes for ComfyUI"), via ComfyUI Manager or:
cd ComfyUI/custom_nodes
git clone https://github.com/SozeInc/ComfyUI_Soze.git
pip install -r ComfyUI_Soze/requirements.txt
Restart, then set TENSORSCALE_API_KEY or TENSORSCALE_API_KEY_COSMOS3_NANO (environment variable or .env in the repo root). Don't commit keys.
Common issues
- Prompting for motion does nothing. You're fighting the model's design - prompt appearance, let Cosmos keep the motion.
- 10 MiB body errors. Inline video blew the cap. Confirm
use_fal_uploadis on, or usevideo_urlwith a hosted clip. use_fal_uploadfails with a FAL error. CheckFAL_KEY- the upload hop needs it, separate from your TensorScale key.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describes the target appearance, not the motion. | |
| seconds | FLOAT | 5.01–60 | — |
| fps | INT | 241–60 | — |
| resolution | COMBO | 720 | Output height profile. |
| aspect_ratio | COMBO | 16,9 | 5 options: 16,9, 9,16, 1,1, 4,3, 3,4 |
| seed | INT | 00–4294967295 | — |
| videoopt | VIDEO | Source clip. Inline unless use_fal_upload is on. | |
| video_urlopt | STRING | Public HTTPS URL of the source video. Overrides the video socket. | |
| num_stepsopt | INT | 501–100 | 50 is the documented high-quality transformation setting. |
| guidanceopt | FLOAT | 4.50–30 | — |
| use_fal_uploadopt | BOOLEAN | true | Upload the video socket to FAL's CDN and send a URL. On by default — inline video usually exceeds the 10 MiB body cap. |
| api_key_envopt | STRING | TENSORSCALE_API_KEY_COSMOS3_NANO | Environment variable holding the model-scoped key. Falls back to TENSORSCALE_API_KEY when unset. |
| timeoutopt | INT | 180060–7200 | Read timeout in seconds. These endpoints are synchronous — the socket stays open for the whole generation. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_path | STRING | — |
| request_id | STRING | — |
| config | STRING | — |
| status | STRING | — |