Build with Video Editor.
Edit and assemble video: motion graphics, kinetic text, animated layers, captions, templates
Best for
Edit and assemble video: motion graphics, kinetic text, animated layers, captions, templates Use the playground to set up a single step, then open a workflow when you want to connect more tools.
Inputs explained
- Image (optional)
- Set the image used by this model. Type: image.
- Video (optional)
- Set the video used by this model. Type: video.
- Text (optional)
- Set the text used by this model. Type: text.
- Captions (optional)
- Set the captions used by this model. Type: json.
- Audio (optional)
- Set the audio used by this model. Type: audio.
- output (optional)
- Delivery size of the rendered MP4. A preset name ("high" = default quality, "ad" = under 8 MB, "email" = under 8 MB), or an object with ONE of { preset, maxSizeMB (1-2000), crf (1-51, higher = smaller, default 18), videoBitrate ("4000k") }. A size target is turned into a video bitrate from the render's duration, leaving room for audio and the container. Unset = default quality, often 20+ MB for a 10s grain-heavy 1080p cut. Type: string_or_object.
- thumbnailFrame (optional)
- Which frame becomes the `thumbnail` output (a JPG rendered after every successful render). A frame number (0-based, clamped to the last frame), "first" or "middle". Unset = the frame at 10% of the duration, which skips a black intro. Type: string_or_number.
Unlimited dynamic ports. Template mode: the ports (shot_N, captions, audio, wordTimestamps) come from the selected template's inputMappings, NOT from this static list. Read them over REST: GET /api/v1/remotion/templates lists every composition, GET /api/v1/remotion/templates/<templateId> returns one spec (Authorization: Bearer sk-..., scope workflows:read). Each inputMappings[] entry is { propPath, portId, portType, required }; portId IS the port id, wired as targetHandle "in-<portId>", and portType is what it accepts. SceneGraph mode: every {{token}} anywhere in the sceneGraph (media src OR text props like a headline/tagline) is a wireable port; declare it in data.inputs (isPort:true) and wire one upstream node per token via "in-<token>". N tokens = N inputs into one node; multiple text nodes each get their OWN token/port (never concat them into one string). Never bake a URL or literal copy when an upstream node can be wired. The sceneGraph authoring contract (the agent-facing doc plus a JSON Schema emitted from the same Zod object that validates it at run time) is published at GET /api/v1/remotion/scene-graph.
Tips before you run
Start with the default settings and change one input at a time. Keep the result you like on your board so the next step can use it.
If you add a reference file, use a link the workflow can read. Check the inputs and credit estimate on the board before starting a run.
Working with this model
Delivery size
By default the render is encoded at high quality, and a grain-heavy 10s
1080x1350 cut comes out around 20 MB. Ad uploads and email attachments want
under 8 MB, so set the node's config.output:
"ad"or"email": the file lands under 8 MB."high", or nothing: today's default quality.{ "maxSizeMB": 15 },{ "crf": 28 }(1 to 51, higher is smaller, default 18) or{ "videoBitrate": "4000k" }, ONE of them, for anything else.
In the Video Editor this is the Delivery select next to Render. A size
target is turned into a video bitrate from the render's duration, with 15%
kept back for the container and rate-control overshoot and 320k for audio, so
it is the duration that limits it: 8 MB holds a watchable cut of up to about
95 seconds. A longer one, or a bad value, fails the run with the reason before
anything is rendered, shadow runs included. If the finished file still comes
out over its target, the result says so: sizeBytes, overTarget: true and
a warning, never a silent success. POST /api/v1/render/remotion/render
takes the same output field.
Thumbnail
Every successful run of the node also fills the thumbnail output with a JPG still of
the composition, stored on the CDN, so a wire from it reaches an image node
without a frame extractor. By default the still is the frame at 10% of the
duration, which skips a black intro. Set config.thumbnailFrame to a frame
number (from 0, clamped to the last frame), "first" or "middle" to pick
another. A bad value fails the run before anything is rendered. The still costs
no credits, and if it fails the video is still delivered: thumbnail is left
empty and a warning says why.
Common questions
How do I use Video Editor on Wireflow?
Set the inputs above and choose Open in a workflow. Sign in to save your board, then check its credit estimate before you run.
Can I use Video Editor through an API?
Yes. Save a workflow with this model, then call the Wireflow run API with its workflow ID. The API tab has examples you can copy.
What changes the credit price?
The price shown uses the model defaults. Your inputs and model settings can change the total. The workflow shows an estimate before you run.
Can I connect this to another model?
Yes. Open it in a workflow and connect its output to another node with a matching input type.