ComfyUI Video Stabilizer
ComfyUI Video Stabilizer is a custom node for stabilizing video inside ComfyUI.
It mainly has three features.
Stabilize camera shake in a video
Restore the original camera shake after stabilization
Add artificial camera shake
Installation
nomadoor/ComfyUI-Video-Stabilizer
Install it from ComfyUI Manager.
Video Stabilization
Use Video Stabilizer Classic or Video Stabilizer Flow for stabilization.
They provide the same functionality, but use different processing methods.
Flow is a little heavier, but performs much better, so I generally recommend Flow.
Video_Stabilizer_Flow.json
{
"id": "6b3d4697-4625-4ceb-b24e-042ff08d20a7",
"revision": 0,
"last_node_id": 16,
"last_link_id": 29,
"nodes": [
{
"id": 6,
"type": "VHS_VideoInfoLoaded",
"pos": [
1031.5880268082033,
5126.700023489094
],
"size": [
256.2392578125,
106
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [
{
"name": "video_info",
"type": "VHS_VIDEOINFO",
"link": 6
}
],
"outputs": [
{
"name": "fps🟦",
"type": "FLOAT",
"links": [
13,
21
]
},
{
"name": "frame_count🟦",
"type": "INT",
"links": null
},
{
"name": "duration🟦",
"type": "FLOAT",
"links": null
},
{
"name": "width🟦",
"type": "INT",
"links": null
},
{
"name": "height🟦",
"type": "INT",
"links": null
}
],
"properties": {
"Node name for S&R": "VHS_VideoInfoLoaded"
},
"widgets_values": {}
},
{
"id": 3,
"type": "VHS_LoadVideo",
"pos": [
588.6581159062798,
4966.700023489094
],
"size": [
403.1241508847537,
1005.2207487010894
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [
{
"name": "meta_batch",
"shape": 7,
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"shape": 7,
"type": "VAE",
"link": null
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
12
]
},
{
"name": "frame_count",
"type": "INT",
"links": null
},
{
"name": "audio",
"type": "AUDIO",
"links": null
},
{
"name": "video_info",
"type": "VHS_VIDEOINFO",
"links": [
6
]
}
],
"properties": {
"Node name for S&R": "VHS_LoadVideo"
},
"widgets_values": {
"video": "12701975_1080_1920_120fps.mp4",
"force_rate": 24,
"custom_width": 0,
"custom_height": 0,
"frame_load_cap": 121,
"skip_first_frames": 0,
"select_every_nth": 1,
"format": "AnimateDiff",
"videopreview": {
"hidden": false,
"paused": false,
"params": {
"filename": "12701975_1080_1920_120fps.mp4",
"type": "input",
"format": "video/mp4",
"force_rate": 24,
"custom_width": 0,
"custom_height": 0,
"frame_load_cap": 121,
"skip_first_frames": 0,
"select_every_nth": 1
}
}
}
},
{
"id": 13,
"type": "VHS_VideoCombine",
"pos": [
1637.438804655043,
4966.700023489094
],
"size": [
403.1241508847537,
1029.1096015728954
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 22
},
{
"name": "audio",
"shape": 7,
"type": "AUDIO",
"link": null
},
{
"name": "meta_batch",
"shape": 7,
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"shape": 7,
"type": "VAE",
"link": null
},
{
"name": "frame_rate",
"type": "FLOAT",
"widget": {
"name": "frame_rate"
},
"link": 21
}
],
"outputs": [
{
"name": "Filenames",
"type": "VHS_FILENAMES",
"links": null
}
],
"properties": {
"Node name for S&R": "VHS_VideoCombine"
},
"widgets_values": {
"frame_rate": 8,
"loop_count": 0,
"filename_prefix": "Video Stabilize",
"format": "video/h264-mp4",
"pix_fmt": "yuv420p",
"crf": 19,
"save_metadata": false,
"trim_to_audio": false,
"pingpong": false,
"save_output": true,
"videopreview": {
"hidden": false,
"paused": false,
"params": {
"filename": "Video Stabilize_00025.mp4",
"subfolder": "",
"type": "output",
"format": "video/h264-mp4",
"frame_rate": 24,
"workflow": "Video Stabilize_00025.png",
"fullpath": "/home/nomax/working-linux/ComfyUI-dev/output/Video Stabilize_00025.mp4"
}
}
}
},
{
"id": 10,
"type": "video_stabilizer_flow",
"pos": [
1329.002524203471,
4966.700023489094
],
"size": [
270,
266
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"label": "Frames",
"name": "frames",
"type": "IMAGE",
"link": 12
},
{
"name": "frame_rate",
"type": "FLOAT",
"widget": {
"name": "frame_rate"
},
"link": 13
}
],
"outputs": [
{
"name": "Stabilized Frames",
"type": "IMAGE",
"links": [
22
]
},
{
"name": "Padding Mask",
"type": "MASK",
"links": null
},
{
"name": "Motion Meta",
"type": "JSON",
"links": []
}
],
"properties": {
"Node name for S&R": "video_stabilizer_flow"
},
"widgets_values": [
16,
"crop_and_pad",
"similarity",
false,
0.7,
0.5,
0.6,
"#7F7F7F"
],
"color": "#232",
"bgcolor": "#353"
}
],
"links": [
[
6,
3,
3,
6,
0,
"VHS_VIDEOINFO"
],
[
12,
3,
0,
10,
0,
"IMAGE"
],
[
13,
6,
0,
10,
1,
"FLOAT"
],
[
21,
6,
0,
13,
4,
"FLOAT"
],
[
22,
10,
0,
13,
0,
"IMAGE"
]
],
"groups": [],
"config": {},
"extra": {
"ds": {
"scale": 0.6034931246089132,
"offset": [
37.04022585422607,
-4648.410084612637
]
},
"frontendVersion": "1.45.19",
"VHS_latentpreview": false,
"VHS_latentpreviewrate": 0,
"VHS_MetadataImage": true,
"VHS_KeepIntermediate": true
},
"version": 0.4
}
Parameters
Video Stabilizer Classic and Video Stabilizer Flow share the same parameters.
Parameter
Description
frame_rate
The input video FPS. This is used as the basis for temporal smoothing.
🎞️ framing_mode
Controls how to handle missing edges created by stabilization. This is an important parameter where the difference is easy to see in video.
transform_mode
Controls which transform model is used to estimate camera motion.
🔒 camera_lock
Pushes the result toward a much more fixed, tripod-like shot.
strength
Controls how much of the estimated camera motion is removed. 0.0 keeps the original motion almost as-is, while 1.0 applies stronger stabilization.
smooth
Controls how smooth the camera motion should become. Higher values suppress sudden shake more strongly.
keep_fov
Only applies when framing_mode is crop. Controls how much of the original field of view to preserve. 1.0 means less zoom, while 0.0 sacrifices FOV to remove borders.
padding_color
The color used for padding. If you use padding_mask for later inpaint / outpaint steps, the color itself is not very important.
🎞️ framing_mode
Original video
crop
crop_and_pad
expand
crop
Slightly zooms / crops the video so the empty borders are not visible.
The stronger the shake, the narrower the field of view becomes.
crop_and_pad
Preserves as much of the original field of view as possible and fills the missing areas with padding.
The padded area is also output as padding_mask.
expand
Does not crop at all, and expands the canvas as much as needed.
Most video editing tools only provide something close to crop, but with video generation models, you can use the padded area as a mask and outpaint it. That opens up some interesting workflows.
🔒 camera_lock
When camera_lock is enabled, it tries to make the video look closer to a fixed tripod shot, though it is not perfect.
Normal stabilization only makes the camera motion smoother, but camera_lock tries to stop the camera motion as much as possible.
Restoring Camera Shake
In video editing, processing can be more stable if you remove camera shake first, but leaving it removed can also erase the original sense of presence.
With Video Stabilizer Motion Apply, you can apply the shake removed by Video Stabilizer in reverse, restoring the original motion.
Video_Stabilizer_to_Motion_Apply.json
{
"id": "6b3d4697-4625-4ceb-b24e-042ff08d20a7",
"revision": 0,
"last_node_id": 18,
"last_link_id": 34,
"nodes": [
{
"id": 3,
"type": "VHS_LoadVideo",
"pos": [
588.6581159062798,
4964.549677016036
],
"size": [
403.1241508847537,
1005.2207487010894
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [
{
"name": "meta_batch",
"shape": 7,
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"shape": 7,
"type": "VAE",
"link": null
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
12
]
},
{
"name": "frame_count",
"type": "INT",
"links": null
},
{
"name": "audio",
"type": "AUDIO",
"links": null
},
{
"name": "video_info",
"type": "VHS_VIDEOINFO",
"links": [
6
]
}
],
"properties": {
"Node name for S&R": "VHS_LoadVideo"
},
"widgets_values": {
"video": "12224610-uhd_2160_3840_60fps.mp4",
"force_rate": 24,
"custom_width": 0,
"custom_height": 0,
"frame_load_cap": 121,
"skip_first_frames": 0,
"select_every_nth": 1,
"format": "AnimateDiff",
"videopreview": {
"hidden": false,
"paused": false,
"params": {
"filename": "12224610-uhd_2160_3840_60fps.mp4",
"type": "input",
"format": "video/mp4",
"force_rate": 24,
"custom_width": 0,
"custom_height": 0,
"frame_load_cap": 121,
"skip_first_frames": 0,
"select_every_nth": 1
}
}
}
},
{
"id": 13,
"type": "VHS_VideoCombine",
"pos": [
1990.6632365534408,
4964.549677016036
],
"size": [
403.1241508847537,
1029.1096015728954
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 32
},
{
"name": "audio",
"shape": 7,
"type": "AUDIO",
"link": null
},
{
"name": "meta_batch",
"shape": 7,
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"shape": 7,
"type": "VAE",
"link": null
},
{
"name": "frame_rate",
"type": "FLOAT",
"widget": {
"name": "frame_rate"
},
"link": 21
}
],
"outputs": [
{
"name": "Filenames",
"type": "VHS_FILENAMES",
"links": null
}
],
"properties": {
"Node name for S&R": "VHS_VideoCombine"
},
"widgets_values": {
"frame_rate": 8,
"loop_count": 0,
"filename_prefix": "Video Stabilize",
"format": "video/h264-mp4",
"pix_fmt": "yuv420p",
"crf": 19,
"save_metadata": false,
"trim_to_audio": false,
"pingpong": false,
"save_output": true,
"videopreview": {
"hidden": false,
"paused": false,
"params": {
"filename": "Video Stabilize_00028.mp4",
"subfolder": "",
"type": "output",
"format": "video/h264-mp4",
"frame_rate": 24,
"workflow": "Video Stabilize_00028.png",
"fullpath": "/home/nomax/working-linux/ComfyUI-dev/output/Video Stabilize_00028.mp4"
}
}
}
},
{
"id": 17,
"type": "video_stabilizer_motion_apply",
"pos": [
1651.331470675339,
4964.549677016036
],
"size": [
294.8951171875,
194
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{
"label": "Frames",
"name": "frames",
"type": "IMAGE",
"link": 30
},
{
"label": "Motion Meta",
"name": "motion_meta",
"type": "JSON",
"link": 31
}
],
"outputs": [
{
"name": "Frames",
"type": "IMAGE",
"links": [
32
]
},
{
"name": "Padding Mask",
"type": "MASK",
"links": null
},
{
"name": "Meta",
"type": "JSON",
"links": null
}
],
"properties": {
"Node name for S&R": "video_stabilizer_motion_apply"
},
"widgets_values": [
"crop",
"bilinear",
"#7F7F7F",
0,
"Standard"
],
"color": "#232",
"bgcolor": "#353"
},
{
"id": 18,
"type": "VHS_VideoCombine",
"pos": [
1651.331470675339,
5229.276168427855
],
"size": [
261.8253251055752,
766.8181233731946
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 33
},
{
"name": "audio",
"shape": 7,
"type": "AUDIO",
"link": null
},
{
"name": "meta_batch",
"shape": 7,
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"shape": 7,
"type": "VAE",
"link": null
},
{
"name": "frame_rate",
"type": "FLOAT",
"widget": {
"name": "frame_rate"
},
"link": 34
}
],
"outputs": [
{
"name": "Filenames",
"type": "VHS_FILENAMES",
"links": null
}
],
"properties": {
"Node name for S&R": "VHS_VideoCombine"
},
"widgets_values": {
"frame_rate": 8,
"loop_count": 0,
"filename_prefix": "Video Stabilize",
"format": "video/h264-mp4",
"pix_fmt": "yuv420p",
"crf": 19,
"save_metadata": false,
"trim_to_audio": false,
"pingpong": false,
"save_output": false,
"videopreview": {
"hidden": false,
"paused": false,
"params": {
"filename": "Video Stabilize_00001.mp4",
"subfolder": "",
"type": "temp",
"format": "video/h264-mp4",
"frame_rate": 24,
"workflow": "Video Stabilize_00001.png",
"fullpath": "/home/nomax/working-linux/ComfyUI-dev/temp/Video Stabilize_00001.mp4"
}
}
}
},
{
"id": 6,
"type": "VHS_VideoInfoLoaded",
"pos": [
1037.350640790201,
5124.549677016036
],
"size": [
256.2392578125,
106
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [
{
"name": "video_info",
"type": "VHS_VIDEOINFO",
"link": 6
}
],
"outputs": [
{
"name": "fps🟦",
"type": "FLOAT",
"links": [
13,
21,
34
]
},
{
"name": "frame_count🟦",
"type": "INT",
"links": null
},
{
"name": "duration🟦",
"type": "FLOAT",
"links": null
},
{
"name": "width🟦",
"type": "INT",
"links": null
},
{
"name": "height🟦",
"type": "INT",
"links": null
}
],
"properties": {
"Node name for S&R": "VHS_VideoInfoLoaded"
},
"widgets_values": {}
},
{
"id": 10,
"type": "video_stabilizer_flow",
"pos": [
1336.894821984737,
4964.549677016036
],
"size": [
270,
266
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"label": "Frames",
"name": "frames",
"type": "IMAGE",
"link": 12
},
{
"name": "frame_rate",
"type": "FLOAT",
"widget": {
"name": "frame_rate"
},
"link": 13
}
],
"outputs": [
{
"name": "Stabilized Frames",
"type": "IMAGE",
"links": [
30,
33
]
},
{
"name": "Padding Mask",
"type": "MASK",
"links": null
},
{
"name": "Motion Meta",
"type": "JSON",
"links": [
31
]
}
],
"properties": {
"Node name for S&R": "video_stabilizer_flow"
},
"widgets_values": [
16,
"expand",
"similarity",
false,
0.7,
0.5,
0.6,
"#7F7F7F"
],
"color": "#232",
"bgcolor": "#353"
}
],
"links": [
[
6,
3,
3,
6,
0,
"VHS_VIDEOINFO"
],
[
12,
3,
0,
10,
0,
"IMAGE"
],
[
13,
6,
0,
10,
1,
"FLOAT"
],
[
21,
6,
0,
13,
4,
"FLOAT"
],
[
30,
10,
0,
17,
0,
"IMAGE"
],
[
31,
10,
2,
17,
1,
"JSON"
],
[
32,
17,
0,
13,
0,
"IMAGE"
],
[
33,
10,
0,
18,
0,
"IMAGE"
],
[
34,
6,
0,
18,
4,
"FLOAT"
]
],
"groups": [],
"config": {},
"extra": {
"ds": {
"scale": 0.8032493488544642,
"offset": [
-725.0202624189589,
-4768.080853647571
]
},
"frontendVersion": "1.45.19",
"VHS_latentpreview": false,
"VHS_latentpreviewrate": 0,
"VHS_MetadataImage": true,
"VHS_KeepIntermediate": true
},
"version": 0.4
}
If you stabilized with crop or crop_and_pad, pixels that were already cropped away cannot be recovered. If you plan to restore the shake later, I recommend using expand for the first stabilization step.
Adding Artificial Camera Shake
This is not limited to AI-generated video, but when camera work is too smooth, it can feel a little CG-like.
By intentionally adding camera shake, you can create a stronger sense of presence and rawness.
Video_Stabilizer_Shake.json
{
"id": "c4a0a995-ecdc-4446-b4b3-79c2462c8d0f",
"revision": 0,
"last_node_id": 20,
"last_link_id": 19,
"nodes": [
{
"id": 6,
"type": "VHS_VideoInfoLoaded",
"pos": [
1032.1843366759986,
5183.054739756548
],
"size": [
256.2392578125,
106
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [
{
"name": "video_info",
"type": "VHS_VIDEOINFO",
"link": 6
}
],
"outputs": [
{
"name": "fps🟦",
"type": "FLOAT",
"links": [
8,
11
]
},
{
"name": "frame_count🟦",
"type": "INT",
"links": null
},
{
"name": "duration🟦",
"type": "FLOAT",
"links": null
},
{
"name": "width🟦",
"type": "INT",
"links": null
},
{
"name": "height🟦",
"type": "INT",
"links": null
}
],
"properties": {
"Node name for S&R": "VHS_VideoInfoLoaded"
},
"widgets_values": {}
},
{
"id": 11,
"type": "video_stabilizer_motion_apply",
"pos": [
1641.247135511922,
4996.885283224809
],
"size": [
294.8951171875,
194
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"label": "Frames",
"name": "frames",
"type": "IMAGE",
"link": 12
},
{
"label": "Motion Meta",
"name": "motion_meta",
"type": "JSON",
"link": 13
}
],
"outputs": [
{
"name": "Frames",
"type": "IMAGE",
"links": [
14
]
},
{
"name": "Padding Mask",
"type": "MASK",
"links": null
},
{
"name": "Meta",
"type": "JSON",
"links": null
}
],
"properties": {
"Node name for S&R": "video_stabilizer_motion_apply"
},
"widgets_values": [
"crop",
"bilinear",
"#7F7F7F",
0,
"Standard"
],
"color": "#232",
"bgcolor": "#353"
},
{
"id": 3,
"type": "VHS_LoadVideo",
"pos": [
566.0962011978545,
4996.885283224809
],
"size": [
444.68014904172344,
1079.3204064228532
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [
{
"name": "meta_batch",
"shape": 7,
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"shape": 7,
"type": "VAE",
"link": null
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
9,
12
]
},
{
"name": "frame_count",
"type": "INT",
"links": null
},
{
"name": "audio",
"type": "AUDIO",
"links": null
},
{
"name": "video_info",
"type": "VHS_VIDEOINFO",
"links": [
6
]
}
],
"properties": {
"Node name for S&R": "VHS_LoadVideo"
},
"widgets_values": {
"video": "7578123-uhd_2160_3840_24fps.mp4",
"force_rate": 0,
"custom_width": 1024,
"custom_height": 0,
"frame_load_cap": 121,
"skip_first_frames": 0,
"select_every_nth": 1,
"format": "AnimateDiff",
"videopreview": {
"hidden": false,
"paused": false,
"params": {
"filename": "7578123-uhd_2160_3840_24fps.mp4",
"type": "input",
"format": "video/mp4",
"force_rate": 0,
"custom_width": 0,
"custom_height": 0,
"frame_load_cap": 121,
"skip_first_frames": 0,
"select_every_nth": 1
}
}
}
},
{
"id": 5,
"type": "VHS_VideoCombine",
"pos": [
1970.3092519356228,
4996.885283224809
],
"size": [
446.50286515597736,
1107.7082285590845
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 14
},
{
"name": "audio",
"shape": 7,
"type": "AUDIO",
"link": null
},
{
"name": "meta_batch",
"shape": 7,
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"shape": 7,
"type": "VAE",
"link": null
},
{
"name": "frame_rate",
"type": "FLOAT",
"widget": {
"name": "frame_rate"
},
"link": 8
}
],
"outputs": [
{
"name": "Filenames",
"type": "VHS_FILENAMES",
"links": null
}
],
"properties": {
"Node name for S&R": "VHS_VideoCombine"
},
"widgets_values": {
"frame_rate": 8,
"loop_count": 0,
"filename_prefix": "Video Stabilize",
"format": "video/h264-mp4",
"pix_fmt": "yuv420p",
"crf": 19,
"save_metadata": false,
"trim_to_audio": false,
"pingpong": false,
"save_output": true,
"videopreview": {
"hidden": false,
"paused": false,
"params": {
"filename": "Video Stabilize_00024.mp4",
"subfolder": "",
"type": "output",
"format": "video/h264-mp4",
"frame_rate": 23.976023976023978,
"workflow": "Video Stabilize_00024.png",
"fullpath": "/home/nomax/working-linux/ComfyUI-dev/output/Video Stabilize_00024.mp4"
}
}
}
},
{
"id": 8,
"type": "video_stabilizer_shake_generator",
"pos": [
1322.5905937246994,
5118.478229940922
],
"size": [
284.4895425510215,
178
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"label": "Frames Context",
"name": "frames_context",
"type": "IMAGE",
"link": 9
},
{
"name": "frame_rate",
"type": "FLOAT",
"widget": {
"name": "frame_rate"
},
"link": 11
}
],
"outputs": [
{
"name": "Motion Meta",
"type": "JSON",
"links": [
13
]
}
],
"properties": {
"Node name for S&R": "video_stabilizer_shake_generator"
},
"widgets_values": [
16,
"handheld",
1,
1,
0,
"fixed"
],
"color": "#232",
"bgcolor": "#353"
}
],
"links": [
[
6,
3,
3,
6,
0,
"VHS_VIDEOINFO"
],
[
8,
6,
0,
5,
4,
"FLOAT"
],
[
9,
3,
0,
8,
0,
"IMAGE"
],
[
11,
6,
0,
8,
1,
"FLOAT"
],
[
12,
3,
0,
11,
0,
"IMAGE"
],
[
13,
8,
0,
11,
1,
"JSON"
],
[
14,
11,
0,
5,
0,
"IMAGE"
]
],
"groups": [],
"config": {},
"extra": {
"ds": {
"scale": 0.5486301132808329,
"offset": [
-17.814042429216784,
-4642.277349663411
]
},
"frontendVersion": "1.45.19",
"VHS_latentpreview": false,
"VHS_latentpreviewrate": 0,
"VHS_MetadataImage": true,
"VHS_KeepIntermediate": true
},
"version": 0.4
}
Video Stabilizer Shake Generator creates artificial camera motion, and Video Stabilizer Motion Apply applies that motion to the video.
Parameters
Parameter
Description
frame_rate
The input video FPS. Used as a fallback when FPS metadata is not available from the video.
style
The type of shake.
amount
The strength of the shake. Lower values are enough if you only want to add a little naturalness. Too much can easily make the video uncomfortable to watch.
speed
The speed of the shake. Lower it for slower handheld motion, or raise it for busier, finer shake.
seed
The random seed for the shake. Changing seed changes the shake pattern even with the same settings.
style
tripod
handheld
walking
action
vibration
tripod: Adds a very weak shake, close to a fixed camera.
handheld: Adds natural handheld-style motion.
walking: Adds vertical and horizontal shake like walking while filming.
action: Adds stronger, rougher motion.
vibration: Adds fine vibration.
There is also a node called Video Stabilizer Shake Generator Manual.
Instead of using presets, it lets you fine-tune the motion through internal parameters.
Motion Blur
Video Stabilizer Motion Apply can also add motion blur.
Adding a little motion blur makes the result feel closer to real camera footage.
Original video
Blur: 0
Blur: 1.00