Core tools only
Trim, crop, resize, rotate, remove audio, convert, and extract frame are the supported embed targets.
Developer docs
Use iframe embeds for tutorials, support content, landing pages, or product docs, then control the tool through a small postMessage API.
The embed keeps a tiny vdoflow shell, built-in library access, local processing, and export flow inside the iframe. For broad iframe compatibility, embed routes run the single-thread FFmpeg runtime, so heavy jobs may be slower than the main site.
Choose a vdoflow tool, set any supported URL parameters, and copy the exact iframe snippet for that configuration.
Embed URL: /embed/trim-video
Source page: /trim-video
Copy the exact iframe snippet for the tool and parameter combination you selected, including the tiny shell and library access.
<iframe
title="vdoflow embedded video tool"
src="https://vdoflow.com/embed/trim-video"
width="100%"
height="760"
style="border:0;"
loading="lazy"
allow="clipboard-write"
></iframe>Embeds are supported only for the core vdoflow tools. URL parameters map directly to existing tool presets, and embed routes always use the single-thread FFmpeg runtime for compatibility.
Trim, crop, resize, rotate, remove audio, convert, and extract frame are the supported embed targets.
Only parameters already recognized by the tool are included in the generator, so the embed URL stays valid.
Each embed includes compact vdoflow branding plus direct library access without loading a file automatically.
All messages use the same envelope: `{ source, version, type, toolId, requestId, payload }`.
Use these snippets as the baseline integration.
iframe.contentWindow.postMessage({
source: "vdoflow-embed",
version: 1,
type: "vdoflow:connect",
toolId: "trim",
requestId: "connect-1",
payload: {}
}, "*");iframe.contentWindow.postMessage({
source: "vdoflow-embed",
version: 1,
type: "vdoflow:load-files",
toolId: "trim",
requestId: "load-1",
payload: {
files: [file],
mode: "replace"
}
}, "*");window.addEventListener("message", (event) => {
if (event.data?.source !== "vdoflow-embed") return;
switch (event.data.type) {
case "vdoflow:ready":
case "vdoflow:file-loaded":
case "vdoflow:export-started":
case "vdoflow:export-failed":
case "vdoflow:export-complete":
console.log(event.data);
break;
}
});