Initial release: ComfyUI-UniverSR

ComfyUI nodes for UniverSR (ICASSP 2026) — vocoder-free audio
super-resolution (8/12/16/24 kHz → 48 kHz) via flow matching.

- UniverSR Model Loader: presets auto-download to models/universr,
  plus local dir / raw .pth (from_local) loading, with caching.
- UniverSR Super-Resolution: chunked overlap-add for long audio,
  per-channel stereo, seed control with global-RNG isolation,
  wet/dry blend, and an optional before/after spectrogram.
- Vendors the universr inference package under vendor/ (prefers an
  installed copy); only extra dep beyond ComfyUI's stack is torchdiffeq.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-01 12:59:42 +02:00
commit 5f29b225b7
20 changed files with 2129 additions and 0 deletions
@@ -0,0 +1,95 @@
{
"last_node_id": 5,
"last_link_id": 4,
"nodes": [
{
"id": 1,
"type": "LoadAudio",
"pos": [120, 200],
"size": [320, 124],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{"name": "AUDIO", "type": "AUDIO", "links": [1], "slot_index": 0}
],
"properties": {"Node name for S&R": "LoadAudio"},
"widgets_values": ["example.wav", null, ""]
},
{
"id": 2,
"type": "UniverSRModelLoader",
"pos": [120, 380],
"size": [340, 130],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{"name": "model", "type": "UNIVERSR_MODEL", "links": [2], "slot_index": 0}
],
"properties": {"Node name for S&R": "UniverSRModelLoader"},
"widgets_values": ["universr-audio", "auto", "", ""]
},
{
"id": 3,
"type": "UniverSRSampler",
"pos": [540, 200],
"size": [340, 320],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{"name": "audio", "type": "AUDIO", "link": 1},
{"name": "model", "type": "UNIVERSR_MODEL", "link": 2}
],
"outputs": [
{"name": "audio", "type": "AUDIO", "links": [3], "slot_index": 0},
{"name": "spectrogram", "type": "IMAGE", "links": [4], "slot_index": 1}
],
"properties": {"Node name for S&R": "UniverSRSampler"},
"widgets_values": [8000, "midpoint", 4, 1.5, 0, "randomize", 10.0, 0.5, 1.0, false, true]
},
{
"id": 4,
"type": "PreviewAudio",
"pos": [940, 200],
"size": [320, 100],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{"name": "audio", "type": "AUDIO", "link": 3}
],
"outputs": [],
"properties": {"Node name for S&R": "PreviewAudio"},
"widgets_values": []
},
{
"id": 5,
"type": "PreviewImage",
"pos": [940, 340],
"size": [320, 280],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{"name": "images", "type": "IMAGE", "link": 4}
],
"outputs": [],
"properties": {"Node name for S&R": "PreviewImage"},
"widgets_values": []
}
],
"links": [
[1, 1, 0, 3, 0, "AUDIO"],
[2, 2, 0, 3, 1, "UNIVERSR_MODEL"],
[3, 3, 0, 4, 0, "AUDIO"],
[4, 3, 1, 5, 0, "IMAGE"]
],
"groups": [],
"config": {},
"extra": {},
"version": 0.4
}