沐阳 H3 · 帧数转秒(内部)
Fps divided into frames — and why H3 needs a node for it
- seconds
This node computes frames / fps and returns a float. That's it. There is no hidden intelligence, no frame grid snapping, no rounding policy to argue about. If you've been staring at it wondering what you're missing: nothing.
The interesting question is why a pack would ship it, and the answer is ComfyUI's type system.
Why a two-line node exists
ComfyUI validates socket types before a graph runs. An INT output can't be wired into an input declared as FLOAT, even when the values are numerically compatible - the engine refuses the connection rather than coercing it. That's usually the right call, but it creates a dead end the moment one part of a pipeline speaks in frames and another speaks in seconds.
H3's timeline is frames. Its durations, at the Graph level, are sometimes seconds. The Director's internal expansion has a node expecting seconds while a sibling produces a frame count from a dynamic input - and the frame count comes from MAINodes' optional enhancement path, where the value arrives as a linked INT rather than a typed-in widget. Rather than sprinkle casts through the fitters, the pack provides one honest node whose whole job is the conversation. The source comment says it exactly: keep dynamic MAINodes frame counts type-safe for H3Condition.
Inputs and output
frames(INT, forced input) - noteforceInput. You can't type a number into this widget; it has to be wired. That's deliberate, because the point of the node is bridging a link.fps(FLOAT, default 24, 1-120). H3's timeline is 24fps, so 24 is the value you almost always want. Change it only if you've genuinely moved the timeline, not to fudge a duration.
Output seconds (FLOAT) - the division, with fps floored at 1.0 so a zero can't produce an infinity and poison the rest of the graph.
When you'd touch it
Honestly, rarely. It's category 沐阳 H3/导演台/内部 - one of the nodes the Director arranges for you. You'll encounter it when you load an exported Director graph, see a node doing an arithmetic operation you could do in your head, and wonder whether it's vestigial. It isn't; it's there because a wire couldn't be made without it.
It is worth knowing about if you're hand-building a graph and hit "required input is missing" or a refused connection on a duration socket. The fix is often this kind of node, and the pack's own plumbing follows the same convention as the rest of the ecosystem - the node plumbing layer has the general version of the story, including the always-rerun IS_CHANGED idiom and the typed-primitive nodes core ships for exactly this purpose.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/civilcoco/ComfyUI-MiniMaxH3-Myang
Restart ComfyUI and hard-refresh the browser. Search "ComfyUI MiniMax H3 Myang" in Manager if you'd rather not clone. The pack declares no Python dependencies at all, which is unusual for a video pack of this size and worth appreciating.
For a setup with different frame-rate assumptions - interpolation, a different model family, an imported clip - remember that H3 itself is 24fps and this node's default assumes it. Feed it a 16fps assumption and every duration downstream will be wrong by 50%, quietly, with no error.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | INT | — | |
| fps | FLOAT | 24.001–120 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| seconds | FLOAT | — |