Video editing

Part of the video skill: these tools appear once it is loaded — by blender_enable_skill with video, or by find_tool when a search returns one of them.

blender_sequencer_info

The timeline: every strip with its channel, frames, trims, blend and source, plus the frame range, fps, resolution and output format.

read-only · every call adds · stays inside Blender.

Takes no parameters.

JSON Schema
{
  "type": "object",
  "properties": {}
}

blender_sequencer_add_strip

Adds a strip to the timeline: a movie (with its sound), an image or an image sequence from a folder or file list, a sound file, a 3D scene, a solid colour or a text title, placed on a channel from a frame, with optional fades, transform and blend.

only adds · every call adds · stays inside Blender.

Parameter Type Required Default Description
type string yes — movie, image, sound, scene (renders a 3D scene into the timeline), color or text.
name string? — null Name for the strip.
path string? — null movie, image, sound: absolute path of the file.
scene string? — null scene: name of the scene to render into the strip; the current scene otherwise.
channel integer? — null Timeline channel (row), 1 and up; the first free one otherwise.
frameStart integer? — null Frame the strip starts on; the scene start otherwise.
length integer? — null color, text, image: length in frames.
text string? — null text: the text to show.
fontSize number? — null text: font size in pixels.
color array? — null color: [r, g, b]; text: [r, g, b] or [r, g, b, a].
location array? — null text: [x, y] position, 0 to 1 from the bottom-left.
withSound boolean — true movie: also add its audio as a sound strip on the next channel.
blendType string? — null How the strip mixes with the channels below: REPLACE, ALPHA_OVER (the default for effects), CROSS, ADD, MULTIPLY, SCREEN, OVERLAY, DIFFERENCE and the other blend modes.
opacity number? — null Opacity 0 to 1.
transform object? — null Picture placement: offset, scale, rotation, crop and flip.
fade object? — null Fades in frames; opacity for pictures, volume for sound.
settings object? — null Further strip properties by Python name, e.g. text {"use_box": true, "wrap_width": 0.8}, SPEED {"speed_factor": 2}, WIPE {"transition_type": "CLOCK"}, GAUSSIAN_BLUR {"size_x": 20, "size_y": 20}, GLOW {"threshold": 0.5}.
JSON Schema
{
  "type": "object",
  "properties": {
    "type": {
      "description": "movie, image, sound, scene (renders a 3D scene into the timeline), color or text.",
      "type": "string"
    },
    "name": {
      "description": "Name for the strip.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "path": {
      "description": "movie, image, sound: absolute path of the file.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "scene": {
      "description": "scene: name of the scene to render into the strip; the current scene otherwise.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "channel": {
      "description": "Timeline channel (row), 1 and up; the first free one otherwise.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "frameStart": {
      "description": "Frame the strip starts on; the scene start otherwise.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "length": {
      "description": "color, text, image: length in frames.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "text": {
      "description": "text: the text to show.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "fontSize": {
      "description": "text: font size in pixels.",
      "type": [
        "number",
        "null"
      ],
      "default": null
    },
    "color": {
      "description": "color: [r, g, b]; text: [r, g, b] or [r, g, b, a].",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": "number"
      },
      "default": null
    },
    "location": {
      "description": "text: [x, y] position, 0 to 1 from the bottom-left.",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": "number"
      },
      "default": null
    },
    "withSound": {
      "description": "movie: also add its audio as a sound strip on the next channel.",
      "type": "boolean",
      "default": true
    },
    "blendType": {
      "description": "How the strip mixes with the channels below: REPLACE, ALPHA_OVER (the default for effects), CROSS, ADD, MULTIPLY, SCREEN, OVERLAY, DIFFERENCE and the other blend modes.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "opacity": {
      "description": "Opacity 0 to 1.",
      "type": [
        "number",
        "null"
      ],
      "default": null
    },
    "transform": {
      "description": "Picture placement: offset, scale, rotation, crop and flip.",
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "offset": {
          "description": "[x, y] offset in pixels.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "number"
          }
        },
        "scale": {
          "description": "[sx, sy] scale factors.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "number"
          }
        },
        "rotation": {
          "description": "Rotation in degrees.",
          "type": [
            "number",
            "null"
          ]
        },
        "crop": {
          "description": "[left, right, bottom, top] crop in pixels.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "integer"
          }
        },
        "flip": {
          "description": "[x, y] mirror flags.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "boolean"
          }
        }
      },
      "default": null
    },
    "fade": {
      "description": "Fades in frames; opacity for pictures, volume for sound.",
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "in": {
          "description": "Frames of fade-in.",
          "type": [
            "integer",
            "null"
          ]
        },
        "out": {
          "description": "Frames of fade-out.",
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "default": null
    },
    "settings": {
      "description": "Further strip properties by Python name, e.g. text {\u0022use_box\u0022: true, \u0022wrap_width\u0022: 0.8}, SPEED {\u0022speed_factor\u0022: 2}, WIPE {\u0022transition_type\u0022: \u0022CLOCK\u0022}, GAUSSIAN_BLUR {\u0022size_x\u0022: 20, \u0022size_y\u0022: 20}, GLOW {\u0022threshold\u0022: 0.5}.",
      "type": [
        "object",
        "null"
      ],
      "default": null
    }
  },
  "required": [
    "type"
  ]
}

blender_sequencer_add_effect

Adds a transition or effect strip: a cross-fade or wipe between two strips where they overlap, a blur, glow or speed change on one, or a generated colour or text.

only adds · every call adds · stays inside Blender.

Parameter Type Required Default Description
type string yes — Transitions between two strips: CROSS, GAMMA_CROSS, WIPE; mixes of two: ADD, SUBTRACT, MULTIPLY, ALPHA_OVER, ALPHA_UNDER, COLORMIX; on one strip: GLOW, GAUSSIAN_BLUR, SPEED, ADJUSTMENT; generators: COLOR, TEXT; special: MULTICAM, COMPOSITOR.
inputs array? — null Input strip names: two for transitions and mixes, one for GLOW, GAUSSIAN_BLUR, SPEED and ADJUSTMENT, none for COLOR and TEXT.
name string? — null Name for the effect strip.
channel integer? — null Timeline channel; the first free one otherwise.
frameStart integer? — null Start frame; where the inputs overlap otherwise.
length integer? — null Length in frames; the overlap of the inputs otherwise.
settings object? — null Further strip properties by Python name, e.g. text {"use_box": true, "wrap_width": 0.8}, SPEED {"speed_factor": 2}, WIPE {"transition_type": "CLOCK"}, GAUSSIAN_BLUR {"size_x": 20, "size_y": 20}, GLOW {"threshold": 0.5}.
JSON Schema
{
  "type": "object",
  "properties": {
    "type": {
      "description": "Transitions between two strips: CROSS, GAMMA_CROSS, WIPE; mixes of two: ADD, SUBTRACT, MULTIPLY, ALPHA_OVER, ALPHA_UNDER, COLORMIX; on one strip: GLOW, GAUSSIAN_BLUR, SPEED, ADJUSTMENT; generators: COLOR, TEXT; special: MULTICAM, COMPOSITOR.",
      "type": "string"
    },
    "inputs": {
      "description": "Input strip names: two for transitions and mixes, one for GLOW, GAUSSIAN_BLUR, SPEED and ADJUSTMENT, none for COLOR and TEXT.",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": [
          "string",
          "null"
        ]
      },
      "default": null
    },
    "name": {
      "description": "Name for the effect strip.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "channel": {
      "description": "Timeline channel; the first free one otherwise.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "frameStart": {
      "description": "Start frame; where the inputs overlap otherwise.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "length": {
      "description": "Length in frames; the overlap of the inputs otherwise.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "settings": {
      "description": "Further strip properties by Python name, e.g. text {\u0022use_box\u0022: true, \u0022wrap_width\u0022: 0.8}, SPEED {\u0022speed_factor\u0022: 2}, WIPE {\u0022transition_type\u0022: \u0022CLOCK\u0022}, GAUSSIAN_BLUR {\u0022size_x\u0022: 20, \u0022size_y\u0022: 20}, GLOW {\u0022threshold\u0022: 0.5}.",
      "type": [
        "object",
        "null"
      ],
      "default": null
    }
  },
  "required": [
    "type"
  ]
}

blender_sequencer_update_strip

Moves, trims, mutes, fades, re-blends, transforms or renames a strip; changes text, colour or volume.

only adds · every call adds · stays inside Blender.

Parameter Type Required Default Description
name string yes — Strip name as blender_sequencer_info lists it.
channel integer? — null Move to this channel.
frameStart integer? — null Move the strip to start on this frame.
length integer? — null New length in frames (for images, colours, text and effects).
trimStart integer? — null Frames cut from the beginning of the source.
trimEnd integer? — null Frames cut from the end of the source.
mute boolean? — null Silence or hide the strip.
blendType string? — null How the strip mixes with the channels below: REPLACE, ALPHA_OVER (the default for effects), CROSS, ADD, MULTIPLY, SCREEN, OVERLAY, DIFFERENCE and the other blend modes.
opacity number? — null Opacity 0 to 1.
volume number? — null sound: volume, 1 is the source level.
text string? — null text: new text.
color array? — null color: new [r, g, b].
transform object? — null Picture placement: offset, scale, rotation, crop and flip.
fade object? — null Fades in frames; opacity for pictures, volume for sound.
settings object? — null Further strip properties by Python name, e.g. text {"use_box": true, "wrap_width": 0.8}, SPEED {"speed_factor": 2}, WIPE {"transition_type": "CLOCK"}, GAUSSIAN_BLUR {"size_x": 20, "size_y": 20}, GLOW {"threshold": 0.5}.
newName string? — null Rename the strip.
JSON Schema
{
  "type": "object",
  "properties": {
    "name": {
      "description": "Strip name as blender_sequencer_info lists it.",
      "type": "string"
    },
    "channel": {
      "description": "Move to this channel.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "frameStart": {
      "description": "Move the strip to start on this frame.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "length": {
      "description": "New length in frames (for images, colours, text and effects).",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "trimStart": {
      "description": "Frames cut from the beginning of the source.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "trimEnd": {
      "description": "Frames cut from the end of the source.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "mute": {
      "description": "Silence or hide the strip.",
      "type": [
        "boolean",
        "null"
      ],
      "default": null
    },
    "blendType": {
      "description": "How the strip mixes with the channels below: REPLACE, ALPHA_OVER (the default for effects), CROSS, ADD, MULTIPLY, SCREEN, OVERLAY, DIFFERENCE and the other blend modes.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "opacity": {
      "description": "Opacity 0 to 1.",
      "type": [
        "number",
        "null"
      ],
      "default": null
    },
    "volume": {
      "description": "sound: volume, 1 is the source level.",
      "type": [
        "number",
        "null"
      ],
      "default": null
    },
    "text": {
      "description": "text: new text.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "color": {
      "description": "color: new [r, g, b].",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": "number"
      },
      "default": null
    },
    "transform": {
      "description": "Picture placement: offset, scale, rotation, crop and flip.",
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "offset": {
          "description": "[x, y] offset in pixels.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "number"
          }
        },
        "scale": {
          "description": "[sx, sy] scale factors.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "number"
          }
        },
        "rotation": {
          "description": "Rotation in degrees.",
          "type": [
            "number",
            "null"
          ]
        },
        "crop": {
          "description": "[left, right, bottom, top] crop in pixels.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "integer"
          }
        },
        "flip": {
          "description": "[x, y] mirror flags.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "boolean"
          }
        }
      },
      "default": null
    },
    "fade": {
      "description": "Fades in frames; opacity for pictures, volume for sound.",
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "in": {
          "description": "Frames of fade-in.",
          "type": [
            "integer",
            "null"
          ]
        },
        "out": {
          "description": "Frames of fade-out.",
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "default": null
    },
    "settings": {
      "description": "Further strip properties by Python name, e.g. text {\u0022use_box\u0022: true, \u0022wrap_width\u0022: 0.8}, SPEED {\u0022speed_factor\u0022: 2}, WIPE {\u0022transition_type\u0022: \u0022CLOCK\u0022}, GAUSSIAN_BLUR {\u0022size_x\u0022: 20, \u0022size_y\u0022: 20}, GLOW {\u0022threshold\u0022: 0.5}.",
      "type": [
        "object",
        "null"
      ],
      "default": null
    },
    "newName": {
      "description": "Rename the strip.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    }
  },
  "required": [
    "name"
  ]
}

blender_sequencer_remove_strip

Removes one strip, or every strip with all=true.

may overwrite or delete · every call adds · stays inside Blender.

Parameter Type Required Default Description
name string? — null Strip to remove.
all boolean — false Remove every strip and start over.
JSON Schema
{
  "type": "object",
  "properties": {
    "name": {
      "description": "Strip to remove.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "all": {
      "description": "Remove every strip and start over.",
      "type": "boolean",
      "default": false
    }
  }
}

blender_sequencer_render

Encodes the timeline to a video file with FFmpeg: container by extension, codec, quality and audio codec, or whatever blender_sequencer_encode prepared. The frame range is fitted to the strips unless given. Long for big timelines: set a timeout that fits.

only adds · every call adds · stays inside Blender.

Parameter Type Required Default Description
path string yes — Absolute path of the video to write; the extension picks the container: .mp4, .mkv, .webm, .mov, .avi, .ogv.
codec string? — null H264 (the default), H265, AV1, WEBM (VP9), DNXHD, FFV1 and the rest FFmpeg offers.
quality string? — null LOSSLESS, PERC_LOSSLESS, HIGH, MEDIUM (the default), LOW, VERYLOW, LOWEST.
audioCodec string? — null AAC (the default), MP3, VORBIS, OPUS, FLAC, PCM or NONE.
fitRange boolean — true Set the frame range to cover every strip before encoding.
start integer? — null First frame to encode; overrides fitRange.
end integer? — null Last frame to encode; overrides fitRange.
fps integer? — null Frames per second.
resolutionX integer? — null Pixels along this edge, 1 to 4096.
resolutionY integer? — null Pixels along this edge, 1 to 4096.
timeoutSeconds integer — 600 Seconds to wait for Blender, 1 to 600.
JSON Schema
{
  "type": "object",
  "properties": {
    "path": {
      "description": "Absolute path of the video to write; the extension picks the container: .mp4, .mkv, .webm, .mov, .avi, .ogv.",
      "type": "string"
    },
    "codec": {
      "description": "H264 (the default), H265, AV1, WEBM (VP9), DNXHD, FFV1 and the rest FFmpeg offers.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "quality": {
      "description": "LOSSLESS, PERC_LOSSLESS, HIGH, MEDIUM (the default), LOW, VERYLOW, LOWEST.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "audioCodec": {
      "description": "AAC (the default), MP3, VORBIS, OPUS, FLAC, PCM or NONE.",
      "type": [
        "string",
        "null"
      ],
      "default": null
    },
    "fitRange": {
      "description": "Set the frame range to cover every strip before encoding.",
      "type": "boolean",
      "default": true
    },
    "start": {
      "description": "First frame to encode; overrides fitRange.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "end": {
      "description": "Last frame to encode; overrides fitRange.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "fps": {
      "description": "Frames per second.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "resolutionX": {
      "description": "Pixels along this edge, 1 to 4096.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "resolutionY": {
      "description": "Pixels along this edge, 1 to 4096.",
      "type": [
        "integer",
        "null"
      ],
      "default": null
    },
    "timeoutSeconds": {
      "description": "Seconds to wait for Blender, 1 to 600.",
      "type": "integer",
      "default": 600
    }
  },
  "required": [
    "path"
  ]
}