Glide DLSS5 Batch
A folder of clips in, a folder of DLSS5 clips out
- settings
- video_paths
- count
You don't reach for this because it's clever
Glide DLSS5 is one clip at a time: drop a video on it, scrub, preview a burst at the playhead, queue the file. Good node, unusable as a finishing step, because a short film is thirty-odd files in output/ and you are not wiring thirty nodes.
So the author wrote the loop instead. Point it at a folder, hit Queue, come back to a DLSS5 subfolder where every clip has been through the engine, keeping its name plus a suffix. Generate four-to-fifteen-second chunks - as anything in the H3 class does - and that's the difference between enhancing a project and enhancing the one clip you had patience for.
What it's actually doing
It's a driver, not an upscaler. The node globs the folder, sorts by name, and for each video calls the DLSS5-Enhancer pack's own DLSS5EnhanceVideoFile.execute() - the same path the single-clip node uses, whole file, neural-render verification left on. Then it renames what the engine wrote to <clipname>_<suffix>.<container>, adding _2 / _3 if that name is taken, and never overwriting.
So a batched clip is byte-for-byte what the single-file node would have produced: same encoder, same audio mux, same verification - thirty proper renders back to back, not a cheaper batch flavour. Name order is shot order, so H3 Studio's 01_1_the-wake_00001 naming lets the batch follow your film untouched.
The inputs that matter
folder is the whole node. A plain name like Static means output/Static; a full path works if it resolves inside ComfyUI's input, output or temp folders - anything outside is refused, not read.
suffix(defaultDLSS5) - appended to each output name.skip_done(on) - clips that already have a result with this suffix get skipped. That's the resume button: stop, add clips, re-queue, only the new ones run. Changing the suffix therefore re-renders everything - a clean second pass, or a good way to double your disk usage by accident.name_filter- case-insensitive substring filter, for one scene out of three.output_directory- empty means aDLSS5folder inside the clips folder, originals left alone.
codec, container and quality come from the enhancer pack's media module; the defaults (HEVC in MKV, Auto) are fine, with one exception: if these clips will feed the next H3 clip's CONTINUE FROM slot, don't render them as AV1 - it's 4:2:0, and in a chain every link pays for that.
settings is a wire, not a widget: the DLSS5_SETTINGS output of a DLSS5 Settings node, handed to the engine untouched - tune the look there and the whole folder gets it. copy_audio (on) keeps the soundtrack.
Outputs are video_paths (finished paths, newline-separated) and count, rendered this run - skipped clips don't count. The real output is the folder; the console prints N rendered, N skipped, N failed.
Install
ComfyUI Manager, search CGlide (ComfyUI-CGlide), or:
cd ComfyUI/custom_nodes
git clone https://github.com/CGlide/ComfyUI-CGlide
Restart, and the nodes appear under CGlide. But this one is a shell: it ships none of the DLSS 5 engine, so you also need Blueforcer's ComfyUI-DLSS5-Enhancer, which provides the engine, the Settings node and the enhance-video node Batch drives. Install that too and make sure it loads cleanly - Batch finds the engine in sys.modules, so a pack that's present but failed to import looks exactly like one that isn't there. PyAV is required; the pack decodes video with it.
The repo README is behind the code - it still describes a four-node H3 pack; DLSS5 and Batch live in the 1.2.9 and 1.3.0 release notes instead.
What will actually bite you
Every clip is its own session. DLSS accumulates over consecutive frames, so the first frames of anything have no history to draw on - once per clip in a batch, not once per project. Stitching continuations? The joins are the softest frames in the piece.
Failures don't kill the run. A bad clip logs FAILED with the reason and the loop continues; failures are listed at the end, none of them are marked done, so re-queueing retries exactly those. Cancel works between clips, and what's finished stays finished. Names ending _DLSS5 or _DLSS5_2 are also excluded from the scan, so pointing the batch at a folder it writes into won't loop on its own results.
Troubleshooting
Glide DLSS5 needs ComfyUI-DLSS5-Enhancer installed and loaded - the engine pack is missing or failed its own import. Then full restart; a browser refresh does nothing for Python changes.
its version does not match what Glide DLSS5 expects - both packs installed, one older than the other's module layout. Update both.
No folder at ... or only reads folders inside ComfyUI's input, output or temp folders - use Static, not D:\clips.
No videos to render in ... - empty folder, name_filter matched nothing, or everything already carries that suffix.
And if a node's widget list changed shape between versions, delete and re-add it: ComfyUI matches saved widget values by position and smears old ones across new fields.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| settings | DLSS5_SETTINGS | Connect a DLSS5 Settings node. | |
| folder | STRING | Folder with your clips. A name like Static means output/Static; a full path works if it is inside ComfyUI's input, output or temp folder. | |
| codec | COMBO | HEVC | 4 options: HEVC, H.264, AV1, ProRes Proxy |
| container | COMBO | MKV | 3 options: MKV, MP4, MOV |
| quality | COMBO | Auto | 4 options: Auto, Good, Best, Max |
| suffix | STRING | DLSS5 | Added to each file name: clip.mp4 -> clip_DLSS5.mkv |
| copy_audio | BOOLEAN | true | — |
| skip_done | BOOLEAN | true | Skip clips that already have a result with this suffix in the output folder, so a stopped batch picks up where it left off. |
| output_directoryopt | STRING | Empty = a DLSS5 folder inside the clips folder (e.g. output/Static/DLSS5). | |
| name_filteropt | STRING | Only files whose name contains this text. Empty = every video in the folder. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video_paths | STRING | — |
| count | INT | — |