chx_latent_adjust
Brightness, contrast, and sharpen — done on the latent, not the pixels
- context
- latent
- context
- latent
Most brightness/contrast/saturation tweaks in a ComfyUI graph happen after the VAE decodes your latent into an actual image - you nudge pixels, because pixels are what you can see. chx_latent_adjust skips that step entirely: it nudges the LATENT tensor itself, before it's ever been decoded. That's a genuinely different tool than the pack's color_* nodes, not just a latent-flavored copy of them.
It lives under Apt_Preset/chx_tool/latent, part of the "chx" family the author built around a Loader → Controller → Sampler framework for taming spaghetti workflows. Like several other chx_ nodes in this pack, it can plug into the pack's RUN_CONTEXT pipe - a single bundled wire carrying model/clip/latent/etc through your graph - so you can drop it mid-chain without redrawing five separate connections, or just wire a plain LATENT in and out and ignore the context entirely.
How it works
Same conceptual moves as any pixel-space color adjustment - brightness, contrast, saturation, exposure - just applied to the latent's channels instead of RGB values. The sharpening pair, alpha_sharpen and high_pass_radius/high_pass_strength, is the classic high-pass sharpen trick: blur a copy, pull out the high-frequency difference, add it back in at a controllable radius and strength.
Latent-space math doesn't map 1:1 to what you'll perceive after decode - a value that looks subtle in the numbers can come out either muted or exaggerated once the VAE turns it into pixels. Treat this as a cheap, rough nudge, not precision grading; for that, use the pack's color_adjust_HSL or color_balance_adv on the decoded image instead.
The inputs and outputs that matter
brightness(default 1, range -1 to 2),contrast(default 1, -1 to 2),saturation(default 1, 0 to 2),exposure(default 0, -1 to 2) - the core four, all centered on their neutral value (1 for multiplicative ones, 0 for exposure).alpha_sharpen(0-10) withhigh_pass_radius(0-1024) andhigh_pass_strength(0-2) - the sharpen trio; leave radius at 0 and nothing happens regardless of the other two.- Optional
context(RUN_CONTEXT) andlatent(LATENT) in, same two out - wire either path depending on whether you're inside a context chain or working with a bare latent.
How to install it
Through ComfyUI Manager: search "ComfyUI-Apt_Preset", install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset.git
then, per the README, double-click install.bat to pull in dependencies (that instruction is Windows-flavored - on Linux/Mac just pip install whatever requirements.txt the pack ships, or let ComfyUI Manager handle it), then restart. This particular node needs no extra models - it's pure tensor math.
Common issues & troubleshooting
Values far from the defaults produce garbage after decode. Because you're perturbing latent channels, not visible pixels, an aggressive saturation or exposure can blow up in ways that only become obvious once decoded. Back off toward 1/0 and re-decode to check, rather than iterating blind.
Nothing changes. high_pass_radius at 0 disables the sharpen path outright regardless of alpha_sharpen/high_pass_strength - bump the radius first if sharpening isn't doing anything.
The node shows as red / IMPORT FAILED after an update. This is a large, actively-developed pack (the changelog has entries into 2026), and real users have hit IMPORT FAILED on ComfyUI-Apt_Preset after installs - one is documented on r/comfyui. If it happens, check the console for the specific missing dependency, reinstall via Manager, and restart; it's usually a stale install.bat run rather than anything wrong with this node specifically.
No context in your graph. If you're feeding the optional context input, it needs to come from another RUN_CONTEXT-producing node earlier in this same pack - plugging in a raw LATENT and ignoring context works fine too, they're independent paths.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| brightness | FLOAT | 1.00-1–2 | — |
| contrast | FLOAT | 1.00-1–2 | — |
| saturation | FLOAT | 1.000–2 | — |
| exposure | FLOAT | 0.00-1–2 | — |
| alpha_sharpen | FLOAT | 0.000–10 | — |
| high_pass_radius | FLOAT | 0.000–1024 | — |
| high_pass_strength | FLOAT | 1.000–2 | — |
| contextopt | RUN_CONTEXT | — | |
| latentopt | LATENT | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| context | RUN_CONTEXT | — |
| latent | LATENT | — |