Nodes/FxAi(凤希全能节点)/凤希AI - 视频保存V1
ComfyUI Node

凤希AI - 视频保存V1

Frames In, MP4 Out — the Save Node With No Model Attached

By fxai666·Created 6 months ago·Updated about 22 hours ago· 44
凤希AI - 视频保存V1
  • 图片序列
  • 音频
  • 过渡帧
  • 视频文件路径
  • 保存目录
◄视频序号-1►
◄保存目录sucai►
◄帧率FPS24►

You've finished the interesting part. A batch of IMAGE frames is sitting on a wire and you need a file out of it. VideoHelperSuite is the popular answer and it does this fine - but it carries a lot of scaffolding, and if you're already inside a 凤希AI workflow, this node is the one wire you need.

FxAiVideoSaveV1 (凤希AI - 视频保存V1) takes an IMAGE batch, optionally an AUDIO, and writes an H.264 MP4. That's it. It binds to no model, no sampler, no resolution assumption - it's a file writer. The name's "V1" and the README's one-liner tells you what the author had in mind: run this after face repair, frame interpolation or upscaling, where the frames go through unchanged and you just need them back as video. Its sibling in the pack only differs by requiring an audio track; this one doesn't, so a missing audio wire gives you a silent video instead of a dead workflow.

How it writes the file

There's no imageio and no PyAV in the path. Frames are pulled to CPU, converted to uint8, and piped straight into an ffmpeg subprocess on stdin as raw rgb24 at a fixed resolution taken from the first frame, with the frame count declared up front. The encoder settings are hardcoded and sensible: libx264, preset slow, crf 17, yuv420p, +faststart. That's near-transparent quality with a moov atom at the front, so the file scrubs properly in a browser - someone thought about the output being looked at, not just existing.

If 音频 is connected, the waveform tensor is written to a temp WAV under ComfyUI/fxai/video/temp/, then a second ffmpeg pass muxes it in with -c:v copy (video untouched, no re-encode) at AAC 192k with -shortest. Clean, cheap, and it means an audio track that's shorter than the video just cuts the tail rather than erroring.

Frames land in ComfyUI/fxai/video/<保存目录>/ - not output/. That matters twice: it's where you should look when "nothing saved", and it's the tree the pack's own web asset browser (http://127.0.0.1:8188/fxweb) reads, so anything you write here shows up there with thumbnails and a player.

The inputs that matter

图片序列 is the batch, obviously. 帧率FPS defaults to 24 and accepts fractional values - set it to the frame rate of whatever produced the frames, or the clip plays fast or slow. 保存目录 defaults to sucai and is treated as a subfolder name; characters that would break a path are stripped, so it can't escape the fxai/video tree.

视频序号 is the interesting one. Leave it at -1 and you get a timestamp filename (fxai_20261024_181500.mp4) - safe for casual runs, never overwrites. Give it a non-negative number and the file is named with that zero-padded value (000.mp4, 001.mp4) and the node fires the pack's scene-saved broadcast, so the wider storyboard/scene flow knows this shot exists. Which means: with a fixed number, a re-run silently overwrites the previous file. Good for iterating on shot 3. Bad if you forgot.

The three outputs are 过渡帧, 视频文件路径 and 保存目录. 过渡帧 is worth reading twice - it's only the last frame of the batch, one IMAGE, not the sequence. That's deliberate: it's the anchor you feed into the next segment so your continuation starts from where the previous one ended. 视频文件路径 is a plain string, so you can push it into a text display node, a file-path consumer, or your own bookkeeping.

Installing it

ComfyUI Manager, search fxai-toolkit (or 凤希 - the menu category is in Chinese, so search the pack, not the node name), or:

cd ComfyUI/custom_nodes
git clone https://github.com/fxai666/fxai-toolkit
# restart ComfyUI

The pack ships no requirements.txt and its __init__.py pip-installs just soundfile and psutil. But this particular node has a real dependency the README never mentions: ffmpeg must be on your PATH. Nothing in the pack installs or bundles it. On Linux that's usually already true; on the Windows portable build it frequently isn't. Verify before you build a workflow around it:

ffmpeg -version

If that fails, drop a static ffmpeg build somewhere on PATH (or add its folder to PATH) and restart ComfyUI so the new environment is inherited.

Where it goes wrong

"Video compose failed" with no path in the output. That's ffmpeg not being found or exiting non-zero, generally the former - the node prints the encoder's stderr to the console, so open the console instead of the UI.

Odd width or height. yuv420p subsamples chroma 2×2, so libx264 refuses odd dimensions. If a resize node upstream hands you 1023px, encode fails. Fix the size upstream rather than resizing here.

Mixed resolutions in one batch. The raw-frame pipe declares a single width×height from frame 0. Later frames of a different size produce garbage or a hard encoder error. Batch must be homogeneous.

Silent output. You didn't connect 音频. That's not a bug - this node is the one that tolerates a missing track.

A stale-looking file. The node always re-executes (it declares itself always-changed via the float("NaN") idiom, the same trick plumbing nodes use to defeat ComfyUI's cache). Every queue writes a new file, so with a fixed 视频序号 you're overwriting on purpose, and with -1 you accumulate timestamped files until you clean the folder out.

Category凤希AI/视频

Inputs (5)

NameTypeDefaultDescription
图片序列IMAGE—
视频序号INT-1—
保存目录STRINGsucai—
帧率FPSFLOAT241–240—
音频optAUDIO—

Outputs (3)

NameTypeDescription
过渡帧IMAGE—
视频文件路径STRING—
保存目录STRING—