📐 S42 CutFlow Aspect Convert
16, 1:1, 2.35:1, or anything in between — without leaving ComfyUI
- clip
- clip
- frame_count
- info
Every AI video model generates at whatever aspect ratio it was trained on, and none of those happen to be the delivery format you need. Your 768×512 LTX clip is going to end up on a phone as 9:16, or square for Instagram, or letterboxed to 2.35:1 for a "cinematic" look. S42CF Aspect Convert is the quick, one-stop fix for that, sitting in the pack's Utilities category right next to the heavier Crop/Pad node.
The inputs are refreshingly few:
target_ratio- presets:16:9,9:16,4:3,3:4,1:1,21:9,2.35:1, pluscustomto use your owncustom_ratiovalue (width ÷ height, so 1.778 = 16:9). That custom escape hatch is genuinely useful for matching an oddball model resolution.fit_mode- this is the decision that actually matters:letterbox- pad with bars to preserve every pixel. The safe default; nothing gets cut.crop_center- crop from the center to fill the target, losing the edges. The classic for turning 16:9 footage into vertical without bars.crop_smart- center-weighted crop, same idea with a bit more leniency about where the crop lands.stretch- distort to fit. You will almost never want this for video, and it's there because occasionally you do.
bg_color- hex color for the letterbox bars, default#000000. That's the knob for the "cinematic" black bars vs. a colored bar look.
Outputs: clip (the converted IMAGE batch), frame_count (handy if a downstream node needs to know the duration), and info (a string summary of what changed). Like everything in the pack, it works on standard IMAGE batches, so it slots between any video loader and any saver.
The one judgment call you'll make repeatedly: letterbox vs. crop. Letterboxing is lossless and honest - you keep the whole frame and add bars. Cropping is what makes the result look native to the platform, but it throws away image content, so if your subject is framed near the edges, crop_center will cut them. For 16:9 → 9:16 specifically, most people reach for the crop and accept losing the sides, which is the standard TikTok/Reels sacrifice.
Honestly, this is a "thin" node - it's one job, done well, with sensible presets. That's not a criticism. If you're doing any vertical delivery from widescreen AI output, you'll wire this in constantly, and the custom_ratio escape hatch means it survives model resolution changes that would break a hard-coded workflow.
Installing it
It's part of S42-CutFlow, so: ComfyUI Manager → search "S42 CutFlow" → Install → restart. Or clone:
cd ComfyUI/custom_nodes
git clone https://github.com/GeekyGhost/S42-CutFlow.git
pip install -r S42-CutFlow/requirements.txt
The requirements file is a single line (opencv-python-headless); the resize/crop math here uses torch and Pillow, which ship with ComfyUI. After restart, the "[S42 CutFlow] Loaded ..." console line confirms it's registered.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | IMAGE | Video clip to convert. | |
| target_ratio | COMBO | 16:9 | Target aspect ratio. '16:9' = widescreen. '9:16' = vertical/phone. '1:1' = square. 'custom' = use custom_ratio value. |
| custom_ratio | FLOAT | 1.7780.2–5 | Custom aspect ratio (width/height). 1.778 = 16:9. Only used when target_ratio='custom'. |
| fit_mode | COMBO | letterbox | 'letterbox' = add black bars to preserve content. 'crop_center' = crop from center to fill. 'crop_smart' = center-weighted crop. 'stretch' = distort to fit. |
| bg_color | STRING | #000000 | Background/letterbox color (hex). Click swatch to pick. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| clip | IMAGE | — |
| frame_count | INT | — |
| info | STRING | — |