Bubba Tiled KSampler Upscaler (Seam Fix)
Bubba Tiled KSampler Upscaler (Seam Fix)
- pipe
- image
- latent
- metadata
- model
- vae
- positive
- negative
- pipe
- image
- latent
- metadata
- info
Bubba Tiled KSampler Upscaler (Seam Fix) is the pack's take on Ultimate SD Upscale: it pixel-upscales your image with an ESRGAN model, then runs an actual checkpoint model through an overlapping-tile sampling pass to redraw detail, with a seam-fix stage to hide the tile boundaries. This is the "add invented detail at arbitrary resolution" end of upscaling - the other half of the coin from the plain Bubba Upscaler, and the workflow the KB's upscaling essay credits with letting 6GB cards reach 4K+.
It earns its complexity. Tiled diffusion is the tool that gets "crazy good" results and also the one with a settings minefield: tile size, overlap, denoise, and the dreaded visible seams between tiles. This node's real feature is that it makes the seam problem first-class instead of leaving you to fiddle blindly. The source is a faithful Ultimate SD Upscale-style pipeline - pixel upscale, then sequential VAE-encode/sample/decode per tile with a soft feather mask for blending.
How it works
The pipeline is: resolve the image (and model, VAE, conditioning) from the pipe or explicit overrides → pixel-upscale the whole image → walk overlapping tiles, sampling each with the model → feather-blend them back together → optionally redraw the seam bands. The same seed is deliberately reused for every tile, which stops the discontinuous tile-specific noise patterns that cause visible patchwork - a detail the README calls out explicitly and one that shows up in the KB's upscaling essay as a real failure mode (tiles diverging from the source).
The settings that matter, straight from the README for a 512px-native model:
tile_width/tile_height- 512x512 to start.overlap- 32px of context so each tile sees beyond its edge.mask_blur- 8px feather for the blend.denoise- 0.15–0.25 for redraw; too high and tiles invent their own reality.
scale_by (default 2) is the target upscale, redraw_mode is linear or chess (tile visitation order), and the seam_fix_mode combo (none, band_pass, half_tile, half_tile_plus_intersections) plus seam_fix_denoise/seam_fix_width/seam_fix_mask_blur/seam_fix_padding control the boundary-repair pass. upscale_model_name feeds the initial pixel upscale, or you can pick "Lanczos (no upscale model)".
Outputs: image, latent (the re-encoded latent), pipe, metadata, and info.
The inputs that matter
Start with denoise, tile_width/tile_height, overlap, and mask_blur. Leave seam fixing none until you actually see boundaries, then try half_tile at 0.1–0.2 seam denoise, 64px width, 8px blur, 32px padding.
How to install it
Standard pack install - ComfyUI Manager → "Bubba Nodes" → install → restart, or
cd ComfyUI/custom_nodes
git clone https://github.com/bubbafett5611/bubba_nodes.git
restart, pip install -r requirements.txt if needed. Needs ComfyUI v0.27.0+. Real dependencies are models: an ESRGAN model in models/upscale_models and your checkpoint of choice. No ComfyUI_TiledKSampler or Ultimate Upscale extension required - it's all self-contained.
Gotchas
The two classic traps are over-denoise (tiles drifting into a patchwork, per the KB essay) and ignoring seams until they're baked into a full-res render. Also note the latent output only exists if a VAE path resolves; on a long pipeline that's where you check first when the node errors on a missing VAE. Tiled diffusion is slower than ESRGAN by design - each tile is a full sample. And because the pack is young with no community write-ups yet, the README's tiled-upscale section (the exact starting values quoted above) is currently the best tuning guide there is.
Inputs (27)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 6.00–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 0.200–1 | — |
| tile_width | INT | 512128–4096 | — |
| tile_height | INT | 512128–4096 | — |
| scale_by | FLOAT | 2.001–8 | — |
| overlap | INT | 320–1024 | — |
| resize_method | COMBO | 6 options: lanczos, bicubic, bilinear, nearest-exact, area, bislerp | |
| mask_blur | INT | 80–64 | — |
| redraw_mode | COMBO | 2 options: linear, chess | |
| seam_fix_mode | COMBO | 4 options: none, band_pass, half_tile, half_tile_plus_intersections | |
| seam_fix_denoise | FLOAT | 0.150–1 | — |
| seam_fix_width | INT | 640–1024 | — |
| seam_fix_mask_blur | INT | 80–64 | — |
| seam_fix_padding | INT | 320–1024 | — |
| upscale_model_name | COMBO | 1 options: Lanczos (no upscale model) | |
| pipeopt | BUBBA_PIPE | — | |
| imageopt | IMAGE | — | |
| latentopt | LATENT | — | |
| metadataopt | BUBBA_METADATA | — | |
| modelopt | MODEL | — | |
| vaeopt | VAE | — | |
| positiveopt | CONDITIONING | — | |
| negativeopt | CONDITIONING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| pipe | BUBBA_PIPE | — |
| image | IMAGE | — |
| latent | LATENT | — |
| metadata | BUBBA_METADATA | — |
| info | STRING | — |