Aller au contenu

How it works · Working knowledge

SeedVR2 image upscale: mechanisms and practical controls

Produce the single Restored image output from an uploaded image, starting with 4× dimensions, Lanczos resizing and no color transfer.

Use this recipe for image enlargement with restoration, not for background removal or exact copying of fine details.

Input: imageOutput: imageComfyUI

Before you start

  • Source image: Upload the image to enlarge and restore. No text prompt is required. The saved graph filename watch_macro_shot.png is not a required user asset.

Start with an enlarged, restored image

Start with one source image and the model pair listed under prerequisites. The default resize multiplies width and height by 4, giving approximately 16 times the source pixel count before restoration. This is not merely interpolation: SeedVR2 subsequently processes the resized image.

The named output is Restored image, port output:9: node 73 output slot 0 feeds SweetTeaPreviewImage node 9 through images. There is one image output, not separate original and restored outputs. The retained terminal does not establish a saved filename or file format.

Inspect fine text, markings, edges and color in the result. Restoration can reinterpret details rather than recover exact missing information. The saved watch-image filename is only a graph selection; no executed example or measured result is supplied.

  1. Upload your image in Source image. For the first run retain Scale factor 4, Resampling method lanczos, Color matching none, Denoise 1, Steps 1, Conditioning guidance 1, Sampler euler and Scheduler simple; leave both spatial tile sizes at 512 and overlaps at 128. Run the recipe and inspect Restored image.

    Look for: One restored image from the image-conditioned pipeline, with a 4× initial resize in each dimension; fine details may be reinterpreted.

    Outputs: output:9

Prepare the exact model pair and runtime nodes

This guide covers recipe version 0.1.6 and the selected graph revision, not interchangeable SeedVR2 workflows. The graph selects seedvr2_3b_int8_convrot.safetensors through UNETLoader node 76, with weight_dtype=default, and seedvr2_ema_vae_fp16.safetensors through VAELoader node 82. Their declared model directories are diffusion_models and vae, respectively. Both files are required. Preparation identifies provider version main, but supplies no model artifact checksums; that version label alone is not an immutable model pin. The filenames do not establish the precision of every runtime operation.

The required node pack is tea-time-labs/sweet-tea-nodes, including SweetTeaPreviewImage. The runtime must also provide the graph's core classes: LoadImage, JoinImageWithAlpha, ResizeImageMaskNode, SeedVR2Preprocess, VAEEncodeTiled, SeedVR2Conditioning, KSampler, VAEDecodeTiled, SeedVR2PostProcessing, UNETLoader and VAELoader. Core node metadata records version 0.27.0; this is retained version evidence, not a tested minimum-version claim. No node-pack commit, backend list or platform compatibility matrix is supplied.

Preparation's Standard configuration records 1024×1024, without frames, batch, precision or memory mode. It is not a measured run or a guaranteed input/output size. GPU capacity, system RAM and duration remain unknown. The linked prerequisite resources are dependencies, not executable fallback recipes.

A selected model or node class is unavailable.

The pipeline depends on the selected model pair and runtime classes; tiling settings do not resolve missing dependencies.

Check: The error identifies an unavailable loader selection or node class, rather than image-processing memory exhaustion.

Make both declared model files and the required runtime nodes available. Retain the selected model pair; compatibility of alternative models is not established here.

How the image becomes conditioning and output

LoadImage node 1 sends IMAGE slot 0 and MASK slot 1 to JoinImageWithAlpha node 81, inputs image and alpha. The retained join implementation resizes the mask if needed, computes alpha as one minus that mask, and concatenates it with the input's first three RGB channels. RGB preservation applies at this join stage only. It does not establish final transparency or background removal.

The retained operation metadata classifies this recipe as remove_background, but the actual graph has no background-removal model or foreground-mask inference node. Joining the loader's existing mask is not subject segmentation. This guide therefore uses the supported task families upscale and restore, rather than treating the classification as proof of background removal.

Node 81 slot 0 feeds ResizeImageMaskNode node 80 at input. Its saved mode is scale by multiplier. Node 80 slot 0 branches to SeedVR2Preprocess node 79 at resized_images and to postprocessing node 73 at original_resized_images. The latter branch supplies the resized-source reference, not an original-pixel bypass to the terminal. The graph establishes preprocessing's position, but not its internal transformation.

Node 79 slot 0 feeds tiled encoder 78 at pixels. VAE node 82 slot 0 supplies vae to both encoder 78 and decoder 74. Encoder 78 slot 0 supplies both SeedVR2Conditioning node 77 at vae_conditioning and sampler 75 at latent_image. Model node 76 slot 0 supplies model to nodes 77 and 75. Conditioning node 77 slots 0 and 1 supply the sampler's positive and negative inputs: there is no text-prompt encoder in this path. The retained graph establishes these connections, not the internal construction of the two conditioning outputs.

KSampler node 75 slot 0 feeds decoder 74 at samples; decoder slot 0 feeds postprocessor 73 at images. Postprocessing then supplies the named output. Resizing, latent processing and decoding mean that a recognizable result is not proof that original pixels, text or tiny markings remain unchanged.

The background remains, transparency changes, or small text is altered.

Joining an existing image mask is not subject segmentation, and downstream restoration can reinterpret detail.

Check: The graph has no RemoveBackground node and no established final-alpha or original-pixel preservation path.

Do not use this recipe as a background-removal or pixel-preservation tool. Keep the original asset when exact markings or alpha are required; no supported fallback recipe is supplied.

Choose size, interpolation and color transfer

Scale factor maps to node 80 input resize_type.multiplier: default 4, range 0.01–8 in 0.01 increments. Above 1 enlarges, 1 keeps source dimensions and below 1 reduces; restoration runs in all three cases. The multiplier applies while resize_type remains scale by multiplier, as saved in this revision. Other resize modes are listed by the schema, but their required parameter sets are not retained here. Larger dimensions increase the image data processed; a smaller scale is not a quantified memory remedy.

Resampling method maps to node 80 input scale_method, default lanczos. Available values are nearest-exact, bilinear, area, bicubic and lanczos. Lanczos suits enlargement, area reduction, and nearest-exact hard pixel boundaries during the initial resize only; subsequent restoration can change those boundaries.

Color matching maps to node 73 input color_correction_method, default none. According to the retained schema, none skips color transfer but retains geometry alignment; lab transfers color in CIELAB space; wavelet transfers low-frequency color while retaining restored high-frequency detail; adain matches per-channel mean and standard deviation. Color transfer uses node 80's resized source as reference, not a separate uploaded reference. No mode is a pixel-preservation switch. Comparative quality or speed measurements are not supplied.

Use 2× dimensions
While resize_type remains scale by multiplier, doubles both dimensions before restoration, approximately quadrupling source pixel count instead of the default sixteenfold increase.
Match source colors with Lab
Applies CIELAB color transfer using the connected resized source, rather than skipping color transfer. Compare the result with none using a fixed seed.

Which adjustment addresses the result you need?

  • Change output dimensions: Adjust Scale factor; setting it to 1 does not bypass restoration.Continue
  • Correct a color mismatch: Compare color-transfer modes against none, with a fixed seed to keep sampling noise consistent.Continue
  • Investigate memory exhaustion: Identify the failing stage before changing tiling.Continue

Keep the one-step sampling baseline

The advanced controls bind to KSampler node 75: Denoise → denoise (default 1, range 0–1, step 0.01); Steps → steps (default 1, range 1–10000); Conditioning guidance → cfg (default 1, range 0–100, step 0.1); Sampler → sampler_name (default euler); Scheduler → scheduler (default simple). Sampler and scheduler choices are runtime-provided; no complete option list is retained.

Denoise controls the fraction of the denoising schedule used; steps controls sampling iterations; guidance applies to image-derived conditioning, not a user text prompt. Retain the baseline initially. Lower denoise or changes to steps, guidance, sampler and scheduler are experimental for this one-step setup, not established quality improvements. The generic sampler tooltip about lower denoise maintaining structure is not evidence of exact preservation or a tested SeedVR2 tuning recipe.

Seed controls sampling noise. The saved native graph uses 959948902156062; the interface instead declares default -1 for randomization, while both its numeric constraint and the native schema require nonnegative values. The native schema lists a maximum of 18446744073709552000. Treat -1 as an advertised UI convention whose translation is not established here, not a valid native seed delta. If the interface rejects it, use a fixed nonnegative seed rather than writing -1 directly into KSampler. A fixed seed keeps sampling noise consistent for comparisons, without guaranteeing identical output across runtimes.

For useful comparisons, keep the source, scale and sampling baseline fixed and change one color or tiling setting at a time. There are no retained executed comparisons that establish a best alternative.

Use the saved fixed seed for comparisons
Keeps the native sampling-noise seed fixed while comparing other settings; does not establish cross-runtime determinism.

Change tiling at the failing stage

Input tiling belongs to VAEEncodeTiled node 78; output tiling belongs to VAEDecodeTiled node 74. Both save tile_size=512 and overlap=128, measured in pixels. Encode tile size permits 64–4096 in steps of 64; decode permits 64–4096 in steps of 32. Both overlap inputs permit 0–4096 in steps of 32, but keep overlap below the corresponding tile size. These controls are independent; changing output tiling does not change input tiling.

The retained decoder implementation converts tile dimensions by VAE compression factors and calls tiled decoding. If tile size is less than four times overlap, it reduces effective overlap to tile size divided by four. Thus a 256-pixel decode tile with saved overlap 128 uses effective overlap 64. This is an implementation-derived example, not a recorded run. It also explains why the displayed overlap can differ from the effective value. No corresponding encode-overlap adjustment rule is supplied.

Smaller spatial tiles can reduce memory requirements at their respective VAE stage, but can change seams and processing work. No quantitative memory or speed saving is established. Decode tiling does not change model loading or denoising memory requirements.

Both encoder and decoder also save temporal_size=4096 and temporal_overlap=8. Their schema says these are only used for video VAEs; they are not still-image spatial-tiling controls.

Try smaller encode tiles for encode-stage memory exhaustion
Changes only encoding to 256-pixel tiles. The saved encode overlap 128 remains below the new tile size; inspect detail and seams. No measured saving is supplied.
Try smaller decode tiles for decode-stage memory exhaustion
Changes only decoding to 256-pixel tiles. With overlap left at 128, the retained implementation reduces effective decode overlap to 64; inspect seams and detail afterward.

Memory exhaustion during VAE encoding.

The resized, preprocessed image is encoded by node 78 independently of output decoding.

Check: The failure is reported in VAEEncodeTiled, before sampling.

Try the smaller encode-tile control. If changing further, use valid 64-pixel increments and keep encode overlap below tile size. No measured saving or encode-overlap adjustment rule is supplied.

Memory exhaustion during VAE decoding.

Node 74 decodes sampled latents in spatial tiles.

Check: The failure occurs in VAEDecodeTiled after sampling, rather than in model loading or KSampler.

Try the smaller decode-tile control and inspect the result for seams. Do not expect this change to remedy loading or denoising failures.

Memory exhaustion during loading or sampling.

Decode tiling operates after these stages and cannot reduce their memory demand.

Check: The failure occurs in a loader or KSampler before node 74 executes.

For sampling, consider a smaller Scale factor to reduce processed image dimensions, without assuming it will resolve the error. For loading, assess runtime capacity for the selected model pair; no supported loader-memory adaptation or capacity recommendation is retained.

Seams or detail changes appear after a tile adjustment.

Tile size and overlap change VAE-stage processing; decode overlap may also be reduced internally.

Check: The artifact appears in a comparison with the same image and fixed seed after changing tiling.

Return the changed stage to its saved tile size 512 and overlap 128, if runtime capacity permits, then compare again. Do not assume that changing sampling guidance will repair a tiling artifact.

Recipes and setup

sweet-tea-nodes

Open this recipe to inspect its current setup.

Where this approach stops

  • Background removal is not established by this graph despite its retained capability classification.
  • Final transparency, pixel-exact preservation and identity preservation are not established.
  • No scoped GPU capacity, RAM capacity, platform compatibility or execution timing is supplied.

Sources