Skip to content

ColorCorrection

A frame desaturates briefly to signal grief. The whole image warms to amber for a sunset moment. A flashbang spike pushes Brightness sharply up, then it falls back through black before recovering. A dream sequence drifts through colours that aren’t real.

ColorCorrection is for those whole-frame mood shifts. It animates four properties of Roblox’s ColorCorrectionEffect over each emission’s lifetime: Brightness, Contrast, Saturation, and a TintColor graph. The four work together to push the image toward whatever palette and intensity the moment calls for.

A Roblox ColorCorrectionEffect instance, typically parented to Lighting.

Like the other post-process types, it doesn’t move and doesn’t have a position. It applies to the whole rendered camera image, every frame.

ColorCorrection is more expressive than Blur or Bloom because it composes four independent visual axes. Used in combination, you can turn a daylight scene into anything from a horror film to a music video.

  • Brightness shifts the overall image lighter or darker.
  • Contrast stretches or compresses the gap between dark and bright pixels.
  • Saturation intensifies or drains colour. Push it to its lowest and the image is grayscale.
  • TintColor multiplies a colour over the entire frame. A red tint for danger, a blue tint for cold, a sepia tint for memory.

The first three are signed — they take negative and positive values. This is unusual in the plugin (most graphs are clamped at zero or above). A Brightness graph that dips to -0.5 actually darkens the image; a Saturation of -1 removes all colour.

The full surface area, grouped by panel section.

Panel labelData attributeTypeDefaultWhat it does
ModeEmissionModeenumEmitEmit (per-emission clones) or Animate (singleton clone, looping)
LoopAnimateLoopbooleanfalseWhether Animate mode loops the cycle
EnabledEnabled (attribute)booleanfalseMaster on/off
RateRatenumber10Emit rate per second (Emit mode only)
LifetimeLifetimeNumberRange1Seconds each clone lives
Panel labelData attributeTypeDefaultWhat it does
BrightnessCCBrightnessNumberSequence0Image brightness graph (range -1 to +1)
ContrastCCContrastNumberSequence0Image contrast graph (range -1 to +1)
SaturationCCSaturationNumberSequence0Colour saturation graph (range -1 to +1)
TintColorCCTintColorColorSequencewhiteWhole-frame colour tint graph
Panel labelData attributeTypeDefaultWhat it does
Anim. StepsTotalKeyFramesnumber100Pre-sample resolution for the graphs
LingerPartLifenumber0Seconds the clone lingers after Lifetime
Emit IntoEmitParentInstancenilWhere the clone parents — overrides Lighting

A NumberSequence graph for global image brightness, signed.

  • 0 (the default) is no change.
  • Positive values brighten the image. +0.5 is noticeably brighter; +1.0 is dramatically washed out.
  • Negative values darken. -0.5 is dim; -1.0 is near-black.

Useful for flashbang effects (a sharp spike to +1.0 followed by a deep dip to -0.5 and recovery to 0), or fade-to-black transitions (a graph that ramps from 0 down to -1.0).

The data attribute is CCBrightness to avoid colliding with native Roblox ColorCorrectionEffect.Brightness.

A NumberSequence graph for image contrast, signed.

  • 0 is no change.
  • Positive values increase contrast — bright pixels become brighter, dark pixels become darker, the gap between them widens. +0.5 is punchy; +1.0 is harsh.
  • Negative values flatten contrast — the image becomes grayer, with tones converging toward middle grey. -1.0 is fully flat.

For “punchy moment” effects (combat impacts, crisp moments of clarity), animate Contrast briefly upward. For “memory” or “out of focus” effects, animate it downward.

The data attribute is CCContrast.

A NumberSequence graph for colour intensity, signed.

  • 0 is no change — colours render at their natural intensity.
  • Positive values oversaturate — colours become more vivid, sometimes neon-bright.
  • Negative values desaturate — the image drifts toward grayscale. -1.0 is pure greyscale (no colour at all).

A “drain colour for grief” effect: a graph that ramps from 0 to -1 over the lifetime. The screen gradually loses its colour. A “sudden vivid burst”: a graph that spikes briefly to +0.5 then returns to 0. Useful for combo-confirmation flashes, level-up moments.

The data attribute is CCSaturation.

A ColorSequence for whole-frame tint. The tint multiplies against the rendered image’s colours.

  • White (the default) is no tint — the image renders at its natural colour.
  • Red tints everything toward red — useful for damage, anger, blood-moon scenes.
  • Blue tints toward blue — cold, sad, undersea.
  • Sepia (warm yellow-brown) tints toward memory or old-photograph aesthetics.
  • Green tints can suggest sickness, or the iconic “Matrix” look.

Because TintColor is a ColorSequence, the tint can shift over the lifetime. A graph from white at age 0 to red at age 0.5 to white at 1.0 produces a brief red-flash that recovers — useful for damage indicators that don’t permanently shift the palette.

The data attribute is CCTintColor.

Same plugin-level protection as Blur and Bloom: in Animate mode, one duplicate at a time, re-emits silently dropped while the active cycle runs. The protection is the plugin’s own — Roblox itself supports multiple ColorCorrectionEffect instances in Lighting and composes them multiplicatively (covered in the Worth-knowing section below). Re-emits in Emit mode aren’t guarded.

For ColorCorrection specifically, stacking is especially dangerous because the four properties compose against each other across stacked effects. Two ColorCorrection clones each with Saturation = -0.5 produce close to full grayscale. Two clones each with TintColor = blue produce a deep saturated blue, often unintentionally. Use Animate mode and the singleton protection.

Same as Blur and Bloom. Default is Lighting. Setting it elsewhere effectively disables the effect (ColorCorrection only renders inside Lighting).

A few ColorCorrection-specific quirks.

The first three properties are signed; the rest of the plugin’s graphs aren’t. Most graphs in the plugin are non-negative — Speed, Drag, Width0, etc. all clamp at zero. CCBrightness, CCContrast, and CCSaturation are not clamped. The graph editor lets you author negative values, and the engine respects them. If you find your graph isn’t going below zero in another type’s editor, that’s because most graphs are non-negative by design — but here, negative is meaningful.

Existing ColorCorrection effects compose multiplicatively. If your Lighting already has a non-emitter ColorCorrectionEffect (a permanent baseline tint your scene designer set up), the emitted ColorCorrection layers on top. A baseline of Saturation = -0.2 plus an emitted Saturation = -0.5 produces a more drained effect than either alone. Audit Lighting for existing colour effects before authoring.

TintColor multiplies, doesn’t replace. A red TintColor doesn’t paint the screen red — it multiplies the existing pixels’ RGB values by the tint colour’s RGB. A pure-blue pixel under a pure-red tint becomes black (red × blue = no overlap). Mixing tints with scene colours sometimes produces surprising results.

Animation blends across all four properties simultaneously. All four graphs are sampled each frame and applied together. A graph that ramps Brightness up while Saturation drops produces a bright but desaturated moment — useful for ghost effects, dream sequences, vision-of-the-divine moments.

Atmosphere is the strangest of the four screen-space types. Roblox renders only one Atmosphere on Lighting at a time, period — and the plugin handles this constraint by overriding the EmissionMode setting in a way that’s worth understanding before you reach for it.