Nodes/MKRShift_Nodes/Audio Watermark
ComfyUI Node

Audio Watermark

Stamp your name into the audio itself — audibly, not invisibly

By criskb·Created 7 months ago·Updated 6 months ago· 0
Audio Watermark
  • audio
  • audio
  • output_path
  • duration_sec
  • summary
◄modetone_pulse►
◄frequency_hz1800►
◄level_db-28.0►
◄interval_sec4.00►
◄pulse_duration_ms120►
◄start_offset_sec0.00►
◄signature_textMKRSHIFT►
◄pattern_unit_ms80►
◄output_formatauto►
◄filename_prefixMKR_audio_watermark►
◄subfolder►
◄overwritefalse►
◄filename_label►

Watermarking a video is easy - text on a corner. Watermarking audio is harder, and there are two entirely different jobs hiding in the word. One is the invisible, forensic kind that survives re-encoding and identifies a leak. The other is the audible kind: an obvious repeating tone or chirp that makes a preview unstealable, the way a radio station sweeps a tone through an unreleased track. MKRAudioWatermark is the second kind - it's a preview-protection and branding tool, not a hidden tracker. Don't come here expecting imperceptible steganography.

It sits in the MKRShift_Nodes Watermark branch (the same family that includes the video and image watermark nodes), and its natural use is in a demo/review pipeline: watermark the pre-master audio before you send it to a client, then swap in the clean version for delivery.

How it works

The node synthesizes a short watermark sound and mixes it into your audio on a repeating schedule. Three modes:

  • tone_pulse (default) - a steady sine at frequency_hz (default 1800 Hz), pulsed at interval_sec intervals for pulse_duration_ms each. The classic "this is a preview" beep.
  • chirp_pulse - the same, but the tone sweeps upward by 35% across each pulse, so it's harder to notch out with a narrow EQ.
  • text_pattern - encodes your signature_text as an on/off pattern at pattern_unit_ms per bit, rendered as tone bursts. It's Morse-like: someone who knows the convention can read the text back off a spectrogram.

level_db (default −28 dB) sets how loud the watermark sits under the audio - quiet enough not to ruin listening, loud enough that EQing it out would hurt the music. Each pulse gets a tiny fade-in/out to avoid clicks, and start_offset_sec delays the first pulse so the intro isn't instantly sullied.

Inputs that matter

  • audio - MKR_AUDIO payload, waveform tensor, or file path.
  • mode - the three above.
  • frequency_hz, level_db, interval_sec, pulse_duration_ms - the tone's character and schedule.
  • signature_text - default MKRSHIFT; used by text_pattern.
  • pattern_unit_ms - timing unit for text_pattern.
  • start_offset_sec - delay before the first pulse.
  • Standard save block: output_format, filename_prefix, subfolder, overwrite, optional filename_label.

Outputs: audio (MKR_AUDIO), output_path, duration_sec, summary.

Install

ComfyUI Manager (search "MKRShift Nodes"), or:

cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes

Restart. Pure numpy synthesis - no ffmpeg needed for the watermark itself, only for compressed output. No models.

Common issues

Set expectations up front: this is an audible watermark. If your file gets re-encoded, compressed, or clipped, the tone will degrade - it's protection by annoyance, not by cryptography, and there's a separate MKRInvisibleAudioWatermark in this pack if you want the forensic version. Second, watch the low end: at 40 Hz a watermark is basically sub-bass thump nobody perceives as a "tone," so keep frequency_hz in the mid band (1–3 kHz) where it reads as intentional. And if your clip is short relative to interval_sec - say a 2-second clip at a 4-second interval - you may get zero pulses; the summary warns you, and you should lower the interval.

CategoryMKRShift Nodes/Media/Watermark

Inputs (14)

NameTypeDefaultDescription
audio*—
modeCOMBOtone_pulse3 options: tone_pulse, chirp_pulse, text_pattern
frequency_hzFLOAT180040–20000—
level_dbFLOAT-28.0-60–-3—
interval_secFLOAT4.000.05–120—
pulse_duration_msINT12010–5000—
start_offset_secFLOAT0.000–120—
signature_textSTRINGMKRSHIFT—
pattern_unit_msINT8010–2000—
output_formatCOMBOauto5 options: auto, wav, mp3, flac, ogg
filename_prefixSTRINGMKR_audio_watermark—
subfolderSTRING—
overwriteBOOLEANfalse—
filename_labeloptSTRING—

Outputs (4)

NameTypeDescription
audioMKR_AUDIO—
output_pathSTRING—
duration_secFLOAT—
summarySTRING—