π Gimbal Channel Split
Split a latent into frequency bands β the channel trick that freezes your silhouette
- latent
- latent_band_A
- latent_band_B
- telemetry
The premise behind Gimbal's whole "Subspace" trio is that a latent's channels aren't a homogeneous soup - different channel ranges carry different kinds of visual information, and if you can edit them independently you can change an image's material or texture while leaving its geometry untouched. GimbalChannelSplit is the first step of that trick: it takes one latent and slices it in half along the channel dimension, giving you two smaller latents you can edit separately before recombining with GimbalChannelMerge.
How it works
Two inputs: latent and split_index (default 2). The node slices samples[:, :split_index] into latent_band_A and samples[:, split_index:] into latent_band_B - it's plain tensor slicing, no learned weights, nothing to train.
Where you put the split is the whole art, and it depends on your model:
- SD 1.5 / SDXL (4 channels):
split_index = 2is the stock setup. Channels 0β1 carry structure, contours and geometry; channels 2β3 carry chroma, speculars and texture. Edit the high band and you're repainting the surface while the silhouette holds. - FLUX / SD3 (16 channels): split at 8. Channels 0β7 are macro spatial/composition, channels 8β15 are micro texture and color gamut. Same idea, wider bands.
You also get a telemetry dict out with what the node did, in case you're chaining these in automation.
What it's for
The canonical use case is material swapping with zero silhouette change: split, scale or swap the high-frequency band (or feed it through other Gimbal steering), merge back, and your subject's shape is untouched because the structure channels never moved. It's also a genuinely useful diagnostic - split a broken render and see whether the artifact lives in the structure band or the texture band.
Installing
Same as all Gimbal nodes - ComfyUI Manager β search "Gimbal-comfy" β install β restart, or git clone https://github.com/FormAndNoise/Gimbal-comfy into ComfyUI/custom_nodes. Dependencies are torch/numpy/pillow (already present). Note the README's clone URL is stale; the live repo is FormAndNoise/Gimbal-comfy.
Where people get burned
The main trap is mismatch between the split index and your architecture. Run the default split_index = 2 on a 16-channel FLUX latent and your "high band" is 14 channels - you're editing almost everything, not the texture. And you can't feed a 2-channel band straight into a KSampler; these are internal latents for editing, so the band must go back through GimbalChannelMerge before sampling. Keep the pair together (Split β edit β Merge) and it works; try to sample a half-latent and ComfyUI will rightly complain about the shape. This is one of the pack's more "science project" corners - fewer tutorial videos, more trial and error - but the split/scale/merge loop is short and worth ten minutes of poking.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | β | |
| split_index | INT | 21β127 | Channel boundary index |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| latent_band_A | LATENT | β |
| latent_band_B | LATENT | β |
| telemetry | DICT | β |