Remix actions

Every edit you can apply to a project, and how to run them.

A remix action is a single edit applied to a project after a workflow builds it. You send an ordered list of actions; each runs asynchronously as its own remix action, in request order. This page documents every action type and the two ways to run them.

The remixActions array is optional, and so is each action type within it. There are six action types (SET_BACKGROUND_MUSIC, SET_LOGO, ENABLE_CAPTIONS, DISABLE_CAPTIONS, ADD_TRANSITIONS, EDIT_WITH_AGENT); a given array entry is exactly one of them, picked by its type. You only include the actions you want. In the API reference each type is shown as a variant of the remixActions items, so pick the ones that fit your video.

Some actions pair naturally with specific workflows. These are recommendations, not requirements:

WorkflowRecommended actionsWhy
Script to videoENABLE_CAPTIONS, SET_BACKGROUND_MUSIC, ADD_TRANSITIONS, SET_LOGOScript to video has no native caption-style or logo fields, so captions styling, a music bed, transitions between sections, and a logo overlay are added here.
Voiceover to videoSET_BACKGROUND_MUSIC, ADD_TRANSITIONS, EDIT_WITH_AGENTCaptions and a logo are set directly with the captionStyle and logoFileId request fields; use remix actions for a music bed, transitions, or open-ended edits.
Slideshow to videoADD_TRANSITIONS, SET_BACKGROUND_MUSIC, EDIT_WITH_AGENTTransitions between slides are the highest-impact polish for a deck; captions and a logo have native fields, so remix actions cover transitions, music, and natural-language edits.

storyboard-to-video does not accept remix actions.

Running remix actions

There are two entry points:

  • In a workflow request, via the remixActions array. Each action runs after the video is built. The workflow response returns one remix action id per entry in remixActionIds.
  • On an existing project, via POST /v1/projects/{projectId}/remix. The response returns { projectId, projectUrl, remixActionIds }.

Pass saveAsNewProject: true on the remix endpoint to duplicate the project first and apply the edits to the copy, leaving the original untouched. The response projectId is then the copy.

Tracking status

Poll GET /v1/projects/{projectId}/remix-actions to list every remix action applied to a project, most recent first. Each entry includes its remixActionId, type, status (pending, running, succeeded, failed, cancelled), and progressPercentage.

Action types

Set background music

SET_BACKGROUND_MUSIC sets, replaces, or removes the project’s background music track.

FieldTypeDescription
fileIdstring | nullFile id of an uploaded audio file to use as music. Upload via the Files API first. Pass null to remove the existing music.
volumenumber | nullVolume from 0 (silent) to 1 (full). Omit or pass null to keep the current volume.

SET_LOGO sets, replaces, or removes the logo overlay.

FieldTypeDescription
fileIdstring | nullFile id of an uploaded image to overlay. Upload via the Files API first. Pass null to remove the existing logo.
positionstring | nullAnchor: TOP_LEFT, TOP_CENTER, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, or BOTTOM_RIGHT. Omit or pass null to keep the current position.
sizePercentnumber | nullLogo width as a percentage of the video width. Omit or pass null to keep the current size.

Enable captions

ENABLE_CAPTIONS shows captions on every captionable section. Optionally override the caption style.

FieldTypeDescription
captionStyleobject | nullCaption styling to apply. Omit or pass null to show captions with the current style. Any provided field overrides that field; omitted fields keep their current value.

Disable captions

DISABLE_CAPTIONS hides captions on every captionable section. It takes no additional fields.

Add transitions

ADD_TRANSITIONS stamps transitions across the project. It is not per-boundary: each field you set is applied uniformly to every boundary in that scope, replacing any transition already there. There are two independent scopes, and a scope you omit (or set to null) is left untouched. To change transitions on specific scenes only, use EDIT_WITH_AGENT instead.

Each style is one of DYNAMIC (auto-varies the style from one boundary to the next), NONE (removes transitions in that scope), FADE, RISE, PAN, POP, or WIPE (the same fixed style on every boundary in that scope).

FieldTypeDescription
sectionTransitionstring | nullTransition applied at every boundary between sections, replacing any existing section transitions. Omit or pass null to leave section transitions untouched.
assetTransitionstring | nullTransition applied at every boundary between base-layer assets within sections, replacing any existing asset transitions. Omit or pass null to leave asset transitions untouched.

Edit with agent

EDIT_WITH_AGENT applies an open-ended, natural-language edit. An editing agent interprets the prompt, makes the changes, validates them, and visually checks the result. It is well suited to tasks like replacing placeholder copy with your own text.

FieldTypeDescription
promptstringRequired. A natural-language description of the edit to make.
modestringMINOR_EDIT (default) makes targeted changes while keeping the structure. RETHINK re-storyboards the video: it selects which scenes to keep and their order, then edits each in parallel.
targetDurationSecondsnumber | nullOptional soft ceiling on the rebuilt video’s duration, in seconds. Only used when mode is RETHINK.

Example

Apply music and a logo to an existing project, then poll for completion:

1import { VideoGenClient } from "@videogen/sdk";
2
3const client = new VideoGenClient({ token: process.env.VIDEOGEN_API_KEY });
4
5const { remixActionIds } = await client.projects.remixProject({
6 projectId,
7 remixActions: [
8 { type: "SET_BACKGROUND_MUSIC", fileId: "vg_file_...", volume: 0.3 },
9 { type: "SET_LOGO", fileId: "vg_file_...", position: "BOTTOM_RIGHT", sizePercent: 12 },
10 { type: "EDIT_WITH_AGENT", prompt: "Replace the headline with 'Summer Sale - 40% off'" },
11 ],
12});
13
14const { remixActions } = await client.projects.listProjectRemixActions({ projectId });
15console.log(remixActions.map((action) => `${action.type}: ${action.status}`));

Endpoint reference

MethodPathPurpose
POST/v1/projects/{projectId}/remixApply an ordered list of remix actions. Returns one remix action id per action.
GET/v1/projects/{projectId}/remix-actionsList remix actions for a project, most recent first, with status and progress.