AetherScale • MFG Video
4x the frames without ever building the batch
- images
- motion
- video_path
- stats
This is the node you want if you already know that AetherScale • MFG produces frames and you intend to end up with an MP4. Same DLSSG frame generation under the hood, but the generated frames go straight into FFmpeg/NVENC one at a time. The multiplied sequence never exists as a ComfyUI IMAGE tensor, which is the entire point.
Do the maths on a real job and it stops being a luxury. A 15-second 2464×512@24 clip is about 5 GiB as RGB float32 just sitting in RAM - now multiply the frame count by four. The README's own framing is that a 2x/4x materialisation at multi-megapixel resolution can run to tens or hundreds of GiB even in FP16. The streaming path is what makes 4x–6x on a long clip something you can run twice.
The mechanism, short version
Source frames go in, generated frames come out one at a time, get quantised to RGB24 and written to the encoder's stdin:
source IMAGE batch → DLSSG frame generation → one frame → RGB24 → FFmpeg/NVENC → MP4
Motion guides work as they do on the MFG node: internal_dis optical-flow analysis at roughly 640px width, or the AETHERSCALE_MOTION packet from AetherScale • Motion Analysis when you pick connected_motion. The generator is shared, so the settings reasoning is too - read the MFG article for the native-vs-surrogate split and the probe_only trick.
Inputs that matter
source_frame_rate is the one people fumble. The encoder writes at source_frame_rate × multiplier, so 4x on 24 fps gives you a 96 fps file that plays at its original duration. That's the correct default and why this field is required here rather than optional - the node has no way to guess, and a wrong value silently re-times your clip.
multiplier - 2x/3x/4x/5x/6x, default 4x. backend - native_dlssg (default) or surrogate_mv for the legacy software path. codec - h264_nvenc default, plus hevc_nvenc, av1_nvenc, libx264, and the full prores_* ladder. There's no container dropdown: ProRes profiles write .mov, everything else writes .mp4.
preset (p1–p7, default p4), bitrate_mbps (default 16), pixel_format (yuv420p for compatibility, yuv444p for chroma you care about), filename_prefix (default AetherScale/MFG), nvenc_gpu (auto picks the highest-generation NVIDIA GPU it finds via nvidia-smi) and cuda_device.
Everything prefixed native_ - native_auto_bootstrap, native_guide_source, native_scene_cut_threshold - behaves as on the MFG node, as do the legacy artifact_guard / emissive_protection / thin_detail_protection / mv_confidence_threshold / fallback_mode / synthesis_mode controls, which only do anything in surrogate mode. There is no AUDIO input - this node writes a silent file.
Outputs
video_path is a string you can hand to a save-text node or use in a script; stats is the JSON report (frame counts, encoder, GPU routing, backend resolved). There's no inline preview widget here - the file lands in ComfyUI's output directory like any other save node, so grab it from there. If you need audio muxed in, run the frames through AetherScale • Video Combine and wire audio there instead.
Install
Same pack, same one-liner - Manager search for AetherScale, or:
cd ComfyUI/custom_nodes
git clone https://github.com/vizart-vj/ComfyUI-AetherScale.git
Restart, and expect a first-run download: the native path fetches dlssg-worker.exe and nvngx_dlssg.dll (hash-verified, ~7.6 MB for the DLL) into runtime/dlssg_native/. No pip dependencies; nvidia-vfx is bootstrapped into the pack's own vendor folder rather than installed into your environment.
Where people get burned
FFmpeg is a hard requirement. AetherScale looks in PATH, then at the binary bundled with VideoHelperSuite, then a few known VHS paths. If none exist you get an explicit "FFmpeg was not found" error - worth fixing before a long render, since this node encodes inline and has nothing to show you if the encoder dies.
Windows + NVIDIA only, and the native DLSSG runtime targets RTX 50-series first. On other hardware you may be forced onto surrogate_mv, which warps and blends frames instead of using DLSSG - fine for a look, not the same result. probe_only on the MFG node tells you which path you're on.
Slow-motion confusion. If your 4x file plays back at normal speed and you wanted slow motion, nothing is broken - that's the intended duration-preserving output. Save frames from AetherScale • MFG and play them at source fps instead.
Last thing: this pack has no community history to cross-check against and the author flags the DLSS paths as experimental. Do a 2-second test clip before trusting it with a 20-minute sequence.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| source_frame_rate | FLOAT | 24.000.01–240 | — |
| multiplier | COMBO | 4x | 5 options: 2x, 3x, 4x, 5x, 6x |
| motion_source | COMBO | internal_dis | 4 options: internal_dis, connected_motion, internal_compact, rgb_only |
| surrogate_method | COMBO | mv_blend | 3 options: mv_blend, linear_blend, frame_repeat |
| scene_cut_strategy | COMBO | repeat_previous | 3 options: repeat_previous, repeat_current, linear_blend |
| codec | COMBO | h264_nvenc | 10 options: h264_nvenc, hevc_nvenc, av1_nvenc, libx264, prores_proxy, prores_lt, +4 |
| preset | COMBO | p4 | 7 options: p1, p2, p3, p4, p5, p6, +1 |
| bitrate_mbps | INT | 161–500 | — |
| pixel_format | COMBO | yuv420p | 2 options: yuv420p, yuv444p |
| filename_prefix | STRING | AetherScale/MFG | — |
| cuda_device | INT | 00–0 | — |
| motionopt | AETHERSCALE_MOTION | — | |
| artifact_guardopt | FLOAT | 1.000–1 | — |
| emissive_protectionopt | FLOAT | 0.850–1 | — |
| thin_detail_protectionopt | FLOAT | 0.750–1 | — |
| mv_confidence_thresholdopt | FLOAT | 0.450–1 | — |
| fallback_modeopt | COMBO | linear_blend | 2 options: linear_blend, closest_source |
| synthesis_modeopt | COMBO | continuous_temporal | 2 options: continuous_temporal, legacy_guarded |
| backendopt | COMBO | native_dlssg | 2 options: native_dlssg, surrogate_mv |
| native_auto_bootstrapopt | BOOLEAN | true | — |
| native_guide_sourceopt | COMBO | internal_dis | 3 options: internal_dis, connected_motion, zero_motion |
| native_scene_cut_thresholdopt | FLOAT | 0.240.01–1 | — |
| nvenc_gpuopt | COMBO | auto | 1 options: auto |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_path | STRING | — |
| stats | STRING | — |