Sonder Masks Bridge
Freeze the audio while you edit the video (or vice versa)
- project
- video_mask_start_time
- video_mask_end_time
- audio_mask_start_time
- audio_mask_end_time
Sonder Masks Bridge is how you tell a temporal inpainting workflow what it's allowed to regenerate in a Sonder Editor project. The editor already computes a generation-mask window - the frames your selection actually touches, distinct from the protected context frames around it. This node reads that window and hands it to your downstream temporal mask node as start/end times, split into separate video and audio channels. Two toggles, four numbers out, and suddenly "regenerate the video but keep the audio locked" is a switch instead of a surgery.
The Edit/Freeze design is the whole personality of this node. Each channel (video, audio) has its own toggle:
- Edit - the channel generates over the mask window; you get the editor's real start/end times.
- Freeze - the channel emits a zero-width window (start == end), so the mask covers nothing and nothing gets generated for it.
That's the audio-fixed-while-video-drives workflow in a single boolean. You keep your existing audio, regenerate only the picture, and the mask node downstream sees an empty audio window and leaves the audio untouched. Flip the toggles and it works the other way too.
How it works
Inputs are project (from a Sonder Editor's project output, so it sees the same execution window) plus the two booleans edit_video and edit_audio. Outputs are the four mask times in seconds:
video_mask_start_time/video_mask_end_timeaudio_mask_start_time/audio_mask_end_time
When a channel is frozen, both its start and end collapse to the same value (zero width). The node requires a project that has actually executed through a Sonder Editor - the mask window is a property of a render, not of a raw project file.
Install and the trap to avoid
Standard pack install: ComfyUI Manager search Sonder Editor, or git clone https://github.com/SonderSaid/ComfyUI-Sonder-Editor.git + pip install -r requirements.txt + restart.
The thing that catches people: the mask times are seconds offsets within the output, not timeline frame numbers. If you're feeding these into a temporal mask node, make sure it expects the same convention - mixing a seconds-based mask with a frames-based one is a silent off-by-whatever that makes your "protected" frames get regenerated anyway. And remember this node only exposes the mask window: the actual protected context frames come from the editor's pre_context_frames/post_context_frames settings. The bridge is the window's messenger, not its author.
For anyone chaining long-form video scenes, this is the node that turns "keep audio while I redo the visuals" from a manual workflow rebuild into a per-run toggle. It's small, it's boring, and it saves exactly the kind of repeated fiddling that makes people give up on iteration.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| project | SONDER_PROJECT | Wire from the Sonder Editor project output so the bridge sees the same execution window. | |
| edit_video | BOOLEAN | true | Edit: video generates over the mask window. Freeze: zero-width window keeps video from source. |
| edit_audio | BOOLEAN | true | Edit: audio generates over the mask window. Freeze: zero-width window keeps audio from source. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| video_mask_start_time | FLOAT | Video generation-mask start time (seconds). Equals the editor's mask start when Edit Video is on; equals the end (zero width) when frozen. |
| video_mask_end_time | FLOAT | Video generation-mask end time (seconds). Collapses to the start time when Edit Video is off, freezing the video channel. |
| audio_mask_start_time | FLOAT | Audio generation-mask start time (seconds). Equals the editor's mask start when Edit Audio is on; equals the end (zero width) when frozen. |
| audio_mask_end_time | FLOAT | Audio generation-mask end time (seconds). Collapses to the start time when Edit Audio is off, freezing the audio channel. |