AetherScale • Neural Rendering
DLSS 5 Neural Rendering inside ComfyUI — very cool, very experimental
- images
- motion
- image
- stats
This is the node the whole pack is dressed around, and it deserves the hype and the caveats in equal measure. AetherScale's Neural Rendering node applies NVIDIA's DLSS 5 "Neural Rendering" to your own frame batches - upscaling and enhancement driven by the same neural-rendering family that made the RTX 50-series launch trailers, but running as a ComfyUI node on whatever RTX card you point at it. The pack author's own version history is the tell: DLSS 5 support arrived in 0.4.x, got re-architected in 0.5.0 into a "carrier" design, and the README is frank that it's experimental, hardware/driver/runtime-dependent, and expected to evolve. Treat it like a frontier demo you can run, not a stable production tool.
How it works
There are two backends. The default, backend = carrier, bootstraps a pinned third-party DLSS 5 "visual enhancer" release (Merserk/dlss5-visual-enhancer v1.0) - downloaded at runtime, verified against a hard-coded SHA-256 before anything is extracted, and run through a D3D12 worker. That's the key architectural detail: the carrier path follows Windows' graphics adapter routing (the pack even sets a per-app "High Performance" GPU preference), not PyTorch's CUDA device index. The legacy_direct backend, which calls the raw DLSS feature directly, is retained only for diagnostics and reproducibility - the README is explicit that it's not the recommended path. The temporal motion packet from Motion Analysis feeds the whole thing so the neural rendering knows what moved and where shots cut.
The inputs that actually matter
- images + motion - the frame batch and its matching motion packet. Motion packet resolution must equal the input resolution or the node throws a hard error.
- upscale_mode - start at
native_1x(the default) to validate the whole path works before you tryquality_1_5x,balanced_1_724x,performance_2x, orultra_performance_3x. This is genuinely the README's advice and it's good advice - a broken pipeline at 1x costs you nothing to discover. - backend - leave
carrier.legacy_directis for debugging and reproducing old experiments. - style -
autopicksnatural; the named looks and raw preset numbers map onto the runtime. - strength, local_tone, local_structure, skin_structure - the creative dials, all defaulting to neutral-ish values.
- carrier_warmup_frames (default 120) - lets the carrier settle before you judge its output; lower it to test faster, raise it for long takes.
- clean_cache - the mmap-cleanup switch from Super Resolution, same semantics here.
Outputs are image and a stats JSON. The stats also carry a compatibility_contract field noting which workflow schema the node honors - that's the pack protecting older saved graphs.
Installing it
Same as the rest of the pack: Manager → search AetherScale, or clone into custom_nodes and restart. First Neural Rendering run downloads the carrier archive (and the NVIDIA VFX runtime) - internet required, and it's hash-verified, so a failed download just errors out cleanly rather than running something unverified. No runtime DLLs ship inside the Git repo.
The reality check
Primary target is RTX 50-series hardware for the stock Neural Rendering runtime; whether older generations work depends on which runtime path you land on. When it doesn't work, the author's bug-report checklist is your template: GPU model, driver version, AetherScale version, the full ComfyUI traceback, and the stats output. Get that collection before you post anywhere - it's exactly the info that turns "doesn't work" into "fixed in 0.5.6." And if Neural Rendering is a no-go on your card, don't write the pack off: the Super Resolution and Restoration nodes are the stable, practical half and need none of this.
Inputs (32)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| motion | AETHERSCALE_MOTION | — | |
| style | COMBO | auto | 9 options: auto, natural, cinematic, material_detail, default, 3, +3 |
| strength | FLOAT | 0.750–2 | — |
| local_tone | FLOAT | 1.000–2 | — |
| local_structure | FLOAT | 1.000–2 | — |
| skin_structure | FLOAT | 1.000–2 | — |
| reset_on_scene_cut | BOOLEAN | true | — |
| history_frames | INT | 20–8 | — |
| safety_margin_mb | INT | 2048256–16384 | — |
| cuda_device | INT | 00–0 | — |
| effect_cache | COMBO | single | 3 options: single, persistent, none |
| cuda_stream | COMBO | current | 2 options: current, dedicated |
| memory_policy | COMBO | performance | 3 options: performance, balanced, aggressive |
| vram_guard | COMBO | auto | 3 options: auto, release_models, preserve_models |
| min_free_vram_mb | INT | 20480–24576 | — |
| output_device | COMBO | cpu_safe | 2 options: cpu_safe, same_as_input |
| auto_bootstrap | BOOLEAN | true | — |
| presetopt | INT | 30–3 | — |
| auto_maskopt | BOOLEAN | false | — |
| channel_orderopt | COMBO | auto | 3 options: auto, RGBA, BGRA |
| runtime_pathopt | STRING | — | |
| temporal_mode_overrideopt | COMBO | legacy_auto | 4 options: legacy_auto, scene_cut_aware, temporal_sequence, still_images |
| output_precisionopt | COMBO | auto | 3 options: auto, float16, float32 |
| output_storageopt | COMBO | auto | 3 options: auto, mmap, ram |
| clean_cacheopt | BOOLEAN | true | — |
| backendopt | COMBO | carrier | 2 options: carrier, legacy_direct |
| upscale_modeopt | COMBO | native_1x | 5 options: native_1x, quality_1_5x, balanced_1_724x, performance_2x, ultra_performance_3x |
| motion_sourceopt | COMBO | auto | 4 options: auto, connected_motion, internal_dis, zero_motion |
| carrier_warmup_framesopt | INT | 1200–240 | — |
| carrier_scene_cut_thresholdopt | FLOAT | 0.240.01–1 | — |
| carrier_gpuopt | COMBO | windows_high_performance | 1 options: windows_high_performance |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| stats | STRING | — |