π Gimbal Cross-Modal Bridge (Text-to-Latent)
The 'Cross-Modal Bridge' doesn't call an LLM β here's what it actually does with your words
- base_latent
- conditioning
- target_vector
- origin_vector
The name is a lie, in the best possible way. Gimbal Cross-Modal Bridge looks like it's going to ask a language model what "dark cool neon cyberpunk" means and then do something clever with the answer. It does not call any API, needs no key, and no model weights download at install. It's a text-to-latent-offset node: you type a mood, it produces a latent vector you feed into Gimbal Compass Pro as the steering target, so your prompt words become a direction in latent space instead of a prayer to the seed gods.
How it works
You feed it llm_instruction (yes, that's the field name - it's just your text) plus a base_latent, and it returns two latents: target_vector (base + the word-derived offset) and origin_vector (an unmodified copy of your base). Wire target_vector into a Compass Pro's target_latent with base_latent on the other side, and you're steering.
The mapping_mode decides how words become numbers:
Keyword_Heuristics(default) - splits your text into tokens and looks each one up in a hard-coded signature table.bright,dark,warm,cool,neon,pastel,cinematic⦠each has a small per-channel offset vector. "Warm golden" adds the warm signature and the golden signature together. It's a lookup table, not understanding - say "kinda cozy dusk glow" and only the words in the table (or their aliases likewarmer/cooler) actually do anything.Embedding_Projection- if you wire aconditioningin with apooled_output(i.e. a CLIPTextEncode), it projects that pooled CLIP embedding down to your latent's channel count through a small MLP and uses the result as the offset. This is the one that feels like real cross-modal work. Be aware the projector is randomly initialized unless the pack ships a trainedmodels/crossmodal_proj_<in>_to_<out>.ptfor your setup - which, in the shipped repo, it does not. So out of the box you're steering with random noise weights. Cool idea, half-implemented.Manual_JSON- paste JSON like{"luminance": 0.5, "warm_cool": -0.3}and it sets per-channel offsets directly. The most honest mode: you're literally saying which latent channels to push.
What it's good for
Text-steered lighting. Generate a studio product render, add this node with instruction "dark cool neon", feed the target through Compass Pro in Orthogonal_Projection mode at strength ~1.5, then a GimbalLatentStabilizer, and refine at denoise ~0.55. The geometry holds, the atmosphere shifts. It also works as the source of x_vector/y_vector for Manifold Explorer grids.
Installing
ComfyUI Manager β search "Gimbal-comfy" β install β restart. Manual: cd ComfyUI/custom_nodes && git clone https://github.com/FormAndNoise/Gimbal-comfy. Only torch/numpy/pillow, all already present. No API key, ever - worth repeating because the name and the llm_instruction field scream otherwise.
Where people get burned
Expecting free-text magic. In Keyword_Heuristics mode, words outside the signature table silently do nothing (it logs a warning to the console, which you'll never see). If your instruction is "make it pretty" you get a zero delta and wonder why nothing changed. Stick to the vocabulary in the table, or jump to Manual_JSON when you want determinism. And if you're on FLUX with its 16 channels, the 4-element signatures just pad with zeros into the extra channels - they still work, they're just blunter.
Two more things. First, you'll notice this node exists twice in the menu as GimbalCrossModalBridge and Gimbal_CrossModalBridge - they're literally the same class registered under two names, plus a legacy Wayfinder_CrossModalBridge alias. Pick whichever, they're identical. Second, the pack is a young, AI-heavy project with almost no community footprint; the math is fine, but this node in particular is the least "battle-tested" of the suite, so test before you trust a workflow that leans hard on it.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| llm_instruction | STRING | β | |
| base_latent | LATENT | β | |
| mapping_mode | COMBO | Keyword_Heuristics | 3 options: Keyword_Heuristics, Embedding_Projection, Manual_JSON |
| conditioningopt | CONDITIONING | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| target_vector | LATENT | β |
| origin_vector | LATENT | β |