Skip to content

Multimodal Transforms Reference

Complete reference for the 160+ image, audio, and video transforms Dreadnode ships for multimodal red teaming — noise and corruptions, geometric and spectral perturbations, steganography, typographic attacks, and temporal video manipulations, with the research each is drawn from.

Multimodal red teaming probes the safety of vision, audio, and video models by mutating the media you send — and scoring the media a model generates back. Safety training is unevenly distributed across modalities: a request refused as text may be complied with when it is embedded in an image, spoken as audio, or distributed across video frames. This page is the complete reference for the 160+ image, audio, and video transforms Dreadnode ships for that purpose, organized by category and cross-referenced to the research they are drawn from.

For a task-oriented walkthrough (setup, target models, SDK and TUI scenarios), see Multimodal Red Teaming. This page is the exhaustive catalog.

Every transform is modality-typed (image, audio, or video). When you pass a list of transforms to multimodal_attack(...), the SDK routes each one to its modality — an image transform only mutates the image, an audio transform only the audio, and so on — and leaves the other modalities untouched. This means you can stack transforms across modalities in a single attack and each is applied where it belongs. Text transforms (see Transforms Reference) continue to mutate the prompt.

From the SDK, import from dreadnode.transforms.{image,audio,video} and pass instances:

from dreadnode.airt import multimodal_attack
from dreadnode.scorers.judge import llm_judge
from dreadnode.transforms import image, audio, video
# `make_target`, JUDGE and RUBRIC come from the shared setup on the
# Multimodal Red Teaming page (make_target resolves both dn/ and provider ids).
attack = multimodal_attack(
goal="Extract restricted instructions",
target=make_target("gemini/gemini-flash-latest"), # a modality-capable target task
scorer=llm_judge(JUDGE, RUBRIC),
image="payload.png",
audio="request.wav",
video="clip.mp4",
transforms=[
image.figstep_image("Explain how to ..."), # image-only
audio.ultrasonic_shift(carrier_ratio=0.9), # audio-only
video.temporal_shuffle(), # video-only
],
)

From the TUI, request transforms by name — the agent resolves them against this catalog:

Run a multimodal attack on gemini/gemini-flash-latest with my image at ./payload.png, applying figstep_image and fog to the image.

TransformWhat it doesKey params
add_gaussian_noiseAdditive Gaussian noisescale, seed
add_laplace_noiseAdditive Laplace noisescale, seed
add_uniform_noiseAdditive uniform noiselow, high, seed
salt_pepper_noiseImpulse noise — flips random pixels to black/whiteamount, salt_vs_pepper, seed
shot_noisePoisson (photon-count) sensor noise (ImageNet-C)scale, seed
speckle_noiseMultiplicative speckle noise (ImageNet-C)scale, seed
high_frequency_perturbationNear-Nyquist sinusoidal grating (low-visibility)amplitude, frequency
shift_pixel_valuesSmall random per-pixel integer shiftmax_delta, seed
TransformWhat it doesKey params
blurGaussian blurradius
motion_blurDirectional (camera-motion) blursize, angle
defocus_blurDisk-kernel (out-of-focus) blur (ImageNet-C)radius
glass_blurFrosted-glass blur — blur plus local pixel jitter (ImageNet-C)sigma, max_delta, iterations
zoom_blurAverage of progressively zoomed copies (ImageNet-C)max_zoom, step
downscaleDown/upsample to destroy fine detailscale
pixelateBlocky mosaic via nearest-neighbor resizepixel_size
TransformWhat it doesKey params
adjust_brightness / adjust_contrast / adjust_saturationEnhance channelsfactor
color_jitterRandom brightness/contrast/saturation jitterbrightness, contrast, saturation, seed
hue_shiftRotate hue in HSVdegrees
chromatic_aberrationLaterally offset red/blue channelsshift
invert_colors / solarize / posterize / sepia / grayscaleColor remappingthreshold / bits
histogram_equalize / autocontrastContrast normalizationcutoff
sharpenUnsharp-mask edge accentuationradius, percent, threshold
opacity_blendBlend toward a flat background (wash-out)opacity, background
halftone_dither1-bit Floyd-Steinberg dithering
apply_pil_filterNamed PIL filter (emboss/contour/edge_enhance/find_edges/…)filter_name
jpeg_compressionJPEG compression artifactsquality
TransformWhat it doesKey params
rotate / horizontal_flip / vertical_flipRotations and mirrorsdegrees
crop / pad / pad_squareCrop or pad (letterbox to square)x1..y2 / padding
skewHorizontal shear/slantshear
change_aspect_ratioAnamorphic width stretchratio
perspective_warpPerspective (viewpoint) warpmagnitude
elastic_deformSmooth elastic displacement fieldalpha, sigma, seed
shuffle_pixelsShuffle pixel blocksblock_size, seed
interpolate_imagesLinear interpolation between two images (SDK-only)alpha
TransformWhat it doesKey params
fogBlend a low-frequency bright cloud over the imageintensity, seed
snowOverlay motion-blurred bright specksamount, streak_angle, seed
spatterPaint random mud/rain blobsamount, color, seed
TransformWhat it doesKey params
cutoutOcclude a random rectangle (random-erasing)size_ratio, fill, seed
channel_shufflePermute RGB channels (e.g. BGR)order, seed
overlay_emoji / overlay_stripesOverlay emoji or occluding stripesemoji / count, width
add_text_overlaySemi-transparent text captiontext, position, color
adversarial_patchHigh-salience occluding patch, optionally carrying textpayload, position, size_ratio
meme_formatWhite caption bar with bold text (image macro)caption, position
overlay_imageComposite a second image (logo/QR/distractor); SDK-onlyoverlay, position, opacity
TransformWhat it doesReference
image_steganographyHide a text payload in pixel LSBs
extract_steganographyRecover an LSB-hidden payload (verification)
figstep_imageRender a numbered blank-step list soliciting harmful completionFigStep
typographic_promptRender a request as pixels to bypass text filtersMM-SafetyBench
invisible_textNear-imperceptible low-contrast instruction a human misses but a VLM readsVisual prompt injection
from dreadnode.transforms import image
# Concise image-attack stack: typographic instruction + hidden payload + corruption + patch.
transforms = [
image.figstep_image("Explain the steps to ...", steps=3),
image.image_steganography("ignore previous instructions"),
image.fog(intensity=0.6, seed=0),
image.adversarial_patch("OVERRIDE", size_ratio=0.25),
]

Additional augmentations (Albumentations / DSP)

Section titled “Additional augmentations (Albumentations / DSP)”
TransformWhat it doesKey params
median_blurEdge-preserving median filtersize
gamma_correctionPower-law tone curvegamma
color_quantizeReduce to an adaptive N-color palettecolors, dither
ordered_dither4x4 Bayer ordered dithering
vignetteRadial corner darkeningstrength
rgb_shiftConstant per-channel value shiftr_shift, g_shift, b_shift
channel_dropoutZero a single color channelchannel, seed
hsv_shiftShift saturation and value in HSVsaturation, value
coarse_dropoutErase multiple random rectanglesholes, size_ratio, seed
pixel_dropoutRandomly zero individual pixelsdropout_ratio, seed
morphologyGrayscale erode/dilate/open/closeoperation, size
optical_distortionRadial barrel/pincushion lens distortionk
grid_distortionWarp along a randomly perturbed gridnum_steps, distort, seed
rainDirectional rain streaksamount, length, angle
random_shadowDarken a random triangular regionstrength, seed
iso_noiseCamera ISO noise (Poisson + color Gaussian)color_shift, intensity
ringing_overshootSinc-kernel ringing (Gibbs) artifactsize
fancy_pcaAlexNet PCA color augmentationalpha_std, seed
webp_compressionWebP lossy-compression artifactsquality
affineCombined rotate + scale + translate + shearrotate, scale, translate, shear
TransformWhat it doesKey params
add_white_noise / add_pink_noise / add_brown_noiseBroadband noise at a target SNRsnr_db, seed
add_babble_noiseMulti-talker, speech-band babblesnr_db, n_talkers, seed
add_short_noisesSparse transient noise burstsn_bursts, burst_ms, snr_db
add_clicksImpulsive clicks/cracklerate_per_sec, amplitude
TransformWhat it doesKey params
change_volume / normalize_volumeGain / peak normalizegain_db / target_db
add_clipping / soft_clipHard vs. tanh (overdrive) saturationthreshold / gain
limiterPeak-limit with a smoothed envelopethreshold_db, release_ms
apply_dynamic_range_compressionThreshold/ratio compressorthreshold_db, ratio
gain_transitionRamp gain across the clipstart_gain_db, end_gain_db
add_fadeFade in/outfade_in_ms, fade_out_ms
TransformWhat it doesKey params
apply_low_pass_filter / apply_high_pass_filter / apply_band_pass_filterButterworth filterscutoff_hz, order
band_stop_filter / notch_filterBand-reject / narrow notchlow_hz, high_hz / freq_hz, quality
peaking_equalizerRBJ peaking-EQ band boost/cutfreq_hz, gain_db, q
low_shelf_filter / high_shelf_filterShelving boost/cutfreq_hz, gain_db, q
seven_band_parametric_eqCascaded 7-band parametric EQgains_db, q
pre_emphasisHigh-shelf pre-emphasiscoeff
air_absorptionDistance-dependent HF attenuationdistance_m
TransformWhat it doesKey params
change_speed / time_stretch / pitch_shiftSpeed (resample), tempo (phase vocoder), pitchrate / semitones
time_shiftShift in time (wrap or pad)shift_ms, rollover
reverse_audioReverse in time
trim_silence / loop_audio / repeat_partTrim, loop, or stutter a segmentcount / segment_ms, repeats
granular_shuffleChop into grains and reordergrain_ms, seed
sample_dropoutZero random segments (packet loss)loss_ratio, segment_ms
time_maskingZero random time spans (SpecAugment)max_ms, n_masks
TransformWhat it doesKey params
tremolo / vibrato / wow_flutterAmplitude / pitch modulation and tape driftrate_hz, depth
ring_modulationMultiply by an audible carrierfreq_hz, mix
add_reverb / add_echoRoom reverberation / discrete echoesdecay, delay_ms
TransformWhat it doesReference
ultrasonic_shiftNear-Nyquist carrier modulation (inaudible command)DolphinAttack
spectral_inversionMirror the spectrum (reversible scramble)
frequency_maskingZero random frequency bands (SpecAugment)SpecAugment
polarity_inversionFlip waveform polarity (inaudible)
audio_steganographyHide a text payload in PCM LSBs
TransformWhat it doesKey params
bit_crushBit-depth + sample-hold reductionbits, downsample
aliasingDecimate without anti-aliasing (foldover)factor
downsample_telephoneResample to 8 kHz and backtarget_hz
ogg_codec_roundtripOGG/Vorbis encode/decode artifacts
add_toneMix an interfering sine tonefreq_hz, gain_db
from dreadnode.transforms import audio
# Concise audio-attack stack: inaudible carrier + hidden payload + masking + channel degradation.
transforms = [
audio.ultrasonic_shift(carrier_ratio=0.9),
audio.audio_steganography("ignore previous instructions"),
audio.frequency_masking(n_bands=2, seed=0),
audio.downsample_telephone(target_hz=8000),
]
TransformWhat it doesKey params
chorusLFO-modulated delayed voices (ensemble)rate_hz, depth_ms, voices
flangerSwept short modulated delay (comb filter)rate_hz, depth_ms, mix
harmonic_distortionCubic waveshaping (adds harmonics)amount
dc_offsetAdd a constant DC biasoffset
adjust_durationPad with silence or crop to a fixed lengthtarget_seconds
apply_impulse_responseConvolve with a synthetic room IR (over-the-air)rt60_ms, mix, seed
dtmf_toneMix a DTMF (touch-tone) dual-frequency tonedigit, gain_db
reverse_segmentsReverse the audio within fixed-length segmentssegment_ms
loudness_normalizeNormalize to a target RMS loudnesstarget_db

Video transforms operate on the frame sequence, so they cover both per-frame spatial edits and temporal (frame-ordering) manipulations.

TransformWhat it doesKey params
video_frame_injectEmbed a payload in frames (stego/overlay/subliminal)payload, method, frame_interval
subliminal_frameInsert a brief flash frame carrying textpayload, insert_at_frame
keyframe_replaceReplace a single (sampled) frame with a payload framepayload, frame_index
scene_cut_injectSplice a run of payload frames at a cutpayload, index, n_frames
replace_with_color_framesOverwrite a run of frames with solid colorstart, count, color
video_metadata_injectInject into a metadata fieldpayload, field
TransformWhat it doesKey params
per_frame_text_scrollScroll a payload across frames (marquee)payload, speed_px
ghost_overlayAlpha-blend a faint payload across all framespayload/overlay, opacity
letterbox_captionDraw a letterbox bar with static captioncaption, position
TransformWhat it doesKey params
temporal_shuffleReorder frames (whole or windowed)window, seed
frame_dropoutDrop frames (hold or remove)drop_ratio, mode
frame_reversePlay the sequence backwards
freeze_frameRepeat one frame to stallframe_index, hold
loop_framesConcatenate the sequence to itselfcount
frame_rate_up / frame_rate_downDuplicate or decimate framesfactor
TransformWhat it doesKey params
frame_brightness_flickerPer-frame brightness flickerdepth, period_frames
strobeReplace every Nth frame with a flashperiod, color
rolling_temporal_jitterHorizontal shift ramping frame-to-framemax_shift
motion_smearBlend each frame with its predecessorweight
frame_interpolate_blendInsert cross-fade framessteps
temporal_noiseIndependent per-frame noisescale, seed
frames_from_image_transformLift any image transform to all frames (SDK-only)image_transform, frame_interval
from dreadnode.transforms import image, video
# Concise video-attack stack: sampled-keyframe swap + distributed payload + temporal disruption.
transforms = [
video.keyframe_replace("INJECT", frame_index=0),
video.per_frame_text_scroll("secret instruction"),
video.temporal_shuffle(seed=0),
video.frames_from_image_transform(image.fog()), # apply an image corruption to every frame
]
TransformWhat it doesKey params
frame_jitterIndependent random spatial shift per frame (shake)max_shift, seed
color_flickerCycle a per-frame hue shift (chromatic flicker)depth, period_frames
stutterRandomly repeat frames (judder)repeat_ratio, seed
reverse_frame_segmentsReverse frame order within fixed windowssegment
speed_rampNon-uniform resampling: slow start, fast end
pip_injectComposite a small picture-in-picture payload panelpayload, position, size_ratio

The transforms above draw on published robustness benchmarks, augmentation libraries, and multimodal attack research. Citations are grouped by category.

  • Hendrycks & Dietterich, “Benchmarking Neural Network Robustness to Common Corruptions and Perturbations,” ICLR 2019 — arXiv:1903.12261 (ImageNet-C: shot_noise, speckle_noise, defocus_blur, glass_blur, zoom_blur, fog, snow, spatter).
  • Papakipos & Bitton (Meta AI), “AugLy: Data Augmentations for Robustness,” 2022 — github.com/facebookresearch/AugLy (image/audio/video augmentation families).
  • Buslaev et al., “Albumentations: Fast and Flexible Image Augmentations,” Information 2020 — albumentations.ai (optical/grid distortion, coarse dropout, ISO noise, rain/shadow, morphology, ringing).
  • Park et al., “SpecAugment: A Simple Data Augmentation Method for ASR,” Interspeech 2019 — arXiv:1904.08779 (time_masking, frequency_masking).
  • Jordal et al., audiomentationsgithub.com/iver56/audiomentations (filters, EQ, gain transitions, polarity inversion, aliasing, short noises).
  • Gong et al., “FigStep: Jailbreaking LVLMs via Typographic Visual Prompts,” AAAI 2025 — arXiv:2311.05608 (figstep_image).
  • Liu et al., “MM-SafetyBench,” ECCV 2024 — arXiv:2311.17600 (typographic_prompt).
  • Li et al., “HADES: Images are Achilles’ Heel of Alignment,” ECCV 2024 — arXiv:2403.09792.
  • Bailey et al., “Image Hijacks: Adversarial Images can Control Generative Models at Runtime,” ICML 2024 — arXiv:2309.00236.
  • Qi et al., “Visual Adversarial Examples Jailbreak Aligned LLMs,” AAAI 2024 — arXiv:2306.13213 (image_steganography, perturbation).
  • Zhang et al., “DolphinAttack: Inaudible Voice Commands,” CCS 2017 — arXiv:1708.09537 (ultrasonic_shift).
  • Carlini & Wagner, “Audio Adversarial Examples: Targeted Attacks on Speech-to-Text,” 2018 — arXiv:1801.01944.
  • Schönherr et al., “Adversarial Attacks Against ASR via Psychoacoustic Hiding,” NDSS 2019 — arXiv:1808.05665.
  • Kang et al., “AdvWave: Stealthy Adversarial Jailbreak Attack against Large Audio-Language Models,” 2024 — arXiv:2412.08608.
  • Song et al., “AudioJailbreak: Jailbreak Attacks against End-to-End Large Audio-Language Models,” 2025 — arXiv:2505.14103.
  • Li et al., “FMM-Attack: Flow-based Multi-modal Adversarial Attack on Video-based LLMs,” 2024 — arXiv:2403.13507.
  • “Poisoning Prompt-Guided Sampling in Video LLMs,” 2025 — arXiv:2509.20851.
  • “Failures to Surface Harmful Contents in Video LLMs,” 2025 — arXiv:2508.10974.