Nodes/PS-SR WSL Video Restore/PS-SR WSL Video Restore
ComfyUI Node

PS-SR WSL Video Restore

The ComfyUI node that restores your videos by calling home to WSL

By Jarcis-cy·Created about a month ago·Updated about a month ago· 0
PS-SR WSL Video Restore
  • filenames
  • Filenames
  • video_path
  • elapsed_ms
enabled1
scale_multiplier1.50
keep_intermediatesfalse

PSSRVideoRestoreWSL is a whole-video post-processing node: it takes the MP4 your Video Helper Suite VHS_VideoCombine just wrote, and restores it with HiDream-ai's PS-SR diffusion super-resolution model - without loading a second diffusion stack into ComfyUI's memory. Instead it hands the file to a WSL Linux environment that runs the official PS-SR pipeline, then muxes the cleaned video back together with your original audio. The name is a promise, not a lie: you do need WSL for this one.

Why you'd want it: video is the least-settled of the three upscaling jobs ("more pixels over time"), and the usual shortcuts don't hold. A per-frame image upscaler on video shimmers, because consecutive frames resolve fine texture differently. SeedVR2's real video mode wants datacenter-class VRAM; NVIDIA's RTX nodes are the cheap non-generative path but add no detail. PS-SR is the generative rung for video - a Wan 2.1-based diffusion restorer that processes chunks of frames together, so what it invents is temporally consistent. If your source has actual compression damage, not just small pixels, this is the tier that fixes it.

How it works

The node is a careful file-handler with strong opinions. It probes your source with ffprobe, Lanczos-scales it to an even-sized target grid, unloads all ComfyUI models to free VRAM, then shells out to your WSL Python. Inside, PS-SR runs its two stages: step 1 restores with base and draft diffusion transformers (sharing one read-only T5, VAE, and RAM - that sharing is why it fits at all), and step 2 fuses the consistent and sharp outputs. The original audio stream is copied back without re-encoding, and then the node gets paranoid: it rejects the result unless dimensions, frame count, FPS, per-frame timestamps, audio hash, and a full FFmpeg decode all pass. Output goes into a pssr_jobs/ folder next to your native file, with logs and a manifest.json for every run.

The inputs that matter

Only four, and you set three of them.

  • filenames (VHS_FILENAMES) - wire the Filenames output of VHS_VideoCombine in here. Nothing else feeds it.
  • enabled - a real 0/1 switch, not a mute button. At 0 the node is a zero-cost bypass that returns your original file, so you can leave it in the graph without paying for it.
  • scale_multiplier - the Lanczos target before restoration, default 1.5. That's the validated setting; the README is explicit that anything else is experimental.
  • keep_intermediates - keep the step 1 and step 2 videos around for diagnosis. Off by default, and they're deleted after success otherwise.

Outputs: a Filenames you can chain downstream, video_path pointing at the restored file, and elapsed_ms if you're benchmarking.

Install

In ComfyUI Manager, search PS-SR WSL, or clone manually:

cd C:\path\to\ComfyUI\custom_nodes
git clone https://github.com/Jarcis-cy/ComfyUI-PS-SR-WSL.git
cd ComfyUI-PS-SR-WSL
Copy-Item config.example.json config.json

Then edit config.json:

{
  "ps_sr_root": "C:/AI/PS-SR",
  "wsl_distro": "Ubuntu",
  "python_path": "/home/your-user/.venvs/ps-sr/bin/python"
}

Here's the setup nobody will do for you: this pack deliberately downloads nothing. You need Windows 10/11 with WSL 2 and an NVIDIA GPU visible inside WSL, ffmpeg, ffprobe and wsl.exe on the Windows PATH, the official PS-SR repository cloned onto a Windows-mounted drive (/mnt/c), a WSL Python 3.10 venv with PS-SR's dependencies, and the official checkpoints in the upstream folder layout. Follow the upstream PS-SR install guide for all of that. ps_sr_root must live on a drive WSL can see, and python_path is inside the distro, not on Windows - the two-environment split is where most first-time failures happen. PSSR_ROOT, PSSR_WSL_DISTRO, and PSSR_PYTHON override the file, and config.json is re-read on every execution, so config changes need no restart.

Gotchas

  • One job per ComfyUI process, ever. A lock raises "Another PS-SR WSL job is already running" if you queue two. Cancelling a run kills the whole WSL process tree.
  • The input must resolve inside ComfyUI's output directory, and the restored output inherits your native file's name plus a token.
  • This is whole-video post-processing, deliberately not a frame-loop node - it belongs after Video Combine, not inside one.
  • The first release was validated on ComfyUI 0.30.0 with Video Helper Suite 1.7.9 and a 704x1280→1056x1920 source; other dimensions and multipliers are "treat as experimental" per the author. VRAM and runtime are governed by PS-SR and your target grid - it's not fast.

It's young (August 2026), it's fiddly, and at the time of writing nobody in the public corpus is even talking about it yet. But it's also the only ComfyUI node doing real diffusion video restoration with the heavy lifting quarantined in WSL. If your video is worth a few minutes of GPU and you're on Windows anyway, it earns its setup cost.

Categoryvideo/PS-SR WSL

Inputs (4)

NameTypeDefaultDescription
filenamesVHS_FILENAMES
enabledINT10–1
scale_multiplierFLOAT1.501–2
keep_intermediatesBOOLEANfalse

Outputs (3)

NameTypeDescription
FilenamesVHS_FILENAMES
video_pathSTRING
elapsed_msINT