AMD AMF Video Upscale (Advanced)
Backends, fallbacks, sharpness
- images
- images
The friendly AMD Video Super Resolution node hides a hardcoded decision: ffmpeg on PATH, AMF auto-selected, fail loudly if VideoSR is missing, 120-second timeout, and no way to say otherwise. AMD AMF Video Upscale (Advanced) is the same engine with every one of those knobs exposed. If the main node works, you don't need this one. If the main node doesn't work - or you want to actually control what happens - this is where you land.
It lives in the same AMD Video Upscaler pack (Yasei-no-otoko/ComfyUI-AMD-Video-Upscaler) and is exactly what its display name says: the advanced variant of the AMF hardware upscaler.
The knobs that matter
Most of the fourteen inputs are things you'll touch once, so here's the short list:
backend-auto(default, probe and pick),amf_sr(requiresr_amf),amf_vpp(AMF VPP bicubic scaling), orcpu_lanczos(CPU fallback). This is the big lever: it decides whether you get true VideoSR output or a plain hardware/CPU scale.fallback_policy- what happens when the chosen backend fails:error(default - fail loudly, no silent downgrade),amf_vpp_bicubic, orcpu_lanczos. The default is a deliberate design choice: silently returning a non-VideoSR result when the AMD path is broken would be worse than an error you actually notice.sr_algorithm-sr1-0(default, conservative) orsr1-1(newer, and it switches to an RGBA AMF surface because AMD documents SR1.1 as not supporting NV12/P010). Alsobicubic,bilinear,pointif you want the filter without the AI-ish label.sharpness--1means "use the AMF/FFmpeg default"; otherwise 0.0 to 2.0 gets passed straight tosr_amf. Start at-1, nudge up only if output looks soft.ffmpeg_path- the escape hatch. Ifffmpeg.exeisn't onPATH, point this at the full path (C:\Tools\ffmpeg\bin\ffmpeg.exe) and the node stops caring aboutPATH.timeout_seconds- 120 default, up to 1800. Big batches on slow iGPUs do run long; the node chunks internally to ~16MP output pixels per run, but a full video can still exceed 120s.
Resize controls work like you'd expect: resize_mode picks between scale (a scale float, 0.125–8x) and target_dimensions (width/height ints). divisible_by (default 2) rounds the output up to a multiple - keep it at 2 for valid NV12 AMF surfaces, which is exactly what the default is for. keep_ratio and fill map to sr_amf's own flags.
How it works
One images tensor in, one images tensor out, both RGB, so it slots into the standard video component workflow (Get Video Components → this node → Create Video) with no conversion in between. Internally it builds an FFmpeg filtergraph per backend - format=nv12,hwupload,sr_amf=... for AMF, scale=...:flags=lanczos for the CPU path - and runs ffmpeg as a subprocess with -init_hw_device amf. That's the whole trick, and it means the mechanism is inspectable: set timeout_seconds high and read the error text when it fails.
Install and the gotchas
Same pack install as the sibling nodes - ComfyUI Manager (search "AMD Video Upscaler"), or clone into custom_nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/Yasei-no-otoko/ComfyUI-AMD-Video-Upscaler.git
Restart, then search for AMD AMF. No pip dependencies, but you need Windows 10/11, an AMD driver with AMF runtime, and an FFmpeg build with --enable-amf (the author tests the gyan.dev 8.1.1-full_build). Verify before blaming anything:
ffmpeg -hide_banner -filters | Select-String -Pattern 'sr_amf|vpp_amf'
ffmpeg -hide_banner -hwaccels | Select-String -Pattern '^amf$'
Where people get burned with the advanced node specifically:
sr1-1on unsupported hardware. Older GPUs and some drivers reject it; switch tosr1-0. This is the most common "it worked yesterday" break.- AMF minimums. Inputs and outputs must be at least 32×32, and
sr_amfrefuses to downscale - if you're shrinking, useamf_vpporcpu_lanczos. auto+errorcan look like a broken node.autoonly picksamf_srwhensr_amfactually exists; if your build lacks it you get an error telling you exactly that. Read it - it's telling you to either fix the build or set a fallback policy.
If you can't tell whether your setup even supports this, run the pack's diagnostics node first. It'll tell you if sr_amf and the AMF hwaccel are there before you start debugging filter graphs.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| resize_mode | COMBO | scale | 2 options: scale, target_dimensions |
| scale | FLOAT | 2.000.125–8 | — |
| width | INT | 19202–16384 | — |
| height | INT | 10802–16384 | — |
| divisible_by | INT | 22–64 | — |
| backend | COMBO | auto | 4 options: auto, amf_sr, amf_vpp, cpu_lanczos |
| fallback_policy | COMBO | error | 3 options: error, amf_vpp_bicubic, cpu_lanczos |
| sr_algorithm | COMBO | sr1-0 | 5 options: sr1-0, sr1-1, bicubic, bilinear, point |
| sharpness | FLOAT | -1.00-1–2 | — |
| keep_ratio | BOOLEAN | false | — |
| fill | BOOLEAN | false | — |
| ffmpeg_path | STRING | ffmpeg | — |
| timeout_seconds | INT | 1205–1800 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |