Nodes/Gimbal-ComfyUI/πŸŒ‰ Gimbal Cross-Modal Bridge (Text-to-Latent)
ComfyUI Node

πŸŒ‰ Gimbal Cross-Modal Bridge (Text-to-Latent)

Gimbal_CrossModalBridge and GimbalCrossModalBridge are the same node β€” here's how to use it

By FormAndNoiseΒ·Created about a month agoΒ·Updated 19 days agoΒ· 0
πŸŒ‰ Gimbal Cross-Modal Bridge (Text-to-Latent)
  • base_latent
  • conditioning
  • target_vector
  • origin_vector
β—„llm_instructionβ–Ί
β—„mapping_modeKeyword_Heuristicsβ–Ί

First, settle the naming, because it'll save you a confused afternoon: Gimbal_CrossModalBridge and GimbalCrossModalBridge are the exact same class registered twice in __init__.py, and Wayfinder_CrossModalBridge is a third alias for the same code. If a workflow JSON references one and your menu shows the other, nothing is broken - pick either and move on. You're here for the actual behavior: turning a line of text into a latent-space direction you can steer with.

What it produces

Inputs: llm_instruction (a string, default empty), base_latent, and mapping_mode. Outputs: target_vector (base latent plus the text-derived offset) and origin_vector (your untouched base). The classic move is to feed target_vector into GimbalCompass_Pro as its target_latent, keep your real image latent on base_latent, and steer in Orthogonal_Projection mode so the mood changes but the subject's geometry doesn't.

There are three mapping_mode options and they behave very differently, so it's worth knowing before you type:

  • Keyword_Heuristics - a fixed lookup table of ~30 words (bright, dark, warm, cool, neon, cinematic, pastel…) and aliases (warmerβ†’warm), each mapped to small per-channel offsets. It sums the signatures of every word it recognizes. Deterministic, no dependencies, but closed-vocabulary: text it doesn't know is ignored with only a console log to tell you.
  • Embedding_Projection - takes a CLIP conditioning with a pooled output and projects it down to your channel count with a small MLP. This is the version that deserves the "cross-modal" label. The catch: unless the pack ships trained weights for exactly your model's pooled dimension (it doesn't by default), the projector is randomly initialized, so results are more "vibes" than "calibrated."
  • Manual_JSON - you hand it JSON like {"luminance": 0.4, "saturation": -0.2} and it applies those per-channel offsets. Fully deterministic, fully transparent, and honestly the mode I'd start with to get a feel for what each channel does.

Building a working steering chain

The README's tutorial is the right shape: take a studio render or portrait latent as base_latent, set instruction to something like "dark cool neon cyberpunk", wire the bridge's target_vector into Compass Pro's target_latent, use Orthogonal_Projection at strength 1.0–1.5, drop the result through a GimbalLatentStabilizer (ψ ~0.88), and refine in a KSampler at denoise 0.45–0.60, CFG 3.5–4.5. Keep the refinement light - over-denoising overwrites the direction you just painted in.

Installing and gotchas

Same as every Gimbal node - 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, all already bundled; nothing to download. Note the README still points at the stale form-and-noise/ComfyUI-Gimbal URL.

The most common failure is silent: you type a sentence full of words that aren't in the keyword table, get a zero delta, and conclude the node is broken. It's not broken - it's a lookup table. If nothing changes, check your console for the "no keywords found" warning and either use recognized vocabulary or switch to Manual_JSON. And keep your expectations calibrated on this one: it's a young pack with essentially zero community discussion, and Embedding_Projection is genuinely half-built. The node earns its place in a workflow for fast lighting/atmosphere iteration, not as the centerpiece of a production pipeline.

CategoryGimbal/Flight Instruments

Inputs (4)

NameTypeDefaultDescription
llm_instructionSTRINGβ€”
base_latentLATENTβ€”
mapping_modeCOMBOKeyword_Heuristics3 options: Keyword_Heuristics, Embedding_Projection, Manual_JSON
conditioningoptCONDITIONINGβ€”

Outputs (2)

NameTypeDescription
target_vectorLATENTβ€”
origin_vectorLATENTβ€”