Video Rotate
Fix the sideways phone clip in one click
- video
- video
The most boring video problem in existence: the clip came out sideways, or mirrored, and you just want it fixed. No AI required, no cleverness - that's Video Rotate. It's the node you reach for when a phone video loads at 90°, or when you need a mirrored take for a symmetric composition.
What it does
It re-encodes the clip on the server (PyAV / FFmpeg) and saves the corrected version as a COMFYTV_VIDEO snapshot. Rotation is strictly 90° multiples - 0, 90, 180, 270 - because the rotate_deg input steps in 90s. There's no arbitrary angle here; if you need a 12.7° straighten, that's not this node (Video Transform handles free rotation).
The controls:
- rotate_deg - 0–270, step 90. 90° swings a landscape clip into portrait and vice versa.
- flip_h - mirror left-to-right.
- flip_v - mirror top-to-bottom.
Rotation and flips combine in a single pass, which is handy: a 90° rotation plus a flip fixes most "recorded in a mirror" situations. Note that a 90° or 270° rotation swaps the clip's width and height, so a following Video Resize is often part of the same chain.
The one gotcha
With all defaults - 0°, no flips - there's nothing to do, and the node just re-encodes the clip unchanged. It won't error like Video Speed does, but you also won't see a difference. Set at least one option. That's the only real trap.
Where it sits
It's a sibling of the other geometry tools: Video Crop for trimming edges after reorientation, Video Resize for setting a target size after a 90° swap. In the pack's canvas flow it's one of the "instant tools" - you can also do rotate/mirror in the browser on images, but for video this node is the way.
Install and quirks
Pack-standard install: git clone https://github.com/jtydhr88/ComfyTV into ComfyUI/custom_nodes, restart, under ComfyTV → Video. Media-processing stage, so no models, no GPU, and the only real dependency is PyAV being present in your ComfyUI environment (it usually is; pip install av if a node reports it missing).
Output is a COMFYTV_VIDEO snapshot, so crossing to native ComfyUI nodes means a ← ComfyTV Video Bridge. Inside the pack everything connects directly. Simple node, simple fix - and you'll be surprised how often you use it.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| rotate_deg | INT | 00–270 | — |
| flip_h | BOOLEAN | false | — |
| flip_v | BOOLEAN | false | — |
| videoopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |