Activation Probe
See exactly what a lens did to your conditioning, token by token
- original
- steered
- chart
- analysis
When you put a Concept Steer node between your text encoder and sampler, it quietly adds a direction to your conditioning and you never see the intermediate. Activation Probe is the node that finally shows you: feed it the original conditioning and the steered one and it produces a four-panel analysis - per-token cosine similarity between original and steered, perturbation magnitude, norm comparison, and direction alignment - plus a text metrics summary. It answers "did the lens actually do what I think, and on which tokens?"
How it works
Concept Steer adds strength × avg_token_norm × direction to every active token position. Activation Probe reconstructs that story from the two conditionings it's handed: it compares each token's vector before and after, measures how much it moved (perturbation magnitude), how the norms compare, and how aligned the movement is with the lens direction (cosine similarity). The chart output is a 4-panel image; the analysis output is the numeric report.
The workflow is delightfully literal, straight from the README: clone your text-encoder output, run one copy through Concept Steer, and feed the original + steered into the probe. The chart shows which tokens moved and how - you can see whether the lens applied evenly or whether some token positions resisted. That's genuinely useful for debugging: if the probe shows a big perturbation but the generated image looks unchanged, the lens may be misaligned with the model's conditioning path. If tokens barely moved, your lens may be weak or mis-dimensioned.
The inputs that matter
- original - conditioning BEFORE steering.
- steered - conditioning AFTER applying a lens.
- label - optional name for the chart (the concept name is a good idea), so you can tell probes apart in a batch.
Outputs: chart (IMAGE) and analysis (STRING). Both are end-of-line debug outputs - nothing wires out of it into a sampler.
Installing
Pack-standard: ComfyUI Manager search "Concept Steer", or git clone https://github.com/Nynxz/ComfyUI-ConceptSteer into custom_nodes/ and restart. Runs purely on the two conditionings - no lens loading, no encoder, no VRAM worries. The only moving parts are the two CONDITIONING connections you feed it.
Common gotchas
- The wiring is easy to get backwards.
originalis pre-steer,steeredis post-steer. Flip them and every metric inverts and nothing makes sense. - Conditioning is a list of tuples, and the node compares tensors. If you've chained multiple steering nodes before the probe, the "steered" input is the final state - that's fine, but the analysis is then "everything changed," not "this lens changed."
- No visible difference in the chart isn't always a bug. With a subtle lens (strength 0.3) and short prompts, per-token movement can be small. If the numbers match what you set, the lens is working - the chart is telling you how much, not whether.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| original | CONDITIONING | Original conditioning BEFORE steering | |
| steered | CONDITIONING | Conditioning AFTER applying a concept lens | |
| label | STRING | Optional label for the comparison (e.g. concept name) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| chart | IMAGE | — |
| analysis | STRING | — |