π§ Gimbal Compass Pro
Steer your latent where you actually want it
- base_latent
- target_latent
- origin_latent
- mask
- mu_centroid
- latent_out
- gimbal_meta
You know the loop: type a prompt, roll a seed, get something close to the vision, then reroll forty times hoping the dice land right. Gimbal Compass Pro is the flagship node of the Gimbal pack built to kill that loop. Instead of gambling, you treat the latent as a coordinate in a huge vector space and literally move it: take a base latent, point it at a target latent, and walk along that direction by a strength you control. No randomness, no praying to the VAE gods - just geometry.
That framing (the pack's whole "flight instruments" metaphor) comes from Form & Noise, the author of the Gimbal-comfy suite of ~19 nodes. The math underneath is real - spherical interpolation, orthogonal projection, latent vector arithmetic - even if the README sells it with more theatrical marketing ("GPU certified", an AI flight crew in the credits) than you'd get from most packs. Compass Pro is the instrument you'll reach for first.
How it works
Give it three latents: base_latent (where you start), target_latent (where you want to lean), and origin_latent (the reference point the direction is measured from). The delta is target β origin, and mode decides how that delta gets applied to the base:
- Standard - the plain
base + strength Γ delta. Fast, crude, works. - Normalized - same idea but scales the delta to unit magnitude so strength behaves more predictably.
- Orthogonal_Projection - removes the component of the change parallel to your subject. This is the one to use when you want to repaint the lighting but lock the car's silhouette 100%.
- Slerp / Slerp_Origin - geodesic (arc-on-the-sphere) interpolation instead of a straight cut through the latent, which avoids the washed-out midpoints naive linear blending gives you.
- Blend_Overlay / Blend_Multiply - compositing-style blends, and Stochastic_Sample - a seeded random walk, the one mode where
seedactually matters.
The outputs are latent_out (wire it into a KSampler) and gimbal_meta, a DICT of diagnostics you can mostly ignore on your first pass. The optional mask (MASK type) lets you restrict the steering to part of the image, and mu_centroid lets you override the anchor used for ΞΌ-centered Slerp - leave it unplugged and it uses origin_latent.
The two settings that matter
Everything defaults sensibly, so the beginner set is small: mode (start with Slerp or Orthogonal_Projection) and strength (β10 to 10). Crank strength too far and you overshoot into soup; most of the author's own tutorials live in the 0.5β1.5 band.
Common issues
Where people get burned: don't SLERP mid-denoise. The pack's own failure docs show what happens when you blend at step 8 of 20 - tree branches become rock spires, because the UNet has already crystallized geometry. Blend at Step-0 noise (both latents fresh out of a denoise=1.0 KSampler), then run the result through a refinement pass at denoise 0.45β0.60 and drop CFG to roughly 3.5β4.5 - high CFG over-drives the injected direction and deep-fries your image with crispy black outlines. Also, if you see a WayfinderCompass_Pro class name in a saved workflow, that's fine - the Wayfinder names are the legacy aliases for the current Gimbal classes, same node.
Install
# ComfyUI Manager β Install Custom Nodes β search "Gimbal"
# or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/FormAndNoise/Gimbal-comfy
pip install -r Gimbal-comfy/requirements.txt
Then restart ComfyUI; the node lives under Add Node β Gimbal/Flight Instruments. Its requirements are just torch, numpy and pillow - nothing ComfyUI doesn't already ship, and no model files to download.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| base_latent | LATENT | β | |
| target_latent | LATENT | β | |
| origin_latent | LATENT | β | |
| strength | FLOAT | 1.00-10β10 | β |
| mode | COMBO | Standard | 8 options: Standard, Normalized, Orthogonal_Projection, Slerp, Slerp_Origin, Blend_Overlay, +2 |
| clamp_output | BOOLEAN | false | β |
| clamp_min | FLOAT | -10.0-100β0 | β |
| clamp_max | FLOAT | 10.00β100 | β |
| allow_batch_expand | BOOLEAN | false | β |
| ortho_per_channel | BOOLEAN | false | β |
| clamp_mask_input | BOOLEAN | false | β |
| enable_perf_logging | BOOLEAN | false | β |
| maskopt | MASK | β | |
| seedopt | INT | 00β18446744073709550000 | β |
| mu_centroidopt | LATENT | Optional population centroid for ΞΌ-centered Slerp. If absent, origin_latent is used as the anchor. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| latent_out | LATENT | β |
| gimbal_meta | DICT | β |