Whisper Feature β‘π ‘π π £π
Turn transcribed speech into a Flex Feature you can drive anything with
- alignment_data
- trigger_set
- FEATURE
- IMAGE
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_setof 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.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| extraction_method | COMBO | Type 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_rate | FLOAT | 30.01β120 | Frame rate of the video (1.0 to 120.0 fps) |
| frame_count | INT | 301β999999 | Total number of frames (minimum: 1) |
| width | INT | 51264β4096 | Width of the output feature (64 to 4096) |
| height | INT | 51264β4096 | Height of the output feature (64 to 4096) |
| alignment_data | whisper_alignment | Whisper transcription alignment data (from ComfyUI-Whisper). Contains word-level or segment-level timing information for speech. | |
| trigger_setopt | TRIGGER_SET | Optional set of word-based triggers that define value sequences. Each trigger specifies how to respond when certain words or phrases are spoken. | |
| context_sizeopt | INT | 30β10 | Number of surrounding words to consider for context (0-10). Larger values provide more context for trigger decisions but may increase processing time. |
| overlap_modeopt | COMBO | blend | How 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)
| Name | Type | Description |
|---|---|---|
| FEATURE | FEATURE | β |
| IMAGE | IMAGE | β |