LTX-2 FrameRate Sync (int+float)
LTX-2 FrameRate Sync
- fps_int
- fps_float
- report
Here's a failure mode that'll waste an evening: half your LTX-2 nodes want FPS as an integer and half want it as a float, and if the two disagree even slightly - 24.0 on one side, 24 on the other, or worse, 23.976 somewhere - you get frame counts that are off by one, audio drift, or segments that don't line up. LTX2 FrameRate Sync is a two-output pass-through node that takes one FPS value and hands you both types, guaranteed consistent.
This is one of those boring utility nodes you don't appreciate until a long multi-segment run silently drifts. The IAMCCS LTX-2 extension ecosystem is that multi-segment run, so the pack uses this node everywhere - the LTX2 Validator's seconds↔length UI syncs through it under the hood, and the helper-module planner chain expects it upstream. If you're building video frames from "FPS × seconds" math, you want a single source of truth for the number.
How it works
Feed it one fps FLOAT and it computes fps_int and fps_float for you. The int_mode widget decides how the integer is derived:
round(default) - the integer isfpsrounded, and the float output keeps your original precision. Standard choice.floor/ceil- the integer snaps down or up, float unchanged. For 29.97 material,floorgets you the 29 that matches most video containers.fixed- the interesting one. It snaps the float to equal the derived integer, so both outputs are perfectly identical. Use this when a downstream node does an exact equality check and24.0vs24is somehow the difference between working and silently wrong.
fps_int is clamped to a minimum of 1, and the report STRING shows you the delta between the two - the classic "where did my 0.024 fps go" debugging tool.
The inputs and outputs that matter
Two inputs: fps (FLOAT, default 24.0) and int_mode. That's the whole thing.
Three outputs: fps_int (INT), fps_float (FLOAT), and report (STRING). Wire fps_int into anything that wants a whole number (frame math, most LTX nodes) and fps_float into the pickier float inputs (audio trim, some samplers). One value in, both types out - that's the entire job, and it's the right job.
Installing it
Part of IAMCCS-nodes. ComfyUI Manager → search "IAMCCS" → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Restart ComfyUI, find it under IAMCCS/LTX-2. No models, no dependencies - it's pure arithmetic.
Common issues
The only real trap is thinking it does more than it does: it doesn't validate your FPS, it just keeps the two representations in sync. If you set 23.976 and expect 24, that's on you - set the value deliberately. And if you're using fixed mode and get a warning that the float was snapped, that's informational, not an error; it means a genuinely fractional FPS got flattened, so double-check that's what you wanted for audio alignment. LTX's native default is a clean 24fps, which is exactly why the pack's extension presets (lossless_refresh_24fps, videoclip_audio_24fps) all assume 24 - keep it simple and use the presets' FPS unless you have a real reason not to.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| fps | FLOAT | 24.001–240 | — |
| int_mode | COMBO | round | 4 options: round, floor, ceil, fixed |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| fps_int | INT | — |
| fps_float | FLOAT | — |
| report | STRING | — |