ScalebrowserDOCS

Videos

What the agent did, as a film: recording without the page noticing, rendering into a finished video, presets for how it looks, and a share link that can be revoked.

Two occasions, one apparatus. A proof video shows a customer or an auditor what really happened. A demo video shows a prospect what the product does.

The one rule that outranks the feature

The page must not be able to tell it is being recorded. Not "as little as possible": measured against a control run with no recording, inside the control's own spread.

That is not a formality. An agent whose input rhythm measurably changes the moment somebody records has opened a new axis on which a page can tell it from a person. The value of a video is always smaller than the damage of such an axis.

The capture quiets itself while you type or click, which is what keeps it out of the way.

Recording

record is in the default core set, because a tool behind a profile nobody enables is a tool that does not exist.

ActionWhat it does
startBegin recording.
markPut a chapter on the timeline here. label is the heading, say is the narration.
stopEnd it and keep everything recorded so far.

Marks are cheap; set them. A chapter nobody marked has to be guessed later, and guessing produces a film whose sections do not match the work. Mark whenever you begin a distinct part of the task.

Recording renders nothing and never returns a file.

Rendering

video, also in core, turns a finished recording into a file.

ActionWhat it does
renderQueue the work. Answers at once with a video id and the plan, and runs in the background, so releasing the profile is fine.
statusThe whole video row with its progress, and once it is done, a ready address for each file.
listThis profile's videos, running renders included.

Pass plan_only to see what would be rendered without rendering it.

The finished file is one plain request away. When a video is done, status answers files, one entry per file (video, poster, subtitles and the rest), each with a url and an expires_at. A GET on that address returns the file without any token, and it keeps working until expires_at; ask status again for a fresh one. While a video is still queued or rendering, files is empty.

Progress rides on the event stream inside video_changed, published every 2 percent or 2 seconds, rather than as a separate job event that could disagree with the row.

What the film looks like

A video preset decides the framing: how the camera moves, whether it zooms the whole canvas or a card, how the cursor is drawn, whether there is narration and in which voice.

Exactly one preset ships, called default, without narration. The rest belongs to you: a preset is a taste decision, and shipping a gallery of them would be shipping our taste.

The preset editor shows a picture from the same renderer on every change, so a switch that does nothing is visible as a switch that does nothing.

The cursor is a derivation, not a drawing

The pointer path the page received is the humanized one, with its real timing. What the video draws is a smooth glide between the recorded landings: place and time of every landing are exact, and only the travel between them is re-synthesised.

The page saw the real events. The picture is calmer than the reality, and that is the only difference.

Sharing

POST /v1/videos/:id/share creates a public link, GET reports its state, and DELETE revokes it.

A shared video lives at a public address with an optional access code, and it embeds through oEmbed. Revoking takes it to a 404.

The person watching leaves a daily-rotating hash and nothing else. There is no viewer identity and no plaintext address anywhere in the counting path.

Storage

Recordings and rendered files both take disk, and they are managed separately: GET /v1/recordings lists the raw material, GET /v1/videos the finished films, and GET /v1/videos/storage says what it all costs.

Deleting a video can take its raw recording with it or leave it, because re-rendering from the raw material is cheap compared with recording again.

Codecs, voices and media

Three settings in the management app's Video tab:

  • Codecs, what this machine can encode, with a switch per codec.
  • Voices, a text-to-speech provider for narration. There is none by default and you bring your own.
  • Media, images and audio a preset may use.

Next