Nodes/TrentNodes/Video Degradation (TrentNodes)
ComfyUI Node

Video Degradation (TrentNodes)

Make clean renders look like real footage, on purpose

By TrentHunter82·Created 9 months ago·Updated 4 days ago· 36
Video Degradation (TrentNodes)
  • images
  • degraded_images
  • degradation_map
seed0
degradation_presetcustom
motion_blur_enabledfalse
motion_blur_intensity0.00
motion_blur_angle_moderandom_consistent
defocus_enabledfalse
defocus_intensity0.00
defocus_modeuniform
noise_enabledfalse
noise_intensity0.00
noise_typegaussian
compression_enabledfalse
compression_quality100
compression_modejpeg
chromatic_aberration0.00
temporal_flicker0.00
resolution_degradation0.00
color_degradation0.00
interlacing0.00
rolling_shutter0.00
vignette0.00
lens_distortion0.00

There are two reasons to degrade a clean video, and they're both real: making synthetic training pairs for restoration models, and making an AI render look like it actually came off a 2005 camcorder. Video Degradation does both, with temporally coherent degradation - meaning the artifacts persist across frames the way real ones do, instead of flickering in and out frame by frame.

That temporal coherence is the whole ballgame for training pairs. A per-frame random degradation produces noise the model learns to amplify; a coherent degradation produces the kind of consistent corruption a real video has, which is what actually teaches a restoration network to clean things up. The node is explicitly built for generating synthetic training pairs, with 15 presets that fake plausible real-world sources.

How it works

Feed it images (float32 frames in [0,1]) and a seed for reproducibility, and pick from 15 degradation_preset options: custom plus mild/moderate/severe, phone_indoor, social_media_reupload, zoom_call, dashcam, night_handheld, old_youtube, old_vhs, shaky_handheld, security_cam, livestream, old_film, underwater. Each preset sets a bundle of degradation parameters; custom lets you set them yourself.

The custom knobs are extensive and each has a temporal behavior:

  • Motion blur - motion_blur_intensity (maps to kernel size 3-45) and motion_blur_angle_mode (random_consistent, random_per_frame, horizontal, vertical, diagonal)
  • Defocus - defocus_intensity with defocus_mode (uniform, breathing, rack_focus, edge_softness)
  • Noise - noise_intensity and noise_type (gaussian, poisson, film_grain, sensor, mixed)
  • Compression artifacts - compression_quality and compression_mode (jpeg, h264_sim, blockiness)
  • Chromatic aberration, temporal flicker, resolution degradation, color degradation, interlacing, rolling shutter, vignette, lens distortion - each a 0-1 intensity

Everything is GPU-accelerated, and outputs are degraded_images plus a degradation_map - a JSON string describing exactly what was applied. That map is genuinely useful for training: your label doesn't have to be guessed, because the node tells you the recipe.

The two honest uses

Training pairs: render clean frames, run this node, and you've got (degraded, map) pairs without filming or scraping anything. This is the "synthetic training data" play, and it's why the temporal controls exist - random_consistent motion blur and breathing defocus behave like real optics.

Aesthetic degradation: VHS, dashcam, old-film looks for a stylized render. The presets make this a one-click thing. It's the same node, and honestly the aesthetic use is where most people start.

Gotchas

  • The presets override your custom settings - pick custom if you want to dial individual parameters, or a preset if you want a known look. Don't set both and wonder which won.
  • interlacing needs 2+ frames (it interlaces between frame pairs), so a single-frame test won't show it.
  • A seed of 0 is the default; if you want varied degradation across runs, randomize it - but for training pairs, fixing the seed is how you get reproducible examples.

Install

Part of TrentNodes (TrentHunter82/TrentNodes):

# ComfyUI Manager: search "Trent Nodes"

# or:
cd ComfyUI/custom_nodes
git clone https://github.com/TrentHunter82/TrentNodes.git
cd TrentNodes && pip install -r requirements.txt

No model downloads - all degradation is procedural on the pack's core opencv/numpy/torch stack. If you've been hand-rolling "add noise, add blur" with a pile of image-ops nodes, this is the version that keeps it coherent across frames, which is the part the manual approach always gets wrong.

CategoryTrent/Video

Inputs (23)

NameTypeDefaultDescription
imagesIMAGEBatch of video frames (B, H, W, C) float32 in [0, 1]
seedINT00–4294967295Random seed for reproducible degradation
degradation_presetCOMBOcustomQuick presets that override individual parameters. 'custom' uses your settings.
motion_blur_enabledoptBOOLEANfalseToggle motion blur
motion_blur_intensityoptFLOAT0.000–1Motion blur strength (maps to kernel size 3-45)
motion_blur_angle_modeoptCOMBOrandom_consistentHow blur direction is determined across frames
defocus_enabledoptBOOLEANfalseToggle defocus/out-of-focus blur
defocus_intensityoptFLOAT0.000–1Defocus strength (maps to sigma 0.5-15.0)
defocus_modeoptCOMBOuniformTemporal behavior of defocus blur across frames
noise_enabledoptBOOLEANfalseToggle noise injection
noise_intensityoptFLOAT0.000–1Noise strength
noise_typeoptCOMBOgaussianType of noise to add
compression_enabledoptBOOLEANfalseToggle compression artifacts
compression_qualityoptINT1001–100Quality level (lower = more artifacts)
compression_modeoptCOMBOjpegType of compression artifact to simulate
chromatic_aberrationoptFLOAT0.000–1Color fringing at edges, especially toward borders
temporal_flickeroptFLOAT0.000–1Per-frame brightness/contrast variation
resolution_degradationoptFLOAT0.000–1Detail loss via downscale+upscale (0=none, 1=4x downscale)
color_degradationoptFLOAT0.000–1Desaturation, color shift, and banding
interlacingoptFLOAT0.000–1Interlacing/combing artifacts (needs 2+ frames)
rolling_shutteroptFLOAT0.000–1Rolling shutter skew simulation
vignetteoptFLOAT0.000–1Dark corner vignetting
lens_distortionoptFLOAT0.000–1Barrel/pincushion lens distortion

Outputs (2)

NameTypeDescription
degraded_imagesIMAGEDegraded video frames
degradation_mapSTRINGJSON describing all applied degradations