One-step video restoration and upscale with SeedVR2 7B on ComfyUI's core SeedVR2 nodes. The graph is the ComfyUI template utility_seedvr2_3b_int8_upscale_video (the only core-node SeedVR2 video template), loading the manifest's seedvr2_7b_fp16 transformer in place of the template's seedvr2_3b_int8_convrot, the same loader and graph the 7B image template uses. The source audio is re-muxed. A complement to flashvsr-upscale: stronger on short AI-generated and compressed clips, slower.
Tags: motionseedvr2upscalerestorationsuper-resolutionrunpod-serverlessvolume-backed
Inputs (7)#
The typed parameter surface callers bind when they request this workflow. Enum options and numeric bounds are the values the workflow document declares.
source_videovideorequiredscalefloatdefault 2.0min 1.0max 4.0color_correctionenumdefault nonenonelabwaveletadainsplit_latentbooleandefault falsetemporal_overlapintegerdefault 0min 0max 64denoisefloatdefault 1.0min 0.0max 1.0seedintegerdefault 0min 0ComfyUI node graph (15)#
The executable ComfyUI prompt graph: 15 nodes across 15 distinct node classes, wired by 23 data dependencies. Nodes tinted green come from a custom node pack this workflow declares; the rest are ComfyUI core / baked-community classes.
Nodes (15)#
1UNETLoadercoreunet_name = seedvr2_7b_fp16.safetensorsweight_dtype = defaultMODEL2VAELoadercorevae_name = seedvr2_ema_vae_fp16.safetensorsVAE3LoadVideocorefile = {{source_video}} tmplVIDEO4GetVideoComponentscorevideo = ◂ node 3 · out[0]IMAGEAUDIOFLOATCOMBOCOMBO5ResizeImageMaskNodecoreinput = ◂ node 4 · out[0]resize_type = scale by multiplierresize_type.multiplier = {{scale}} tmplscale_method = lanczosIMAGE6SeedVR2Preprocesscoreresized_images = ◂ node 5 · out[0]IMAGE7VAEEncodeTiledcorepixels = ◂ node 6 · out[0]vae = ◂ node 2 · out[0]tile_size = 512overlap = 128temporal_size = 64temporal_overlap = 8LATENT8SeedVR2TemporalChunkcorelatent = ◂ node 7 · out[0]temporal_overlap = {{temporal_overlap}} tmplchunking_mode = autoLATENTINT9SeedVR2Conditioningcoremodel = ◂ node 1 · out[0]vae_conditioning = ◂ node 8 · out[0]CONDITIONINGCONDITIONING10KSamplercoremodel = ◂ node 1 · out[0]positive = ◂ node 9 · out[0]negative = ◂ node 9 · out[1]latent_image = ◂ node 8 · out[0]seed = {{seed}} tmplsteps = 1cfg = 1.0sampler_name = eulerscheduler = simpledenoise = {{denoise}} tmplLATENT11SeedVR2TemporalMergecorelatents = ◂ node 10 · out[0]temporal_overlap = ◂ node 8 · out[1]LATENT12VAEDecodeTiledcoresamples = ◂ node 11 · out[0]vae = ◂ node 2 · out[0]tile_size = 512overlap = 128temporal_size = 64temporal_overlap = 8IMAGE13SeedVR2PostProcessingcoreimages = ◂ node 12 · out[0]original_resized_images = ◂ node 5 · out[0]color_correction_method = {{color_correction}} tmplIMAGE14CreateVideocoreimages = ◂ node 13 · out[0]audio = ◂ node 4 · out[1]fps = ◂ node 4 · out[2]bit_depth = ◂ node 4 · out[3]VIDEO15SaveVideocorevideo = ◂ node 14 · out[0]filename_prefix = seedvr2-upscaleformat = mp4Parameter banks (1)#
The prompt / configuration lookup tables this workflow keys into from its inputs — the vocabulary that turns a style / palette / preset selection into graph parameters.
requires_families (1)#
seedvr2-7bModels & dependencies#
Models required (2)#
seedvr2_7b_fp16.safetensorsseedvr2_ema_vae_fp16.safetensorsOutput contract#
What a successful run of this workflow returns.
primary{"type": "video", "format": "mp4", "codec": "h264", "fps_source": "source", "audio": true, "alpha": false, "description": "The restored clip at scale times the source size, with the source audio re-muxed."}Taxonomy & routing#
How the control plane classifies this workflow — from the committed workflow-taxonomy-registry.json. It drives the consistency / control surface the agentic director can exercise over the workflow.
assetFamilyrestored-video-masteroutputPackageProfilevideo-master-profilecontrolModalitiesmodel-lockseed-locktemporal-lockconsistencyDimensionsmotionnotesSeedVR2 7B one-step restoration and upscale (A.01.08). Like flashvsr-upscale it restores rather than authors; temporal-lock is literal, since the clip is encoded and restored as one video latent (or in overlapping temporal chunks), not frame by frame.