Nodes/Kinburg-Nodes/Audio SR (48 kHz Upscale) πŸ”Š
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.

By KinburgΒ·Created 2 months agoΒ·Updated 3 days agoΒ· 1
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)

NameTypeDefaultDescription
audioAUDIOThe 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.
checkpointCOMBOA 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.
stepsINT5010–500DDIM 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_scaleFLOAT3.51–20How 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.
seedINT00–4294967295Noise 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_secondsFLOAT15.365.12–30.72How 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_secondsFLOAT1.00–5How 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.
stereoCOMBOWhat 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_levelBOOLEANtruePut 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.
dtypeCOMBOCompute 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_loadedBOOLEANtrueHold 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.
verboseBOOLEANtruePrint the report to the console. The same text is always on the 'report' output.

Outputs (2)

NameTypeDescription
audioAUDIOβ€”
reportSTRINGβ€”