Nodes/RyanOnTheInside/Whisper Feature βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

Whisper Feature βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Turn transcribed speech into a Flex Feature you can drive anything with

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Whisper Feature βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • alignment_data
  • trigger_set
  • FEATURE
  • IMAGE
β—„extraction_methodβ–Ύβ–Ί
β—„frame_rate30.0β–Ί
β—„frame_count30β–Ί
β—„width512β–Ί
β—„height512β–Ί
β—„context_size3β–Ί
β—„overlap_modeblendβ–Ί

This is the actual "speech becomes a driving signal" node - the one the RyanOnTheInside README's "Text as Features" bullet is describing. Feed it Whisper's word or segment timing (ideally already cleaned up by WhisperAutoAdjust and/or WhisperTimeAdjuster) and it converts that into a FEATURE: the same kind of numeric, per-frame signal that this pack's audio, MIDI, and motion nodes produce, meaning it plugs into anything in the pack built to be Flex-modulated - masks, particle emitters, spline modulators, IPAdapter weights, all of it.

As with the rest of this Whisper family, remember the alignment_data this node needs doesn't come from RyanOnTheInside itself - it comes from the separate, popular ComfyUI-Whisper pack, which actually runs Whisper and produces the alignment.

How it works

extraction_method is the real decision here - it determines what "speaking" gets turned into, and the five options genuinely mean different things:

  • word_timing - a peak on every word. Good for word-synced flashes or pulses.
  • segment_timing - a sustained plateau for as long as someone's talking. Good for a steady "highlight while speaking" effect.
  • speech_density - words per second. Good for pacing or intensity-driven effects.
  • silence_ratio - the balance of speech versus silence. Pacing from the other direction.
  • trigger_values - driven by a custom trigger_set of specific words or phrases you define, so the value spikes only when a particular word gets said.

frame_rate and frame_count set how many samples you get and over what span, and they need to actually match your render's real fps and length - mismatch these and the feature curve is technically correct but timed against a different video than the one you're actually making, so effects fire early, late, or cut off partway through. width/height size the IMAGE output, which is a visualization of the extracted feature curve.

The inputs and outputs that matter

The optional trio - trigger_set, context_size (0–10, default 3), overlap_mode (blend/replace/add, default blend) - only matters when extraction_method is trigger_values. trigger_set is where you actually define the word-to-value mapping; without one wired up, trigger_values mode has nothing to trigger on. context_size is how many neighboring words get considered when deciding a trigger fired. overlap_mode decides what happens when two triggers are active on the same frame.

Two outputs: FEATURE, the actual driving signal to wire into anything Flex-modulatable, and IMAGE, a plotted visualization of that curve - a fast sanity check that a feature landed where you expect before you build the rest of the graph on top of it.

How to install it

Via ComfyUI Manager, search "RyanOnTheInside." Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside.git
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt

Restart ComfyUI. And, again, you need ComfyUI-Whisper installed separately to actually produce alignment_data in the first place - this node consumes it, it doesn't run Whisper itself.

Common issues & troubleshooting

A frame_rate/frame_count mismatch against your actual render is the single most common way this looks "broken" when it isn't - the feature is correct, it's just scheduled against the wrong timeline. Double-check both against your real video settings any time an effect looks shifted.

If you've set extraction_method to trigger_values and nothing seems to trigger, check that you actually wired a trigger_set - it's optional in the schema, which makes it easy to forget, and without it there's simply nothing defined to fire on.

CategoryRyanOnTheInside/FlexFeatures/Sources/Whisper

Inputs (9)

NameTypeDefaultDescription
extraction_methodCOMBOType of feature to extract: - word_timing: Creates peaks at each word (good for word-synced effects) - segment_timing: Creates plateaus during speech segments (good for sustained effects) - trigger_values: Generates values based on word-based triggers - speech_density: Measures words per second (good for intensity-based effects) - silence_ratio: Tracks speech vs silence ratio (good for pacing-based effects)
frame_rateFLOAT30.01–120Frame rate of the video (1.0 to 120.0 fps)
frame_countINT301–999999Total number of frames (minimum: 1)
widthINT51264–4096Width of the output feature (64 to 4096)
heightINT51264–4096Height of the output feature (64 to 4096)
alignment_datawhisper_alignmentWhisper transcription alignment data (from ComfyUI-Whisper). Contains word-level or segment-level timing information for speech.
trigger_setoptTRIGGER_SETOptional set of word-based triggers that define value sequences. Each trigger specifies how to respond when certain words or phrases are spoken.
context_sizeoptINT30–10Number of surrounding words to consider for context (0-10). Larger values provide more context for trigger decisions but may increase processing time.
overlap_modeoptCOMBOblendHow to handle overlapping triggers: - blend: Smooth transition between overlapping values - replace: Use the most recent trigger's value - add: Combine values from all active triggers

Outputs (2)

NameTypeDescription
FEATUREFEATUREβ€”
IMAGEIMAGEβ€”