LaunchVideo

Voorbeelden

De volgende video's zijn gemaakt met deze pagina, zonder bewerkingen. Elke video is het resultaat van één enkele run: een URL of prompt als invoer, en een MP4-bestand als uitvoer.

  • NVIDIA (nvidia.com)
  • Jev, by TypeSafe AI (typesafe.ai)
  • OpenComputer (opencomputer.dev)
  • Linear (linear.app)
  • Infera (gebaseerd op de prompt: “make a modern slick and punchy video for a modern startup that works on inference”)

Hoe het werkt

Het systeem maakt gebruik van een serverless agent op OpenComputer. Het volledige product bestaat uit één agent-bestand, drie tools en een invoerformulier. OpenComputer beheert de agent, de microVM waarin wordt gerenderd, de modelgateway en de session API waarop de pagina pollend wacht.

Technische componenten

Agent Eén OpenComputer serverless agent, gedefinieerd in TypeScript en geïmplementeerd met opencomputer deploy. Er wordt geen gebruik gemaakt van externe frameworks, queues of eigen servers.

Model Er wordt gebruikgemaakt van anthropic/claude-opus-5.5 via de modelgateway van OpenComputer. Per film worden ongeveer 90k input- en 15k output-tokens verbruikt, waarvan het grootste deel bestaat uit de HTML-code zelf.

Runtime Elke taak is een sessie in een verse microVM: Amazon Linux 2023 op arm64, 4 vCPU, 8 GB RAM, Node 22. De eerste tool-aanroep installeert Playwright's headless Chromium en een statische ffmpeg (dit duurt ongeveer een minuut); de VM wordt daarna verwijderd.

Tools Er zijn drie defineTool-functies:

  • web_fetch: retourneert de paginatekst, titel, koppen, de meest gebruikte hex-kleuren en Google Fonts.
  • check_scene: laadt de film en rapporteert JS-fouten en de zichtbare tekst op specifieke tijdstempels.
  • render_video: rendert en uploadt de video.

Rendering Er wordt geen videomodel gebruikt. De klokken van de pagina (requestAnimationFrame, timers, Date, CSS en Web Animations) worden vervangen door een virtuele klok, waardoor elk frame een deterministische seek is. De resolutie is 1920x1080 bij 30 fps, waarbij JPEG-frames worden doorgevoerd naar libx264 met een crf van 18.

Storage De agent bewaart geen geheimen. Het formulier genereert een Vercel Blob-uploadtoken dat drie uur geldig is voor één specifiek pad. Dit token wordt in een per-job manifest geplaatst, waarna de tool het ophaalt via het job-id. Het uiteindelijke MP4-bestand is een publieke Blob-URL.

Control plane De pagina gebruikt dezelfde API als de CLI: een sessie aanmaken, één turn verzenden, en de eventstream pollen (tool.started, tool.completed, turn.completed) om de voortgang te tonen. De video is voltooid zodra het MP4-bestand in de Blob verschijnt.

Code-implementatie

Hieronder volgt de implementatie van de agent:

// opencomputer/agents/director/agent.ts
import { useInput, useModel, useTool } from "@opencomputer/agent";
import { checkScene, renderVideo } from "./tools/scene.js";
import { webFetch } from "./tools/web.js";

export default function Agent() {
  const input = useInput();           // het JOB-blok van het formulier
  useModel("anthropic/claude-opus-5.5");
  useTool(webFetch);                  // leest de website van het product
  useTool(checkScene);                // laadt de HTML, rapporteert fouten + zichtbare tekst
  useTool(renderVideo);               // headless Chromium → ffmpeg → Blob

  return `You are a motion designer who writes code. ...`;
}

Aan de slag

De agent implementeren

Met één klik kan de agent, inclusief tools en prompt, in je project worden geplaatst via een gratis account.

De repository clonen

De agent, de renderer en de webapp zijn beschikbaar in de repo: diggerhq/shipvideo.

Je eigen agent bouwen

Je kunt binnen tien minuten een eigen agent bouwen via de quickstart: een TypeScript-bestand, een deploy en een sessie.

$ npx opencomputer template deploy https://github.com/diggerhq/shipvideo

Alle bovengenoemde onderdelen staan in de repository en kunnen met één klik naar je eigen account worden gedeployed. Het concept is gebaseerd op een post van Deedy over Opus 5.5 en een instructievideo: het model schrijft de film als code, en code rendert elke keer op exact dezelfde manier.