Home/Embeddable video recorder
Embeddable video recorder

An embeddable video recorder your users can use without your API key

Add <video-piper-recorder> to a page and your customers can record their screen, their camera or both, or pick a file, and upload it to your account. Your server hands the page a one-video upload token.

What the recorder does

The recorder lets your customers' users record the screen, the camera or both (or pick a file) on your site and send it to your account. It uploads while they record, so processing starts the moment they stop, then offers a review step with Upload or Retake. The recording becomes an ordinary video, so everything else in the API applies to it, including captions and trimming.

It is a custom element with its own shadow styles, about 8.5 KB gzipped, that fills its container's width. In screen + camera mode it shows a layout picker, covering the camera's corner and size or side by side, and the live preview matches how the worker will compose the video. See the screen recording API for what happens after upload.

The token model

Your API key must never reach a browser. Instead, your server makes a short-lived upload token that can upload one video and nothing else:

// 1. Your server (Node.js): an endpoint that makes a token
app.post("/api/upload-token", async (req, res) => {   // check the user is signed in, as you need
  const r = await fetch(`${API}/upload-tokens`, { method: "POST",
    headers: { Authorization: `Bearer ${API_KEY}`, "Content-Type": "application/json" },
    body: JSON.stringify({ expiresIn: 300, maxSeconds: 600, metadata: { userId: String(req.user.id) } }) });
  res.status(r.status).json(await r.json());   // { uploadToken: "vpu_…", … }
});
<!-- 2. Your page: the recorder asks token-url for a fresh token when someone starts -->
<script src="https://videopiper.com/recorder/recorder.js"></script>
<video-piper-recorder token-url="/api/upload-token" max-seconds="600"></video-piper-recorder>
<script>
  document.querySelector("video-piper-recorder")
    .addEventListener("vp-uploaded", (e) => console.log("uploaded", e.detail.videoId));
</script>

These are the documentation's examples, which also include an ASP.NET Core version of the endpoint. Token settings are all optional and fixed by your server, so the browser can't change them: expiresIn (60 to 86400 seconds), maxSeconds (the video is trimmed to this length), maxBytes, maxHeight, captions and metadata.

Attributes and events

AttributeWhat it does
token-url or upload-tokenYour endpoint for a fresh token when someone starts (recommended), or a token you made when the page loaded.
modesAny of screen+camera, screen, camera, file; modes the browser can't do are hidden.
layout, layoutsThe starting layout for screen + camera (pip or side-by-side) and which layouts people may choose, or none to hide the picker.
max-seconds, review, waitStop recording at this length; upload immediately instead of reviewing; keep checking until processed, then fire vp-ready.

Events are vp-state, vp-progress, vp-uploaded, vp-ready, vp-error (with a message fit to show) and vp-layout-change. Theme it with the custom properties --vp-accent, --vp-panel, --vp-line and --vp-text.

Prefer to see it first? Your account page has the snippets filled in with your addresses, and a Try the recorder button that makes a 15-minute token so the video lands in your list.

Which plans include the recorder

Recording the screen, camera or both, with upload while recording, needs Pro or Scale. Picking a file to upload works in the component on every plan.

PlanPriceProcessing minutesMax qualityRecording
Free$0/mo30720pNot included
Starter$49/mo4001080pNot included
Pro$199/mo1,5004KIncluded
Scale$699/mo6,0004KIncluded

Usage beyond a paid plan is billed at $0.09 per processing minute, $0.15 per GB-month of storage and $0.55 per GB of delivery. Full details are on the pricing page.

In the documentation

Frequently asked questions

How does the recorder avoid exposing my API key?

Your server calls POST /upload-tokens with the key and passes the page a token that can upload exactly one video. With it the browser can create that upload, send its parts, complete or abort it and read its status. Anything else answers 403 UPLOAD_TOKEN_SCOPE, and a second video answers 409 UPLOAD_TOKEN_USED.

What can people record?

Screen plus camera, screen only, camera only, or they can pick a file. Set the modes attribute to limit the choices. Screen recording works in desktop Chrome, Edge, Firefox and Safari, and the browser asks for permission.

Can I control how screen and camera are combined?

Yes. In screen + camera mode people can choose the camera's corner and size or side by side, with a live preview that matches the final video. Set layout for the default, and layouts to restrict the choice or hide it.

How does my server know a recording is ready?

The page gets vp-uploaded and, with the wait attribute, vp-ready events. Your server also gets the usual video.ready webhook, carrying the metadata you put on the token, such as your user's ID.

Which plans include the recorder?

Recording needs Pro or Scale. Picking a file works on every plan.

Start building with Video Piper

Create a free account with just your email, grab an API key and make your first request in minutes.