Stop Banding After You Grade AI Skies
Generated skies posterize under contrast. Use a 10-bit intermediate, dither, and a stills-plus-motion checklist before you add grain or reroll.
Generated skies and product backdrops posterize the moment you add a real grade. The clip looked fine in the thumbnail because the sampler had already quantized a smooth ramp into a handful of steps, and the compress that delivered the file threw more of them away. Contrast stretches those steps across a wider range. You have not uncovered detail. You have made the staircase large enough to see.
The fix is a 10-bit intermediate, dither on the way down to delivery, finishing grain only when the steps are already smaller than the grain, and a regenerate when the plate itself is a staircase. Check stills and motion. Banding that crawls is a different defect from banding that sits.
Why generated skies posterize under contrast
A grade redistributes values that exist. What a grade can and cannot rescue in AI footage is that limit. A sky is a long, low-frequency gradient. Lossy video compression spends its budget on edges and texture, not on a ramp nobody is supposed to notice. The ramp becomes a set of flats. On an 8-bit Rec.709 legal file, luma only has codes 16 through 235 to begin with. After the generation compress, a sky might be using a few dozen of those. Pull an S-curve and those few dozen become visible bands.
Product seamless backdrops fail the same way. So do large walls, soft shadow falloff, and skin under a big source. Skies are just where reviewers point first.
YouTube then compresses you again. Recommended SDR upload bitrates are 8 Mbps at 1080p for 24/25/30 fps and 35-45 Mbps at 4K for those rates. HDR sits a little higher and requires 10-bit or 12-bit. Versely defaults to 25 fps, which is in the standard-frame-rate column. A contrasty 8-bit sky that already bands on your monitor will not be saved by the platform re-encode. It will get worse.
Do not start the finish by jumping resolution. The order of finishing passes is clean, then match, then scale. An upscaler enlarges the staircase. Upscaling after a 10-bit grade is a different job from upscaling a posterized 8-bit preview.
10-bit intermediates and dither
Work the grade in 10-bit. ITU-R BT.709 10-bit legal luma runs 64 through 940, which is 877 codes instead of the 220 you get from 16 through 235 inclusive in 8-bit. That is not "more resolution." It is more steps on the same ramp, which is what a sky needs when you stretch it.
Practical path:
- Interpret the generated file as it is (often 8-bit, often full-range RGB with Rec.709 tags).
- Convert into a 10-bit working space. ProRes 422 HQ, ProRes 4444, DNxHR HQX, or a 10-bit intermediate your NLE actually round-trips. The codec name matters less than "10-bit, and the NLE is not silently truncating."
- Grade there: exposure, balance, sat, look. Keep the look modest on frames that are mostly gradient.
- Dither on the way down to an 8-bit delivery. Dither is low-amplitude noise added before quantization so the remaining steps do not align into lines. Ordered dither and error-diffusion both exist; pick the one your tool documents and do not stack three of them.
- Export the 8-bit file only as a delivery copy. Keep the 10-bit grade.
If the delivery is HDR on YouTube, you are already in 10-bit or 12-bit, Rec.2020, PQ or HLG. That helps the sky in the HDR master. It does not automatically help the SDR downmap, which is where banding often reappears. Check both.
Dither is not grain. Dither is a quantization tool, applied at convert time, at an amplitude you should not see as texture. If you can name the pattern on a still, it is too strong or it is a second effect sitting on top.
Skip the editor's 480p preview as a banding QC. preview: true is a free 480p pass with a short per-user cooldown; at 480p a staircase can hide, and so can a correct dither. Judge banding on the exported master. How that pass is billed is in editor previews and the final export.
Grain versus regenerate
Finishing grain can hide steps that are already smaller than the grain. It cannot hide a four-band sky. Grain, flare and vignette against the AI sheen is the texture pass, and it goes last, after the grade, because a grade after grain re-contrasts the noise and the grain crawls. The same order applies when the grain is there to break up a ramp: 10-bit grade, dither into delivery, then a fine monochrome grain if the still still shows steps you can only see when you look for them.
House rule:
- Dither and a light grain when the 10-bit grade shows a smooth ramp on the waveform and the 8-bit still shows faint steps at 200% that disappear at normal viewing distance.
- Regenerate the plate when the working file already shows shelves on the waveform, when you can count bands at 100% before any grade, or when the bands are different colours (chroma banding), not just luma. A grade will not invent the missing codes. A new sample might, especially if you stop asking for "cinematic contrast" and "dramatic sky" in the prompt and describe a time of day instead.
Regenerate before you upscale. Upscaling a posterized sky produces a larger posterized sky, sometimes with a tile grid on top. If you need 4K, get a clean 10-bit 1080p grade first. More pixels are not a banding fix.
Do not denoise, then grade, then add grain, then denoise again. Each denoise flattens the ramp you were about to hide. If the generation is noisy and banded, you have two defects. Clean flicker and crawl first, then grade in 10-bit. Temporal instability and banding can coexist. They do not share a fix.
A banding checklist on stills and motion
Stills lie about crawl. Motion lies about stills. Run both.
Stills, at 100% and at 200%, on a hero frame that is mostly gradient:
- Sky or backdrop, no grade: can you already count bands? If yes, regenerate. Do not start a 10-bit session on a staircase.
- Same frame, grade on, 10-bit: did the bands get wider? If yes, the look is too steep for this plate. Back off the S-curve. Do not "fix" it with a second LUT.
- Same frame, dithered 8-bit delivery: are the steps gone at normal viewing distance on a phone? If they only disappear on the grading monitor, they will come back on YouTube.
- Chroma: switch the monitor to a blue-only or parade view. Green/magenta stripes in a sky are chroma banding. Dither may help; a sat pull helps more; a regenerate helps most.
Motion, at 1x, then at 0.5x:
- Do the bands sit, or do they crawl and breathe? Crawl is often compression plus a grade, and it is more visible than still banding. A light grain that is stable frame-to-frame can break sit-still bands. It makes crawl worse if the grain is temporal noise that the codec then smears.
- Does the band structure change when a cloud or a subject moves across it? If the bands are locked to the frame (they do not move with the sky), you are looking at a display or a scope overlay. Turn the overlay off and check again.
- After a cut to a talking head, does a remnant of the sky band flash at the cut? That is a codec GOP issue on export as much as a grade issue. Export with a sane GOP (YouTube wants a closed GOP of half the frame rate) and do not rely on an intra-only still to QC a long-GOP delivery.
Export two stills into the review folder: sky_pregrade.png and sky_delivery.png, plus a five-second motion pull of the same sky. A reviewer who only sees the talking head will sign off a banded wide.
Assemble the cut in the video editor. Grade, dither, and grain in the finishing tool that will actually write 10-bit. The show is not graded until the sky holds on a phone, in motion.
FAQ
Is banding always from the grade?
No. The grade is what makes generation-time quantization visible. If you can count bands before any contrast, the plate is already gone. If they appear only after an S-curve, you stretched a thin ramp; 10-bit plus dither is the first fix, a gentler curve is the second, a regenerate is the third.
Will a 4K export hide 1080p banding?
No. More pixels on the same steps makes the steps easier to see, especially on a large display. Scale after a 10-bit grade, not instead of one.
Can I just add heavy grain and ship?
You can, and the grain will encode as blotches on a social re-encode. Grain is the most expensive thing in the frame for a codec. Use it at an amplitude you cannot see until you toggle it off. If you still need to hide bands at that level, regenerate.
Does the 480p preview tell me anything about banding?
Almost nothing. Bands hide at low resolution, and so does a correct dither. Use the preview for cut and timing. QC banding on the final export.