ComfyUI Node
Audio SR (48 kHz Upscale) π
AudioSR bandwidth extension: takes a mix that dies early and writes plausible high end back in, at 48 kHz. A stereo mix keeps its image: only the MID channel goes through the model and side is carried through, because summing to mono was measured to take an L/R correlation of +0.45 and a side/mid of 0.61 down to 1.00 and 0.00. Chunked with a Hann crossfade, each chunk rescaled to its own input peak. The progress bar counts chunks x DDIM steps and a cancel is honoured every step rather than every chunk β both of which come from a hook in the vendored sampler, since the diffusion loop is where the time actually goes.
Audio SR (48 kHz Upscale) π
- audio
- audio
- report
βcheckpointβΎβΊ
βsteps50βΊ
βguidance_scale3.5βΊ
βseed0βΊ
βchunk_seconds15.36βΊ
βoverlap_seconds1.0βΊ
βstereoβΎβΊ
βmatch_leveltrueβΊ
βdtypeβΎβΊ
βkeep_loadedtrueβΊ
βverbosetrueβΊ
CategoryKinburg-Nodes/audio
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | The mix to extend. Resampled to 48 kHz and summed to mono first β AudioSR is a mono model, so a stereo image does not survive this. Upscale before you widen, not after. | |
| checkpoint | COMBO | A checkpoint from ComfyUI/models/AudioSR. 'basic' is for music, 'speech' for voice β the variant is read from the file name, so keep the shipped names. The fp32 files are about 6 GB each; see 'dtype' if that is tight. | |
| steps | INT | 5010β500 | DDIM steps per chunk. This is the whole cost: total work is chunks x steps, and the progress bar counts exactly that. 50 is a sane working value; upstream's own default is 200, which is four times the wait for a difference you will struggle to hear on a mix. |
| guidance_scale | FLOAT | 3.51β20 | How hard the model is held to the input. Higher stays closer to what you fed it; lower invents more top end. 3.5 is upstream's default. |
| seed | INT | 00β4294967295 | Noise seed. Worth holding fixed while you compare steps or chunk lengths, or you are comparing two different inventions of the high end. Capped at 2^32-1, not the usual 2^64-1: AudioSR's seed_everything() calls numpy, which refuses anything larger. A bigger value arriving on the wire β a song seed from Siren Cast, say, which really is 64-bit β is folded into range rather than raising, and the report says what was actually used. |
| chunk_seconds | FLOAT | 15.365.12β30.72 | How much audio goes through the model at once. The default is 3 x 5.12 s because the batch builder pads every chunk up to a multiple of 5.12 s β a length that is not a multiple of it pays for denoising silence. Longer chunks mean fewer joins and more VRAM. |
| overlap_seconds | FLOAT | 1.00β5 | How much neighbouring chunks share, crossfaded with a Hann pair (which sums to 1, so the join neither dips nor doubles). 0 is a hard butt-join, which is upstream's default and is audible on sustained material. 1 s is cheap insurance; more only costs compute, since overlapped audio is processed twice. |
| stereo | COMBO | What to do with a stereo mix, since AudioSR is a mono model. β’ mid/side (recommended) β only the mid channel goes through the model; side is carried through untouched and the two are recombined. The image survives. Everything invented above the source's roll-off lands in the centre, because side has no content up there β highs come out centred, which is how plenty of records sit. β’ sum to mono β what the model wants, and what the wrapper this replaces did. Measured on a real take: an L/R correlation of +0.45 and a side/mid RMS of 0.61 became 1.00 and 0.00. The whole image, gone. Here to A/B against. Mono in is untouched either way. Never run L and R separately: two independent diffusion passes decorrelate, and the invented top comes out phasey instead of wide. | |
| match_level | BOOLEAN | true | Put the output's energy BELOW 10 kHz back where the input's was. Not an overall level match β the model genuinely adds energy up top, and matching totals would turn the whole track down to pay for it. Below the roll-off it measured transparent (-0.4 dB at 8-12 kHz), so drift down there is drift: on the take we measured it was -1.2 dB at 0-4 kHz and -1.7 dB at 4-8 kHz, which reads as the mix losing body. The gain applied is printed. |
| dtype | COMBO | Compute precision. fp32 is what the checkpoints ship as and what to keep unless VRAM says otherwise; fp16 roughly halves the model's footprint, bf16 is the safer half-precision on RTX 30-series and up. | |
| keep_loaded | BOOLEAN | true | Hold the model in VRAM between runs. On is right while you iterate; off frees about 6 GB after every run and pays the load time again next time. |
| verbose | BOOLEAN | true | Print the report to the console. The same text is always on the 'report' output. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | β |
| report | STRING | β |